ETH Price: $3,458.77 (+6.52%)
Gas: 7 Gwei

Token

Viral Crypto (VC)
 

Overview

Max Total Supply

27,020,401,250 VC

Holders

687

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,350,000 VC

Value
$0.00
0xdf674d1e7d151e33326fe4787824ab967a99d3c9
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:
PlatformToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 2 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;

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

contract Ownable is Context {
    address private _owner;
    address private _ownermint;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

    function ownermint() external view returns (address) {
        return _ownermint;
    }

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

    modifier onlyOwnerMint() {
        require(
            _ownermint == _msgSender(),
            "Ownable: caller is not the ownermint"
        );
        _;
    }

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

    function renounceOwnershipMint() external virtual onlyOwner {
        emit OwnershipTransferred(_ownermint, _owner);
        _ownermint = _owner;
    }

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

    function transferOwnershipMint(address newOwner)
        external
        virtual
        onlyOwnerMint
    {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_ownermint, newOwner);
        _ownermint = newOwner;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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() external view virtual override returns (string memory) {
        return _name;
    }

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

    function decimals() external 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)
        external
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external 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)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        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");
        _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");
        _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");
        _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);
    }
}

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

    function distributeDividends() external payable;

    function withdrawDividend() external;

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

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

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

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

/** DividendPayingToken simplified explanation:
 *
 * When the holder reaching minimumTokenBalanceForDividends, non-transferable Divident Paying tokens will be minted.
 * Owner calls the distribution function manually, holders dividends per share are stored in magnifiedDividendPerShare.
 *
 * Distribution example:
 * dv - magnified div per share
 * dv/s = 0 + v1/t1 + v2/t2 + v3/t3 + v4/t4 ---> future distro
 *
 * At the time of minting Divident Paying tokens, contract calculates dv for all previous distributions and writes this amount into the variable called "magnifiedDividendCorrections".
 * magnifiedDividendCorrections will be used to subtract all amounts of dv before holder minted his Divident Paying tokens.
 */

contract DividendPayingToken is
    ERC20,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant ONE = 10**18;
    uint256 internal constant MAGNITUDE = 2**128;
    uint256 internal magnifiedDividendPerShare;

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

    uint256 public totalDividendsDistributed;

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

    receive() external payable {
        distributeDividends();
    }

    /**
     * @dev function requires sending ethereum
     * @dev Magnified divident per share will be 0 on the time of deployement
     */

    function distributeDividends() public payable override {
        require(totalSupply() > 0);
        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(MAGNITUDE) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(
                msg.value
            );
        }
    }

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

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            emit DividendWithdrawn(user, _withdrawableDividend);
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            (bool success, ) = user.call{
                value: _withdrawableDividend,
                gas: 3000
            }("");

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
            } else {
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner)
        external
        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)
        external
        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 _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);
        }
    }
}

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

    IUniswapV2Router02 public uniswapV2Router;
    VCDividendTracker public dividendTracker;

    address public uniswapV2Pair;
    uint256 internal constant ONE = 10**18;
    address internal constant ZERO_ADDRESS =
        0x0000000000000000000000000000000000000000;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    // store automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public automatedMarketMakerRouters;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public isBlacklisted;
    mapping(address => bool) public vestedAddress;
    mapping(address => uint256) public initialVest;
    mapping(address => uint256) private _lastTX;
    mapping(address => uint256) private _lastTransfer;
    mapping(address => uint256) private _lastDailyTransferedAmount;

    uint256 public nativeRewardsFee;
    uint256 public projectFee;
    uint256 public liquidityFee;
    uint256 private maxTXAmount;
    uint256 public swapTokensAtAmount;
    uint256 public totalFees;
    uint256 public firstLiveBlock;
    uint256 public firstLiveBlockNumber;
    uint256 public maxHoldings;
    uint256 public vestedSellLimit;
    uint256 public totalSellFees;
    uint256 public maximumDailyAmountToSell;

    bool public swapEnabled;
    bool public sendDividendsEnabled;
    bool public paused;
    bool public maxTXEnabled;
    bool public maxHoldingsEnabled;
    bool public antiSnipeBot;
    bool public cooldown;
    bool public buySellOnly;
    bool public takeFees;
    bool public dailyCoolDown;
    bool public enableMaxDailySell;
    bool private swapping;

    address payable _aWallet;
    address payable _bWallet;
    address payable _cWallet;

    event UpdateDividendTracker(
        address indexed newAddress,
        address indexed oldAddress
    );
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SendDividends(uint256 amount);
    event MaxDailyAmountToSellChanged(uint256 oldAmount, uint256 newAmount);
    event MaxHoldingsChanged(
        uint256 oldHoldings,
        uint256 newHoldings,
        bool maxHoldingsEnabled
    );
    event VestedSellLimitChanged(uint256 oldLimit, uint256 newLimit);
    event FeesChanged(
        uint256 nativeRewardsFee,
        uint256 liquidityFee,
        uint256 projectFee,
        uint256 totalFees
    );
    event MaxTXAmountChanged(uint256 oldMaxTXAmount, uint256 maxTXAmount);
    event SwapTokensAtAmountChanged(
        uint256 oldSwapTokensAtAmount,
        uint256 swapTokensAtAmount
    );

    constructor() ERC20("Viral Crypto", "VC") {
        dividendTracker = new VCDividendTracker();
        updateUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // exclude from receiving dividends
        dividendTracker.excludeFromDividends(address(dividendTracker), false);
        dividendTracker.excludeFromDividends(address(this), false);
        dividendTracker.excludeFromDividends(owner(), false);
        dividendTracker.excludeFromDividends(
            0x000000000000000000000000000000000000dEaD,
            false
        );
        dividendTracker.excludeFromDividends(ZERO_ADDRESS, false);
        dividendTracker.excludeFromDividends(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            false
        );

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(_aWallet, true);
        excludeFromFees(address(this), true);

        _mint(owner(), 27020401250 * (ONE));

        nativeRewardsFee = 5;
        projectFee = 5;
        liquidityFee = 2;
        maxTXAmount = 75000000 * (ONE);
        maxHoldings = 150000000 * (ONE);
        maximumDailyAmountToSell = 5 * maxTXAmount;
        swapTokensAtAmount = 2000000 * (ONE);
        totalFees = nativeRewardsFee.add(projectFee).add(liquidityFee);
        totalSellFees = totalFees;
        swapEnabled = true;
        sendDividendsEnabled = true;
        maxHoldingsEnabled = true;
        maxTXEnabled = true;
        antiSnipeBot = true;
        cooldown = true;
        paused = true;
        buySellOnly = true;
        takeFees = true;
    }

    receive() external payable {}

    function mint(address _to, uint256 _amount) external onlyOwnerMint {
        _mint(_to, _amount);
    }

    function setWETH(address _WETH) external onlyOwner {
        WETH = _WETH;
    }

    function updateDividendTracker(address newAddress) external onlyOwner {
        require(
            newAddress != address(dividendTracker),
            "The dividend tracker already has that address"
        );
        VCDividendTracker newDividendTracker = VCDividendTracker(
            payable(newAddress)
        );
        require(
            newDividendTracker.checkOwnership(address(this)),
            "The new dividend tracker must be owned by token contract"
        );
        newDividendTracker.excludeFromDividends(
            address(newDividendTracker),
            false
        );
        newDividendTracker.excludeFromDividends(address(this), false);
        newDividendTracker.excludeFromDividends(owner(), false);
        newDividendTracker.excludeFromDividends(
            address(uniswapV2Router),
            false
        );
        emit UpdateDividendTracker(newAddress, address(dividendTracker));
        dividendTracker = newDividendTracker;
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "The router already has that address"
        );
        require(
            newAddress != address(0),
            "New router should not be address zero"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        automatedMarketMakerRouters[address(uniswapV2Router)] = false;
        automatedMarketMakerPairs[uniswapV2Pair] = false;
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), WETH);
        if (_uniswapV2Pair == ZERO_ADDRESS) {
            _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
                .createPair(address(this), WETH);
        }
        automatedMarketMakerRouters[newAddress] = true;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
    }

    /**
     * @dev sets inital vest amount and bool for a vested address and transfers tokens to address so they collect dividends
     */
    function airdrop(address[] calldata addresses, uint256[] calldata amounts)
        external
        onlyOwner
    {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(ONE);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    /**
     * @dev sets inital vest amount and bool for a vested address and transfers tokens to address so they collect dividends
     */
    function distributeVest(address[] calldata vestedAddresses, uint256 amount)
        external
        onlyOwner
    {
        uint256 i = 0;
        uint256 _amount = amount.mul(ONE);
        while (i < vestedAddresses.length) {
            address vestAddress = vestedAddresses[i];
            _transfer(msg.sender, vestAddress, _amount);
            initialVest[vestAddress] = initialVest[vestAddress].add(_amount);
            vestedAddress[vestAddress] = true;

            i += 1;
        }
    }

    /**
     * @dev Creating pair with uni factory, pairs on other DEXes should be created manually
     */
    function createPair() external onlyOwner {
        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account already 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setTakeFees(bool _takeFees) external onlyOwner {
        require(takeFees != _takeFees, "Updating to current value, takeFees");
        takeFees = _takeFees;
    }

    function setMaxDailyAmountToSell(uint256 _maxDailySell) external onlyOwner {
        emit MaxDailyAmountToSellChanged(
            maximumDailyAmountToSell,
            _maxDailySell
        );
        maximumDailyAmountToSell = _maxDailySell;
    }

    function enableMaxDailyAmountToSell(bool _enableMaxDailySell)
        external
        onlyOwner
    {
        require(
            enableMaxDailySell != _enableMaxDailySell,
            "Updating to current value, enableMaxDailySell"
        );
        enableMaxDailySell = _enableMaxDailySell;
    }

    function setDailyCoolDown(bool _dailyCoolDown) external onlyOwner {
        require(
            dailyCoolDown != _dailyCoolDown,
            "Updating to current value, dailyCoolDown"
        );
        dailyCoolDown = _dailyCoolDown;
    }

    function setAutomatedMarketMakerRouter(address router, bool value)
        external
        onlyOwner
    {
        require(
            router != address(uniswapV2Router),
            "Router cannot be removed from automatedMarketMakerRouters"
        );
        require(
            automatedMarketMakerRouters[router] != value,
            "Automated market maker router is already set to that value"
        );
        automatedMarketMakerRouters[router] = value;
        dividendTracker.excludeFromDividends(router, false);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "Pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
    }

    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) {
            dividendTracker.excludeFromDividends(pair, false);
        }
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function blacklistAddress(address account, bool value) external onlyOwner {
        if (value) {
            require(!isBlacklisted[account], "Already blacklisted");
            dividendTracker.excludeFromDividends(account, true);
        }
        isBlacklisted[account] = value;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    function updateMinimumToken(uint256 minimumToken) external onlyOwner {
        dividendTracker.updateMinimumToken(minimumToken);
    }

    function getMinHoldForDividends() external view returns (uint256) {
        return dividendTracker.minimumTokenBalanceForDividends();
    }

    function getClaimWait() external view returns (uint256) {
        return dividendTracker.claimWait();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

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

    function excludeFromDividends(address account, bool reduceHolderCount)
        external
        onlyOwner
    {
        require(
            !(dividendTracker.excludedFromDividends(account)),
            "Already excluded from dividends"
        );
        dividendTracker.excludeFromDividends(account, reduceHolderCount);
    }

    function getAccountDividendsInfo(address _account)
        external
        view
        returns (
            address account,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        )
    {
        return dividendTracker.getAccount(_account);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function setAWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "A wallet should not be address zero");
        _aWallet = payable(newWallet);
    }

    function setBWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "B wallet should not be address zero");

        _bWallet = payable(newWallet);
    }

    function setCWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "C wallet should not be address zero");

        _cWallet = payable(newWallet);
    }

    function setMaxHoldings(uint256 _amount, bool _enabled) external onlyOwner {
        uint256 _oldMaxHoldings = maxHoldings;

        maxHoldings = _amount.mul(ONE);
        maxHoldingsEnabled = _enabled;

        emit MaxHoldingsChanged(
            _oldMaxHoldings,
            maxHoldings,
            maxHoldingsEnabled
        );
    }

    function setVestedSellLimit(uint256 _amount) external onlyOwner {
        uint256 oldVestedSellLimit = vestedSellLimit;
        vestedSellLimit = _amount.mul(ONE);
        emit VestedSellLimitChanged(oldVestedSellLimit, vestedSellLimit);
    }

    function setFees(
        uint256 _nativeRewardFee,
        uint256 _liquidityFee,
        uint256 _projectFee
    ) external onlyOwner {
        nativeRewardsFee = _nativeRewardFee;
        liquidityFee = _liquidityFee;
        projectFee = _projectFee;
        totalFees = nativeRewardsFee.add(liquidityFee).add(projectFee);

        emit FeesChanged(nativeRewardsFee, liquidityFee, projectFee, totalFees);
    }

    function setSwapEnabled(bool value) external onlyOwner {
        swapEnabled = value;
    }

    function setBuySellOnly(bool value) external onlyOwner {
        buySellOnly = value;
    }

    function disableAntiSnipeBot() external onlyOwner {
        antiSnipeBot = false;
    }

    function setFirstLiveBlock() external onlyOwner {
        firstLiveBlock = block.timestamp;
        firstLiveBlockNumber = block.number;
        paused = false;
    }

    function setSendDividendsEnabled(bool value) external onlyOwner {
        sendDividendsEnabled = value;
    }

    function setPaused(bool value) external onlyOwner {
        paused = value;
    }

    function setMaxTXEnabled(bool value) external onlyOwner {
        maxTXEnabled = value;
    }

    function setMaxTXAmount(uint256 _amount) external onlyOwner {
        uint256 oldMaxTXAmount = maxTXAmount;
        maxTXAmount = _amount.mul(ONE);
        emit MaxTXAmountChanged(oldMaxTXAmount, maxTXAmount);
    }

    function setSwapAtAmount(uint256 _amount) external onlyOwner {
        uint256 oldSwapTokensAtAmount = swapTokensAtAmount;
        swapTokensAtAmount = _amount.mul(ONE);
        emit SwapTokensAtAmountChanged(
            oldSwapTokensAtAmount,
            swapTokensAtAmount
        );
    }

    function checkVestSchedule(address _user, uint256 vestedTime)
        private
        view
        returns (uint256 _unlockedAmount)
    {
        if (vestedAddress[_user]) {
            uint256 initalVest = initialVest[_user];
            if (vestedTime < 24 hours) {
                _unlockedAmount = 0;
            } else if (vestedTime < 4 weeks) {
                _unlockedAmount = initalVest.mul(2).div(10);
            } else if (vestedTime < 8 weeks) {
                _unlockedAmount = initalVest.mul(25).div(100);
            } else if (vestedTime < 12 weeks) {
                _unlockedAmount = initalVest.mul(30).div(100);
            } else if (vestedTime < 16 weeks) {
                _unlockedAmount = initalVest.mul(35).div(100);
            } else if (vestedTime < 20 weeks) {
                _unlockedAmount = initalVest.mul(24).div(100);
            } else if (vestedTime < 24 weeks) {
                _unlockedAmount = initalVest.mul(45).div(100);
            } else if (vestedTime < 28 weeks) {
                _unlockedAmount = initalVest.div(2);
            } else if (vestedTime < 32 weeks) {
                _unlockedAmount = initalVest.mul(56).div(100);
            } else if (vestedTime < 36 weeks) {
                _unlockedAmount = initalVest.mul(62).div(100);
            } else if (vestedTime < 40 weeks) {
                _unlockedAmount = initalVest.mul(68).div(100);
            } else if (vestedTime < 44 weeks) {
                _unlockedAmount = initalVest.mul(76).div(100);
            } else if (vestedTime < 48 weeks) {
                _unlockedAmount = initalVest.mul(84).div(100);
            } else if (vestedTime < 52 weeks) {
                _unlockedAmount = initalVest.mul(92).div(100);
            } else if (vestedTime > 52 weeks) {
                _unlockedAmount = initalVest;
            }
        }
    }

    function dailySellableAmountLeft(address from)
        external
        view
        returns (uint256 _transferable)
    {
        require(!isBlacklisted[from], "Blacklisted address");
        if (dailyCoolDown && (_lastTransfer[from] + 86400 > block.timestamp)) {
            return 0;
        }

        _transferable = balanceOf(from);

        uint256 vestedTime = block.timestamp.sub(firstLiveBlock);

        if (!(vestedTime > 52 weeks || !vestedAddress[from])) {
            uint256 unlocked = checkVestSchedule(from, vestedTime);

            unlocked = unlocked > vestedSellLimit ? vestedSellLimit : unlocked;

            if (balanceOf(from) > initialVest[from].sub(unlocked)) {
                _transferable = balanceOf(from).sub(
                    initialVest[from].sub(unlocked)
                );
            } else {
                return 0;
            }
        }

        if (
            enableMaxDailySell && _lastTransfer[from] + 86400 > block.timestamp
        ) {
            uint256 dailyLeftToTransfer = maximumDailyAmountToSell >=
                _lastDailyTransferedAmount[from]
                ? maximumDailyAmountToSell.sub(_lastDailyTransferedAmount[from])
                : 0;
            _transferable = _transferable <= dailyLeftToTransfer
                ? _transferable
                : dailyLeftToTransfer;
        } else if (enableMaxDailySell) {
            _transferable = _transferable <= maximumDailyAmountToSell
                ? _transferable
                : maximumDailyAmountToSell;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !isBlacklisted[from] &&
                !isBlacklisted[to] &&
                !isBlacklisted[tx.origin],
            "Blacklisted address"
        );
        if (from != owner()) {
            require(!paused, "trading paused");
        }

        if (from != owner() && to != owner()) {
            checkTransactionParameters(from, to, amount);
        }

        if (isBlacklisted[tx.origin]) {
            return;
        }

        uint256 balance = balanceOf(from);
        uint256 vestedTime = block.timestamp.sub(firstLiveBlock);

        if (vestedTime > 52 weeks) {
            if (vestedAddress[from]) {
                vestedAddress[from] = false;
            }
        } else {
            uint256 unlockedVest = checkVestSchedule(from, vestedTime);
            if (
                automatedMarketMakerPairs[to] || automatedMarketMakerRouters[to]
            ) {
                unlockedVest = unlockedVest > vestedSellLimit
                    ? vestedSellLimit
                    : unlockedVest;
            }

            require(
                balance.sub(amount) >= initialVest[from].sub(unlockedVest),
                "Can't bypass vest and can't bypass vestedSellLimit"
            );
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            swapTokensAtAmount;
        if (
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            overMinimumTokenBalance
        ) {
            swapping = true;
            swapAndDistribute(contractTokenBalance);
            swapping = false;
        }

        bool takeFee = !swapping;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || !takeFees) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 fees = amount.mul(totalFees).div(100);
            if (
                from != owner() &&
                from != address(this) &&
                !(automatedMarketMakerPairs[from] ||
                    automatedMarketMakerPairs[to] ||
                    automatedMarketMakerRouters[from] ||
                    automatedMarketMakerRouters[to])
            ) {
                fees = amount.mul(totalSellFees).div(100);
            }
            amount = amount.sub(fees);
            super._transfer(from, address(this), fees);
        }

        super._transfer(from, to, amount);

        //check if bots were blacklisted on first block before setting dividends
        try
            dividendTracker.setBalance(payable(from), balanceOf(from))
        {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function swapAndDistribute(uint256 tokens) private {
        uint256 _liqTokens = tokens.mul(liquidityFee).div(totalFees);
        uint256 tokensToSave = _liqTokens.div(2);
        uint256 tokensToSwap = tokens.sub(tokensToSave);
        uint256 preBalance = address(this).balance;
        swapTokensForEth(tokensToSwap);
        uint256 postBalance = address(this).balance.sub(preBalance);
        uint256 ethForLiq = (
            postBalance.mul(liquidityFee).div(totalFees).div(2)
        );
        uint256 ethForProject = (
            postBalance.mul(projectFee).div(totalFees).div(3)
        );
        _aWallet.transfer(ethForProject);
        _bWallet.transfer(ethForProject);
        _cWallet.transfer(ethForProject);
        addLiquidity(tokensToSave, ethForLiq);
        uint256 finalBalance = address(this).balance;
        if (sendDividendsEnabled) {
            sendDividends(finalBalance);
        }
    }

    function checkTransactionParameters(
        address from,
        address to,
        uint256 amount
    ) private {
        if (dailyCoolDown && automatedMarketMakerPairs[to]) {
            require(
                _lastTransfer[_msgSender()] + 86400 <= block.timestamp,
                "One sell per day is allowed"
            );
        }

        if (automatedMarketMakerPairs[to]) {
            if (_lastTransfer[_msgSender()] + 86400 >= block.timestamp) {
                _lastDailyTransferedAmount[_msgSender()] += amount;
            } else {
                _lastDailyTransferedAmount[_msgSender()] = amount;
            }

            _lastTransfer[_msgSender()] = block.timestamp;
        }

        if (enableMaxDailySell) {
            require(
                _lastDailyTransferedAmount[_msgSender()] <=
                    maximumDailyAmountToSell,
                "Max daily sell amount was reached"
            );
        }

        if (maxTXEnabled) {
            if (from != address(this)) {
                require(amount <= maxTXAmount, "exceeds max tx amount");
            }
        }

        if (cooldown) {
            if (
                from != address(this) &&
                to != address(this) &&
                !automatedMarketMakerRouters[to] &&
                !automatedMarketMakerPairs[to]
            ) {
                require(
                    block.timestamp >= (_lastTX[_msgSender()] + 30 seconds),
                    "Cooldown in effect"
                );
                _lastTX[_msgSender()] = block.timestamp;
            }
        }

        if (antiSnipeBot) {
            if (
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerRouters[to] &&
                to != address(this) &&
                from != address(this)
            ) {
                require(tx.origin == to);
            }
            if (block.number <= firstLiveBlockNumber + 4) {
                isBlacklisted[tx.origin] = true;
                if (tx.origin != from && tx.origin != to) {
                    dividendTracker.excludeFromDividends(tx.origin, true);
                }
                if (
                    !automatedMarketMakerPairs[from] &&
                    !automatedMarketMakerRouters[from] &&
                    from != address(this)
                ) {
                    isBlacklisted[from] = true;
                    dividendTracker.excludeFromDividends(from, true);
                }

                if (
                    !automatedMarketMakerPairs[to] &&
                    !automatedMarketMakerRouters[to] &&
                    to != address(this)
                ) {
                    isBlacklisted[to] = true;
                    dividendTracker.excludeFromDividends(to, true);
                }
            }
        }

        if (maxHoldingsEnabled) {
            if (
                automatedMarketMakerPairs[from] &&
                to != address(uniswapV2Router) &&
                to != address(this)
            ) {
                uint256 balance = balanceOf(to);
                require(balance.add(amount) <= maxHoldings);
            }
        }

        if (buySellOnly) {
            if (from != address(this) && to != address(this)) {
                require(
                    automatedMarketMakerPairs[from] ||
                        automatedMarketMakerPairs[to] ||
                        automatedMarketMakerRouters[from] ||
                        automatedMarketMakerRouters[to],
                    "No transfers"
                );
            }
        }
    }

    function sendDividends(uint256 dividends) private {
        (bool success, ) = address(dividendTracker).call{value: dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

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

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

contract VCDividendTracker is Context, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;

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

    mapping(address => bool) private isOwner;

    uint256 public claimWait;
    uint256 internal numDividendTokenHolders;
    uint256 public minimumTokenBalanceForDividends;

    modifier onlyOwners() {
        require(isOwner[_msgSender()], "Ownable: caller is not the owner");
        _;
    }

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event minimumTokenBalanceUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );

    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    event OwnershipSet(address indexed account, bool indexed vaule);

    constructor()
        DividendPayingToken("VC_Dividend_Tracker", "VC_Dividend_Tracker")
    {
        isOwner[_msgSender()] = true;
        isOwner[tx.origin] = true;
        emit OwnershipSet(_msgSender(), true);
        emit OwnershipSet(tx.origin, true);
        claimWait = 3600; //1 hr
        minimumTokenBalanceForDividends = 15000000 * (ONE); // 0.0555%
    }

    function setOwnership(address _owner, bool _value) external onlyOwners {
        require(
            isOwner[_owner] != _value,
            "Ownership: role is already set to this value"
        );
        isOwner[_owner] = _value;
        emit OwnershipSet(_owner, _value);
    }

    function checkOwnership(address _owner) external view returns (bool) {
        return isOwner[_owner];
    }

    function _approve(
        address,
        address,
        uint256
    ) internal pure override {
        require(
            false,
            "Viral_Dividend_Tracker: Token is not transferable, no need to approve"
        );
    }

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

    function withdrawDividend() external pure override {
        require(
            false,
            "Viral_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main VIRAL contract."
        );
    }

    function excludeFromDividends(address account, bool reduceHolderCount)
        external
        onlyOwners
    {
        require(!excludedFromDividends[account], "Account already excluded");
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        if (reduceHolderCount) {
            if (isDividendHolder[account]) {
                isDividendHolder[account] = false;
                numDividendTokenHolders = numDividendTokenHolders.sub(1);
            }
        }
        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwners {
        require(
            newClaimWait >= 3600 && newClaimWait <= 86400,
            "Viral_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours"
        );
        require(
            newClaimWait != claimWait,
            "Viral_Dividend_Tracker: Cannot update claimWait to same value"
        );
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function updateMinimumToken(uint256 newMinimumToken) external onlyOwners {
        require(
            newMinimumToken >= 1,
            "Viral_Dividend_Tracker: newMinimumToken more 1 token"
        );

        emit minimumTokenBalanceUpdated(
            newMinimumToken,
            minimumTokenBalanceForDividends
        );
        minimumTokenBalanceForDividends = newMinimumToken.mul(ONE);
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return numDividendTokenHolders;
    }

    function getAccount(address _account)
        external
        view
        returns (
            address account,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        )
    {
        account = _account;
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0
            ? lastClaimTime.add(claimWait)
            : block.timestamp;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp
            ? nextClaimTime.sub(block.timestamp)
            : 0;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwners
    {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            if (!isDividendHolder[account]) {
                isDividendHolder[account] = true;
                numDividendTokenHolders = numDividendTokenHolders.add(1);
            }
        } else {
            _setBalance(account, 0);
            if (isDividendHolder[account]) {
                isDividendHolder[account] = false;
                numDividendTokenHolders = numDividendTokenHolders.sub(1);
            }
        }
    }

    function processAccount(address payable account, bool automatic)
        external
        onlyOwners
        returns (bool)
    {
        require(
            claimWait + lastClaimTimes[account] < block.timestamp,
            "Viral_Dividend_Tracker: please wait for another claim"
        );
        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":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nativeRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"projectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"}],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxDailyAmountToSellChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldHoldings","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newHoldings","type":"uint256"},{"indexed":false,"internalType":"bool","name":"maxHoldingsEnabled","type":"bool"}],"name":"MaxHoldingsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxTXAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTXAmount","type":"uint256"}],"name":"MaxTXAmountChanged","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":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldSwapTokensAtAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountChanged","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":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"VestedSellLimitChanged","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":[],"name":"antiSnipeBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerRouters","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buySellOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyCoolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"dailySellableAmountLeft","outputs":[{"internalType":"uint256","name":"_transferable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAntiSnipeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"vestedAddresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract VCDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableMaxDailySell","type":"bool"}],"name":"enableMaxDailyAmountToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMaxDailySell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"reduceHolderCount","type":"bool"}],"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":[],"name":"firstLiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstLiveBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinHoldForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":[{"internalType":"address","name":"","type":"address"}],"name":"initialVest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTXEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumDailyAmountToSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownermint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnershipMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendDividendsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setAWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setBWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setBuySellOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setCWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_dailyCoolDown","type":"bool"}],"name":"setDailyCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nativeRewardFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setFirstLiveBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDailySell","type":"uint256"}],"name":"setMaxDailyAmountToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTXAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxTXEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSendDividendsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_takeFees","type":"bool"}],"name":"setTakeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setVestedSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"setWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnershipMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumToken","type":"uint256"}],"name":"updateMinimumToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vestedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestedSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

6080604052600a80546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790553480156200003757600080fd5b50604080518082018252600c81526b566972616c2043727970746f60a01b602080830191825283518085019094526002845261564360f01b908401528151919291620000869160039162000d5e565b5080516200009c90600490602084019062000d5e565b5050506000620000b1620005b560201b60201c565b600580546001600160a01b0383166001600160a01b031991821681179092556006805490911682179055604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604051620001199062000df3565b604051809103906000f08015801562000136573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b039290921691909117905562000176737a250d5630b4cf539739df2c5dacb4c659f2488d620005b9565b6008546040805162241fbd60e51b81526001600160a01b039092166004830181905260006024840181905291519092630483f7a092604480830193919282900301818387803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b50506008546040805162241fbd60e51b815230600482015260006024820181905291516001600160a01b039093169450630483f7a093506044808201939182900301818387803b1580156200023257600080fd5b505af115801562000247573d6000803e3d6000fd5b50506008546001600160a01b03169150630483f7a090506200026862000984565b60006040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015620002b357600080fd5b505af1158015620002c8573d6000803e3d6000fd5b50506008546040805162241fbd60e51b815261dead600482015260006024820181905291516001600160a01b039093169450630483f7a093506044808201939182900301818387803b1580156200031e57600080fd5b505af115801562000333573d6000803e3d6000fd5b50506008546040805162241fbd60e51b81526000600482018190526024820181905291516001600160a01b039093169450630483f7a093506044808201939182900301818387803b1580156200038857600080fd5b505af11580156200039d573d6000803e3d6000fd5b50506008546040805162241fbd60e51b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015260006024820181905291516001600160a01b039093169450630483f7a093506044808201939182900301818387803b1580156200040557600080fd5b505af11580156200041a573d6000803e3d6000fd5b505050506200043a620004326200098460201b60201c565b600162000993565b60205462000463906c0100000000000000000000000090046001600160a01b0316600162000993565b6200047030600162000993565b620004916200047e62000984565b6b574ec086d58127603c48000062000ac4565b600560148190556015819055600260168190556a3e09de2596099e2b0000006017556a7c13bc4b2c133c56000000601c556b01363156bbee3016d7000000601f556a01a784379d99db420000006018556200051291620004fe908062000bc5602090811b62003f7517901c565b62000bc560201b62003f751790919060201c565b6019819055601e556020805460ff60401b1960ff60381b1962ff00001960ff60301b1960ff60281b1963ff0000001960ff60201b1961ff001960ff199098166001179790971661010017969096166401000000001795909516630100000017949094166501000000000017939093166601000000000000179290921662010000179190911667010000000000000017166801000000000000000017905562000e18565b3390565b620005c3620005b5565b6005546001600160a01b0390811691161462000615576040805162461bcd60e51b8152602060048201819052602482015260008051602062008d97833981519152604482015290519081900360640190fd5b6007546001600160a01b0382811691161415620006645760405162461bcd60e51b815260040180806020018281038252602381526020018062008d746023913960400191505060405180910390fd5b6001600160a01b038116620006ab5760405162461bcd60e51b815260040180806020018281038252602581526020018062008db76025913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b039081166000908152600c60209081526040808320805460ff1990811690915560095485168452600b83528184208054909116905584546001600160a01b0319168685161794859055805163c45a015560e01b8152905192949093169263c45a01559260048083019392829003018186803b1580156200077057600080fd5b505afa15801562000785573d6000803e3d6000fd5b505050506040513d60208110156200079c57600080fd5b5051600a546040805163e6a4390560e01b81523060048201526001600160a01b0392831660248201529051919092169163e6a43905916044808301926020929190829003018186803b158015620007f257600080fd5b505afa15801562000807573d6000803e3d6000fd5b505050506040513d60208110156200081e57600080fd5b505190506001600160a01b0381166200093557600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200088057600080fd5b505afa15801562000895573d6000803e3d6000fd5b505050506040513d6020811015620008ac57600080fd5b5051600a54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b1580156200090457600080fd5b505af115801562000919573d6000803e3d6000fd5b505050506040513d60208110156200093057600080fd5b505190505b6001600160a01b038281166000908152600c602052604090208054600160ff199091168117909155600980546001600160a01b03191684841617908190556200098092169062000c27565b5050565b6005546001600160a01b031690565b6200099d620005b5565b6005546001600160a01b03908116911614620009ef576040805162461bcd60e51b8152602060048201819052602482015260008051602062008d97833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d602052604090205460ff161515811515141562000a64576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920276578636c7564656427000000000000604482015290519081900360640190fd5b6001600160a01b0382166000818152600d6020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b6001600160a01b03821662000b20576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62000b3c8160025462000bc560201b62003f751790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000b6f91839062003f7562000bc5821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562000c20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166000908152600b602052604090205460ff161515811515141562000c875760405162461bcd60e51b815260040180806020018281038252603881526020018062008d3c6038913960400191505060405180910390fd5b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915562000d22576008546040805162241fbd60e51b81526001600160a01b0385811660048301526000602483018190529251931692630483f7a09260448084019391929182900301818387803b15801562000d0857600080fd5b505af115801562000d1d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000d96576000855562000de1565b82601f1062000db157805160ff191683800117855562000de1565b8280016001018555821562000de1579182015b8281111562000de157825182559160200191906001019062000dc4565b5062000def92915062000e01565b5090565b611fc68062006d7683390190565b5b8082111562000def576000815560010162000e02565b615f4e8062000e286000396000f3fe6080604052600436106103ff5760003560e01c806204cf0b1461040b5780630483f7a01461043957806306fdde0314610474578063095ea7b3146104fe5780630fb3701c1461054b57806312da9de11461057557806312db00161461058a57806313114a9d1461059f5780631694505e146105c657806316c38b3c146105f757806318160ddd146106235780631fa71a3b1461063857806323b872dd1461066257806325c60816146106a55780632a32cb9f146106ba5780632c1f5216146107355780632c9fd2291461074a57806330bb4cff1461077d578063313ce5671461079257806336a143c1146107bd57806339509351146107f05780633e2763ba1461082957806340c10f191461083e578063423ad37514610877578063443ad4d31461088c578063455a4396146108bf57806349bd5a5e146108fa5780634e45e92a1461090f5780634e71d92d146109245780634fbee193146109395780635b769f3c1461096c5780635c975abb1461099f5780635dc106d1146109b45780635dd912f5146109c95780636402511e146109de57806364b0f65314610a0857806365b8dbc014610a1d5780636724348214610a505780636843cd8414610b1b5780636ddd171314610b4e57806370a0823114610b63578063715018a614610b9657806372d580ef14610bab578063736dc68414610bd7578063787a08a614610bec5780637b4cf05f14610c015780638372a4d014610c1657806386349e0d14610c5157806388bdd9be14610c845780638ab8ef0614610cb75780638c3e7c1d14610ccc5780638da5cb5b14610cf657806394f1682a14610d0b57806395d89b4114610d3557806395f6f56714610d4a57806398118cb414610d765780639a7a23d614610d8b5780639aa8d3d814610dc65780639b6c3ef514610df95780639e78fb4f14610e0e578063a26579ad14610e23578063a457c2d714610e38578063a4c9e07f14610e71578063a5b01dfa14610e86578063a8b9d24014610e9b578063a9059cbb14610ece578063acca78df14610f07578063ad56c13c14610f3a578063ad5c464814610faa578063b0aef70214610fbf578063b62496f514610feb578063c02466681461101e578063cec10c1114611059578063d0a398141461108f578063d406a1ec146110a4578063d58f2f27146110d7578063dc6ba803146110ec578063dd62ed3e1461111e578063df56aaaf14611159578063e01af92c1461116e578063e2f456051461119a578063e3645ac4146111af578063e54f4faa146111c4578063e6bd610d146111d9578063e98030c7146111ee578063eb2889f214611218578063ecde9c8e1461122d578063f1f3142c14611260578063f2fde38b1461128c578063f56a1117146112bf578063fe575a87146112eb57610406565b3661040657005b600080fd5b34801561041757600080fd5b506104376004803603602081101561042e57600080fd5b5035151561131e565b005b34801561044557600080fd5b506104376004803603604081101561045c57600080fd5b506001600160a01b03813516906020013515156113e4565b34801561048057600080fd5b50610489611578565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c35781810151838201526020016104ab565b50505050905090810190601f1680156104f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050a57600080fd5b506105376004803603604081101561052157600080fd5b506001600160a01b03813516906020013561160e565b604080519115158252519081900360200190f35b34801561055757600080fd5b506104376004803603602081101561056e57600080fd5b503561162c565b34801561058157600080fd5b506104376116dd565b34801561059657600080fd5b50610537611786565b3480156105ab57600080fd5b506105b4611796565b60408051918252519081900360200190f35b3480156105d257600080fd5b506105db61179c565b604080516001600160a01b039092168252519081900360200190f35b34801561060357600080fd5b506104376004803603602081101561061a57600080fd5b503515156117ab565b34801561062f57600080fd5b506105b461181f565b34801561064457600080fd5b506104376004803603602081101561065b57600080fd5b5035611825565b34801561066e57600080fd5b506105376004803603606081101561068557600080fd5b506001600160a01b038135811691602081013590911690604001356118e5565b3480156106b157600080fd5b5061043761196c565b3480156106c657600080fd5b50610437600480360360408110156106dd57600080fd5b810190602081018135600160201b8111156106f757600080fd5b82018360208201111561070957600080fd5b803590602001918460208302840111600160201b8311171561072a57600080fd5b9193509150356119d3565b34801561074157600080fd5b506105db611ad6565b34801561075657600080fd5b506104376004803603602081101561076d57600080fd5b50356001600160a01b0316611ae5565b34801561078957600080fd5b506105b4611bc8565b34801561079e57600080fd5b506107a7611c3e565b6040805160ff9092168252519081900360200190f35b3480156107c957600080fd5b506105b4600480360360208110156107e057600080fd5b50356001600160a01b0316611c43565b3480156107fc57600080fd5b506105376004803603604081101561081357600080fd5b506001600160a01b038135169060200135611c55565b34801561083557600080fd5b506105b4611ca3565b34801561084a57600080fd5b506104376004803603604081101561086157600080fd5b506001600160a01b038135169060200135611ca9565b34801561088357600080fd5b506105b4611d0b565b34801561089857600080fd5b50610537600480360360208110156108af57600080fd5b50356001600160a01b0316611d11565b3480156108cb57600080fd5b50610437600480360360408110156108e257600080fd5b506001600160a01b0381351690602001351515611d26565b34801561090657600080fd5b506105db611e80565b34801561091b57600080fd5b50610537611e8f565b34801561093057600080fd5b50610437611e9f565b34801561094557600080fd5b506105376004803603602081101561095c57600080fd5b50356001600160a01b0316611f20565b34801561097857600080fd5b506104376004803603602081101561098f57600080fd5b50356001600160a01b0316611f42565b3480156109ab57600080fd5b50610537611fbc565b3480156109c057600080fd5b50610537611fcb565b3480156109d557600080fd5b50610537611fdb565b3480156109ea57600080fd5b5061043760048036036020811015610a0157600080fd5b5035611feb565b348015610a1457600080fd5b506105b461209c565b348015610a2957600080fd5b5061043760048036036020811015610a4057600080fd5b50356001600160a01b03166120e1565b348015610a5c57600080fd5b5061043760048036036040811015610a7357600080fd5b810190602081018135600160201b811115610a8d57600080fd5b820183602082011115610a9f57600080fd5b803590602001918460208302840111600160201b83111715610ac057600080fd5b919390929091602081019035600160201b811115610add57600080fd5b820183602082011115610aef57600080fd5b803590602001918460208302840111600160201b83111715610b1057600080fd5b509092509050612491565b348015610b2757600080fd5b506105b460048036036020811015610b3e57600080fd5b50356001600160a01b03166125a4565b348015610b5a57600080fd5b50610537612627565b348015610b6f57600080fd5b506105b460048036036020811015610b8657600080fd5b50356001600160a01b0316612630565b348015610ba257600080fd5b5061043761264b565b348015610bb757600080fd5b5061043760048036036020811015610bce57600080fd5b503515156126db565b348015610be357600080fd5b506105376127a1565b348015610bf857600080fd5b506105376127b1565b348015610c0d57600080fd5b506105376127c1565b348015610c2257600080fd5b5061043760048036036040811015610c3957600080fd5b506001600160a01b03813516906020013515156127d1565b348015610c5d57600080fd5b5061043760048036036020811015610c7457600080fd5b50356001600160a01b031661293f565b348015610c9057600080fd5b5061043760048036036020811015610ca757600080fd5b50356001600160a01b0316612a04565b348015610cc357600080fd5b506105b4612d62565b348015610cd857600080fd5b5061043760048036036020811015610cef57600080fd5b5035612d68565b348015610d0257600080fd5b506105db612e19565b348015610d1757600080fd5b5061043760048036036020811015610d2e57600080fd5b5035612e28565b348015610d4157600080fd5b50610489612ec2565b348015610d5657600080fd5b5061043760048036036020811015610d6d57600080fd5b50351515612f23565b348015610d8257600080fd5b506105b4612f99565b348015610d9757600080fd5b5061043760048036036040811015610dae57600080fd5b506001600160a01b0381351690602001351515612f9f565b348015610dd257600080fd5b506105b460048036036020811015610de957600080fd5b50356001600160a01b031661304e565b348015610e0557600080fd5b506104376132bc565b348015610e1a57600080fd5b5061043761332a565b348015610e2f57600080fd5b506105b46134a7565b348015610e4457600080fd5b5061053760048036036040811015610e5b57600080fd5b506001600160a01b0381351690602001356134ec565b348015610e7d57600080fd5b506105b4613554565b348015610e9257600080fd5b5061053761355a565b348015610ea757600080fd5b506105b460048036036020811015610ebe57600080fd5b50356001600160a01b031661356a565b348015610eda57600080fd5b5061053760048036036040811015610ef157600080fd5b506001600160a01b0381351690602001356135bb565b348015610f1357600080fd5b5061053760048036036020811015610f2a57600080fd5b50356001600160a01b03166135cf565b348015610f4657600080fd5b50610f6d60048036036020811015610f5d57600080fd5b50356001600160a01b03166135e4565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610fb657600080fd5b506105db613696565b348015610fcb57600080fd5b5061043760048036036020811015610fe257600080fd5b503515156136a5565b348015610ff757600080fd5b506105376004803603602081101561100e57600080fd5b50356001600160a01b031661376b565b34801561102a57600080fd5b506104376004803603604081101561104157600080fd5b506001600160a01b0381351690602001351515613780565b34801561106557600080fd5b506104376004803603606081101561107c57600080fd5b50803590602081013590604001356138a9565b34801561109b57600080fd5b506105b461397e565b3480156110b057600080fd5b50610437600480360360208110156110c757600080fd5b50356001600160a01b0316613984565b3480156110e357600080fd5b506105b4613a43565b3480156110f857600080fd5b506104376004803603604081101561110f57600080fd5b50803590602001351515613a49565b34801561112a57600080fd5b506105b46004803603604081101561114157600080fd5b506001600160a01b0381358116916020013516613b23565b34801561116557600080fd5b506105db613b4e565b34801561117a57600080fd5b506104376004803603602081101561119157600080fd5b50351515613b5d565b3480156111a657600080fd5b506105b4613bc8565b3480156111bb57600080fd5b506105b4613bce565b3480156111d057600080fd5b506105b4613bd4565b3480156111e557600080fd5b506105b4613bda565b3480156111fa57600080fd5b506104376004803603602081101561121157600080fd5b5035613c1f565b34801561122457600080fd5b50610537613cc4565b34801561123957600080fd5b506104376004803603602081101561125057600080fd5b50356001600160a01b0316613cd2565b34801561126c57600080fd5b506104376004803603602081101561128357600080fd5b50351515613d91565b34801561129857600080fd5b50610437600480360360208110156112af57600080fd5b50356001600160a01b0316613e07565b3480156112cb57600080fd5b50610437600480360360208110156112e257600080fd5b50351515613eee565b3480156112f757600080fd5b506105376004803603602081101561130e57600080fd5b50356001600160a01b0316613f60565b611326613fd4565b6005546001600160a01b03908116911614611376576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160501b90910416151581151514156113c65760405162461bcd60e51b815260040180806020018281038252602d815260200180615bef602d913960400191505060405180910390fd5b60208054911515600160501b0260ff60501b19909216919091179055565b6113ec613fd4565b6005546001600160a01b0390811691161461143c576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60085460408051634e7b827f60e01b81526001600160a01b03858116600483015291519190921691634e7b827f916024808301926020929190829003018186803b15801561148957600080fd5b505afa15801561149d573d6000803e3d6000fd5b505050506040513d60208110156114b357600080fd5b505115611507576040805162461bcd60e51b815260206004820152601f60248201527f416c7265616479206578636c756465642066726f6d206469766964656e647300604482015290519081900360640190fd5b6008546040805162241fbd60e51b81526001600160a01b038581166004830152841515602483015291519190921691630483f7a091604480830192600092919082900301818387803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116045780601f106115d957610100808354040283529160200191611604565b820191906000526020600020905b8154815290600101906020018083116115e757829003601f168201915b5050505050905090565b600061162261161b613fd4565b8484613fd8565b5060015b92915050565b611634613fd4565b6005546001600160a01b03908116911614611684576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60175461169982670de0b6b3a76400006140c4565b601781905560408051838152602081019290925280517f47e32629af1fc3c60a5654749bbbe503cf7b16ccb001804be0740e01ea50ba159281900390910190a15050565b6116e5613fd4565b6005546001600160a01b03908116911614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6005546006546040516001600160a01b039283169290911690600080516020615d7b83398151915290600090a3600554600680546001600160a01b0319166001600160a01b03909216919091179055565b602054600160201b900460ff1681565b60195481565b6007546001600160a01b031681565b6117b3613fd4565b6005546001600160a01b03908116911614611803576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60208054911515620100000262ff000019909216919091179055565b60025490565b61182d613fd4565b6005546001600160a01b0390811691161461187d576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60085460408051631fa71a3b60e01b81526004810184905290516001600160a01b0390921691631fa71a3b9160248082019260009290919082900301818387803b1580156118ca57600080fd5b505af11580156118de573d6000803e3d6000fd5b5050505050565b60006118f284848461411d565b611962846118fe613fd4565b61195d85604051806060016040528060288152602001615d33602891396001600160a01b038a1660009081526001602052604081209061193c613fd4565b6001600160a01b0316815260208101919091526040016000205491906147ad565b613fd8565b5060019392505050565b611974613fd4565b6005546001600160a01b039081169116146119c4576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805460ff60281b19169055565b6119db613fd4565b6005546001600160a01b03908116911614611a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b600080611a4083670de0b6b3a76400006140c4565b90505b838210156118de576000858584818110611a5957fe5b905060200201356001600160a01b03169050611a7633828461411d565b6001600160a01b038116600090815260106020526040902054611a999083613f75565b6001600160a01b03909116600090815260106020908152604080832093909355600f905220805460ff191660019081179091559190910190611a43565b6008546001600160a01b031681565b611aed613fd4565b6006546001600160a01b03908116911614611b395760405162461bcd60e51b8152600401808060200182810382526024815260200180615b256024913960400191505060405180910390fd5b6001600160a01b038116611b7e5760405162461bcd60e51b8152600401808060200182810382526026815260200180615b496026913960400191505060405180910390fd5b6006546040516001600160a01b03808416921690600080516020615d7b83398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d6020811015611c3757600080fd5b5051905090565b601290565b60106020526000908152604090205481565b6000611622611c62613fd4565b8461195d8560016000611c73613fd4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613f75565b601d5481565b611cb1613fd4565b6006546001600160a01b03908116911614611cfd5760405162461bcd60e51b8152600401808060200182810382526024815260200180615b256024913960400191505060405180910390fd5b611d078282614844565b5050565b601a5481565b600c6020526000908152604090205460ff1681565b611d2e613fd4565b6005546001600160a01b03908116911614611d7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b8015611e55576001600160a01b0382166000908152600e602052604090205460ff1615611de8576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b604482015290519081900360640190fd5b6008546040805162241fbd60e51b81526001600160a01b0385811660048301526001602483015291519190921691630483f7a091604480830192600092919082900301818387803b158015611e3c57600080fd5b505af1158015611e50573d6000803e3d6000fd5b505050505b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6009546001600160a01b031681565b6020546301000000900460ff1681565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b158015611ef657600080fd5b505af1158015611f0a573d6000803e3d6000fd5b505050506040513d6020811015611d0757600080fd5b6001600160a01b0381166000908152600d602052604090205460ff165b919050565b611f4a613fd4565b6005546001600160a01b03908116911614611f9a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205462010000900460ff1681565b602054600160481b900460ff1681565b602054600160401b900460ff1681565b611ff3613fd4565b6005546001600160a01b03908116911614612043576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60185461205882670de0b6b3a76400006140c4565b601881905560408051838152602081019290925280517fab0ec7468909bac916971a36711bb7a453201e59940de1fb0be6acc303854ffd9281900390910190a15050565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611c0d57600080fd5b6120e9613fd4565b6005546001600160a01b03908116911614612139576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546001600160a01b03828116911614156121865760405162461bcd60e51b8152600401808060200182810382526023815260200180615c566023913960400191505060405180910390fd5b6001600160a01b0381166121cb5760405162461bcd60e51b8152600401808060200182810382526025815260200180615dbe6025913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b039081166000908152600c60209081526040808320805460ff1990811690915560095485168452600b83528184208054909116905584546001600160a01b0319168685161794859055805163c45a015560e01b8152905192949093169263c45a01559260048083019392829003018186803b15801561228f57600080fd5b505afa1580156122a3573d6000803e3d6000fd5b505050506040513d60208110156122b957600080fd5b5051600a546040805163e6a4390560e01b81523060048201526001600160a01b0392831660248201529051919092169163e6a43905916044808301926020929190829003018186803b15801561230e57600080fd5b505afa158015612322573d6000803e3d6000fd5b505050506040513d602081101561233857600080fd5b505190506001600160a01b03811661244857600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561239857600080fd5b505afa1580156123ac573d6000803e3d6000fd5b505050506040513d60208110156123c257600080fd5b5051600a54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b505050506040513d602081101561244357600080fd5b505190505b6001600160a01b038281166000908152600c602052604090208054600160ff199091168117909155600980546001600160a01b0319168484161790819055611d07921690614916565b612499613fd4565b6005546001600160a01b039081169116146124e9576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b828114612539576040805162461bcd60e51b8152602060048201526019602482015278105c9c985e481cda5e995cc81b5d5cdd08189948195c5d585b603a1b604482015290519081900360640190fd5b60005b838110156118de576000612573670de0b6b3a764000085858581811061255e57fe5b905060200201356140c490919063ffffffff16565b905061259b3387878581811061258557fe5b905060200201356001600160a01b03168361411d565b5060010161253c565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156125f557600080fd5b505afa158015612609573d6000803e3d6000fd5b505050506040513d602081101561261f57600080fd5b505192915050565b60205460ff1681565b6001600160a01b031660009081526020819052604090205490565b612653613fd4565b6005546001600160a01b039081169116146126a3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6005546040516000916001600160a01b031690600080516020615d7b833981519152908390a3600580546001600160a01b0319169055565b6126e3613fd4565b6005546001600160a01b03908116911614612733576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160481b90910416151581151514156127835760405162461bcd60e51b8152600401808060200182810382526028815260200180615cb26028913960400191505060405180910390fd5b60208054911515600160481b0260ff60481b19909216919091179055565b602054600160381b900460ff1681565b602054600160301b900460ff1681565b602054600160281b900460ff1681565b6127d9613fd4565b6005546001600160a01b03908116911614612829576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546001600160a01b03838116911614156128765760405162461bcd60e51b8152600401808060200182810382526039815260200180615c796039913960400191505060405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff16151581151514156128d45760405162461bcd60e51b815260040180806020018281038252603a815260200180615c1c603a913960400191505060405180910390fd5b6001600160a01b038281166000818152600c6020526040808220805460ff1916861515179055600854815162241fbd60e51b81526004810194909452602484018390529051931692630483f7a092604480820193929182900301818387803b15801561155c57600080fd5b612947613fd4565b6005546001600160a01b03908116911614612997576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b0381166129dc5760405162461bcd60e51b8152600401808060200182810382526023815260200180615a8c6023913960400191505060405180910390fd5b602080546001600160a01b03909216600160601b026001600160601b03909216919091179055565b612a0c613fd4565b6005546001600160a01b03908116911614612a5c576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612aa95760405162461bcd60e51b815260040180806020018281038252602d815260200180615eec602d913960400191505060405180910390fd5b6040805163064591a760e11b8152306004820152905182916001600160a01b03831691630c8b234e91602480820192602092909190829003018186803b158015612af257600080fd5b505afa158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5051612b595760405162461bcd60e51b8152600401808060200182810382526038815260200180615cda6038913960400191505060405180910390fd5b6040805162241fbd60e51b81526001600160a01b0383166004820181905260006024830181905292519092630483f7a0926044808201939182900301818387803b158015612ba657600080fd5b505af1158015612bba573d6000803e3d6000fd5b50506040805162241fbd60e51b815230600482015260006024820181905291516001600160a01b0386169450630483f7a093506044808301939282900301818387803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b50505050806001600160a01b0316630483f7a0612c38612e19565b60006040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015612c8257600080fd5b505af1158015612c96573d6000803e3d6000fd5b50506007546040805162241fbd60e51b81526001600160a01b03928316600482015260006024820181905291519286169450630483f7a093506044808201939182900301818387803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b601f5481565b612d70613fd4565b6005546001600160a01b03908116911614612dc0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601d54612dd582670de0b6b3a76400006140c4565b601d81905560408051838152602081019290925280517f0273e0904ccd5aa39aadf810a8d0fc96671a08ba577fe49feab57fa1b6aad8309281900390910190a15050565b6005546001600160a01b031690565b612e30613fd4565b6005546001600160a01b03908116911614612e80576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601f54604080519182526020820183905280517f8c77526a6c0a7aa7cec23fef2dbb5958248deca84a91f836bd9e04a2aea4e6db9281900390910190a1601f55565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116045780601f106115d957610100808354040283529160200191611604565b612f2b613fd4565b6005546001600160a01b03908116911614612f7b576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805491151563010000000263ff00000019909216919091179055565b60165481565b612fa7613fd4565b6005546001600160a01b03908116911614612ff7576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6009546001600160a01b03838116911614156130445760405162461bcd60e51b8152600401808060200182810382526035815260200180615e036035913960400191505060405180910390fd5b611d078282614916565b6001600160a01b0381166000908152600e602052604081205460ff16156130b2576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b602054600160481b900460ff1680156130e957506001600160a01b0382166000908152601260205260409020544262015180909101115b156130f657506000611f3d565b6130ff82612630565b90506000613118601a5442614a4890919063ffffffff16565b90506301dfe20081118061314557506001600160a01b0383166000908152600f602052604090205460ff16155b6131e95760006131558483614a8a565b9050601d548111613166578061316a565b601d545b6001600160a01b0385166000908152601060205260409020549091506131909082614a48565b61319985612630565b11156131dc576001600160a01b0384166000908152601060205260409020546131d5906131c69083614a48565b6131cf86612630565b90614a48565b92506131e7565b600092505050611f3d565b505b602054600160501b900460ff16801561322057506001600160a01b0383166000908152601260205260409020544262015180909101115b1561328d576001600160a01b038316600090815260136020526040812054601f54101561324e576000613273565b6001600160a01b038416600090815260136020526040902054601f5461327391614a48565b9050808311156132835780613285565b825b9250506132b6565b602054600160501b900460ff16156132b657601f548211156132b157601f546132b3565b815b91505b50919050565b6132c4613fd4565b6005546001600160a01b03908116911614613314576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b42601a5543601b556020805462ff000019169055565b613332613fd4565b6005546001600160a01b03908116911614613382576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b1580156133c757600080fd5b505afa1580156133db573d6000803e3d6000fd5b505050506040513d60208110156133f157600080fd5b5051600a54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b15801561344857600080fd5b505af115801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b5051600980546001600160a01b0319166001600160a01b0380841691909117918290559192506134a491166001614916565b50565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611c0d57600080fd5b60006116226134f9613fd4565b8461195d85604051806060016040528060258152602001615ec76025913960016000613523613fd4565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906147ad565b60145481565b602054600160501b900460ff1681565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b1580156125f557600080fd5b60006116226135c8613fd4565b848461411d565b600f6020526000908152604090205460ff1681565b6008546040805163fbcbc0f160e01b81526001600160a01b038481166004830152915160009384938493849384938493169163fbcbc0f19160248083019260c0929190829003018186803b15801561363b57600080fd5b505afa15801561364f573d6000803e3d6000fd5b505050506040513d60c081101561366557600080fd5b508051602082015160408301516060840151608085015160a090950151939c929b5090995097509195509350915050565b600a546001600160a01b031681565b6136ad613fd4565b6005546001600160a01b039081169116146136fd576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160401b909104161515811515141561374d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d9b6023913960400191505060405180910390fd5b60208054911515600160401b0260ff60401b19909216919091179055565b600b6020526000908152604090205460ff1681565b613788613fd4565b6005546001600160a01b039081169116146137d8576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d602052604090205460ff1615158115151415613849576040805162461bcd60e51b815260206004820152601a6024820152794163636f756e7420616c726561647920276578636c756465642760301b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d6020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b6138b1613fd4565b6005546001600160a01b03908116911614613901576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6014839055601682905560158190556139248161391e8585613f75565b90613f75565b601981905560145460165460155460408051938452602084019290925282820152606082019290925290517f7027e29faa2460f22e800d92db38d4795b668c7104da6b87afaeaf502a269ca59181900360800190a1505050565b601e5481565b61398c613fd4565b6005546001600160a01b039081169116146139dc576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613a215760405162461bcd60e51b8152600401808060200182810382526023815260200180615ea46023913960400191505060405180910390fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b613a51613fd4565b6005546001600160a01b03908116911614613aa1576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601c54613ab683670de0b6b3a76400006140c4565b601c81905560208054841515600160201b90810260ff60201b199092169190911780835560408051868152938401949094520460ff1615158183015290517fd6d1ec2dffd2df16cb6d0859837b49920203bb429cc368ce9eab6df4d60e94399181900360600190a1505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6006546001600160a01b031690565b613b65613fd4565b6005546001600160a01b03908116911614613bb5576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805460ff1916911515919091179055565b60185481565b601b5481565b601c5481565b60085460408051632f842d8560e21b815290516000926001600160a01b03169163be10b614916004808301926020929190829003018186803b158015611c0d57600080fd5b613c27613fd4565b6005546001600160a01b03908116911614613c77576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b1580156118ca57600080fd5b602054610100900460ff1681565b613cda613fd4565b6005546001600160a01b03908116911614613d2a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613d6f5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e816023913960400191505060405180910390fd5b602280546001600160a01b0319166001600160a01b0392909216919091179055565b613d99613fd4565b6005546001600160a01b03908116911614613de9576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60208054911515600160381b0260ff60381b19909216919091179055565b613e0f613fd4565b6005546001600160a01b03908116911614613e5f576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613ea45760405162461bcd60e51b8152600401808060200182810382526026815260200180615b496026913960400191505060405180910390fd5b6005546040516001600160a01b03808416921690600080516020615d7b83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b613ef6613fd4565b6005546001600160a01b03908116911614613f46576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b602080549115156101000261ff0019909216919091179055565b600e6020526000908152604090205460ff1681565b600082820183811015613fcd576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b03831661401d5760405162461bcd60e51b8152600401808060200182810382526024815260200180615e5d6024913960400191505060405180910390fd5b6001600160a01b0382166140625760405162461bcd60e51b8152600401808060200182810382526022815260200180615b6f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000826140d357506000611626565b828202828482816140e057fe5b0414613fcd5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d126021913960400191505060405180910390fd5b6001600160a01b0383166141625760405162461bcd60e51b8152600401808060200182810382526025815260200180615e386025913960400191505060405180910390fd5b6001600160a01b0382166141a75760405162461bcd60e51b8152600401808060200182810382526023815260200180615aaf6023913960400191505060405180910390fd5b6001600160a01b0383166000908152600e602052604090205460ff161580156141e957506001600160a01b0382166000908152600e602052604090205460ff16155b80156142055750326000908152600e602052604090205460ff16155b61424c576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b614254612e19565b6001600160a01b0316836001600160a01b0316146142bb5760205462010000900460ff16156142bb576040805162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99c81c185d5cd95960921b604482015290519081900360640190fd5b6142c3612e19565b6001600160a01b0316836001600160a01b0316141580156142fd57506142e7612e19565b6001600160a01b0316826001600160a01b031614155b1561430d5761430d838383614c57565b326000908152600e602052604090205460ff161561432a576147a8565b600061433584612630565b9050600061434e601a5442614a4890919063ffffffff16565b90506301dfe2008111156143a3576001600160a01b0385166000908152600f602052604090205460ff161561439e576001600160a01b0385166000908152600f60205260409020805460ff191690555b614478565b60006143af8683614a8a565b6001600160a01b0386166000908152600b602052604090205490915060ff16806143f157506001600160a01b0385166000908152600c602052604090205460ff165b1561440c57601d5481116144055780614409565b601d545b90505b6001600160a01b03861660009081526010602052604090205461442f9082614a48565b6144398486614a48565b10156144765760405162461bcd60e51b8152600401808060200182810382526032815260200180615ad26032913960400191505060405180910390fd5b505b82614490576144898585600061549c565b50506147a8565b600061449b30612630565b6018546020549192508210159060ff1680156144c15750602054600160581b900460ff16155b80156144e657506001600160a01b0387166000908152600b602052604090205460ff16155b80156144ef5750805b1561451e576020805460ff60581b1916600160581b179055614510826155da565b6020805460ff60581b191690555b602080546001600160a01b0389166000908152600d90925260409091205460ff600160581b90920482161591168061456e57506001600160a01b0387166000908152600d602052604090205460ff165b806145835750602054600160401b900460ff16155b1561458c575060005b80156146b15760006145b460646145ae6019548a6140c490919063ffffffff16565b90615752565b90506145be612e19565b6001600160a01b0316896001600160a01b0316141580156145e857506001600160a01b0389163014155b801561467657506001600160a01b0389166000908152600b602052604090205460ff168061462e57506001600160a01b0388166000908152600b602052604090205460ff165b8061465157506001600160a01b0389166000908152600c602052604090205460ff165b8061467457506001600160a01b0388166000908152600c602052604090205460ff165b155b156146985761469560646145ae601e548a6140c490919063ffffffff16565b90505b6146a28782614a48565b96506146af89308361549c565b505b6146bc88888861549c565b6008546001600160a01b031663e30443bc896146d781612630565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561471d57600080fd5b505af192505050801561472e575060015b506008546001600160a01b031663e30443bc8861474a81612630565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561479057600080fd5b505af19250505080156147a1575060015b5050505050505b505050565b6000818484111561483c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148015781810151838201526020016147e9565b50505050905090810190601f16801561482e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03821661489f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6002546148ac9082613f75565b6002556001600160a01b0382166000908152602081905260409020546148d29082613f75565b6001600160a01b038316600081815260208181526040808320949094558351858152935192939192600080516020615de38339815191529281900390910190a35050565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156149745760405162461bcd60e51b8152600401808060200182810382526038815260200180615b916038913960400191505060405180910390fd5b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155614a0c576008546040805162241fbd60e51b81526001600160a01b0385811660048301526000602483018190529251931692630483f7a09260448084019391929182900301818387803b1580156149f357600080fd5b505af1158015614a07573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000613fcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506147ad565b6001600160a01b0382166000908152600f602052604081205460ff1615611626576001600160a01b03831660009081526010602052604090205462015180831015614ad85760009150614c50565b6224ea00831015614afa57614af3600a6145ae8360026140c4565b9150614c50565b6249d400831015614b1557614af360646145ae8360196140c4565b626ebe00831015614b3057614af360646145ae83601e6140c4565b6293a800831015614b4b57614af360646145ae8360236140c4565b62b89200831015614b6657614af360646145ae8360186140c4565b62dd7c00831015614b8157614af360646145ae83602d6140c4565b6301026600831015614b9857614af3816002615752565b6301275000831015614bb457614af360646145ae8360386140c4565b63014c3a00831015614bd057614af360646145ae83603e6140c4565b6301712400831015614bec57614af360646145ae8360446140c4565b6301960e00831015614c0857614af360646145ae83604c6140c4565b6301baf800831015614c2457614af360646145ae8360546140c4565b6301dfe200831015614c4057614af360646145ae83605c6140c4565b6301dfe200831115614c50578091505b5092915050565b602054600160481b900460ff168015614c8857506001600160a01b0382166000908152600b602052604090205460ff165b15614d11574260126000614c9a613fd4565b6001600160a01b03166001600160a01b031681526020019081526020016000205462015180011115614d11576040805162461bcd60e51b815260206004820152601b60248201527a13db99481cd95b1b081c195c8819185e481a5cc8185b1b1bddd959602a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff1615614dec574260126000614d3f613fd4565b6001600160a01b03166001600160a01b0316815260200190815260200160002054620151800110614d9c578060136000614d77613fd4565b6001600160a01b03168152602081019190915260400160002080549091019055614dc4565b8060136000614da9613fd4565b6001600160a01b031681526020810191909152604001600020555b4260126000614dd1613fd4565b6001600160a01b031681526020810191909152604001600020555b602054600160501b900460ff1615614e6b57601f5460136000614e0d613fd4565b6001600160a01b03166001600160a01b03168152602001908152602001600020541115614e6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615b046021913960400191505060405180910390fd5b6020546301000000900460ff1615614edc576001600160a01b0383163014614edc57601754811115614edc576040805162461bcd60e51b8152602060048201526015602482015274195e18d959591cc81b585e081d1e08185b5bdd5b9d605a1b604482015290519081900360640190fd5b602054600160301b900460ff1615615000576001600160a01b0383163014801590614f1057506001600160a01b0382163014155b8015614f3557506001600160a01b0382166000908152600c602052604090205460ff16155b8015614f5a57506001600160a01b0382166000908152600b602052604090205460ff16155b156150005760116000614f6b613fd4565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601e01421015614fd8576040805162461bcd60e51b815260206004820152601260248201527110dbdbdb191bdddb881a5b881959999958dd60721b604482015290519081900360640190fd5b4260116000614fe5613fd4565b6001600160a01b031681526020810191909152604001600020555b602054600160281b900460ff1615615314576001600160a01b0383166000908152600b602052604090205460ff16801561505357506001600160a01b0382166000908152600c602052604090205460ff16155b801561506857506001600160a01b0382163014155b801561507d57506001600160a01b0383163014155b1561509757326001600160a01b0383161461509757600080fd5b601b54600401431161531457326000818152600e60205260409020805460ff191660011790556001600160a01b038416148015906150de5750326001600160a01b03831614155b1561514e576008546040805162241fbd60e51b81523260048201526001602482015290516001600160a01b0390921691630483f7a09160448082019260009290919082900301818387803b15801561513557600080fd5b505af1158015615149573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152600b602052604090205460ff1615801561519057506001600160a01b0383166000908152600c602052604090205460ff16155b80156151a557506001600160a01b0383163014155b15615231576001600160a01b038084166000818152600e6020526040808220805460ff19166001908117909155600854825162241fbd60e51b8152600481019590955260248501919091529051931692630483f7a092604480820193929182900301818387803b15801561521857600080fd5b505af115801561522c573d6000803e3d6000fd5b505050505b6001600160a01b0382166000908152600b602052604090205460ff1615801561527357506001600160a01b0382166000908152600c602052604090205460ff16155b801561528857506001600160a01b0382163014155b15615314576001600160a01b038083166000818152600e6020526040808220805460ff19166001908117909155600854825162241fbd60e51b8152600481019590955260248501919091529051931692630483f7a092604480820193929182900301818387803b1580156152fb57600080fd5b505af115801561530f573d6000803e3d6000fd5b505050505b602054600160201b900460ff161561539e576001600160a01b0383166000908152600b602052604090205460ff16801561535c57506007546001600160a01b03838116911614155b801561537157506001600160a01b0382163014155b1561539e57600061538183612630565b601c549091506153918284613f75565b111561539c57600080fd5b505b602054600160381b900460ff16156147a8576001600160a01b03831630148015906153d257506001600160a01b0382163014155b156147a8576001600160a01b0383166000908152600b602052604090205460ff168061541657506001600160a01b0382166000908152600b602052604090205460ff165b8061543957506001600160a01b0383166000908152600c602052604090205460ff165b8061545c57506001600160a01b0382166000908152600c602052604090205460ff165b6147a8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f207472616e736665727360a01b604482015290519081900360640190fd5b6001600160a01b0383166154e15760405162461bcd60e51b8152600401808060200182810382526025815260200180615e386025913960400191505060405180910390fd5b6001600160a01b0382166155265760405162461bcd60e51b8152600401808060200182810382526023815260200180615aaf6023913960400191505060405180910390fd5b61556381604051806060016040528060268152602001615bc9602691396001600160a01b03861660009081526020819052604090205491906147ad565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546155929082613f75565b6001600160a01b03808416600081815260208181526040918290209490945580518581529051919392871692600080516020615de383398151915292918290030190a3505050565b60006155f76019546145ae601654856140c490919063ffffffff16565b90506000615606826002615752565b905060006156148483614a48565b90504761562082615791565b600061562c4783614a48565b9050600061565060026145ae6019546145ae601654876140c490919063ffffffff16565b9050600061567460036145ae6019546145ae601554886140c490919063ffffffff16565b602054604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156156b6573d6000803e3d6000fd5b506021546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156156f1573d6000803e3d6000fd5b506022546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561572c573d6000803e3d6000fd5b5061573786836158c0565b6020544790610100900460ff16156147a1576147a181615993565b6000613fcd83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250615a26565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106157c057fe5b6001600160a01b039283166020918202929092010152600a548251911690829060019081106157eb57fe5b6001600160a01b0392831660209182029290920101526007546158119130911684613fd8565b60075460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561589757818101518382015260200161587f565b505050509050019650505050505050600060405180830381600087803b15801561155c57600080fd5b6007546158d89030906001600160a01b031684613fd8565b6007546001600160a01b031663f305d7198230856000806158f7612e19565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561596257600080fd5b505af1158015615976573d6000803e3d6000fd5b50505050506040513d606081101561598d57600080fd5b50505050565b6008546040516000916001600160a01b03169083908381818185875af1925050503d80600081146159e0576040519150601f19603f3d011682016040523d82523d6000602084013e6159e5565b606091505b505090508015611d07576040805183815290517fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19181900360200190a15050565b60008183615a755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156148015781810151838201526020016147e9565b506000838581615a8157fe5b049594505050505056fe412077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f45524332303a207472616e7366657220746f20746865207a65726f206164647265737343616e277420627970617373207665737420616e642063616e2774206279706173732076657374656453656c6c4c696d69744d6178206461696c792073656c6c20616d6f756e742077617320726561636865644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726d696e744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c756545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655570646174696e6720746f2063757272656e742076616c75652c20656e61626c654d61784461696c7953656c6c4175746f6d61746564206d61726b6574206d616b657220726f7574657220697320616c72656164792073657420746f20746861742076616c756554686520726f7574657220616c72656164792068617320746861742061646472657373526f757465722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572526f75746572735570646174696e6720746f2063757272656e742076616c75652c206461696c79436f6f6c446f776e546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746f6b656e20636f6e7472616374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05570646174696e6720746f2063757272656e742076616c75652c2074616b65466565734e657720726f757465722073686f756c64206e6f742062652061646472657373207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373432077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f422077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373a26469706673582212200af6e3e41b822daf2089a6a80cc8612e1de33fcd4c58631fcf90f0feda6b871864736f6c6343000706003360806040523480156200001157600080fd5b5060408051808201825260138082527f56435f4469766964656e645f547261636b657200000000000000000000000000602080840182815285518087019096529285528401528151919291839183916200006e916003916200014c565b508051620000849060049060208401906200014c565b50505050506001600c60006200009f6200014860201b60201c565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055328152600c909252902080549091166001908117909155620000ec62000148565b6001600160a01b031660008051602062001fa683398151915260405160405180910390a3604051600190329060008051602062001fa683398151915290600090a3610e10600d556a0c685fa11e01ec6f000000600f55620001f8565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001845760008555620001cf565b82601f106200019f57805160ff1916838001178555620001cf565b82800160010185558215620001cf579182015b82811115620001cf578251825591602001919060010190620001b2565b50620001dd929150620001e1565b5090565b5b80821115620001dd5760008155600101620001e2565b611d9e80620002086000396000f3fe60806040526004361061016c5760003560e01c806303c83302146101805780630483f7a01461018857806306fdde03146101c3578063095ea7b31461024d57806309bbedde1461029a5780630c8b234e146102c157806318160ddd146102f45780631fa71a3b14610309578063226cfa3d1461033357806323b872dd1461036657806327ce0147146103a9578063313ce567146103dc57806339509351146104075780634e7b827f146104405780636a474002146104735780636f2789ec1461048857806370a082311461049d57806385a6b3ae146104d057806391b89fba146104e557806395d89b4114610518578063a457c2d71461052d578063a8b9d24014610566578063a9059cbb14610599578063aafd847a146105d2578063adf4849014610605578063bc4c4b3714610640578063be10b6141461067b578063dd62ed3e14610690578063e30443bc146106cb578063e98030c714610704578063fbcbc0f11461072e5761017b565b3661017b5761017961079e565b005b600080fd5b61017961079e565b34801561019457600080fd5b50610179600480360360408110156101ab57600080fd5b506001600160a01b038135169060200135151561082f565b3480156101cf57600080fd5b506101d86109bf565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102125781810151838201526020016101fa565b50505050905090810190601f16801561023f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025957600080fd5b506102866004803603604081101561027057600080fd5b506001600160a01b038135169060200135610a55565b604080519115158252519081900360200190f35b3480156102a657600080fd5b506102af610a73565b60408051918252519081900360200190f35b3480156102cd57600080fd5b50610286600480360360208110156102e457600080fd5b50356001600160a01b0316610a79565b34801561030057600080fd5b506102af610a9b565b34801561031557600080fd5b506101796004803603602081101561032c57600080fd5b5035610aa1565b34801561033f57600080fd5b506102af6004803603602081101561035657600080fd5b50356001600160a01b0316610b8f565b34801561037257600080fd5b506102866004803603606081101561038957600080fd5b506001600160a01b03813581169160208101359091169060400135610ba1565b3480156103b557600080fd5b506102af600480360360208110156103cc57600080fd5b50356001600160a01b0316610c28565b3480156103e857600080fd5b506103f1610c85565b6040805160ff9092168252519081900360200190f35b34801561041357600080fd5b506102866004803603604081101561042a57600080fd5b506001600160a01b038135169060200135610c8a565b34801561044c57600080fd5b506102866004803603602081101561046357600080fd5b50356001600160a01b0316610cd8565b34801561047f57600080fd5b50610179610ced565b34801561049457600080fd5b506102af610d24565b3480156104a957600080fd5b506102af600480360360208110156104c057600080fd5b50356001600160a01b0316610d2a565b3480156104dc57600080fd5b506102af610d45565b3480156104f157600080fd5b506102af6004803603602081101561050857600080fd5b50356001600160a01b0316610d4b565b34801561052457600080fd5b506101d8610d56565b34801561053957600080fd5b506102866004803603604081101561055057600080fd5b506001600160a01b038135169060200135610db7565b34801561057257600080fd5b506102af6004803603602081101561058957600080fd5b50356001600160a01b0316610e1f565b3480156105a557600080fd5b50610286600480360360408110156105bc57600080fd5b506001600160a01b038135169060200135610e4b565b3480156105de57600080fd5b506102af600480360360208110156105f557600080fd5b50356001600160a01b0316610e5f565b34801561061157600080fd5b506101796004803603604081101561062857600080fd5b506001600160a01b0381351690602001351515610e7a565b34801561064c57600080fd5b506102866004803603604081101561066357600080fd5b506001600160a01b0381351690602001351515610f94565b34801561068757600080fd5b506102af6110d4565b34801561069c57600080fd5b506102af600480360360408110156106b357600080fd5b506001600160a01b03813581169160200135166110da565b3480156106d757600080fd5b50610179600480360360408110156106ee57600080fd5b506001600160a01b038135169060200135611105565b34801561071057600080fd5b506101796004803603602081101561072757600080fd5b5035611263565b34801561073a57600080fd5b506107616004803603602081101561075157600080fd5b50356001600160a01b031661138f565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b60006107a8610a9b565b116107b257600080fd5b341561082d576107e36107c3610a9b565b6107d134600160801b611406565b816107d857fe5b600554919004611466565b60055560408051348152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a26008546108299034611466565b6008555b565b600c600061083b6114be565b6001600160a01b0316815260208101919091526040016000205460ff16610897576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff1615610900576040805162461bcd60e51b81526020600482015260186024820152771058d8dbdd5b9d08185b1c9958591e48195e18db1d59195960421b604482015290519081900360640190fd5b6001600160a01b0382166000908152600a60205260408120805460ff1916600117905561092e9083906114c2565b8015610987576001600160a01b03821660009081526009602052604090205460ff1615610987576001600160a01b0382166000908152600960205260409020805460ff19169055600e5461098390600161151c565b600e555b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b5050505050905090565b6000610a69610a626114be565b848461155e565b5060015b92915050565b600e5490565b6001600160a01b0381166000908152600c602052604090205460ff165b919050565b60025490565b600c6000610aad6114be565b6001600160a01b0316815260208101919091526040016000205460ff16610b09576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b6001811015610b495760405162461bcd60e51b8152600401808060200182810382526034815260200180611aa56034913960400191505060405180910390fd5b600f5460405182907f9c9571fb23d65fec0768248b245e0bee0cd9e9036a4a9f9e8e417eb15188678590600090a3610b8981670de0b6b3a7640000611406565b600f5550565b600b6020526000908152604090205481565b6000610bae848484611595565b610c1e84610bba6114be565b610c1985604051806060016040528060288152602001611bb9602891396001600160a01b038a16600090815260016020526040812090610bf86114be565b6001600160a01b0316815260208101919091526040016000205491906115cc565b61155e565b5060019392505050565b6001600160a01b038116600090815260066020526040812054600160801b90610c7790610c7290610c6c610c67610c5e88610d2a565b60055490611406565b611663565b90611673565b6116a6565b81610c7e57fe5b0492915050565b601290565b6000610a69610c976114be565b84610c198560016000610ca86114be565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611466565b600a6020526000908152604090205460ff1681565b60405162461bcd60e51b8152600401808060200182810382526067815260200180611ad96067913960800191505060405180910390fd5b600d5481565b6001600160a01b031660009081526020819052604090205490565b60085481565b6000610a6d82610e1f565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b6000610a69610dc46114be565b84610c1985604051806060016040528060258152602001611d446025913960016000610dee6114be565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906115cc565b6001600160a01b038116600090815260076020526040812054610a6d90610e4584610c28565b9061151c565b6000610a69610e586114be565b8484611595565b6001600160a01b031660009081526007602052604090205490565b600c6000610e866114be565b6001600160a01b0316815260208101919091526040016000205460ff16610ee2576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600c602052604090205460ff1615158115151415610f405760405162461bcd60e51b815260040180806020018281038252602c815260200180611b40602c913960400191505060405180910390fd5b6001600160a01b0382166000818152600c6020526040808220805460ff191685151590811790915590519092917f8ae3029208fd6692a475f09e97b7a86f7993f1eb5e1edb563554aebc2883860291a35050565b6000600c6000610fa26114be565b6001600160a01b0316815260208101919091526040016000205460ff16610ffe576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b6001600160a01b0383166000908152600b6020526040902054600d54429101106110595760405162461bcd60e51b8152600401808060200182810382526035815260200180611d0f6035913960400191505060405180910390fd5b6000611064846116b9565b905080156110ca576001600160a01b0384166000818152600b60209081526040918290204290558151848152915186151593927fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09292908290030190a36001915050610a6d565b5060009392505050565b600f5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c60006111116114be565b6001600160a01b0316815260208101919091526040016000205460ff1661116d576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600a602052604090205460ff16156111935761125f565b600f548110611201576111a682826114c2565b6001600160a01b03821660009081526009602052604090205460ff166111fc576001600160a01b0382166000908152600960205260409020805460ff19166001908117909155600e546111f891611466565b600e555b61125f565b61120c8260006114c2565b6001600160a01b03821660009081526009602052604090205460ff161561125f576001600160a01b0382166000908152600960205260409020805460ff19169055600e5461125b90600161151c565b600e555b5050565b600c600061126f6114be565b6001600160a01b0316815260208101919091526040016000205460ff166112cb576040805162461bcd60e51b81526020600482018190526024820152600080516020611be1833981519152604482015290519081900360640190fd5b610e1081101580156112e05750620151808111155b61131b5760405162461bcd60e51b815260040180806020018281038252604b815260200180611c01604b913960600191505060405180910390fd5b600d5481141561135c5760405162461bcd60e51b815260040180806020018281038252603d815260200180611c8d603d913960400191505060405180910390fd5b600d5460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3600d55565b8060008080808061139f86610e1f565b94506113aa86610c28565b6001600160a01b0387166000908152600b60205260409020549094509250826113d357426113e1565b600d546113e1908490611466565b91504282116113f15760006113fb565b6113fb824261151c565b905091939550919395565b60008261141557506000610a6d565b8282028284828161142257fe5b041461145f5760405162461bcd60e51b8152600401808060200182810382526021815260200180611b6c6021913960400191505060405180910390fd5b9392505050565b60008282018381101561145f576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b3390565b60006114cd83610d2a565b9050808211156114f55760006114e3838361151c565b90506114ef84826117f8565b50611517565b80821015611517576000611509828461151c565b9050611515848261185c565b505b505050565b600061145f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115cc565b60405162461bcd60e51b8152600401808060200182810382526045815260200180611cca6045913960600191505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252602c815260200180611b8d602c913960400191505060405180910390fd5b6000818484111561165b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611620578181015183820152602001611608565b50505050905090810190601f16801561164d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008181811215610a6d57600080fd5b60008282018183128015906116885750838112155b8061169d575060008312801561169d57508381125b61145f57600080fd5b6000808212156116b557600080fd5b5090565b6000806116c583610e1f565b905080156117ef576040805182815290516001600160a01b038516917fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d919081900360200190a26001600160a01b03831660009081526007602052604090205461172f9082611466565b6001600160a01b038416600081815260076020526040808220939093559151610bb890849084818181858888f193505050503d806000811461178d576040519150601f19603f3d011682016040523d82523d6000602084013e611792565b606091505b50509050806117dc576001600160a01b0384166000908152600760205260409020546117be908361151c565b6001600160a01b0385166000908152600760205260409020556117e7565b600092505050610a96565b509050610a96565b50600092915050565b61180282826118a0565b61183c61181d610c678360055461140690919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611972565b6001600160a01b0390921660009081526006602052604090209190915550565b61186682826119a4565b61183c611881610c678360055461140690919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611673565b6001600160a01b0382166118fb576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6002546119089082611466565b6002556001600160a01b03821660009081526020819052604090205461192e9082611466565b6001600160a01b038316600081815260208181526040808320949094558351858152935192939192600080516020611c4c8339815191529281900390910190a35050565b60008183038183128015906119875750838113155b8061169d575060008312801561169d575083811361145f57600080fd5b6001600160a01b0382166119e95760405162461bcd60e51b8152600401808060200182810382526021815260200180611c6c6021913960400191505060405180910390fd5b611a2681604051806060016040528060228152602001611a83602291396001600160a01b03851660009081526020819052604090205491906115cc565b6001600160a01b038316600090815260208190526040902055600254611a4c908261151c565b6002556040805182815290516000916001600160a01b03851691600080516020611c4c8339815191529181900360200190a3505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365566972616c5f4469766964656e645f547261636b65723a206e65774d696e696d756d546f6b656e206d6f7265203120746f6b656e566972616c5f4469766964656e645f547261636b65723a2077697468647261774469766964656e642064697361626c65642e20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e20564952414c20636f6e74726163742e4f776e6572736869703a20726f6c6520697320616c72656164792073657420746f20746869732076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77566972616c5f4469766964656e645f547261636b65723a204e6f207472616e736665727320616c6c6f77656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572566972616c5f4469766964656e645f547261636b65723a20636c61696d57616974206d757374206265207570646174656420746f206265747765656e203120616e6420323420686f757273ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f2061646472657373566972616c5f4469766964656e645f547261636b65723a2043616e6e6f742075706461746520636c61696d5761697420746f2073616d652076616c7565566972616c5f4469766964656e645f547261636b65723a20546f6b656e206973206e6f74207472616e7366657261626c652c206e6f206e65656420746f20617070726f7665566972616c5f4469766964656e645f547261636b65723a20706c65617365207761697420666f7220616e6f7468657220636c61696d45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cc6ae6e3160f34a884cb460546af28fe4bde6b5e2c8f5a9472fcdbc93abcb5d364736f6c634300070600338ae3029208fd6692a475f09e97b7a86f7993f1eb5e1edb563554aebc288386024175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c756554686520726f7574657220616c726561647920686173207468617420616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724e657720726f757465722073686f756c64206e6f742062652061646472657373207a65726f

Deployed Bytecode

0x6080604052600436106103ff5760003560e01c806204cf0b1461040b5780630483f7a01461043957806306fdde0314610474578063095ea7b3146104fe5780630fb3701c1461054b57806312da9de11461057557806312db00161461058a57806313114a9d1461059f5780631694505e146105c657806316c38b3c146105f757806318160ddd146106235780631fa71a3b1461063857806323b872dd1461066257806325c60816146106a55780632a32cb9f146106ba5780632c1f5216146107355780632c9fd2291461074a57806330bb4cff1461077d578063313ce5671461079257806336a143c1146107bd57806339509351146107f05780633e2763ba1461082957806340c10f191461083e578063423ad37514610877578063443ad4d31461088c578063455a4396146108bf57806349bd5a5e146108fa5780634e45e92a1461090f5780634e71d92d146109245780634fbee193146109395780635b769f3c1461096c5780635c975abb1461099f5780635dc106d1146109b45780635dd912f5146109c95780636402511e146109de57806364b0f65314610a0857806365b8dbc014610a1d5780636724348214610a505780636843cd8414610b1b5780636ddd171314610b4e57806370a0823114610b63578063715018a614610b9657806372d580ef14610bab578063736dc68414610bd7578063787a08a614610bec5780637b4cf05f14610c015780638372a4d014610c1657806386349e0d14610c5157806388bdd9be14610c845780638ab8ef0614610cb75780638c3e7c1d14610ccc5780638da5cb5b14610cf657806394f1682a14610d0b57806395d89b4114610d3557806395f6f56714610d4a57806398118cb414610d765780639a7a23d614610d8b5780639aa8d3d814610dc65780639b6c3ef514610df95780639e78fb4f14610e0e578063a26579ad14610e23578063a457c2d714610e38578063a4c9e07f14610e71578063a5b01dfa14610e86578063a8b9d24014610e9b578063a9059cbb14610ece578063acca78df14610f07578063ad56c13c14610f3a578063ad5c464814610faa578063b0aef70214610fbf578063b62496f514610feb578063c02466681461101e578063cec10c1114611059578063d0a398141461108f578063d406a1ec146110a4578063d58f2f27146110d7578063dc6ba803146110ec578063dd62ed3e1461111e578063df56aaaf14611159578063e01af92c1461116e578063e2f456051461119a578063e3645ac4146111af578063e54f4faa146111c4578063e6bd610d146111d9578063e98030c7146111ee578063eb2889f214611218578063ecde9c8e1461122d578063f1f3142c14611260578063f2fde38b1461128c578063f56a1117146112bf578063fe575a87146112eb57610406565b3661040657005b600080fd5b34801561041757600080fd5b506104376004803603602081101561042e57600080fd5b5035151561131e565b005b34801561044557600080fd5b506104376004803603604081101561045c57600080fd5b506001600160a01b03813516906020013515156113e4565b34801561048057600080fd5b50610489611578565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c35781810151838201526020016104ab565b50505050905090810190601f1680156104f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050a57600080fd5b506105376004803603604081101561052157600080fd5b506001600160a01b03813516906020013561160e565b604080519115158252519081900360200190f35b34801561055757600080fd5b506104376004803603602081101561056e57600080fd5b503561162c565b34801561058157600080fd5b506104376116dd565b34801561059657600080fd5b50610537611786565b3480156105ab57600080fd5b506105b4611796565b60408051918252519081900360200190f35b3480156105d257600080fd5b506105db61179c565b604080516001600160a01b039092168252519081900360200190f35b34801561060357600080fd5b506104376004803603602081101561061a57600080fd5b503515156117ab565b34801561062f57600080fd5b506105b461181f565b34801561064457600080fd5b506104376004803603602081101561065b57600080fd5b5035611825565b34801561066e57600080fd5b506105376004803603606081101561068557600080fd5b506001600160a01b038135811691602081013590911690604001356118e5565b3480156106b157600080fd5b5061043761196c565b3480156106c657600080fd5b50610437600480360360408110156106dd57600080fd5b810190602081018135600160201b8111156106f757600080fd5b82018360208201111561070957600080fd5b803590602001918460208302840111600160201b8311171561072a57600080fd5b9193509150356119d3565b34801561074157600080fd5b506105db611ad6565b34801561075657600080fd5b506104376004803603602081101561076d57600080fd5b50356001600160a01b0316611ae5565b34801561078957600080fd5b506105b4611bc8565b34801561079e57600080fd5b506107a7611c3e565b6040805160ff9092168252519081900360200190f35b3480156107c957600080fd5b506105b4600480360360208110156107e057600080fd5b50356001600160a01b0316611c43565b3480156107fc57600080fd5b506105376004803603604081101561081357600080fd5b506001600160a01b038135169060200135611c55565b34801561083557600080fd5b506105b4611ca3565b34801561084a57600080fd5b506104376004803603604081101561086157600080fd5b506001600160a01b038135169060200135611ca9565b34801561088357600080fd5b506105b4611d0b565b34801561089857600080fd5b50610537600480360360208110156108af57600080fd5b50356001600160a01b0316611d11565b3480156108cb57600080fd5b50610437600480360360408110156108e257600080fd5b506001600160a01b0381351690602001351515611d26565b34801561090657600080fd5b506105db611e80565b34801561091b57600080fd5b50610537611e8f565b34801561093057600080fd5b50610437611e9f565b34801561094557600080fd5b506105376004803603602081101561095c57600080fd5b50356001600160a01b0316611f20565b34801561097857600080fd5b506104376004803603602081101561098f57600080fd5b50356001600160a01b0316611f42565b3480156109ab57600080fd5b50610537611fbc565b3480156109c057600080fd5b50610537611fcb565b3480156109d557600080fd5b50610537611fdb565b3480156109ea57600080fd5b5061043760048036036020811015610a0157600080fd5b5035611feb565b348015610a1457600080fd5b506105b461209c565b348015610a2957600080fd5b5061043760048036036020811015610a4057600080fd5b50356001600160a01b03166120e1565b348015610a5c57600080fd5b5061043760048036036040811015610a7357600080fd5b810190602081018135600160201b811115610a8d57600080fd5b820183602082011115610a9f57600080fd5b803590602001918460208302840111600160201b83111715610ac057600080fd5b919390929091602081019035600160201b811115610add57600080fd5b820183602082011115610aef57600080fd5b803590602001918460208302840111600160201b83111715610b1057600080fd5b509092509050612491565b348015610b2757600080fd5b506105b460048036036020811015610b3e57600080fd5b50356001600160a01b03166125a4565b348015610b5a57600080fd5b50610537612627565b348015610b6f57600080fd5b506105b460048036036020811015610b8657600080fd5b50356001600160a01b0316612630565b348015610ba257600080fd5b5061043761264b565b348015610bb757600080fd5b5061043760048036036020811015610bce57600080fd5b503515156126db565b348015610be357600080fd5b506105376127a1565b348015610bf857600080fd5b506105376127b1565b348015610c0d57600080fd5b506105376127c1565b348015610c2257600080fd5b5061043760048036036040811015610c3957600080fd5b506001600160a01b03813516906020013515156127d1565b348015610c5d57600080fd5b5061043760048036036020811015610c7457600080fd5b50356001600160a01b031661293f565b348015610c9057600080fd5b5061043760048036036020811015610ca757600080fd5b50356001600160a01b0316612a04565b348015610cc357600080fd5b506105b4612d62565b348015610cd857600080fd5b5061043760048036036020811015610cef57600080fd5b5035612d68565b348015610d0257600080fd5b506105db612e19565b348015610d1757600080fd5b5061043760048036036020811015610d2e57600080fd5b5035612e28565b348015610d4157600080fd5b50610489612ec2565b348015610d5657600080fd5b5061043760048036036020811015610d6d57600080fd5b50351515612f23565b348015610d8257600080fd5b506105b4612f99565b348015610d9757600080fd5b5061043760048036036040811015610dae57600080fd5b506001600160a01b0381351690602001351515612f9f565b348015610dd257600080fd5b506105b460048036036020811015610de957600080fd5b50356001600160a01b031661304e565b348015610e0557600080fd5b506104376132bc565b348015610e1a57600080fd5b5061043761332a565b348015610e2f57600080fd5b506105b46134a7565b348015610e4457600080fd5b5061053760048036036040811015610e5b57600080fd5b506001600160a01b0381351690602001356134ec565b348015610e7d57600080fd5b506105b4613554565b348015610e9257600080fd5b5061053761355a565b348015610ea757600080fd5b506105b460048036036020811015610ebe57600080fd5b50356001600160a01b031661356a565b348015610eda57600080fd5b5061053760048036036040811015610ef157600080fd5b506001600160a01b0381351690602001356135bb565b348015610f1357600080fd5b5061053760048036036020811015610f2a57600080fd5b50356001600160a01b03166135cf565b348015610f4657600080fd5b50610f6d60048036036020811015610f5d57600080fd5b50356001600160a01b03166135e4565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610fb657600080fd5b506105db613696565b348015610fcb57600080fd5b5061043760048036036020811015610fe257600080fd5b503515156136a5565b348015610ff757600080fd5b506105376004803603602081101561100e57600080fd5b50356001600160a01b031661376b565b34801561102a57600080fd5b506104376004803603604081101561104157600080fd5b506001600160a01b0381351690602001351515613780565b34801561106557600080fd5b506104376004803603606081101561107c57600080fd5b50803590602081013590604001356138a9565b34801561109b57600080fd5b506105b461397e565b3480156110b057600080fd5b50610437600480360360208110156110c757600080fd5b50356001600160a01b0316613984565b3480156110e357600080fd5b506105b4613a43565b3480156110f857600080fd5b506104376004803603604081101561110f57600080fd5b50803590602001351515613a49565b34801561112a57600080fd5b506105b46004803603604081101561114157600080fd5b506001600160a01b0381358116916020013516613b23565b34801561116557600080fd5b506105db613b4e565b34801561117a57600080fd5b506104376004803603602081101561119157600080fd5b50351515613b5d565b3480156111a657600080fd5b506105b4613bc8565b3480156111bb57600080fd5b506105b4613bce565b3480156111d057600080fd5b506105b4613bd4565b3480156111e557600080fd5b506105b4613bda565b3480156111fa57600080fd5b506104376004803603602081101561121157600080fd5b5035613c1f565b34801561122457600080fd5b50610537613cc4565b34801561123957600080fd5b506104376004803603602081101561125057600080fd5b50356001600160a01b0316613cd2565b34801561126c57600080fd5b506104376004803603602081101561128357600080fd5b50351515613d91565b34801561129857600080fd5b50610437600480360360208110156112af57600080fd5b50356001600160a01b0316613e07565b3480156112cb57600080fd5b50610437600480360360208110156112e257600080fd5b50351515613eee565b3480156112f757600080fd5b506105376004803603602081101561130e57600080fd5b50356001600160a01b0316613f60565b611326613fd4565b6005546001600160a01b03908116911614611376576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160501b90910416151581151514156113c65760405162461bcd60e51b815260040180806020018281038252602d815260200180615bef602d913960400191505060405180910390fd5b60208054911515600160501b0260ff60501b19909216919091179055565b6113ec613fd4565b6005546001600160a01b0390811691161461143c576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60085460408051634e7b827f60e01b81526001600160a01b03858116600483015291519190921691634e7b827f916024808301926020929190829003018186803b15801561148957600080fd5b505afa15801561149d573d6000803e3d6000fd5b505050506040513d60208110156114b357600080fd5b505115611507576040805162461bcd60e51b815260206004820152601f60248201527f416c7265616479206578636c756465642066726f6d206469766964656e647300604482015290519081900360640190fd5b6008546040805162241fbd60e51b81526001600160a01b038581166004830152841515602483015291519190921691630483f7a091604480830192600092919082900301818387803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116045780601f106115d957610100808354040283529160200191611604565b820191906000526020600020905b8154815290600101906020018083116115e757829003601f168201915b5050505050905090565b600061162261161b613fd4565b8484613fd8565b5060015b92915050565b611634613fd4565b6005546001600160a01b03908116911614611684576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60175461169982670de0b6b3a76400006140c4565b601781905560408051838152602081019290925280517f47e32629af1fc3c60a5654749bbbe503cf7b16ccb001804be0740e01ea50ba159281900390910190a15050565b6116e5613fd4565b6005546001600160a01b03908116911614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6005546006546040516001600160a01b039283169290911690600080516020615d7b83398151915290600090a3600554600680546001600160a01b0319166001600160a01b03909216919091179055565b602054600160201b900460ff1681565b60195481565b6007546001600160a01b031681565b6117b3613fd4565b6005546001600160a01b03908116911614611803576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60208054911515620100000262ff000019909216919091179055565b60025490565b61182d613fd4565b6005546001600160a01b0390811691161461187d576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60085460408051631fa71a3b60e01b81526004810184905290516001600160a01b0390921691631fa71a3b9160248082019260009290919082900301818387803b1580156118ca57600080fd5b505af11580156118de573d6000803e3d6000fd5b5050505050565b60006118f284848461411d565b611962846118fe613fd4565b61195d85604051806060016040528060288152602001615d33602891396001600160a01b038a1660009081526001602052604081209061193c613fd4565b6001600160a01b0316815260208101919091526040016000205491906147ad565b613fd8565b5060019392505050565b611974613fd4565b6005546001600160a01b039081169116146119c4576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805460ff60281b19169055565b6119db613fd4565b6005546001600160a01b03908116911614611a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b600080611a4083670de0b6b3a76400006140c4565b90505b838210156118de576000858584818110611a5957fe5b905060200201356001600160a01b03169050611a7633828461411d565b6001600160a01b038116600090815260106020526040902054611a999083613f75565b6001600160a01b03909116600090815260106020908152604080832093909355600f905220805460ff191660019081179091559190910190611a43565b6008546001600160a01b031681565b611aed613fd4565b6006546001600160a01b03908116911614611b395760405162461bcd60e51b8152600401808060200182810382526024815260200180615b256024913960400191505060405180910390fd5b6001600160a01b038116611b7e5760405162461bcd60e51b8152600401808060200182810382526026815260200180615b496026913960400191505060405180910390fd5b6006546040516001600160a01b03808416921690600080516020615d7b83398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d6020811015611c3757600080fd5b5051905090565b601290565b60106020526000908152604090205481565b6000611622611c62613fd4565b8461195d8560016000611c73613fd4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613f75565b601d5481565b611cb1613fd4565b6006546001600160a01b03908116911614611cfd5760405162461bcd60e51b8152600401808060200182810382526024815260200180615b256024913960400191505060405180910390fd5b611d078282614844565b5050565b601a5481565b600c6020526000908152604090205460ff1681565b611d2e613fd4565b6005546001600160a01b03908116911614611d7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b8015611e55576001600160a01b0382166000908152600e602052604090205460ff1615611de8576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b604482015290519081900360640190fd5b6008546040805162241fbd60e51b81526001600160a01b0385811660048301526001602483015291519190921691630483f7a091604480830192600092919082900301818387803b158015611e3c57600080fd5b505af1158015611e50573d6000803e3d6000fd5b505050505b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6009546001600160a01b031681565b6020546301000000900460ff1681565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b158015611ef657600080fd5b505af1158015611f0a573d6000803e3d6000fd5b505050506040513d6020811015611d0757600080fd5b6001600160a01b0381166000908152600d602052604090205460ff165b919050565b611f4a613fd4565b6005546001600160a01b03908116911614611f9a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60205462010000900460ff1681565b602054600160481b900460ff1681565b602054600160401b900460ff1681565b611ff3613fd4565b6005546001600160a01b03908116911614612043576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60185461205882670de0b6b3a76400006140c4565b601881905560408051838152602081019290925280517fab0ec7468909bac916971a36711bb7a453201e59940de1fb0be6acc303854ffd9281900390910190a15050565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611c0d57600080fd5b6120e9613fd4565b6005546001600160a01b03908116911614612139576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546001600160a01b03828116911614156121865760405162461bcd60e51b8152600401808060200182810382526023815260200180615c566023913960400191505060405180910390fd5b6001600160a01b0381166121cb5760405162461bcd60e51b8152600401808060200182810382526025815260200180615dbe6025913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b039081166000908152600c60209081526040808320805460ff1990811690915560095485168452600b83528184208054909116905584546001600160a01b0319168685161794859055805163c45a015560e01b8152905192949093169263c45a01559260048083019392829003018186803b15801561228f57600080fd5b505afa1580156122a3573d6000803e3d6000fd5b505050506040513d60208110156122b957600080fd5b5051600a546040805163e6a4390560e01b81523060048201526001600160a01b0392831660248201529051919092169163e6a43905916044808301926020929190829003018186803b15801561230e57600080fd5b505afa158015612322573d6000803e3d6000fd5b505050506040513d602081101561233857600080fd5b505190506001600160a01b03811661244857600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561239857600080fd5b505afa1580156123ac573d6000803e3d6000fd5b505050506040513d60208110156123c257600080fd5b5051600a54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b505050506040513d602081101561244357600080fd5b505190505b6001600160a01b038281166000908152600c602052604090208054600160ff199091168117909155600980546001600160a01b0319168484161790819055611d07921690614916565b612499613fd4565b6005546001600160a01b039081169116146124e9576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b828114612539576040805162461bcd60e51b8152602060048201526019602482015278105c9c985e481cda5e995cc81b5d5cdd08189948195c5d585b603a1b604482015290519081900360640190fd5b60005b838110156118de576000612573670de0b6b3a764000085858581811061255e57fe5b905060200201356140c490919063ffffffff16565b905061259b3387878581811061258557fe5b905060200201356001600160a01b03168361411d565b5060010161253c565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156125f557600080fd5b505afa158015612609573d6000803e3d6000fd5b505050506040513d602081101561261f57600080fd5b505192915050565b60205460ff1681565b6001600160a01b031660009081526020819052604090205490565b612653613fd4565b6005546001600160a01b039081169116146126a3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6005546040516000916001600160a01b031690600080516020615d7b833981519152908390a3600580546001600160a01b0319169055565b6126e3613fd4565b6005546001600160a01b03908116911614612733576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160481b90910416151581151514156127835760405162461bcd60e51b8152600401808060200182810382526028815260200180615cb26028913960400191505060405180910390fd5b60208054911515600160481b0260ff60481b19909216919091179055565b602054600160381b900460ff1681565b602054600160301b900460ff1681565b602054600160281b900460ff1681565b6127d9613fd4565b6005546001600160a01b03908116911614612829576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546001600160a01b03838116911614156128765760405162461bcd60e51b8152600401808060200182810382526039815260200180615c796039913960400191505060405180910390fd5b6001600160a01b0382166000908152600c602052604090205460ff16151581151514156128d45760405162461bcd60e51b815260040180806020018281038252603a815260200180615c1c603a913960400191505060405180910390fd5b6001600160a01b038281166000818152600c6020526040808220805460ff1916861515179055600854815162241fbd60e51b81526004810194909452602484018390529051931692630483f7a092604480820193929182900301818387803b15801561155c57600080fd5b612947613fd4565b6005546001600160a01b03908116911614612997576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b0381166129dc5760405162461bcd60e51b8152600401808060200182810382526023815260200180615a8c6023913960400191505060405180910390fd5b602080546001600160a01b03909216600160601b026001600160601b03909216919091179055565b612a0c613fd4565b6005546001600160a01b03908116911614612a5c576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612aa95760405162461bcd60e51b815260040180806020018281038252602d815260200180615eec602d913960400191505060405180910390fd5b6040805163064591a760e11b8152306004820152905182916001600160a01b03831691630c8b234e91602480820192602092909190829003018186803b158015612af257600080fd5b505afa158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5051612b595760405162461bcd60e51b8152600401808060200182810382526038815260200180615cda6038913960400191505060405180910390fd5b6040805162241fbd60e51b81526001600160a01b0383166004820181905260006024830181905292519092630483f7a0926044808201939182900301818387803b158015612ba657600080fd5b505af1158015612bba573d6000803e3d6000fd5b50506040805162241fbd60e51b815230600482015260006024820181905291516001600160a01b0386169450630483f7a093506044808301939282900301818387803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b50505050806001600160a01b0316630483f7a0612c38612e19565b60006040518363ffffffff1660e01b815260040180836001600160a01b03168152602001821515815260200192505050600060405180830381600087803b158015612c8257600080fd5b505af1158015612c96573d6000803e3d6000fd5b50506007546040805162241fbd60e51b81526001600160a01b03928316600482015260006024820181905291519286169450630483f7a093506044808201939182900301818387803b158015612ceb57600080fd5b505af1158015612cff573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b601f5481565b612d70613fd4565b6005546001600160a01b03908116911614612dc0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601d54612dd582670de0b6b3a76400006140c4565b601d81905560408051838152602081019290925280517f0273e0904ccd5aa39aadf810a8d0fc96671a08ba577fe49feab57fa1b6aad8309281900390910190a15050565b6005546001600160a01b031690565b612e30613fd4565b6005546001600160a01b03908116911614612e80576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601f54604080519182526020820183905280517f8c77526a6c0a7aa7cec23fef2dbb5958248deca84a91f836bd9e04a2aea4e6db9281900390910190a1601f55565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156116045780601f106115d957610100808354040283529160200191611604565b612f2b613fd4565b6005546001600160a01b03908116911614612f7b576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805491151563010000000263ff00000019909216919091179055565b60165481565b612fa7613fd4565b6005546001600160a01b03908116911614612ff7576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6009546001600160a01b03838116911614156130445760405162461bcd60e51b8152600401808060200182810382526035815260200180615e036035913960400191505060405180910390fd5b611d078282614916565b6001600160a01b0381166000908152600e602052604081205460ff16156130b2576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b602054600160481b900460ff1680156130e957506001600160a01b0382166000908152601260205260409020544262015180909101115b156130f657506000611f3d565b6130ff82612630565b90506000613118601a5442614a4890919063ffffffff16565b90506301dfe20081118061314557506001600160a01b0383166000908152600f602052604090205460ff16155b6131e95760006131558483614a8a565b9050601d548111613166578061316a565b601d545b6001600160a01b0385166000908152601060205260409020549091506131909082614a48565b61319985612630565b11156131dc576001600160a01b0384166000908152601060205260409020546131d5906131c69083614a48565b6131cf86612630565b90614a48565b92506131e7565b600092505050611f3d565b505b602054600160501b900460ff16801561322057506001600160a01b0383166000908152601260205260409020544262015180909101115b1561328d576001600160a01b038316600090815260136020526040812054601f54101561324e576000613273565b6001600160a01b038416600090815260136020526040902054601f5461327391614a48565b9050808311156132835780613285565b825b9250506132b6565b602054600160501b900460ff16156132b657601f548211156132b157601f546132b3565b815b91505b50919050565b6132c4613fd4565b6005546001600160a01b03908116911614613314576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b42601a5543601b556020805462ff000019169055565b613332613fd4565b6005546001600160a01b03908116911614613382576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6007546040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b1580156133c757600080fd5b505afa1580156133db573d6000803e3d6000fd5b505050506040513d60208110156133f157600080fd5b5051600a54604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b15801561344857600080fd5b505af115801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b5051600980546001600160a01b0319166001600160a01b0380841691909117918290559192506134a491166001614916565b50565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611c0d57600080fd5b60006116226134f9613fd4565b8461195d85604051806060016040528060258152602001615ec76025913960016000613523613fd4565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906147ad565b60145481565b602054600160501b900460ff1681565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b1580156125f557600080fd5b60006116226135c8613fd4565b848461411d565b600f6020526000908152604090205460ff1681565b6008546040805163fbcbc0f160e01b81526001600160a01b038481166004830152915160009384938493849384938493169163fbcbc0f19160248083019260c0929190829003018186803b15801561363b57600080fd5b505afa15801561364f573d6000803e3d6000fd5b505050506040513d60c081101561366557600080fd5b508051602082015160408301516060840151608085015160a090950151939c929b5090995097509195509350915050565b600a546001600160a01b031681565b6136ad613fd4565b6005546001600160a01b039081169116146136fd576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60205460ff600160401b909104161515811515141561374d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d9b6023913960400191505060405180910390fd5b60208054911515600160401b0260ff60401b19909216919091179055565b600b6020526000908152604090205460ff1681565b613788613fd4565b6005546001600160a01b039081169116146137d8576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600d602052604090205460ff1615158115151415613849576040805162461bcd60e51b815260206004820152601a6024820152794163636f756e7420616c726561647920276578636c756465642760301b604482015290519081900360640190fd5b6001600160a01b0382166000818152600d6020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b6138b1613fd4565b6005546001600160a01b03908116911614613901576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6014839055601682905560158190556139248161391e8585613f75565b90613f75565b601981905560145460165460155460408051938452602084019290925282820152606082019290925290517f7027e29faa2460f22e800d92db38d4795b668c7104da6b87afaeaf502a269ca59181900360800190a1505050565b601e5481565b61398c613fd4565b6005546001600160a01b039081169116146139dc576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613a215760405162461bcd60e51b8152600401808060200182810382526023815260200180615ea46023913960400191505060405180910390fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b613a51613fd4565b6005546001600160a01b03908116911614613aa1576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b601c54613ab683670de0b6b3a76400006140c4565b601c81905560208054841515600160201b90810260ff60201b199092169190911780835560408051868152938401949094520460ff1615158183015290517fd6d1ec2dffd2df16cb6d0859837b49920203bb429cc368ce9eab6df4d60e94399181900360600190a1505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6006546001600160a01b031690565b613b65613fd4565b6005546001600160a01b03908116911614613bb5576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6020805460ff1916911515919091179055565b60185481565b601b5481565b601c5481565b60085460408051632f842d8560e21b815290516000926001600160a01b03169163be10b614916004808301926020929190829003018186803b158015611c0d57600080fd5b613c27613fd4565b6005546001600160a01b03908116911614613c77576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b1580156118ca57600080fd5b602054610100900460ff1681565b613cda613fd4565b6005546001600160a01b03908116911614613d2a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613d6f5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e816023913960400191505060405180910390fd5b602280546001600160a01b0319166001600160a01b0392909216919091179055565b613d99613fd4565b6005546001600160a01b03908116911614613de9576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b60208054911515600160381b0260ff60381b19909216919091179055565b613e0f613fd4565b6005546001600160a01b03908116911614613e5f576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b6001600160a01b038116613ea45760405162461bcd60e51b8152600401808060200182810382526026815260200180615b496026913960400191505060405180910390fd5b6005546040516001600160a01b03808416921690600080516020615d7b83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b613ef6613fd4565b6005546001600160a01b03908116911614613f46576040805162461bcd60e51b81526020600482018190526024820152600080516020615d5b833981519152604482015290519081900360640190fd5b602080549115156101000261ff0019909216919091179055565b600e6020526000908152604090205460ff1681565b600082820183811015613fcd576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b03831661401d5760405162461bcd60e51b8152600401808060200182810382526024815260200180615e5d6024913960400191505060405180910390fd5b6001600160a01b0382166140625760405162461bcd60e51b8152600401808060200182810382526022815260200180615b6f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000826140d357506000611626565b828202828482816140e057fe5b0414613fcd5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d126021913960400191505060405180910390fd5b6001600160a01b0383166141625760405162461bcd60e51b8152600401808060200182810382526025815260200180615e386025913960400191505060405180910390fd5b6001600160a01b0382166141a75760405162461bcd60e51b8152600401808060200182810382526023815260200180615aaf6023913960400191505060405180910390fd5b6001600160a01b0383166000908152600e602052604090205460ff161580156141e957506001600160a01b0382166000908152600e602052604090205460ff16155b80156142055750326000908152600e602052604090205460ff16155b61424c576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b614254612e19565b6001600160a01b0316836001600160a01b0316146142bb5760205462010000900460ff16156142bb576040805162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99c81c185d5cd95960921b604482015290519081900360640190fd5b6142c3612e19565b6001600160a01b0316836001600160a01b0316141580156142fd57506142e7612e19565b6001600160a01b0316826001600160a01b031614155b1561430d5761430d838383614c57565b326000908152600e602052604090205460ff161561432a576147a8565b600061433584612630565b9050600061434e601a5442614a4890919063ffffffff16565b90506301dfe2008111156143a3576001600160a01b0385166000908152600f602052604090205460ff161561439e576001600160a01b0385166000908152600f60205260409020805460ff191690555b614478565b60006143af8683614a8a565b6001600160a01b0386166000908152600b602052604090205490915060ff16806143f157506001600160a01b0385166000908152600c602052604090205460ff165b1561440c57601d5481116144055780614409565b601d545b90505b6001600160a01b03861660009081526010602052604090205461442f9082614a48565b6144398486614a48565b10156144765760405162461bcd60e51b8152600401808060200182810382526032815260200180615ad26032913960400191505060405180910390fd5b505b82614490576144898585600061549c565b50506147a8565b600061449b30612630565b6018546020549192508210159060ff1680156144c15750602054600160581b900460ff16155b80156144e657506001600160a01b0387166000908152600b602052604090205460ff16155b80156144ef5750805b1561451e576020805460ff60581b1916600160581b179055614510826155da565b6020805460ff60581b191690555b602080546001600160a01b0389166000908152600d90925260409091205460ff600160581b90920482161591168061456e57506001600160a01b0387166000908152600d602052604090205460ff165b806145835750602054600160401b900460ff16155b1561458c575060005b80156146b15760006145b460646145ae6019548a6140c490919063ffffffff16565b90615752565b90506145be612e19565b6001600160a01b0316896001600160a01b0316141580156145e857506001600160a01b0389163014155b801561467657506001600160a01b0389166000908152600b602052604090205460ff168061462e57506001600160a01b0388166000908152600b602052604090205460ff165b8061465157506001600160a01b0389166000908152600c602052604090205460ff165b8061467457506001600160a01b0388166000908152600c602052604090205460ff165b155b156146985761469560646145ae601e548a6140c490919063ffffffff16565b90505b6146a28782614a48565b96506146af89308361549c565b505b6146bc88888861549c565b6008546001600160a01b031663e30443bc896146d781612630565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561471d57600080fd5b505af192505050801561472e575060015b506008546001600160a01b031663e30443bc8861474a81612630565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561479057600080fd5b505af19250505080156147a1575060015b5050505050505b505050565b6000818484111561483c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148015781810151838201526020016147e9565b50505050905090810190601f16801561482e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03821661489f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6002546148ac9082613f75565b6002556001600160a01b0382166000908152602081905260409020546148d29082613f75565b6001600160a01b038316600081815260208181526040808320949094558351858152935192939192600080516020615de38339815191529281900390910190a35050565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156149745760405162461bcd60e51b8152600401808060200182810382526038815260200180615b916038913960400191505060405180910390fd5b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155614a0c576008546040805162241fbd60e51b81526001600160a01b0385811660048301526000602483018190529251931692630483f7a09260448084019391929182900301818387803b1580156149f357600080fd5b505af1158015614a07573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000613fcd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506147ad565b6001600160a01b0382166000908152600f602052604081205460ff1615611626576001600160a01b03831660009081526010602052604090205462015180831015614ad85760009150614c50565b6224ea00831015614afa57614af3600a6145ae8360026140c4565b9150614c50565b6249d400831015614b1557614af360646145ae8360196140c4565b626ebe00831015614b3057614af360646145ae83601e6140c4565b6293a800831015614b4b57614af360646145ae8360236140c4565b62b89200831015614b6657614af360646145ae8360186140c4565b62dd7c00831015614b8157614af360646145ae83602d6140c4565b6301026600831015614b9857614af3816002615752565b6301275000831015614bb457614af360646145ae8360386140c4565b63014c3a00831015614bd057614af360646145ae83603e6140c4565b6301712400831015614bec57614af360646145ae8360446140c4565b6301960e00831015614c0857614af360646145ae83604c6140c4565b6301baf800831015614c2457614af360646145ae8360546140c4565b6301dfe200831015614c4057614af360646145ae83605c6140c4565b6301dfe200831115614c50578091505b5092915050565b602054600160481b900460ff168015614c8857506001600160a01b0382166000908152600b602052604090205460ff165b15614d11574260126000614c9a613fd4565b6001600160a01b03166001600160a01b031681526020019081526020016000205462015180011115614d11576040805162461bcd60e51b815260206004820152601b60248201527a13db99481cd95b1b081c195c8819185e481a5cc8185b1b1bddd959602a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff1615614dec574260126000614d3f613fd4565b6001600160a01b03166001600160a01b0316815260200190815260200160002054620151800110614d9c578060136000614d77613fd4565b6001600160a01b03168152602081019190915260400160002080549091019055614dc4565b8060136000614da9613fd4565b6001600160a01b031681526020810191909152604001600020555b4260126000614dd1613fd4565b6001600160a01b031681526020810191909152604001600020555b602054600160501b900460ff1615614e6b57601f5460136000614e0d613fd4565b6001600160a01b03166001600160a01b03168152602001908152602001600020541115614e6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615b046021913960400191505060405180910390fd5b6020546301000000900460ff1615614edc576001600160a01b0383163014614edc57601754811115614edc576040805162461bcd60e51b8152602060048201526015602482015274195e18d959591cc81b585e081d1e08185b5bdd5b9d605a1b604482015290519081900360640190fd5b602054600160301b900460ff1615615000576001600160a01b0383163014801590614f1057506001600160a01b0382163014155b8015614f3557506001600160a01b0382166000908152600c602052604090205460ff16155b8015614f5a57506001600160a01b0382166000908152600b602052604090205460ff16155b156150005760116000614f6b613fd4565b6001600160a01b03166001600160a01b0316815260200190815260200160002054601e01421015614fd8576040805162461bcd60e51b815260206004820152601260248201527110dbdbdb191bdddb881a5b881959999958dd60721b604482015290519081900360640190fd5b4260116000614fe5613fd4565b6001600160a01b031681526020810191909152604001600020555b602054600160281b900460ff1615615314576001600160a01b0383166000908152600b602052604090205460ff16801561505357506001600160a01b0382166000908152600c602052604090205460ff16155b801561506857506001600160a01b0382163014155b801561507d57506001600160a01b0383163014155b1561509757326001600160a01b0383161461509757600080fd5b601b54600401431161531457326000818152600e60205260409020805460ff191660011790556001600160a01b038416148015906150de5750326001600160a01b03831614155b1561514e576008546040805162241fbd60e51b81523260048201526001602482015290516001600160a01b0390921691630483f7a09160448082019260009290919082900301818387803b15801561513557600080fd5b505af1158015615149573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152600b602052604090205460ff1615801561519057506001600160a01b0383166000908152600c602052604090205460ff16155b80156151a557506001600160a01b0383163014155b15615231576001600160a01b038084166000818152600e6020526040808220805460ff19166001908117909155600854825162241fbd60e51b8152600481019590955260248501919091529051931692630483f7a092604480820193929182900301818387803b15801561521857600080fd5b505af115801561522c573d6000803e3d6000fd5b505050505b6001600160a01b0382166000908152600b602052604090205460ff1615801561527357506001600160a01b0382166000908152600c602052604090205460ff16155b801561528857506001600160a01b0382163014155b15615314576001600160a01b038083166000818152600e6020526040808220805460ff19166001908117909155600854825162241fbd60e51b8152600481019590955260248501919091529051931692630483f7a092604480820193929182900301818387803b1580156152fb57600080fd5b505af115801561530f573d6000803e3d6000fd5b505050505b602054600160201b900460ff161561539e576001600160a01b0383166000908152600b602052604090205460ff16801561535c57506007546001600160a01b03838116911614155b801561537157506001600160a01b0382163014155b1561539e57600061538183612630565b601c549091506153918284613f75565b111561539c57600080fd5b505b602054600160381b900460ff16156147a8576001600160a01b03831630148015906153d257506001600160a01b0382163014155b156147a8576001600160a01b0383166000908152600b602052604090205460ff168061541657506001600160a01b0382166000908152600b602052604090205460ff165b8061543957506001600160a01b0383166000908152600c602052604090205460ff165b8061545c57506001600160a01b0382166000908152600c602052604090205460ff165b6147a8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f207472616e736665727360a01b604482015290519081900360640190fd5b6001600160a01b0383166154e15760405162461bcd60e51b8152600401808060200182810382526025815260200180615e386025913960400191505060405180910390fd5b6001600160a01b0382166155265760405162461bcd60e51b8152600401808060200182810382526023815260200180615aaf6023913960400191505060405180910390fd5b61556381604051806060016040528060268152602001615bc9602691396001600160a01b03861660009081526020819052604090205491906147ad565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546155929082613f75565b6001600160a01b03808416600081815260208181526040918290209490945580518581529051919392871692600080516020615de383398151915292918290030190a3505050565b60006155f76019546145ae601654856140c490919063ffffffff16565b90506000615606826002615752565b905060006156148483614a48565b90504761562082615791565b600061562c4783614a48565b9050600061565060026145ae6019546145ae601654876140c490919063ffffffff16565b9050600061567460036145ae6019546145ae601554886140c490919063ffffffff16565b602054604051919250600160601b90046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156156b6573d6000803e3d6000fd5b506021546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156156f1573d6000803e3d6000fd5b506022546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561572c573d6000803e3d6000fd5b5061573786836158c0565b6020544790610100900460ff16156147a1576147a181615993565b6000613fcd83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250615a26565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106157c057fe5b6001600160a01b039283166020918202929092010152600a548251911690829060019081106157eb57fe5b6001600160a01b0392831660209182029290920101526007546158119130911684613fd8565b60075460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561589757818101518382015260200161587f565b505050509050019650505050505050600060405180830381600087803b15801561155c57600080fd5b6007546158d89030906001600160a01b031684613fd8565b6007546001600160a01b031663f305d7198230856000806158f7612e19565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b15801561596257600080fd5b505af1158015615976573d6000803e3d6000fd5b50505050506040513d606081101561598d57600080fd5b50505050565b6008546040516000916001600160a01b03169083908381818185875af1925050503d80600081146159e0576040519150601f19603f3d011682016040523d82523d6000602084013e6159e5565b606091505b505090508015611d07576040805183815290517fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b19181900360200190a15050565b60008183615a755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156148015781810151838201526020016147e9565b506000838581615a8157fe5b049594505050505056fe412077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f45524332303a207472616e7366657220746f20746865207a65726f206164647265737343616e277420627970617373207665737420616e642063616e2774206279706173732076657374656453656c6c4c696d69744d6178206461696c792073656c6c20616d6f756e742077617320726561636865644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726d696e744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c756545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655570646174696e6720746f2063757272656e742076616c75652c20656e61626c654d61784461696c7953656c6c4175746f6d61746564206d61726b6574206d616b657220726f7574657220697320616c72656164792073657420746f20746861742076616c756554686520726f7574657220616c72656164792068617320746861742061646472657373526f757465722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572526f75746572735570646174696e6720746f2063757272656e742076616c75652c206461696c79436f6f6c446f776e546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746f6b656e20636f6e7472616374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05570646174696e6720746f2063757272656e742076616c75652c2074616b65466565734e657720726f757465722073686f756c64206e6f742062652061646472657373207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef506169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373432077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f422077616c6c65742073686f756c64206e6f742062652061646472657373207a65726f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373a26469706673582212200af6e3e41b822daf2089a6a80cc8612e1de33fcd4c58631fcf90f0feda6b871864736f6c63430007060033

Deployed Bytecode Sourcemap

16885:29622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26696:310;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26696:310:0;;;;:::i;:::-;;30083:337;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30083:337:0;;;;;;;;;;:::i;6883:102::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7948:212;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7948:212:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33540:219;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33540:219:0;;:::i;1253:154::-;;;;;;;;;;;;;:::i;18539:30::-;;;;;;;;;;;;;:::i;18152:24::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16968:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16968:41:0;;;;;;;;;;;;;;33346:83;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33346:83:0;;;;:::i;7210:108::-;;;;;;;;;;;;;:::i;29013:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29013:136:0;;:::i;8168:456::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8168:456:0;;;;;;;;;;;;;;;;;:::i;32952:89::-;;;;;;;;;;;;;:::i;24963:514::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24963:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24963:514:0;;;;;;;;;;;;-1:-1:-1;24963:514:0;-1:-1:-1;24963:514:0;;:::i;17016:40::-;;;;;;;;;;;;;:::i;1706:331::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1706:331:0;-1:-1:-1;;;;;1706:331:0;;:::i;29423:141::-;;;;;;;;;;;;;:::i;7107:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17744:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17744:46:0;-1:-1:-1;;;;;17744:46:0;;:::i;8632:302::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8632:302:0;;;;;;;;:::i;18294:30::-;;;;;;;;;;;;;:::i;21934:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21934:105:0;;;;;;;;:::i;18183:29::-;;;;;;;;;;;;;:::i;17515:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17515:59:0;-1:-1:-1;;;;;17515:59:0;;:::i;28581:292::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28581:292:0;;;;;;;;;;:::i;17065:28::-;;;;;;;;;;;;;:::i;18508:24::-;;;;;;;;;;;;;:::i;30851:103::-;;;;;;;;;;;;;:::i;29572:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29572:128:0;-1:-1:-1;;;;;29572:128:0;;:::i;22047:82::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22047:82:0;-1:-1:-1;;;;;22047:82:0;;:::i;18483:18::-;;;;;;;;;;;;;:::i;18691:25::-;;;;;;;;;;;;;:::i;18664:20::-;;;;;;;;;;;;;:::i;33767:299::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33767:299:0;;:::i;30962:142::-;;;;;;;;;;;;;:::i;23147:1062::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23147:1062:0;-1:-1:-1;;;;;23147:1062:0;;:::i;24360:452::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24360:452:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24360:452:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24360:452:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24360:452:0;;;;;;;;;;-1:-1:-1;24360:452:0;;-1:-1:-1;24360:452:0;-1:-1:-1;24360:452:0;:::i;29902:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29902:173:0;-1:-1:-1;;;;;29902:173:0;;:::i;18414:23::-;;;;;;;;;;;;;:::i;7326:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7326:177:0;-1:-1:-1;;;;;7326:177:0;;:::i;1095:150::-;;;;;;;;;;;;;:::i;27014:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27014:247:0;;;;:::i;18634:23::-;;;;;;;;;;;;;:::i;18607:20::-;;;;;;;;;;;;;:::i;18576:24::-;;;;;;;;;;;;;:::i;27269:548::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27269:548:0;;;;;;;;;;:::i;31112:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31112:188:0;-1:-1:-1;;;;;31112:188:0;;:::i;22137:1002::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22137:1002:0;-1:-1:-1;;;;;22137:1002:0;;:::i;18366:39::-;;;;;;;;;;;;;:::i;32062:247::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32062:247:0;;:::i;608:79::-;;;;;;;;;;;;;:::i;26433:255::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26433:255:0;;:::i;6993:106::-;;;;;;;;;;;;;:::i;33437:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33437:95:0;;;;:::i;18044:27::-;;;;;;;;;;;;;:::i;27825:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27825:300:0;;;;;;;;;;:::i;35979:1593::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35979:1593:0;-1:-1:-1;;;;;35979:1593:0;;:::i;33049:170::-;;;;;;;;;;;;;:::i;25596:329::-;;;;;;;;;;;;;:::i;29306:109::-;;;;;;;;;;;;;:::i;8942:402::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8942:402:0;;;;;;;;:::i;17974:31::-;;;;;;;;;;;;;:::i;18723:30::-;;;;;;;;;;;;;:::i;29708:186::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29708:186:0;-1:-1:-1;;;;;29708:186:0;;:::i;7511:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7511:218:0;;;;;;;;:::i;17692:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17692:45:0;-1:-1:-1;;;;;17692:45:0;;:::i;30428:415::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30428:415:0;-1:-1:-1;;;;;30428:415:0;;:::i;:::-;;;;-1:-1:-1;;;;;30428:415:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17244:64;;;;;;;;;;;;;:::i;26250:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26250:175:0;;;;:::i;17451:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17451:57:0;-1:-1:-1;;;;;17451:57:0;;:::i;25933:309::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25933:309:0;;;;;;;;;;:::i;32317:425::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32317:425:0;;;;;;;;;;;;:::i;18331:28::-;;;;;;;;;;;;;:::i;31308:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31308:190:0;-1:-1:-1;;;;;31308:190:0;;:::i;18012:25::-;;;;;;;;;;;;;:::i;31704:350::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31704:350:0;;;;;;;;;:::i;7737:203::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7737:203:0;;;;;;;;;;:::i;695:89::-;;;;;;;;;;;;;:::i;32750:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32750:93:0;;;;:::i;18112:33::-;;;;;;;;;;;;;:::i;18219:35::-;;;;;;;;;;;;;:::i;18261:26::-;;;;;;;;;;;;;:::i;29157:141::-;;;;;;;;;;;;;:::i;28881:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28881:124:0;;:::i;18444:32::-;;;;;;;;;;;;;:::i;31506:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31506:190:0;-1:-1:-1;;;;;31506:190:0;;:::i;32851:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32851:93:0;;;;:::i;1415:283::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1415:283:0;-1:-1:-1;;;;;1415:283:0;;:::i;33227:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33227:111:0;;;;:::i;17640:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17640:45:0;-1:-1:-1;;;;;17640:45:0;;:::i;26696:310::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;26833:18:::1;::::0;::::1;-1:-1:-1::0;;;26833:18:0;;::::1;;:41;;::::0;::::1;;;;26811:136;;;;-1:-1:-1::0;;;26811:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26958:18;:40:::0;;;::::1;;-1:-1:-1::0;;;26958:40:0::1;-1:-1:-1::0;;;;26958:40:0;;::::1;::::0;;;::::1;::::0;;26696:310::o;30083:337::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;30231:15:::1;::::0;:46:::1;::::0;;-1:-1:-1;;;30231:46:0;;-1:-1:-1;;;;;30231:46:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:37:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;:15;:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30231:46:0;30229:49:::1;30207:130;;;::::0;;-1:-1:-1;;;30207:130:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30348:15;::::0;:64:::1;::::0;;-1:-1:-1;;;30348:64:0;;-1:-1:-1;;;;;30348:64:0;;::::1;;::::0;::::1;::::0;;::::1;;::::0;;;;;;:15;;;::::1;::::0;:36:::1;::::0;:64;;;;;:15:::1;::::0;:64;;;;;;;:15;;:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30083:337:::0;;:::o;6883:102::-;6972:5;6965:12;;;;;;;;-1:-1:-1;;6965:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6939:13;;6965:12;;6972:5;;6965:12;;6972:5;6965:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6883:102;:::o;7948:212::-;8069:4;8091:39;8100:12;:10;:12::i;:::-;8114:7;8123:6;8091:8;:39::i;:::-;-1:-1:-1;8148:4:0;7948:212;;;;;:::o;33540:219::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33636:11:::1;::::0;33672:16:::1;:7:::0;17132:6:::1;33672:11;:16::i;:::-;33658:11;:30:::0;;;33704:47:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;902:1;33540:219:::0;:::o;1253:154::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;1362:6:::1;::::0;1350:10:::1;::::0;1329:40:::1;::::0;-1:-1:-1;;;;;1362:6:0;;::::1;::::0;1350:10;;::::1;::::0;-1:-1:-1;;;;;;;;;;;1329:40:0;1362:6:::1;::::0;1329:40:::1;1393:6;::::0;1380:10:::1;:19:::0;;-1:-1:-1;;;;;;1380:19:0::1;-1:-1:-1::0;;;;;1393:6:0;;::::1;1380:19:::0;;;::::1;::::0;;1253:154::o;18539:30::-;;;-1:-1:-1;;;18539:30:0;;;;;:::o;18152:24::-;;;;:::o;16968:41::-;;;-1:-1:-1;;;;;16968:41:0;;:::o;33346:83::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33407:6:::1;:14:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33407:14:0;;::::1;::::0;;;::::1;::::0;;33346:83::o;7210:108::-;7298:12;;7210:108;:::o;29013:136::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;29093:15:::1;::::0;:48:::1;::::0;;-1:-1:-1;;;29093:48:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;29093:15:0;;::::1;::::0;:34:::1;::::0;:48;;;;;:15:::1;::::0;:48;;;;;;;;:15;;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29013:136:::0;:::o;8168:456::-;8310:4;8327:36;8337:6;8345:9;8356:6;8327:9;:36::i;:::-;8374:220;8397:6;8418:12;:10;:12::i;:::-;8445:138;8501:6;8445:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8445:19:0;;;;;;:11;:19;;;;;;8465:12;:10;:12::i;:::-;-1:-1:-1;;;;;8445:33:0;;;;;;;;;;;;-1:-1:-1;8445:33:0;;;:138;:37;:138::i;:::-;8374:8;:220::i;:::-;-1:-1:-1;8612:4:0;8168:456;;;;;:::o;32952:89::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33013:12:::1;:20:::0;;-1:-1:-1;;;;33013:20:0::1;::::0;;32952:89::o;24963:514::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;25092:9:::1;::::0;25134:15:::1;:6:::0;17132::::1;25134:10;:15::i;:::-;25116:33;;25160:310;25167:26:::0;;::::1;25160:310;;;25210:19;25232:15;;25248:1;25232:18;;;;;;;;;;;;;-1:-1:-1::0;;;;;25232:18:0::1;25210:40;;25265:43;25275:10;25287:11;25300:7;25265:9;:43::i;:::-;-1:-1:-1::0;;;;;25350:24:0;::::1;;::::0;;;:11:::1;:24;::::0;;;;;:37:::1;::::0;25379:7;25350:28:::1;:37::i;:::-;-1:-1:-1::0;;;;;25323:24:0;;::::1;;::::0;;;:11:::1;:24;::::0;;;;;;;:64;;;;25402:13:::1;:26:::0;;;:33;;-1:-1:-1;;25402:33:0::1;25431:4;25402:33:::0;;::::1;::::0;;;25452:6;;;::::1;::::0;25160:310:::1;;17016:40:::0;;;-1:-1:-1;;;;;17016:40:0;;:::o;1706:331::-;991:12;:10;:12::i;:::-;977:10;;-1:-1:-1;;;;;977:10:0;;;:26;;;955:112;;;;-1:-1:-1;;;955:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1851:22:0;::::1;1829:110;;;;-1:-1:-1::0;;;1829:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1976:10;::::0;1955:42:::1;::::0;-1:-1:-1;;;;;1955:42:0;;::::1;::::0;1976:10:::1;::::0;-1:-1:-1;;;;;;;;;;;1955:42:0;1976:10:::1;::::0;1955:42:::1;2008:10;:21:::0;;-1:-1:-1;;;;;;2008:21:0::1;-1:-1:-1::0;;;;;2008:21:0;;;::::1;::::0;;;::::1;::::0;;1706:331::o;29423:141::-;29513:15;;:43;;;-1:-1:-1;;;29513:43:0;;;;29486:7;;-1:-1:-1;;;;;29513:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29513:43:0;;-1:-1:-1;29423:141:0;:::o;7107:95::-;7192:2;7107:95;:::o;17744:46::-;;;;;;;;;;;;;:::o;8632:302::-;8749:4;8771:133;8794:12;:10;:12::i;:::-;8821:7;8843:50;8882:10;8843:11;:25;8855:12;:10;:12::i;:::-;-1:-1:-1;;;;;8843:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;8843:25:0;;;:34;;;;;;;;;;;:38;:50::i;18294:30::-;;;;:::o;21934:105::-;991:12;:10;:12::i;:::-;977:10;;-1:-1:-1;;;;;977:10:0;;;:26;;;955:112;;;;-1:-1:-1;;;955:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22012:19:::1;22018:3;22023:7;22012:5;:19::i;:::-;21934:105:::0;;:::o;18183:29::-;;;;:::o;17515:59::-;;;;;;;;;;;;;;;:::o;28581:292::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;28670:5:::1;28666:159;;;-1:-1:-1::0;;;;;28701:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;28700:23;28692:55;;;::::0;;-1:-1:-1;;;28692:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28692:55:0;;;;;;;;;;;;;::::1;;28762:15;::::0;:51:::1;::::0;;-1:-1:-1;;;28762:51:0;;-1:-1:-1;;;;;28762:51:0;;::::1;;::::0;::::1;::::0;:15;:51;;;;;;:15;;;::::1;::::0;:36:::1;::::0;:51;;;;;:15:::1;::::0;:51;;;;;;;:15;;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28666:159;-1:-1:-1::0;;;;;28835:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;28835:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28581:292::o;17065:28::-;;;-1:-1:-1;;;;;17065:28:0;;:::o;18508:24::-;;;;;;;;;:::o;30851:103::-;30888:15;;:58;;;-1:-1:-1;;;30888:58:0;;30927:10;30888:58;;;;:15;:58;;;;;;;;-1:-1:-1;;;;;30888:15:0;;;;:30;;:58;;;;;;;;;;;;;;;;;;:15;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29572:128;-1:-1:-1;;;;;29664:28:0;;29640:4;29664:28;;;:19;:28;;;;;;;;29572:128;;;;:::o;22047:82::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;22109:4:::1;:12:::0;;-1:-1:-1;;;;;;22109:12:0::1;-1:-1:-1::0;;;;;22109:12:0;;;::::1;::::0;;;::::1;::::0;;22047:82::o;18483:18::-;;;;;;;;;:::o;18691:25::-;;;-1:-1:-1;;;18691:25:0;;;;;:::o;18664:20::-;;;-1:-1:-1;;;18664:20:0;;;;;:::o;33767:299::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33871:18:::1;::::0;33921:16:::1;:7:::0;17132:6:::1;33921:11;:16::i;:::-;33900:18;:37:::0;;;33953:105:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;902:1;33767:299:::0;:::o;30962:142::-;31055:15;;:41;;;-1:-1:-1;;;31055:41:0;;;;31028:7;;-1:-1:-1;;;;;31055:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;23147:1062;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;23270:15:::1;::::0;-1:-1:-1;;;;;23248:38:0;;::::1;23270:15:::0;::::1;23248:38;;23226:123;;;;-1:-1:-1::0;;;23226:123:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;23382:24:0;::::1;23360:111;;;;-1:-1:-1::0;;;23360:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23529:15;::::0;23487:59:::1;::::0;-1:-1:-1;;;;;23529:15:0;;::::1;::::0;23487:59;::::1;::::0;::::1;::::0;23529:15:::1;::::0;23487:59:::1;23593:15;::::0;;-1:-1:-1;;;;;23593:15:0;;::::1;23613:5;23557:53:::0;;;:27:::1;:53;::::0;;;;;;;:61;;-1:-1:-1;;23557:61:0;;::::1;::::0;;;23655:13:::1;::::0;;::::1;23629:40:::0;;:25:::1;:40:::0;;;;;:48;;;;::::1;::::0;;23688;;-1:-1:-1;;;;;;23688:48:0::1;::::0;;::::1;;::::0;;;;23790:25;;-1:-1:-1;;;23790:25:0;;;;23613:5;;23790:15;;::::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;23557:53;23790:25;;;;;:15;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23790:25:0;23854:4:::1;::::0;23772:87:::1;::::0;;-1:-1:-1;;;23772:87:0;;23847:4:::1;23772:87;::::0;::::1;::::0;-1:-1:-1;;;;;23854:4:0;;::::1;23772:87:::0;;;;;;:66;;;::::1;::::0;::::1;::::0;:87;;;;;23790:25:::1;::::0;23772:87;;;;;;;:66;:87;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23772:87:0;;-1:-1:-1;;;;;;23874:30:0;::::1;23870:174;;23956:15;;;;;;;;;-1:-1:-1::0;;;;;23956:15:0::1;-1:-1:-1::0;;;;;23956:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23956:25:0;24027:4:::1;::::0;23938:94:::1;::::0;;-1:-1:-1;;;23938:94:0;;24020:4:::1;23938:94;::::0;::::1;::::0;-1:-1:-1;;;;;24027:4:0;;::::1;23938:94:::0;;;;;;:73;;;::::1;::::0;::::1;::::0;:94;;;;;23956:25:::1;::::0;23938:94;;;;;;;24027:4:::1;23938:73:::0;:94;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23938:94:0;;-1:-1:-1;23870:174:0::1;-1:-1:-1::0;;;;;24054:39:0;;::::1;;::::0;;;:27:::1;:39;::::0;;;;:46;;24096:4:::1;-1:-1:-1::0;;24054:46:0;;::::1;::::0;::::1;::::0;;;24111:13:::1;:30:::0;;-1:-1:-1;;;;;;24111:30:0::1;::::0;;::::1;;::::0;;;;24152:49:::1;::::0;24181:13:::1;::::0;24152:28:::1;:49::i;24360:452::-:0;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;24510:34;;::::1;24488:109;;;::::0;;-1:-1:-1;;;24488:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24488:109:0;;;;;;;;;;;;;::::1;;24608:9;24632:173;24639:20:::0;;::::1;24632:173;;;24676:15;24694:19;17132:6;24694:7;;24702:1;24694:10;;;;;;;;;;;;;:14;;:19;;;;:::i;:::-;24676:37;;24728:44;24738:10;24750:9;;24760:1;24750:12;;;;;;;;;;;;;-1:-1:-1::0;;;;;24750:12:0::1;24764:7;24728:9;:44::i;:::-;-1:-1:-1::0;24792:1:0::1;24787:6;24632:173;;29902::::0;30033:15;;:34;;;-1:-1:-1;;;30033:34:0;;-1:-1:-1;;;;;30033:34:0;;;;;;;;;30001:7;;30033:15;;;;;:25;;:34;;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30033:34:0;;29902:173;-1:-1:-1;;29902:173:0:o;18414:23::-;;;;;;:::o;7326:177::-;-1:-1:-1;;;;;7477:18:0;7445:7;7477:18;;;;;;;;;;;;7326:177::o;1095:150::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;1188:6:::1;::::0;1167:40:::1;::::0;1204:1:::1;::::0;-1:-1:-1;;;;;1188:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;1167:40:0;1204:1;;1167:40:::1;1218:6;:19:::0;;-1:-1:-1;;;;;;1218:19:0::1;::::0;;1095:150::o;27014:247::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;27113:13:::1;::::0;::::1;-1:-1:-1::0;;;27113:13:0;;::::1;;:31;;::::0;::::1;;;;27091:121;;;;-1:-1:-1::0;;;27091:121:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27223:13;:30:::0;;;::::1;;-1:-1:-1::0;;;27223:30:0::1;-1:-1:-1::0;;;;27223:30:0;;::::1;::::0;;;::::1;::::0;;27014:247::o;18634:23::-;;;-1:-1:-1;;;18634:23:0;;;;;:::o;18607:20::-;;;-1:-1:-1;;;18607:20:0;;;;;:::o;18576:24::-;;;-1:-1:-1;;;18576:24:0;;;;;:::o;27269:548::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;27429:15:::1;::::0;-1:-1:-1;;;;;27411:34:0;;::::1;27429:15:::0;::::1;27411:34;;27389:141;;;;-1:-1:-1::0;;;27389:141:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27563:35:0;::::1;;::::0;;;:27:::1;:35;::::0;;;;;::::1;;:44;;::::0;::::1;;;;27541:152;;;;-1:-1:-1::0;;;27541:152:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27704:35:0;;::::1;;::::0;;;:27:::1;:35;::::0;;;;;:43;;-1:-1:-1;;27704:43:0::1;::::0;::::1;;;::::0;;27758:15:::1;::::0;:51;;-1:-1:-1;;;27758:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;:15;::::1;::::0;:36:::1;::::0;:51;;;;;27704:35;27758:51;;;;;;27704:35;27758:15;:51;::::1;;::::0;::::1;;;;::::0;::::1;31112:188:::0;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31189:23:0;::::1;31181:71;;;;-1:-1:-1::0;;;31181:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31263:8;:29:::0;;-1:-1:-1;;;;;31263:29:0;;::::1;-1:-1:-1::0;;;31263:29:0::1;-1:-1:-1::0;;;;;31263:29:0;;::::1;::::0;;;::::1;::::0;;31112:188::o;22137:1002::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;22262:15:::1;::::0;-1:-1:-1;;;;;22240:38:0;;::::1;22262:15:::0;::::1;22240:38;;22218:133;;;;-1:-1:-1::0;;;22218:133:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22496:48;::::0;;-1:-1:-1;;;22496:48:0;;22538:4:::1;22496:48;::::0;::::1;::::0;;;22441:10;;-1:-1:-1;;;;;22496:33:0;::::1;::::0;::::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22496:48:0;22474:154:::1;;;;-1:-1:-1::0;;;22474:154:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22639:112;::::0;;-1:-1:-1;;;22639:112:0;;-1:-1:-1;;;;;22639:39:0;::::1;:112;::::0;::::1;::::0;;;22735:5:::1;22639:112:::0;;;;;;;;:39;;::::1;::::0;:112;;;;;;;;;;;22735:5;22639:39;:112;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22762:61:0::1;::::0;;-1:-1:-1;;;22762:61:0;;22810:4:::1;22762:61;::::0;::::1;::::0;22817:5:::1;22762:61:::0;;;;;;;;-1:-1:-1;;;;;22762:39:0;::::1;::::0;-1:-1:-1;22762:39:0::1;::::0;-1:-1:-1;22762:61:0;;;;;22817:5;22762:61;;;;;22817:5;22762:39;:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22834:18;-1:-1:-1::0;;;;;22834:39:0::1;;22874:7;:5;:7::i;:::-;22883:5;22834:55;;;;;;;;;;;;;-1:-1:-1::0;;;;;22834:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22962:15:0::1;::::0;22900:109:::1;::::0;;-1:-1:-1;;;22900:109:0;;-1:-1:-1;;;;;22962:15:0;;::::1;22900:109;::::0;::::1;::::0;22962:15:::1;22900:109:::0;;;;;;;;:39;;::::1;::::0;-1:-1:-1;22900:39:0::1;::::0;-1:-1:-1;22900:109:0;;;;;;;;;;;22962:15;22900:39;:109;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23067:15:0::1;::::0;23025:59:::1;::::0;-1:-1:-1;;;;;23067:15:0;;::::1;::::0;-1:-1:-1;23025:59:0;;::::1;::::0;-1:-1:-1;23025:59:0::1;::::0;23067:15:::1;::::0;23025:59:::1;23095:15;:36:::0;;-1:-1:-1;;;;;;23095:36:0::1;-1:-1:-1::0;;;;;23095:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;22137:1002:0:o;18366:39::-;;;;:::o;32062:247::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;32166:15:::1;::::0;32210:16:::1;:7:::0;17132:6:::1;32210:11;:16::i;:::-;32192:15;:34:::0;;;32242:59:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;902:1;32062:247:::0;:::o;608:79::-;673:6;;-1:-1:-1;;;;;673:6:0;608:79;:::o;26433:255::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;26566:24:::1;::::0;26524:105:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;26640:24;:40:::0;26433:255::o;6993:106::-;7084:7;7077:14;;;;;;;;-1:-1:-1;;7077:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7051:13;;7077:14;;7084:7;;7077:14;;7084:7;7077:14;;;;;;;;;;;;;;;;;;;;;;;;33437:95;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33504:12:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33504:20:0;;::::1;::::0;;;::::1;::::0;;33437:95::o;18044:27::-;;;;:::o;27825:300::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;27971:13:::1;::::0;-1:-1:-1;;;;;27963:21:0;;::::1;27971:13:::0;::::1;27963:21;;27941:124;;;;-1:-1:-1::0;;;27941:124:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28076:41;28105:4;28111:5;28076:28;:41::i;35979:1593::-:0;-1:-1:-1;;;;;36124:19:0;;36076:21;36124:19;;;:13;:19;;;;;;;;36123:20;36115:52;;;;;-1:-1:-1;;;36115:52:0;;;;;;;;;;;;-1:-1:-1;;;36115:52:0;;;;;;;;;;;;;;;36182:13;;-1:-1:-1;;;36182:13:0;;;;:64;;;;-1:-1:-1;;;;;;36200:19:0;;;;;;:13;:19;;;;;;36230:15;36222:5;36200:27;;;:45;36182:64;36178:105;;;-1:-1:-1;36270:1:0;36263:8;;36178:105;36311:15;36321:4;36311:9;:15::i;:::-;36295:31;;36339:18;36360:35;36380:14;;36360:15;:19;;:35;;;;:::i;:::-;36339:56;;36427:8;36414:10;:21;:45;;;-1:-1:-1;;;;;;36440:19:0;;;;;;:13;:19;;;;;;;;36439:20;36414:45;36408:481;;36477:16;36496:35;36514:4;36520:10;36496:17;:35::i;:::-;36477:54;;36570:15;;36559:8;:26;:55;;36606:8;36559:55;;;36588:15;;36559:55;-1:-1:-1;;;;;36653:17:0;;;;;;:11;:17;;;;;;36548:66;;-1:-1:-1;36653:31:0;;36548:66;36653:21;:31::i;:::-;36635:15;36645:4;36635:9;:15::i;:::-;:49;36631:247;;;-1:-1:-1;;;;;36763:17:0;;;;;;:11;:17;;;;;;36721:92;;36763:31;;36785:8;36763:21;:31::i;:::-;36721:15;36731:4;36721:9;:15::i;:::-;:19;;:92::i;:::-;36705:108;;36631:247;;;36861:1;36854:8;;;;;;36631:247;36408:481;;36919:18;;-1:-1:-1;;;36919:18:0;;;;:67;;;;-1:-1:-1;;;;;;36941:19:0;;;;;;:13;:19;;;;;;36971:15;36963:5;36941:27;;;:45;36919:67;36901:664;;;-1:-1:-1;;;;;37088:32:0;;37013:27;37088:32;;;:26;:32;;;;;;37043:24;;:77;;:180;;37222:1;37043:180;;;-1:-1:-1;;;;;37169:32:0;;;;;;:26;:32;;;;;;37140:24;;:62;;:28;:62::i;:::-;37013:210;;37271:19;37254:13;:36;;:108;;37343:19;37254:108;;;37310:13;37254:108;37238:124;;36901:664;;;;37384:18;;-1:-1:-1;;;37384:18:0;;;;37380:185;;;37452:24;;37435:13;:41;;:118;;37529:24;;37435:118;;;37496:13;37435:118;37419:134;;37380:185;35979:1593;;;;:::o;33049:170::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33125:15:::1;33108:14;:32:::0;33174:12:::1;33151:20;:35:::0;33197:6:::1;:14:::0;;-1:-1:-1;;33197:14:0::1;::::0;;33049:170::o;25596:329::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;25744:15:::1;::::0;:25:::1;::::0;;-1:-1:-1;;;25744:25:0;;;;25701:22:::1;::::0;-1:-1:-1;;;;;25744:15:0::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25744:25:0;25811:4:::1;::::0;25726:90:::1;::::0;;-1:-1:-1;;;25726:90:0;;25804:4:::1;25726:90;::::0;::::1;::::0;-1:-1:-1;;;;;25811:4:0;;::::1;25726:90:::0;;;;;;:69;;;::::1;::::0;::::1;::::0;:90;;;;;25744:25:::1;::::0;25726:90;;;;;;;25811:4:::1;25726:69:::0;:90;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25726:90:0;25827:13:::1;:30:::0;;-1:-1:-1;;;;;;25827:30:0::1;-1:-1:-1::0;;;;;25827:30:0;;::::1;::::0;;;::::1;::::0;;;;25726:90;;-1:-1:-1;25868:49:0::1;::::0;25897:13:::1;-1:-1:-1::0;25868:28:0::1;:49::i;:::-;902:1;25596:329::o:0;29306:109::-;29380:15;;:27;;;-1:-1:-1;;;29380:27:0;;;;29353:7;;-1:-1:-1;;;;;29380:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;8942:402;9064:4;9086:228;9109:12;:10;:12::i;:::-;9136:7;9158:145;9215:15;9158:145;;;;;;;;;;;;;;;;;:11;:25;9170:12;:10;:12::i;:::-;-1:-1:-1;;;;;9158:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;9158:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;17974:31::-;;;;:::o;18723:30::-;;;-1:-1:-1;;;18723:30:0;;;;;:::o;29708:186::-;29839:15;;:47;;;-1:-1:-1;;;29839:47:0;;-1:-1:-1;;;;;29839:47:0;;;;;;;;;29807:7;;29839:15;;;;;:38;;:47;;;;;;;;;;;;;;;:15;:47;;;;;;;;;;7511:218;7635:4;7657:42;7667:12;:10;:12::i;:::-;7681:9;7692:6;7657:9;:42::i;17692:45::-;;;;;;;;;;;;;;;:::o;30428:415::-;30799:15;;:36;;;-1:-1:-1;;;30799:36:0;;-1:-1:-1;;;;;30799:36:0;;;;;;;;;30543:15;;;;;;;;;;;;30799;;:26;;:36;;;;;;;;;;;;;;:15;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30799:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30799:36:0;;-1:-1:-1;30799:36:0;-1:-1:-1;30799:36:0;;-1:-1:-1;30799:36:0;-1:-1:-1;30428:415:0;-1:-1:-1;;30428:415:0:o;17244:64::-;;;-1:-1:-1;;;;;17244:64:0;;:::o;26250:175::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;26325:8:::1;::::0;::::1;-1:-1:-1::0;;;26325:8:0;;::::1;;:21;;::::0;::::1;;;;26317:69;;;;-1:-1:-1::0;;;26317:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26397:8;:20:::0;;;::::1;;-1:-1:-1::0;;;26397:20:0::1;-1:-1:-1::0;;;;26397:20:0;;::::1;::::0;;;::::1;::::0;;26250:175::o;17451:57::-;;;;;;;;;;;;;;;:::o;25933:309::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26040:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;26018:116;;;::::0;;-1:-1:-1;;;26018:116:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26018:116:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26145:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26145:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26200:34;;;;;;;::::1;::::0;;;;;;;;::::1;25933:309:::0;;:::o;32317:425::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;32468:16:::1;:35:::0;;;32514:12:::1;:28:::0;;;32553:10:::1;:24:::0;;;32600:50:::1;32566:11:::0;32600:34:::1;32487:16:::0;32529:13;32600:20:::1;:34::i;:::-;:38:::0;::::1;:50::i;:::-;32588:9;:62:::0;;;32680:16:::1;::::0;32698:12:::1;::::0;32712:10:::1;::::0;32668:66:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;32317:425:::0;;;:::o;18331:28::-;;;;:::o;31308:190::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31385:23:0;::::1;31377:71;;;;-1:-1:-1::0;;;31377:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31461:8;:29:::0;;-1:-1:-1;;;;;;31461:29:0::1;-1:-1:-1::0;;;;;31461:29:0;;;::::1;::::0;;;::::1;::::0;;31308:190::o;18012:25::-;;;;:::o;31704:350::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;31816:11:::1;::::0;31854:16:::1;:7:::0;17132:6:::1;31854:11;:16::i;:::-;31840:11;:30:::0;;;31881:18:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;31881:29:0;;::::1;-1:-1:-1::0;;;;31881:29:0;;::::1;::::0;;;::::1;::::0;;;31928:118:::1;::::0;;;;;;;::::1;::::0;;;;32017:18:::1;31881:29;32017:18;31928:118;;::::0;;;;;;::::1;::::0;;;;;;;::::1;902:1;31704:350:::0;;:::o;7737:203::-;-1:-1:-1;;;;;7905:18:0;;;7873:7;7905:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7737:203::o;695:89::-;766:10;;-1:-1:-1;;;;;766:10:0;695:89;:::o;32750:93::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;32816:11:::1;:19:::0;;-1:-1:-1;;32816:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32750:93::o;18112:33::-;;;;:::o;18219:35::-;;;;:::o;18261:26::-;;;;:::o;29157:141::-;29241:15;;:49;;;-1:-1:-1;;;29241:49:0;;;;29214:7;;-1:-1:-1;;;;;29241:15:0;;:47;;:49;;;;;;;;;;;;;;:15;:49;;;;;;;;;;28881:124;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;28955:15:::1;::::0;:42:::1;::::0;;-1:-1:-1;;;28955:42:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;28955:15:0;;::::1;::::0;:31:::1;::::0;:42;;;;;:15:::1;::::0;:42;;;;;;;;:15;;:42;::::1;;::::0;::::1;;;;::::0;::::1;18444:32:::0;;;;;;;;;:::o;31506:190::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31583:23:0;::::1;31575:71;;;;-1:-1:-1::0;;;31575:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31659:8;:29:::0;;-1:-1:-1;;;;;;31659:29:0::1;-1:-1:-1::0;;;;;31659:29:0;;;::::1;::::0;;;::::1;::::0;;31506:190::o;32851:93::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;32917:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;32917:19:0::1;-1:-1:-1::0;;;;32917:19:0;;::::1;::::0;;;::::1;::::0;;32851:93::o;1415:283::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;1520:22:0;::::1;1498:110;;;;-1:-1:-1::0;;;1498:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1645:6;::::0;1624:38:::1;::::0;-1:-1:-1;;;;;1624:38:0;;::::1;::::0;1645:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1624:38:0;1645:6:::1;::::0;1624:38:::1;1673:6;:17:::0;;-1:-1:-1;;;;;;1673:17:0::1;-1:-1:-1::0;;;;;1673:17:0;;;::::1;::::0;;;::::1;::::0;;1415:283::o;33227:111::-;842:12;:10;:12::i;:::-;832:6;;-1:-1:-1;;;;;832:6:0;;;:22;;;824:67;;;;;-1:-1:-1;;;824:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;824:67:0;;;;;;;;;;;;;;;33302:20:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;33302:28:0;;::::1;::::0;;;::::1;::::0;;33227:111::o;17640:45::-;;;;;;;;;;;;;;;:::o;2068:179::-;2126:7;2158:5;;;2182:6;;;;2174:46;;;;;-1:-1:-1;;;2174:46:0;;;;;;;;;;;;-1:-1:-1;;;2174:46:0;;;;;;;;;;;;;;;2238:1;2068:179;-1:-1:-1;;;2068:179:0:o;95:98::-;175:10;95:98;:::o;10629:378::-;-1:-1:-1;;;;;10765:19:0;;10757:68;;;;-1:-1:-1;;;10757:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10844:21:0;;10836:68;;;;-1:-1:-1;;;10836:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10967:32;;;;;;;;;;;;;;;;;10629:378;;;:::o;2631:246::-;2689:7;2713:6;2709:47;;-1:-1:-1;2743:1:0;2736:8;;2709:47;2778:5;;;2782:1;2778;:5;:1;2802:5;;;;;:10;2794:56;;;;-1:-1:-1;;;2794:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37580:3203;-1:-1:-1;;;;;37712:18:0;;37704:68;;;;-1:-1:-1;;;37704:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37791:16:0;;37783:64;;;;-1:-1:-1;;;37783:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37881:19:0;;;;;;:13;:19;;;;;;;;37880:20;:59;;;;-1:-1:-1;;;;;;37922:17:0;;;;;;:13;:17;;;;;;;;37921:18;37880:59;:105;;;;-1:-1:-1;37975:9:0;37961:24;;;;:13;:24;;;;;;;;37960:25;37880:105;37858:174;;;;;-1:-1:-1;;;37858:174:0;;;;;;;;;;;;-1:-1:-1;;;37858:174:0;;;;;;;;;;;;;;;38055:7;:5;:7::i;:::-;-1:-1:-1;;;;;38047:15:0;:4;-1:-1:-1;;;;;38047:15:0;;38043:82;;38088:6;;;;;;;38087:7;38079:34;;;;;-1:-1:-1;;;38079:34:0;;;;;;;;;;;;-1:-1:-1;;;38079:34:0;;;;;;;;;;;;;;;38149:7;:5;:7::i;:::-;-1:-1:-1;;;;;38141:15:0;:4;-1:-1:-1;;;;;38141:15:0;;;:32;;;;;38166:7;:5;:7::i;:::-;-1:-1:-1;;;;;38160:13:0;:2;-1:-1:-1;;;;;38160:13:0;;;38141:32;38137:109;;;38190:44;38217:4;38223:2;38227:6;38190:26;:44::i;:::-;38276:9;38262:24;;;;:13;:24;;;;;;;;38258:63;;;38303:7;;38258:63;38333:15;38351;38361:4;38351:9;:15::i;:::-;38333:33;;38377:18;38398:35;38418:14;;38398:15;:19;;:35;;;;:::i;:::-;38377:56;;38463:8;38450:10;:21;38446:689;;;-1:-1:-1;;;;;38492:19:0;;;;;;:13;:19;;;;;;;;38488:87;;;-1:-1:-1;;;;;38532:19:0;;38554:5;38532:19;;;:13;:19;;;;;:27;;-1:-1:-1;;38532:27:0;;;38488:87;38446:689;;;38607:20;38630:35;38648:4;38654:10;38630:17;:35::i;:::-;-1:-1:-1;;;;;38702:29:0;;;;;;:25;:29;;;;;;38607:58;;-1:-1:-1;38702:29:0;;;:64;;-1:-1:-1;;;;;;38735:31:0;;;;;;:27;:31;;;;;;;;38702:64;38680:257;;;38831:15;;38816:12;:30;:105;;38909:12;38816:105;;;38870:15;;38816:105;38801:120;;38680:257;-1:-1:-1;;;;;39002:17:0;;;;;;:11;:17;;;;;;:35;;39024:12;39002:21;:35::i;:::-;38979:19;:7;38991:6;38979:11;:19::i;:::-;:58;;38953:170;;;;-1:-1:-1;;;38953:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38446:689;;39151:11;39147:93;;39179:28;39195:4;39201:2;39205:1;39179:15;:28::i;:::-;39222:7;;;;39147:93;39252:28;39283:24;39301:4;39283:9;:24::i;:::-;39386:18;;39433:11;;39252:55;;-1:-1:-1;39349:55:0;;;;39433:11;;:37;;;;-1:-1:-1;39462:8:0;;-1:-1:-1;;;39462:8:0;;;;39461:9;39433:37;:86;;;;-1:-1:-1;;;;;;39488:31:0;;;;;;:25;:31;;;;;;;;39487:32;39433:86;:126;;;;;39536:23;39433:126;39415:283;;;39586:8;:15;;-1:-1:-1;;;;39586:15:0;-1:-1:-1;;;39586:15:0;;;39616:39;39634:20;39616:17;:39::i;:::-;39670:8;:16;;-1:-1:-1;;;;39670:16:0;;;39415:283;39726:8;;;-1:-1:-1;;;;;39749:25:0;;39710:12;39749:25;;;:19;:25;;;;;;;;39726:8;-1:-1:-1;;;39726:8:0;;;;;39725:9;;39749:25;;:52;;-1:-1:-1;;;;;;39778:23:0;;;;;;:19;:23;;;;;;;;39749:52;:65;;;-1:-1:-1;39806:8:0;;-1:-1:-1;;;39806:8:0;;;;39805:9;39749:65;39745:113;;;-1:-1:-1;39841:5:0;39745:113;39874:7;39870:590;;;39898:12;39913:30;39939:3;39913:21;39924:9;;39913:6;:10;;:21;;;;:::i;:::-;:25;;:30::i;:::-;39898:45;;39988:7;:5;:7::i;:::-;-1:-1:-1;;;;;39980:15:0;:4;-1:-1:-1;;;;;39980:15:0;;;:57;;;;-1:-1:-1;;;;;;40016:21:0;;40032:4;40016:21;;39980:57;:280;;;;-1:-1:-1;;;;;;40060:31:0;;;;;;:25;:31;;;;;;;;;:85;;-1:-1:-1;;;;;;40116:29:0;;;;;;:25;:29;;;;;;;;40060:85;:143;;;-1:-1:-1;;;;;;40170:33:0;;;;;;:27;:33;;;;;;;;40060:143;:199;;;-1:-1:-1;;;;;;40228:31:0;;;;;;:27;:31;;;;;;;;40060:199;40058:202;39980:280;39958:394;;;40302:34;40332:3;40302:25;40313:13;;40302:6;:10;;:25;;;;:::i;:34::-;40295:41;;39958:394;40375:16;:6;40386:4;40375:10;:16::i;:::-;40366:25;;40406:42;40422:4;40436;40443;40406:15;:42::i;:::-;39870:590;;40472:33;40488:4;40494:2;40498:6;40472:15;:33::i;:::-;40617:15;;-1:-1:-1;;;;;40617:15:0;:26;40652:4;40659:15;40652:4;40659:9;:15::i;:::-;40617:58;;;;;;;;;;;;;-1:-1:-1;;;;;40617:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40600:96;40710:15;;-1:-1:-1;;;;;40710:15:0;:26;40745:2;40750:13;40745:2;40750:9;:13::i;:::-;40710:54;;;;;;;;;;;;;-1:-1:-1;;;;;40710:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40706:70;37580:3203;;;;;;;;;:::o;2399:224::-;2519:7;2555:12;2547:6;;;;2539:29;;;;-1:-1:-1;;;2539:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2591:5:0;;;2399:224::o;9908:314::-;-1:-1:-1;;;;;9992:21:0;;9984:65;;;;;-1:-1:-1;;;9984:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10075:12;;:24;;10092:6;10075:16;:24::i;:::-;10060:12;:39;-1:-1:-1;;;;;10131:18:0;;:9;:18;;;;;;;;;;;:30;;10154:6;10131:22;:30::i;:::-;-1:-1:-1;;;;;10110:18:0;;:9;:18;;;;;;;;;;;:51;;;;10177:37;;;;;;;10110:18;;:9;;-1:-1:-1;;;;;;;;;;;10177:37:0;;;;;;;;;9908:314;;:::o;28133:440::-;-1:-1:-1;;;;;28238:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;28216:146;;;;-1:-1:-1;;;28216:146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28373:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;28373:39:0;;;;;;;;;;;;28423:87;;28449:15;;:49;;;-1:-1:-1;;;28449:49:0;;-1:-1:-1;;;;;28449:49:0;;;;;;;:15;:49;;;;;;;;:15;;;:36;;:49;;;;;:15;;:49;;;;;;:15;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28423:87;28525:40;;;;;;-1:-1:-1;;;;;28525:40:0;;;;;;;;28133:440;;:::o;2255:136::-;2313:7;2340:43;2344:1;2347;2340:43;;;;;;;;;;;;;;;;;:3;:43::i;34074:1897::-;-1:-1:-1;;;;;34230:20:0;;34185:23;34230:20;;;:13;:20;;;;;;;;34226:1738;;;-1:-1:-1;;;;;34288:18:0;;34267;34288;;;:11;:18;;;;;;34338:8;34325:21;;34321:1632;;;34385:1;34367:19;;34321:1632;;;34425:7;34412:10;:20;34408:1545;;;34471:25;34493:2;34471:17;:10;34486:1;34471:14;:17::i;:25::-;34453:43;;34408:1545;;;34535:7;34522:10;:20;34518:1435;;;34581:27;34604:3;34581:18;:10;34596:2;34581:14;:18::i;34518:1435::-;34647:8;34634:10;:21;34630:1323;;;34694:27;34717:3;34694:18;:10;34709:2;34694:14;:18::i;34630:1323::-;34760:8;34747:10;:21;34743:1210;;;34807:27;34830:3;34807:18;:10;34822:2;34807:14;:18::i;34743:1210::-;34873:8;34860:10;:21;34856:1097;;;34920:27;34943:3;34920:18;:10;34935:2;34920:14;:18::i;34856:1097::-;34986:8;34973:10;:21;34969:984;;;35033:27;35056:3;35033:18;:10;35048:2;35033:14;:18::i;34969:984::-;35099:8;35086:10;:21;35082:871;;;35146:17;:10;35161:1;35146:14;:17::i;35082:871::-;35202:8;35189:10;:21;35185:768;;;35249:27;35272:3;35249:18;:10;35264:2;35249:14;:18::i;35185:768::-;35315:8;35302:10;:21;35298:655;;;35362:27;35385:3;35362:18;:10;35377:2;35362:14;:18::i;35298:655::-;35428:8;35415:10;:21;35411:542;;;35475:27;35498:3;35475:18;:10;35490:2;35475:14;:18::i;35411:542::-;35541:8;35528:10;:21;35524:429;;;35588:27;35611:3;35588:18;:10;35603:2;35588:14;:18::i;35524:429::-;35654:8;35641:10;:21;35637:316;;;35701:27;35724:3;35701:18;:10;35716:2;35701:14;:18::i;35637:316::-;35767:8;35754:10;:21;35750:203;;;35814:27;35837:3;35814:18;:10;35829:2;35814:14;:18::i;35750:203::-;35880:8;35867:10;:21;35863:90;;;35927:10;35909:28;;35863:90;34226:1738;34074:1897;;;;:::o;41742:3707::-;41877:13;;-1:-1:-1;;;41877:13:0;;;;:46;;;;-1:-1:-1;;;;;;41894:29:0;;;;;;:25;:29;;;;;;;;41877:46;41873:222;;;42005:15;41966:13;:27;41980:12;:10;:12::i;:::-;-1:-1:-1;;;;;41966:27:0;-1:-1:-1;;;;;41966:27:0;;;;;;;;;;;;;41996:5;41966:35;:54;;41940:143;;;;;-1:-1:-1;;;41940:143:0;;;;;;;;;;;;-1:-1:-1;;;41940:143:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42111:29:0;;;;;;:25;:29;;;;;;;;42107:358;;;42200:15;42161:13;:27;42175:12;:10;:12::i;:::-;-1:-1:-1;;;;;42161:27:0;-1:-1:-1;;;;;42161:27:0;;;;;;;;;;;;;42191:5;42161:35;:54;42157:235;;42280:6;42236:26;:40;42263:12;:10;:12::i;:::-;-1:-1:-1;;;;;42236:40:0;;;;;;;;;;;;-1:-1:-1;42236:40:0;:50;;;;;;;42157:235;;;42370:6;42327:26;:40;42354:12;:10;:12::i;:::-;-1:-1:-1;;;;;42327:40:0;;;;;;;;;;;;-1:-1:-1;42327:40:0;:49;42157:235;42438:15;42408:13;:27;42422:12;:10;:12::i;:::-;-1:-1:-1;;;;;42408:27:0;;;;;;;;;;;;-1:-1:-1;42408:27:0;:45;42107:358;42481:18;;-1:-1:-1;;;42481:18:0;;;;42477:235;;;42607:24;;42542:26;:40;42569:12;:10;:12::i;:::-;-1:-1:-1;;;;;42542:40:0;-1:-1:-1;;;;;42542:40:0;;;;;;;;;;;;;:89;;42516:184;;;;-1:-1:-1;;;42516:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42728:12;;;;;;;42724:161;;;-1:-1:-1;;;;;42761:21:0;;42777:4;42761:21;42757:117;;42821:11;;42811:6;:21;;42803:55;;;;;-1:-1:-1;;;42803:55:0;;;;;;;;;;;;-1:-1:-1;;;42803:55:0;;;;;;;;;;;;;;;42901:8;;-1:-1:-1;;;42901:8:0;;;;42897:483;;;-1:-1:-1;;;;;42948:21:0;;42964:4;42948:21;;;;:61;;-1:-1:-1;;;;;;42990:19:0;;43004:4;42990:19;;42948:61;:114;;;;-1:-1:-1;;;;;;43031:31:0;;;;;;:27;:31;;;;;;;;43030:32;42948:114;:165;;;;-1:-1:-1;;;;;;43084:29:0;;;;;;:25;:29;;;;;;;;43083:30;42948:165;42926:443;;;43198:7;:21;43206:12;:10;:12::i;:::-;-1:-1:-1;;;;;43198:21:0;-1:-1:-1;;;;;43198:21:0;;;;;;;;;;;;;43222:10;43198:34;43178:15;:55;;43148:147;;;;;-1:-1:-1;;;43148:147:0;;;;;;;;;;;;-1:-1:-1;;;43148:147:0;;;;;;;;;;;;;;;43338:15;43314:7;:21;43322:12;:10;:12::i;:::-;-1:-1:-1;;;;;43314:21:0;;;;;;;;;;;;-1:-1:-1;43314:21:0;:39;42926:443;43396:12;;-1:-1:-1;;;43396:12:0;;;;43392:1263;;;-1:-1:-1;;;;;43447:31:0;;;;;;:25;:31;;;;;;;;:84;;;;-1:-1:-1;;;;;;43500:31:0;;;;;;:27;:31;;;;;;;;43499:32;43447:84;:124;;;;-1:-1:-1;;;;;;43552:19:0;;43566:4;43552:19;;43447:124;:166;;;;-1:-1:-1;;;;;;43592:21:0;;43608:4;43592:21;;43447:166;43425:263;;;43656:9;-1:-1:-1;;;;;43656:15:0;;;43648:24;;;;;;43722:20;;43745:1;43722:24;43706:12;:40;43702:942;;43781:9;43767:24;;;;:13;:24;;;;;:31;;-1:-1:-1;;43767:31:0;43794:4;43767:31;;;-1:-1:-1;;;;;43821:17:0;;;;;;:36;;-1:-1:-1;43842:9:0;-1:-1:-1;;;;;43842:15:0;;;;43821:36;43817:138;;;43882:15;;:53;;;-1:-1:-1;;;43882:53:0;;43919:9;43882:53;;;;:15;:53;;;;;;-1:-1:-1;;;;;43882:15:0;;;;:36;;:53;;;;;:15;;:53;;;;;;;;:15;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43817:138;-1:-1:-1;;;;;44000:31:0;;;;;;:25;:31;;;;;;;;43999:32;:91;;;;-1:-1:-1;;;;;;44057:33:0;;;;;;:27;:33;;;;;;;;44056:34;43999:91;:137;;;;-1:-1:-1;;;;;;44115:21:0;;44131:4;44115:21;;43999:137;43973:323;;;-1:-1:-1;;;;;44179:19:0;;;;;;;:13;:19;;;;;;:26;;-1:-1:-1;;44179:26:0;44201:4;44179:26;;;;;;44228:15;;:48;;-1:-1:-1;;;44228:48:0;;;;;;;;;;;;;;;;;;:15;;;:36;;:48;;;;;44179:19;44228:48;;;;;;44179:19;44228:15;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43973:323;-1:-1:-1;;;;;44343:29:0;;;;;;:25;:29;;;;;;;;44342:30;:87;;;;-1:-1:-1;;;;;;44398:31:0;;;;;;:27;:31;;;;;;;;44397:32;44342:87;:131;;;;-1:-1:-1;;;;;;44454:19:0;;44468:4;44454:19;;44342:131;44316:313;;;-1:-1:-1;;;;;44516:17:0;;;;;;;:13;:17;;;;;;:24;;-1:-1:-1;;44516:24:0;44536:4;44516:24;;;;;;44563:15;;:46;;-1:-1:-1;;;44563:46:0;;;;;;;;;;;;;;;;;;:15;;;:36;;:46;;;;;44516:17;44563:46;;;;;;44516:17;44563:15;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44316:313;44671:18;;-1:-1:-1;;;44671:18:0;;;;44667:338;;;-1:-1:-1;;;;;44728:31:0;;;;;;:25;:31;;;;;;;;:82;;;;-1:-1:-1;44794:15:0;;-1:-1:-1;;;;;44780:30:0;;;44794:15;;44780:30;;44728:82;:122;;;;-1:-1:-1;;;;;;44831:19:0;;44845:4;44831:19;;44728:122;44706:288;;;44885:15;44903:13;44913:2;44903:9;:13::i;:::-;44966:11;;44885:31;;-1:-1:-1;44943:19:0;44885:31;44955:6;44943:11;:19::i;:::-;:34;;44935:43;;;;;;44706:288;;45021:11;;-1:-1:-1;;;45021:11:0;;;;45017:425;;;-1:-1:-1;;;;;45053:21:0;;45069:4;45053:21;;;;:44;;-1:-1:-1;;;;;;45078:19:0;;45092:4;45078:19;;45053:44;45049:382;;;-1:-1:-1;;;;;45148:31:0;;;;;;:25;:31;;;;;;;;;:89;;-1:-1:-1;;;;;;45208:29:0;;;;;;:25;:29;;;;;;;;45148:89;:151;;;-1:-1:-1;;;;;;45266:33:0;;;;;;:27;:33;;;;;;;;45148:151;:211;;;-1:-1:-1;;;;;;45328:31:0;;;;;;:27;:31;;;;;;;;45148:211;45118:297;;;;;-1:-1:-1;;;45118:297:0;;;;;;;;;;;;-1:-1:-1;;;45118:297:0;;;;;;;;;;;;;;9352:548;-1:-1:-1;;;;;9492:20:0;;9484:70;;;;-1:-1:-1;;;9484:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9573:23:0;;9565:71;;;;-1:-1:-1;;;9565:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9667:108;9703:6;9667:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9667:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;9647:17:0;;;:9;:17;;;;;;;;;;;:128;;;;9809:20;;;;;;;:32;;9834:6;9809:24;:32::i;:::-;-1:-1:-1;;;;;9786:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;9857:35;;;;;;;9786:20;;9857:35;;;;-1:-1:-1;;;;;;;;;;;9857:35:0;;;;;;;;9352:548;;;:::o;40791:943::-;40853:18;40874:39;40903:9;;40874:24;40885:12;;40874:6;:10;;:24;;;;:::i;:39::-;40853:60;-1:-1:-1;40924:20:0;40947:17;40853:60;40962:1;40947:14;:17::i;:::-;40924:40;-1:-1:-1;40975:20:0;40998:24;:6;40924:40;40998:10;:24::i;:::-;40975:47;-1:-1:-1;41054:21:0;41086:30;40975:47;41086:16;:30::i;:::-;41127:19;41149:37;:21;41175:10;41149:25;:37::i;:::-;41127:59;;41197:17;41232:51;41281:1;41232:44;41266:9;;41232:29;41248:12;;41232:11;:15;;:29;;;;:::i;:51::-;41197:97;;41305:21;41344:49;41391:1;41344:42;41376:9;;41344:27;41360:10;;41344:11;:15;;:27;;;;:::i;:49::-;41415:8;;:32;;41305:99;;-1:-1:-1;;;;41415:8:0;;-1:-1:-1;;;;;41415:8:0;;:32;;;;;41305:99;;41415:32;;;;41305:99;41415:8;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41458:8:0;;:32;;-1:-1:-1;;;;;41458:8:0;;;;:32;;;;;41476:13;;41458:8;:32;:8;:32;41476:13;41458:8;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41501:8:0;;:32;;-1:-1:-1;;;;;41501:8:0;;;;:32;;;;;41519:13;;41501:8;:32;:8;:32;41519:13;41501:8;:32;;;;;;;;;;;;;;;;;;;;;41544:37;41557:12;41571:9;41544:12;:37::i;:::-;41651:20;;41615:21;;41651:20;;;;;41647:80;;;41688:27;41702:12;41688:13;:27::i;2885:132::-;2943:7;2970:39;2974:1;2977;2970:39;;;;;;;;;;;;;-1:-1:-1;;;2970:39:0;;;:3;:39::i;46051:453::-;46141:16;;;46155:1;46141:16;;;;;;;;46117:21;;46141:16;;;;;;;;;;-1:-1:-1;46141:16:0;46117:40;;46186:4;46168;46173:1;46168:7;;;;;;;;-1:-1:-1;;;;;46168:23:0;;;:7;;;;;;;;;:23;46212:4;;46202:7;;46212:4;;;46202;;46212;;46202:7;;;;;;-1:-1:-1;;;;;46202:14:0;;;:7;;;;;;;;;:14;46259:15;;46227:62;;46244:4;;46259:15;46277:11;46227:8;:62::i;:::-;46300:15;;:196;;-1:-1:-1;;;46300:196:0;;;;;;;;:15;:196;;;;;;46450:4;46300:196;;;;;;46470:15;46300:196;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46300:15:0;;;;:66;;46381:11;;46423:4;;46450;46470:15;46300:196;;;;;;;;;;;;;;;;:15;:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45683:360;45796:15;;45764:62;;45781:4;;-1:-1:-1;;;;;45796:15:0;45814:11;45764:8;:62::i;:::-;45837:15;;-1:-1:-1;;;;;45837:15:0;:31;45876:9;45909:4;45929:11;45837:15;;45987:7;:5;:7::i;:::-;46009:15;45837:198;;;;;;;;;;;;;-1:-1:-1;;;;;45837:198:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45837:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;45683:360:0:o;45457:218::-;45545:15;;45537:51;;45519:12;;-1:-1:-1;;;;;45545:15:0;;45574:9;;45519:12;45537:51;45519:12;45537:51;45574:9;45545:15;45537:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45518:70;;;45603:7;45599:69;;;45632:24;;;;;;;;;;;;;;;;;45457:218;;:::o;3025:223::-;3145:7;3180:12;3173:5;3165:28;;;;-1:-1:-1;;;3165:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3204:9;3220:1;3216;:5;;;;;;;3025:223;-1:-1:-1;;;;;3025:223:0:o

Swarm Source

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