ETH Price: $3,953.35 (+1.58%)

Token

ERC-20: FUTR DAO (FUTR)
 

Overview

Max Total Supply

1,000,000 FUTR

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,304.279096843 FUTR

Value
$0.00
0xf39eb6aa5bf9dc7ec47a8ec2257d7d39e0f0c218
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:
FUTR

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-05
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

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 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 IUniswapV2Pair {
    function factory() external view returns (address);
}

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

    function WETH() external pure returns (address);

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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


contract FUTR  is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public wifeAddress =
        payable(0xd0faa93480f564Dc51Ea10f05560Aa9d5eA8BfBE);
    address payable public devAddress =
        payable(0xAcbf6Cf4494fd6d0E3E4F028723697fc441c4AEF);
    address payable public liquidityAddress =
        payable(0x2D4693a2e29fF12e0Aa5D8b0781908cD0AE65529);
    address payable public treasuryAddress =
        payable(0xD2DB02FE4Fa6947d4366B3c200aAFe4393D42edd);

    address private _owner;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    
    bool public limitsInEffect = true;
    mapping(address => bool) public blacklist;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1_000_000 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "FUTR DAO";
    string private constant _symbol = "FUTR";
    uint8 private constant _decimals = 9;

    
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _teamFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    

    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyTeamFee = 6;

    uint256 public _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellTeamFee = 13;

    //   (300= 30%)
    // values must be lower than 1000 ( 100%)
    // Any leftover goes to wife address
    uint256 public _percentTeamFundsToDev = 300;
    uint256 public _percentTeamFundsToTreasury = 600;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    uint256 public _liquidityTokensToSwap;
    uint256 public _teamTokensToSwap;

    uint256 public maxTransactionAmount;
    uint256 public maxWalletAmount;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    event SetAutomatedMarketMakerPair(address pair, bool value);

    event ExcludeFromReward(address excludedAddress);

    event IncludeInReward(address includedAddress);

    event ExcludeFromFee(address excludedAddress);

    event IncludeInFee(address includedAddress);

    event SetBuyFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event SetSellFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedTeamAddress(address team);

    event UpdatedLiquidityAddress(address liquidity);

    event OwnerForcedSwapBack(uint256 timestamp);

    event BoughtEarly(address indexed sniper);

    event RemovedSniper(address indexed notsnipersupposedly);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() payable {
        _owner = msg.sender;
        _rOwned[_owner] = (_rTotal / 1000) * 100;
        _rOwned[address(this)] = (_rTotal / 1000) * 900;

        maxTransactionAmount = (_tTotal * 5) / 1000; // 0.5% maxTransactionAmountTxn
        maxWalletAmount = (_tTotal * 2) / 100; // 2% maxWalletAmount
        minimumTokensBeforeSwap = (_tTotal * 1) / 10000; // 0.01% swap tokens amount

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[wifeAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[devAddress] = true;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(wifeAddress, true);
        excludeFromMaxTransaction(liquidityAddress, true);
        excludeFromMaxTransaction(devAddress, true);
        excludeFromMaxTransaction(treasuryAddress, true);

        emit Transfer(address(0), _owner, (_tTotal * 100) / 1000);
        emit Transfer(address(0), address(this), (_tTotal * 900) / 1000);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external 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 isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

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

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

    // once enabled, can never be turned off
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
    }

    // send tokens and ETH for liquidity to contract directly
    function launch() external onlyOwner returns (bool) {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        enableTrading();
        IUniswapV2Router _uniswapV2Router = IUniswapV2Router(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        addLiquidity(balanceOf(address(this)), address(this).balance);
        transferOwnership(_owner);
        return true;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if (value) {
            excludeFromReward(pair);
        }
        if (!value) {
            includeInReward(pair);
        }
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(
            _excluded.length + 1 <= 50,
            "Cannot exclude more than 50 accounts.  Include a previously excluded address."
        );
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklist[from], "From address blacklist. Contact admin");
        require(!blacklist[to], "To address blacklist. Contact admin");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ) {
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                }

                if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        balanceOf(to) + amount <= maxWalletAmount,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(
            _teamTokensToSwap
        );
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                buyOrSellSwitch = BUY;
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _buyTaxFee;
                    _liquidityFee = _buyLiquidityFee + _buyTeamFee;
                }
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                buyOrSellSwitch = SELL;
                
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _sellTaxFee;
                    _liquidityFee = _sellLiquidityFee + _sellTeamFee;
                }
                // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _teamTokensToSwap;

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(_teamTokensToSwap).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);

        uint256 ethForDev = ethForMarketing.mul(_percentTeamFundsToDev).div(
            1000
        );
        uint256 ethForTreasury = ethForMarketing
            .mul(_percentTeamFundsToTreasury)
            .div(1000);
        ethForMarketing -= ethForDev;
        ethForMarketing -= ethForTreasury;

        _liquidityTokensToSwap = 0;
        _teamTokensToSwap = 0;

        (bool success, ) = address(wifeAddress).call{
            value: ethForMarketing
        }("");
        (success, ) = address(devAddress).call{ value: ethForDev }("");
        (success, ) = address(treasuryAddress).call{ value: ethForTreasury }(
            ""
        );

        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(
            amountToSwapForETH,
            ethForLiquidity,
            tokensForLiquidity
        );

        
        if (address(this).balance > 1e17) {
            (success, ) = address(wifeAddress).call{
                value: address(this).balance
            }("");
        }
    }

    
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(
            contractBalance >= _tTotal / 10,
            "Can only swap back if more than .1% of tokens stuck on contract"
        );
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

 
    function addToBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot blacklist 0 address");
        blacklist[account] = true;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot use 0 address");
        blacklist[account] = false;
    }

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

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

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if (buyOrSellSwitch == BUY) {
            _liquidityTokensToSwap +=
                (tLiquidity * _buyLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _buyTeamFee) / _liquidityFee;
        } else if (buyOrSellSwitch == SELL) {
            _liquidityTokensToSwap +=
                (tLiquidity * _sellLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _sellTeamFee) / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setMaxTransactionAmount(uint256 newMaxBuy) external onlyOwner {
        require(newMaxBuy > 0, "Cannot be 0");
        maxTransactionAmount = (_tTotal * newMaxBuy) / 1000;
    }

    function setMaxWallet(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet > 0, "Cannot be 0");
        maxWalletAmount = (_tTotal * newMaxWallet) / 1000;
    }

    function setBuyFee(
        uint256 buyTaxFee,
        uint256 buyLiquidityFee,
        uint256 buyTeamFee
    ) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyTeamFee = buyTeamFee;
        require(
            _buyTaxFee + _buyLiquidityFee + _buyTeamFee <= 10,
            "Must keep buy taxes below 10%"
        );
        emit SetBuyFee(buyTeamFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(
        uint256 sellTaxFee,
        uint256 sellLiquidityFee,
        uint256 sellTeamFee
    ) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellTeamFee = sellTeamFee;
        require(
            _sellTaxFee + _sellLiquidityFee + _sellTeamFee <= 14,
            "Must keep sell taxes below 14%"
        );
        emit SetSellFee(sellTeamFee, sellLiquidityFee, sellTaxFee);
    }

    function setTeamSplit(uint256 treasurySplit, uint256 devSplit)
        external
        onlyOwner
    {
        require(treasurySplit + devSplit < 1000, "Split over 100%");
        _percentTeamFundsToTreasury = treasurySplit;
        _percentTeamFundsToDev = devSplit;
    }

    function setwifeAddress(address _wifeAddress) external onlyOwner {
        require(
            _wifeAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        _isExcludedFromFee[wifeAddress] = false;
        wifeAddress = payable(_wifeAddress);
        _isExcludedFromFee[wifeAddress] = true;
        emit UpdatedTeamAddress(_wifeAddress);
    }

    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        require(
            _liquidityAddress != address(0),
            "_liquidityAddress address cannot be 0"
        );
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setDeveloperAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "Cannot be 0 address");
        devAddress = payable(_devAddress);
        _isExcludedFromFee[devAddress] = true;
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "Cannot be 0 address");
        treasuryAddress = payable(_treasuryAddress);
        _isExcludedFromFee[treasuryAddress] = true;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

   
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success, ) = address(msg.sender).call{ value: address(this).balance }(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasurySplit","type":"uint256"},{"internalType":"uint256","name":"devSplit","type":"uint256"}],"name":"setTeamSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wifeAddress","type":"address"}],"name":"setwifeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wifeAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673d0faa93480f564dc51ea10f05560aa9d5ea8bfbe1790915560048054821673acbf6cf4494fd6d0e3e4f028723697fc441c4aef179055600580548216732d4693a2e29ff12e0aa5d8b0781908cd0ae655291790556006805490911673d2db02fe4fa6947d4366b3c200aafe4393d42edd179055600b805460ff19166001179055620000aa66038d7ea4c68000600019620004f3565b620000b890600019620004d9565b60105560125460135560155460165560006018819055600160198190556006601a55601b829055601c55600d601d5561012c601e55610258601f5560208190556029805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b0319163317905560105462000169906103e890620004a0565b62000176906064620004b7565b6007546001600160a01b0316600090815260086020526040902055601054620001a3906103e890620004a0565b620001b190610384620004b7565b306000908152600860205260409020556103e8620001d866038d7ea4c680006005620004b7565b620001e49190620004a0565b6023556064620001fd66038d7ea4c680006002620004b7565b620002099190620004a0565b6024556127106200022366038d7ea4c680006001620004b7565b6200022f9190620004a0565b6027556001600d60006200024b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d9093528183208054851660019081179091556003548216845282842080548616821790556004805483168552838520805487168317905560065483168552838520805487168317905554909116835291208054909216179055620002f6620002ee6000546001600160a01b031690565b600162000416565b6200030330600162000416565b6200031261dead600162000416565b6003546200032b906001600160a01b0316600162000416565b60055462000344906001600160a01b0316600162000416565b6004546200035d906001600160a01b0316600162000416565b60065462000376906001600160a01b0316600162000416565b6007546001600160a01b031660006000805160206200487a8339815191526103e8620003ab66038d7ea4c680006064620004b7565b620003b79190620004a0565b60405190815260200160405180910390a33060006000805160206200487a8339815191526103e8620003f366038d7ea4c68000610384620004b7565b620003ff9190620004a0565b60405190815260200160405180910390a362000536565b6000546001600160a01b03163314620004755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600082620004b257620004b262000520565b500490565b6000816000190483118215151615620004d457620004d46200050a565b500290565b600082821015620004ee57620004ee6200050a565b500390565b60008262000505576200050562000520565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61433480620005466000396000f3fe6080604052600436106104095760003560e01c806361cd759f11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610c35578063efcc52de14610c4b578063f2fde38b14610c61578063f5648a4f14610c81578063f9f92be414610c9657600080fd5b8063dc44b6a014610b99578063dcc345f214610baf578063dd62ed3e14610bcf578063ea2f0b3714610c1557600080fd5b8063c469b6dd116100f2578063c469b6dd14610b17578063c49b9a8014610b2d578063c5f956af14610b4d578063c8c8ebe414610b6d578063cab0347114610b8357600080fd5b8063aa4bde2814610a9a578063b18f50b414610ab0578063b62496f514610ac6578063bbc0c74214610af657600080fd5b80638366e79a116101a657806395d89b411161017557806395d89b41146109f85780639a7a23d614610a25578063a073d37f14610a45578063a457c2d714610a5a578063a9059cbb14610a7a57600080fd5b80638366e79a1461096b57806388790a681461098b57806388f82020146109a15780638da5cb5b146109da57600080fd5b8063715018a6116101e2578063715018a6146109015780637399a25914610916578063751039fc146109365780637571336a1461094b57600080fd5b806361cd759f146108955780636605bfda146108ab5780636eee65d2146108cb57806370a08231146108e157600080fd5b806339509351116103195780634a74bb02116102a15780635342acb4116102705780635342acb4146107f4578063537df3b61461082d578063557ed1ba1461084d5780635d0044ca14610860578063602bc62b1461088057600080fd5b80634a74bb021461077e57806351f205e41461079f57806352390c02146107b4578063525fa81f146107d457600080fd5b8063437823ec116102e8578063437823ec146106e457806344337ea1146107045780634549b0391461072457806349bd5a5e146107445780634a62bb651461076457600080fd5b8063395093511461066e5780633ad10ef61461068e5780634047ea3e146106ae5780634212516b146106c457600080fd5b80631d865c301161039c57806325519cf21161036b57806325519cf2146105d25780632d838119146105f2578063313ce567146106125780633221c93f1461062e5780633685d4191461064e57600080fd5b80631d865c301461055c5780631e293c101461057c578063200a692d1461059c57806323b872dd146105b257600080fd5b8063119c1840116103d8578063119c1840146104c957806313114a9d146104eb5780631694505e1461050a57806318160ddd1461054257600080fd5b806301339c211461041557806306fdde031461043f578063095ea7b31461047957806310d5de531461049957600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610cc6565b60405190151581526020015b60405180910390f35b34801561044b57600080fd5b50604080518082019091526008815267465554522044414f60c01b60208201525b60405161043691906140c3565b34801561048557600080fd5b5061042a610494366004613f8a565b610ffe565b3480156104a557600080fd5b5061042a6104b4366004613ea8565b60256020526000908152604090205460ff1681565b3480156104d557600080fd5b506104e96104e4366004614047565b611015565b005b3480156104f757600080fd5b506011545b604051908152602001610436565b34801561051657600080fd5b5060285461052a906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561054e57600080fd5b5066038d7ea4c680006104fc565b34801561056857600080fd5b506104e9610577366004614069565b611096565b34801561058857600080fd5b506104e9610597366004613ff0565b61117b565b3480156105a857600080fd5b506104fc601b5481565b3480156105be57600080fd5b5061042a6105cd366004613f1b565b611207565b3480156105de57600080fd5b506104e96105ed366004614069565b611270565b3480156105fe57600080fd5b506104fc61060d366004613ff0565b61134c565b34801561061e57600080fd5b5060405160098152602001610436565b34801561063a57600080fd5b5060055461052a906001600160a01b031681565b34801561065a57600080fd5b506104e9610669366004613ea8565b6113d0565b34801561067a57600080fd5b5061042a610689366004613f8a565b611587565b34801561069a57600080fd5b5060045461052a906001600160a01b031681565b3480156106ba57600080fd5b506104fc60215481565b3480156106d057600080fd5b506104e96106df366004613ea8565b6115bd565b3480156106f057600080fd5b506104e96106ff366004613ea8565b6116d0565b34801561071057600080fd5b506104e961071f366004613ea8565b61174e565b34801561073057600080fd5b506104fc61073f366004614022565b6117f2565b34801561075057600080fd5b5060295461052a906001600160a01b031681565b34801561077057600080fd5b50600b5461042a9060ff1681565b34801561078a57600080fd5b5060295461042a90600160a81b900460ff1681565b3480156107ab57600080fd5b506104e9611884565b3480156107c057600080fd5b506104e96107cf366004613ea8565b61197a565b3480156107e057600080fd5b506104e96107ef366004613ea8565b611b68565b34801561080057600080fd5b5061042a61080f366004613ea8565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561083957600080fd5b506104e9610848366004613ea8565b611c5e565b34801561085957600080fd5b50426104fc565b34801561086c57600080fd5b506104e961087b366004613ff0565b611cf6565b34801561088c57600080fd5b506002546104fc565b3480156108a157600080fd5b506104fc601f5481565b3480156108b757600080fd5b506104e96108c6366004613ea8565b611d82565b3480156108d757600080fd5b506104fc60225481565b3480156108ed57600080fd5b506104fc6108fc366004613ea8565b611e32565b34801561090d57600080fd5b506104e9611e91565b34801561092257600080fd5b5060035461052a906001600160a01b031681565b34801561094257600080fd5b5061042a611f05565b34801561095757600080fd5b506104e9610966366004613f5c565b611f44565b34801561097757600080fd5b5061042a610986366004613ee2565b611f99565b34801561099757600080fd5b506104fc601c5481565b3480156109ad57600080fd5b5061042a6109bc366004613ea8565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156109e657600080fd5b506000546001600160a01b031661052a565b348015610a0457600080fd5b50604080518082019091526004815263232aaa2960e11b602082015261046c565b348015610a3157600080fd5b506104e9610a40366004613f5c565b6121bf565b348015610a5157600080fd5b506027546104fc565b348015610a6657600080fd5b5061042a610a75366004613f8a565b612277565b348015610a8657600080fd5b5061042a610a95366004613f8a565b6122c6565b348015610aa657600080fd5b506104fc60245481565b348015610abc57600080fd5b506104fc601e5481565b348015610ad257600080fd5b5061042a610ae1366004613ea8565b60266020526000908152604090205460ff1681565b348015610b0257600080fd5b5060295461042a90600160b01b900460ff1681565b348015610b2357600080fd5b506104fc601a5481565b348015610b3957600080fd5b506104e9610b48366004613fb6565b6122d3565b348015610b5957600080fd5b5060065461052a906001600160a01b031681565b348015610b7957600080fd5b506104fc60235481565b348015610b8f57600080fd5b506104fc601d5481565b348015610ba557600080fd5b506104fc60195481565b348015610bbb57600080fd5b506104e9610bca366004613ea8565b61234a565b348015610bdb57600080fd5b506104fc610bea366004613ee2565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c2157600080fd5b506104e9610c30366004613ea8565b6123fa565b348015610c4157600080fd5b506104fc60205481565b348015610c5757600080fd5b506104fc60185481565b348015610c6d57600080fd5b506104e9610c7c366004613ea8565b612475565b348015610c8d57600080fd5b506104e961255f565b348015610ca257600080fd5b5061042a610cb1366004613ea8565b600c6020526000908152604090205460ff1681565b600080546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610cf190614118565b60405180910390fd5b602954600160b01b900460ff1615610d685760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cf1565b610d70612644565b737a250d5630b4cf539739df2c5dacb4c659f2488d610d90816001611f44565b602880546001600160a01b0319166001600160a01b038316908117909155610dc190309066038d7ea4c68000612689565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfa57600080fd5b505afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e329190613ec5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190613ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190613ec5565b602980546001600160a01b0319166001600160a01b03929092169182179055610f5c906001611f44565b602954610f73906001600160a01b031660016127ad565b60004711610fcf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cf1565b610fe1610fdb30611e32565b47612808565b600754610ff6906001600160a01b0316612475565b600191505090565b600061100b338484612689565b5060015b92915050565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610cf190614118565b6103e861104c82846141be565b1061108b5760405162461bcd60e51b815260206004820152600f60248201526e53706c6974206f766572203130302560881b6044820152606401610cf1565b601f91909155601e55565b6000546001600160a01b031633146110c05760405162461bcd60e51b8152600401610cf190614118565b601b839055601c829055601d819055600e816110dc84866141be565b6110e691906141be565b11156111345760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031342500006044820152606401610cf1565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111a55760405162461bcd60e51b8152600401610cf190614118565b600081116111e35760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf1565b6103e86111f78266038d7ea4c680006141f8565b61120191906141d6565b60235550565b60006112148484846128cb565b6112668433611261856040518060600160405280602881526020016142b2602891396001600160a01b038a166000908152600a60209081526040808320338452909152902054919061306a565b612689565b5060019392505050565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610cf190614118565b60188390556019829055601a819055600a816112b684866141be565b6112c091906141be565b111561130e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610cf1565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161116e565b60006010548211156113b35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cf1565b60006113bd6130a4565b90506113c983826130c7565b9392505050565b6000546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000908152600e602052604090205460ff166114625760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610cf1565b60005b600f5481101561158357816001600160a01b0316600f828154811061148c5761148c614275565b6000918252602090912001546001600160a01b0316141561157157600f80546114b790600190614217565b815481106114c7576114c7614275565b600091825260209091200154600f80546001600160a01b0390921691839081106114f3576114f3614275565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061154b5761154b61425f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061157b8161422e565b915050611465565b5050565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909161100b9185906112619086613109565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03811661164b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf1565b600380546001600160a01b039081166000908152600d60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f12200021375691015b60405180910390a150565b6000546001600160a01b031633146116fa5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016116c5565b6000546001600160a01b031633146117785760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166117ce5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c697374203020616464726573730000000000006044820152606401610cf1565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600066038d7ea4c6800083111561184b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cf1565b8161186a57600061185b84613168565b5093955061100f945050505050565b600061187584613168565b5092955061100f945050505050565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610cf190614118565b60006118b930611e32565b90506118cd600a66038d7ea4c680006141d6565b8110156119425760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f2e3125206f6620746f6b656e7320737475636b206f6e20636f6e7472616374006064820152608401610cf1565b61194a6131b7565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016116c5565b6000546001600160a01b031633146119a45760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000908152600e602052604090205460ff1615611a0d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cf1565b600f54603290611a1e9060016141be565b1115611aa85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610cf1565b6001600160a01b03811660009081526008602052604090205415611b02576001600160a01b038116600090815260086020526040902054611ae89061134c565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b03163314611b925760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611bf65760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf1565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600d6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016116c5565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611cd55760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207573652030206164647265737360601b6044820152606401610cf1565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611d205760405162461bcd60e51b8152600401610cf190614118565b60008111611d5e5760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf1565b6103e8611d728266038d7ea4c680006141f8565b611d7c91906141d6565b60245550565b6000546001600160a01b03163314611dac5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611df85760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf1565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6001600160a01b0381166000908152600e602052604081205460ff1615611e6f57506001600160a01b031660009081526009602052604090205490565b6001600160a01b03821660009081526008602052604090205461100f9061134c565b6000546001600160a01b03163314611ebb5760405162461bcd60e51b8152600401610cf190614118565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611f305760405162461bcd60e51b8152600401610cf190614118565b50600b805460ff1916600190811790915590565b6000546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fc45760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03831661201a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cf1565b6001600160a01b0383163014156120735760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cf1565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156120b557600080fd5b505afa1580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190614009565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121739190613fd3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121e95760405162461bcd60e51b8152600401610cf190614118565b6029546001600160a01b038381169116141561226d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf1565b61158382826127ad565b600061100b3384611261856040518060600160405280602581526020016142da60259139336000908152600a602090815260408083206001600160a01b038d168452909152902054919061306a565b600061100b3384846128cb565b6000546001600160a01b031633146122fd5760405162461bcd60e51b8152600401610cf190614118565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116c590831515815260200190565b6000546001600160a01b031633146123745760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166123c05760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf1565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146124245760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016116c5565b6000546001600160a01b0316331461249f5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166125045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cf1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125895760405162461bcd60e51b8152600401610cf190614118565b602954600160b01b900460ff16156125f75760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cf1565b604051600090339047908381818185875af1925050503d8060008114612639576040519150601f19603f3d011682016040523d82523d6000602084013e61263e565b606091505b50505050565b6000546001600160a01b0316331461266e5760405162461bcd60e51b8152600401610cf190614118565b6029805461ffff60a81b191661010160a81b17905543602055565b6001600160a01b0383166126eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf1565b6001600160a01b03821661274c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf1565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556127fa576127fa8261197a565b8061158357611583826113d0565b6028546128209030906001600160a01b031684612689565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c49190614095565b5050505050565b6001600160a01b03831661292f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf1565b6001600160a01b0382166129915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf1565b600081116129f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cf1565b6001600160a01b0383166000908152600c602052604090205460ff1615612a6a5760405162461bcd60e51b815260206004820152602560248201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060448201526430b236b4b760d91b6064820152608401610cf1565b6001600160a01b0382166000908152600c602052604090205460ff1615612adf5760405162461bcd60e51b815260206004820152602360248201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460448201526236b4b760e91b6064820152608401610cf1565b602954600160b01b900460ff16612b7b576001600160a01b0383166000908152600d602052604090205460ff1680612b2f57506001600160a01b0382166000908152600d602052604090205460ff165b612b7b5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610cf1565b600b5460ff1615612de5576000546001600160a01b03848116911614801590612bb257506000546001600160a01b03838116911614155b8015612bc657506001600160a01b03821615155b8015612bdd57506001600160a01b03821661dead14155b8015612bf35750602954600160a01b900460ff16155b15612de5576001600160a01b03831660009081526026602052604090205460ff168015612c3957506001600160a01b03821660009081526025602052604090205460ff16155b15612cb357602354811115612cae5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cf1565b612d6a565b6001600160a01b03821660009081526026602052604090205460ff168015612cf457506001600160a01b03831660009081526025602052604090205460ff16155b15612d6a57602354811115612d6a5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cf1565b6001600160a01b03821660009081526025602052604090205460ff16612de55760245481612d9784611e32565b612da191906141be565b1115612de55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cf1565b6000612dfe60225460215461310990919063ffffffff16565b90506000612e0b30611e32565b60275460295491925082101590600160a01b900460ff16158015612e385750602954600160a81b900460ff165b8015612e595750602954600090612e57906001600160a01b0316611e32565b115b8015612e655750600083115b8015612e8a57506001600160a01b0385166000908152600d602052604090205460ff16155b8015612eaf57506001600160a01b0386166000908152600d602052604090205460ff16155b8015612ed357506001600160a01b03851660009081526026602052604090205460ff165b8015612edc5750805b15612ee957612ee96131b7565b6001600160a01b0386166000908152600d602052604090205460019060ff1680612f2b57506001600160a01b0386166000908152600d602052604090205460ff165b15612f3d575060036017556000613055565b6001600160a01b03871660009081526026602052604090205460ff1615612fc657612f6661348f565b6001601755602054431415612f84576000601255605a601555613055565b602054612f929060016141be565b431415612fa85760006012556032601555613055565b601854601255601a54601954612fbe91906141be565b601555613055565b6001600160a01b03861660009081526026602052604090205460ff161561304757612fef61348f565b600260175560205443141561300d576000601255605a601555613055565b60205461301b9060016141be565b4314156130315760006012556032601555613055565b601b54601255601d54601c54612fbe91906141be565b61304f61348f565b60036017555b613061878787846134bd565b50505050505050565b6000818484111561308e5760405162461bcd60e51b8152600401610cf191906140c3565b50600061309b8486614217565b95945050505050565b60008060006130b16135e2565b90925090506130c082826130c7565b9250505090565b60006113c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613776565b60008061311683856141be565b9050838110156113c95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf1565b600080600080600080600080600061317f8a6137a4565b925092509250600080600061319d8d86866131986130a4565b6137e6565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b17905560006131d530611e32565b905060006022546021546131e991906141be565b9050600061320360026021546130c790919063ffffffff16565b905060006132118483613836565b90504761321d82613878565b60006132294783613836565b9050600061324c86613246602254856139e190919063ffffffff16565b906130c7565b9050600061325a8383613836565b905060006132796103e8613246601e54866139e190919063ffffffff16565b905060006132986103e8613246601f54876139e190919063ffffffff16565b90506132a48285614217565b93506132b08185614217565b60006021819055602281905560035460405192965090916001600160a01b039091169086908381818185875af1925050503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b50506004546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613362576040519150601f19603f3d011682016040523d82523d6000602084013e613367565b606091505b50506006546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b5050809150506133cc8985612808565b60408051898152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613475576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461346a576040519150601f19603f3d011682016040523d82523d6000602084013e61346f565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b60125415801561349f5750601554155b156134a657565b601280546013556015805460165560009182905555565b806134ca576134ca61348f565b6001600160a01b0384166000908152600e602052604090205460ff16801561350b57506001600160a01b0383166000908152600e602052604090205460ff16155b156135205761351b848484613a60565b6135cc565b6001600160a01b0384166000908152600e602052604090205460ff1615801561356157506001600160a01b0383166000908152600e602052604090205460ff165b156135715761351b848484613b86565b6001600160a01b0384166000908152600e602052604090205460ff1680156135b157506001600160a01b0383166000908152600e602052604090205460ff165b156135c15761351b848484613c2f565b6135cc848484613ca2565b8061263e5761263e601354601255601654601555565b601054600090819066038d7ea4c68000825b600f5481101561373d578260086000600f848154811061361657613616614275565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061368157508160096000600f848154811061365a5761365a614275565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561369b5750506010549366038d7ea4c680009350915050565b6136e160086000600f84815481106136b5576136b5614275565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613836565b925061372960096000600f84815481106136fd576136fd614275565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613836565b9150806137358161422e565b9150506135f4565b506010546137529066038d7ea4c680006130c7565b82101561376d5750506010549266038d7ea4c6800092509050565b90939092509050565b600081836137975760405162461bcd60e51b8152600401610cf191906140c3565b50600061309b84866141d6565b6000806000806137b385613ce6565b905060006137c086613d02565b905060006137d8826137d28986613836565b90613836565b979296509094509092505050565b60008080806137f588866139e1565b9050600061380388876139e1565b9050600061381188886139e1565b90506000613823826137d28686613836565b939b939a50919850919650505050505050565b60006113c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061306a565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138ad576138ad614275565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561390157600080fd5b505afa158015613915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139399190613ec5565b8160018151811061394c5761394c614275565b6001600160a01b0392831660209182029290920101526028546139729130911684612689565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906139ab90859060009086903090429060040161414d565b600060405180830381600087803b1580156139c557600080fd5b505af11580156139d9573d6000803e3d6000fd5b505050505050565b6000826139f05750600061100f565b60006139fc83856141f8565b905082613a0985836141d6565b146113c95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cf1565b600080600080600080613a7287613168565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613aa49088613836565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613ad39087613836565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054613b029086613109565b6001600160a01b038916600090815260086020526040902055613b2481613d1e565b613b2e8483613e84565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7391815260200190565b60405180910390a3505050505050505050565b600080600080600080613b9887613168565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613bca9087613836565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054613c009084613109565b6001600160a01b038916600090815260096020908152604080832093909355600890522054613b029086613109565b600080600080600080613c4187613168565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613c739088613836565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613bca9087613836565b600080600080600080613cb487613168565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613ad39087613836565b600061100f6064613246601254856139e190919063ffffffff16565b600061100f6064613246601554856139e190919063ffffffff16565b60016017541415613d8f57601554601954613d3990836141f8565b613d4391906141d6565b60216000828254613d5491906141be565b9091555050601554601a54613d6990836141f8565b613d7391906141d6565b60226000828254613d8491906141be565b90915550613dfb9050565b60026017541415613dfb57601554601c54613daa90836141f8565b613db491906141d6565b60216000828254613dc591906141be565b9091555050601554601d54613dda90836141f8565b613de491906141d6565b60226000828254613df591906141be565b90915550505b6000613e056130a4565b90506000613e1383836139e1565b30600090815260086020526040902054909150613e309082613109565b30600090815260086020908152604080832093909355600e9052205460ff1615613e7f5730600090815260096020526040902054613e6e9084613109565b306000908152600960205260409020555b505050565b601054613e919083613836565b601055601154613ea19082613109565b6011555050565b600060208284031215613eba57600080fd5b81356113c98161428b565b600060208284031215613ed757600080fd5b81516113c98161428b565b60008060408385031215613ef557600080fd5b8235613f008161428b565b91506020830135613f108161428b565b809150509250929050565b600080600060608486031215613f3057600080fd5b8335613f3b8161428b565b92506020840135613f4b8161428b565b929592945050506040919091013590565b60008060408385031215613f6f57600080fd5b8235613f7a8161428b565b91506020830135613f10816142a3565b60008060408385031215613f9d57600080fd5b8235613fa88161428b565b946020939093013593505050565b600060208284031215613fc857600080fd5b81356113c9816142a3565b600060208284031215613fe557600080fd5b81516113c9816142a3565b60006020828403121561400257600080fd5b5035919050565b60006020828403121561401b57600080fd5b5051919050565b6000806040838503121561403557600080fd5b823591506020830135613f10816142a3565b6000806040838503121561405a57600080fd5b50508035926020909101359150565b60008060006060848603121561407e57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140aa57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156140f0578581018301518582016040015282016140d4565b81811115614102576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561419d5784516001600160a01b031683529383019391830191600101614178565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156141d1576141d1614249565b500190565b6000826141f357634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561421257614212614249565b500290565b60008282101561422957614229614249565b500390565b600060001982141561424257614242614249565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146142a057600080fd5b50565b80151581146142a057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205732e462b7c11da81fd98c0bbfb01fbc54cf6251eba651418560f333417f803964736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104095760003560e01c806361cd759f11610213578063aa4bde2811610123578063dc44b6a0116100ab578063ee40166e1161007a578063ee40166e14610c35578063efcc52de14610c4b578063f2fde38b14610c61578063f5648a4f14610c81578063f9f92be414610c9657600080fd5b8063dc44b6a014610b99578063dcc345f214610baf578063dd62ed3e14610bcf578063ea2f0b3714610c1557600080fd5b8063c469b6dd116100f2578063c469b6dd14610b17578063c49b9a8014610b2d578063c5f956af14610b4d578063c8c8ebe414610b6d578063cab0347114610b8357600080fd5b8063aa4bde2814610a9a578063b18f50b414610ab0578063b62496f514610ac6578063bbc0c74214610af657600080fd5b80638366e79a116101a657806395d89b411161017557806395d89b41146109f85780639a7a23d614610a25578063a073d37f14610a45578063a457c2d714610a5a578063a9059cbb14610a7a57600080fd5b80638366e79a1461096b57806388790a681461098b57806388f82020146109a15780638da5cb5b146109da57600080fd5b8063715018a6116101e2578063715018a6146109015780637399a25914610916578063751039fc146109365780637571336a1461094b57600080fd5b806361cd759f146108955780636605bfda146108ab5780636eee65d2146108cb57806370a08231146108e157600080fd5b806339509351116103195780634a74bb02116102a15780635342acb4116102705780635342acb4146107f4578063537df3b61461082d578063557ed1ba1461084d5780635d0044ca14610860578063602bc62b1461088057600080fd5b80634a74bb021461077e57806351f205e41461079f57806352390c02146107b4578063525fa81f146107d457600080fd5b8063437823ec116102e8578063437823ec146106e457806344337ea1146107045780634549b0391461072457806349bd5a5e146107445780634a62bb651461076457600080fd5b8063395093511461066e5780633ad10ef61461068e5780634047ea3e146106ae5780634212516b146106c457600080fd5b80631d865c301161039c57806325519cf21161036b57806325519cf2146105d25780632d838119146105f2578063313ce567146106125780633221c93f1461062e5780633685d4191461064e57600080fd5b80631d865c301461055c5780631e293c101461057c578063200a692d1461059c57806323b872dd146105b257600080fd5b8063119c1840116103d8578063119c1840146104c957806313114a9d146104eb5780631694505e1461050a57806318160ddd1461054257600080fd5b806301339c211461041557806306fdde031461043f578063095ea7b31461047957806310d5de531461049957600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610cc6565b60405190151581526020015b60405180910390f35b34801561044b57600080fd5b50604080518082019091526008815267465554522044414f60c01b60208201525b60405161043691906140c3565b34801561048557600080fd5b5061042a610494366004613f8a565b610ffe565b3480156104a557600080fd5b5061042a6104b4366004613ea8565b60256020526000908152604090205460ff1681565b3480156104d557600080fd5b506104e96104e4366004614047565b611015565b005b3480156104f757600080fd5b506011545b604051908152602001610436565b34801561051657600080fd5b5060285461052a906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561054e57600080fd5b5066038d7ea4c680006104fc565b34801561056857600080fd5b506104e9610577366004614069565b611096565b34801561058857600080fd5b506104e9610597366004613ff0565b61117b565b3480156105a857600080fd5b506104fc601b5481565b3480156105be57600080fd5b5061042a6105cd366004613f1b565b611207565b3480156105de57600080fd5b506104e96105ed366004614069565b611270565b3480156105fe57600080fd5b506104fc61060d366004613ff0565b61134c565b34801561061e57600080fd5b5060405160098152602001610436565b34801561063a57600080fd5b5060055461052a906001600160a01b031681565b34801561065a57600080fd5b506104e9610669366004613ea8565b6113d0565b34801561067a57600080fd5b5061042a610689366004613f8a565b611587565b34801561069a57600080fd5b5060045461052a906001600160a01b031681565b3480156106ba57600080fd5b506104fc60215481565b3480156106d057600080fd5b506104e96106df366004613ea8565b6115bd565b3480156106f057600080fd5b506104e96106ff366004613ea8565b6116d0565b34801561071057600080fd5b506104e961071f366004613ea8565b61174e565b34801561073057600080fd5b506104fc61073f366004614022565b6117f2565b34801561075057600080fd5b5060295461052a906001600160a01b031681565b34801561077057600080fd5b50600b5461042a9060ff1681565b34801561078a57600080fd5b5060295461042a90600160a81b900460ff1681565b3480156107ab57600080fd5b506104e9611884565b3480156107c057600080fd5b506104e96107cf366004613ea8565b61197a565b3480156107e057600080fd5b506104e96107ef366004613ea8565b611b68565b34801561080057600080fd5b5061042a61080f366004613ea8565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561083957600080fd5b506104e9610848366004613ea8565b611c5e565b34801561085957600080fd5b50426104fc565b34801561086c57600080fd5b506104e961087b366004613ff0565b611cf6565b34801561088c57600080fd5b506002546104fc565b3480156108a157600080fd5b506104fc601f5481565b3480156108b757600080fd5b506104e96108c6366004613ea8565b611d82565b3480156108d757600080fd5b506104fc60225481565b3480156108ed57600080fd5b506104fc6108fc366004613ea8565b611e32565b34801561090d57600080fd5b506104e9611e91565b34801561092257600080fd5b5060035461052a906001600160a01b031681565b34801561094257600080fd5b5061042a611f05565b34801561095757600080fd5b506104e9610966366004613f5c565b611f44565b34801561097757600080fd5b5061042a610986366004613ee2565b611f99565b34801561099757600080fd5b506104fc601c5481565b3480156109ad57600080fd5b5061042a6109bc366004613ea8565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156109e657600080fd5b506000546001600160a01b031661052a565b348015610a0457600080fd5b50604080518082019091526004815263232aaa2960e11b602082015261046c565b348015610a3157600080fd5b506104e9610a40366004613f5c565b6121bf565b348015610a5157600080fd5b506027546104fc565b348015610a6657600080fd5b5061042a610a75366004613f8a565b612277565b348015610a8657600080fd5b5061042a610a95366004613f8a565b6122c6565b348015610aa657600080fd5b506104fc60245481565b348015610abc57600080fd5b506104fc601e5481565b348015610ad257600080fd5b5061042a610ae1366004613ea8565b60266020526000908152604090205460ff1681565b348015610b0257600080fd5b5060295461042a90600160b01b900460ff1681565b348015610b2357600080fd5b506104fc601a5481565b348015610b3957600080fd5b506104e9610b48366004613fb6565b6122d3565b348015610b5957600080fd5b5060065461052a906001600160a01b031681565b348015610b7957600080fd5b506104fc60235481565b348015610b8f57600080fd5b506104fc601d5481565b348015610ba557600080fd5b506104fc60195481565b348015610bbb57600080fd5b506104e9610bca366004613ea8565b61234a565b348015610bdb57600080fd5b506104fc610bea366004613ee2565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c2157600080fd5b506104e9610c30366004613ea8565b6123fa565b348015610c4157600080fd5b506104fc60205481565b348015610c5757600080fd5b506104fc60185481565b348015610c6d57600080fd5b506104e9610c7c366004613ea8565b612475565b348015610c8d57600080fd5b506104e961255f565b348015610ca257600080fd5b5061042a610cb1366004613ea8565b600c6020526000908152604090205460ff1681565b600080546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610cf190614118565b60405180910390fd5b602954600160b01b900460ff1615610d685760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cf1565b610d70612644565b737a250d5630b4cf539739df2c5dacb4c659f2488d610d90816001611f44565b602880546001600160a01b0319166001600160a01b038316908117909155610dc190309066038d7ea4c68000612689565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfa57600080fd5b505afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e329190613ec5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190613ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f329190613ec5565b602980546001600160a01b0319166001600160a01b03929092169182179055610f5c906001611f44565b602954610f73906001600160a01b031660016127ad565b60004711610fcf5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cf1565b610fe1610fdb30611e32565b47612808565b600754610ff6906001600160a01b0316612475565b600191505090565b600061100b338484612689565b5060015b92915050565b6000546001600160a01b0316331461103f5760405162461bcd60e51b8152600401610cf190614118565b6103e861104c82846141be565b1061108b5760405162461bcd60e51b815260206004820152600f60248201526e53706c6974206f766572203130302560881b6044820152606401610cf1565b601f91909155601e55565b6000546001600160a01b031633146110c05760405162461bcd60e51b8152600401610cf190614118565b601b839055601c829055601d819055600e816110dc84866141be565b6110e691906141be565b11156111345760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031342500006044820152606401610cf1565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111a55760405162461bcd60e51b8152600401610cf190614118565b600081116111e35760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf1565b6103e86111f78266038d7ea4c680006141f8565b61120191906141d6565b60235550565b60006112148484846128cb565b6112668433611261856040518060600160405280602881526020016142b2602891396001600160a01b038a166000908152600a60209081526040808320338452909152902054919061306a565b612689565b5060019392505050565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610cf190614118565b60188390556019829055601a819055600a816112b684866141be565b6112c091906141be565b111561130e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610cf1565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161116e565b60006010548211156113b35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cf1565b60006113bd6130a4565b90506113c983826130c7565b9392505050565b6000546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000908152600e602052604090205460ff166114625760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610cf1565b60005b600f5481101561158357816001600160a01b0316600f828154811061148c5761148c614275565b6000918252602090912001546001600160a01b0316141561157157600f80546114b790600190614217565b815481106114c7576114c7614275565b600091825260209091200154600f80546001600160a01b0390921691839081106114f3576114f3614275565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f80548061154b5761154b61425f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061157b8161422e565b915050611465565b5050565b336000818152600a602090815260408083206001600160a01b0387168452909152812054909161100b9185906112619086613109565b6000546001600160a01b031633146115e75760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03811661164b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf1565b600380546001600160a01b039081166000908152600d60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f12200021375691015b60405180910390a150565b6000546001600160a01b031633146116fa5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016116c5565b6000546001600160a01b031633146117785760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166117ce5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c697374203020616464726573730000000000006044820152606401610cf1565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b600066038d7ea4c6800083111561184b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cf1565b8161186a57600061185b84613168565b5093955061100f945050505050565b600061187584613168565b5092955061100f945050505050565b6000546001600160a01b031633146118ae5760405162461bcd60e51b8152600401610cf190614118565b60006118b930611e32565b90506118cd600a66038d7ea4c680006141d6565b8110156119425760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f2e3125206f6620746f6b656e7320737475636b206f6e20636f6e7472616374006064820152608401610cf1565b61194a6131b7565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016116c5565b6000546001600160a01b031633146119a45760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000908152600e602052604090205460ff1615611a0d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cf1565b600f54603290611a1e9060016141be565b1115611aa85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610cf1565b6001600160a01b03811660009081526008602052604090205415611b02576001600160a01b038116600090815260086020526040902054611ae89061134c565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b03163314611b925760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611bf65760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf1565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600d6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016116c5565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611cd55760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207573652030206164647265737360601b6044820152606401610cf1565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611d205760405162461bcd60e51b8152600401610cf190614118565b60008111611d5e5760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf1565b6103e8611d728266038d7ea4c680006141f8565b611d7c91906141d6565b60245550565b6000546001600160a01b03163314611dac5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b038116611df85760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf1565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6001600160a01b0381166000908152600e602052604081205460ff1615611e6f57506001600160a01b031660009081526009602052604090205490565b6001600160a01b03821660009081526008602052604090205461100f9061134c565b6000546001600160a01b03163314611ebb5760405162461bcd60e51b8152600401610cf190614118565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611f305760405162461bcd60e51b8152600401610cf190614118565b50600b805460ff1916600190811790915590565b6000546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fc45760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b03831661201a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cf1565b6001600160a01b0383163014156120735760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cf1565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156120b557600080fd5b505afa1580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190614009565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561213b57600080fd5b505af115801561214f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121739190613fd3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121e95760405162461bcd60e51b8152600401610cf190614118565b6029546001600160a01b038381169116141561226d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf1565b61158382826127ad565b600061100b3384611261856040518060600160405280602581526020016142da60259139336000908152600a602090815260408083206001600160a01b038d168452909152902054919061306a565b600061100b3384846128cb565b6000546001600160a01b031633146122fd5760405162461bcd60e51b8152600401610cf190614118565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906116c590831515815260200190565b6000546001600160a01b031633146123745760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166123c05760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf1565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146124245760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016116c5565b6000546001600160a01b0316331461249f5760405162461bcd60e51b8152600401610cf190614118565b6001600160a01b0381166125045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cf1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125895760405162461bcd60e51b8152600401610cf190614118565b602954600160b01b900460ff16156125f75760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cf1565b604051600090339047908381818185875af1925050503d8060008114612639576040519150601f19603f3d011682016040523d82523d6000602084013e61263e565b606091505b50505050565b6000546001600160a01b0316331461266e5760405162461bcd60e51b8152600401610cf190614118565b6029805461ffff60a81b191661010160a81b17905543602055565b6001600160a01b0383166126eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf1565b6001600160a01b03821661274c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf1565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556127fa576127fa8261197a565b8061158357611583826113d0565b6028546128209030906001600160a01b031684612689565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128c49190614095565b5050505050565b6001600160a01b03831661292f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf1565b6001600160a01b0382166129915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf1565b600081116129f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cf1565b6001600160a01b0383166000908152600c602052604090205460ff1615612a6a5760405162461bcd60e51b815260206004820152602560248201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060448201526430b236b4b760d91b6064820152608401610cf1565b6001600160a01b0382166000908152600c602052604090205460ff1615612adf5760405162461bcd60e51b815260206004820152602360248201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460448201526236b4b760e91b6064820152608401610cf1565b602954600160b01b900460ff16612b7b576001600160a01b0383166000908152600d602052604090205460ff1680612b2f57506001600160a01b0382166000908152600d602052604090205460ff165b612b7b5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610cf1565b600b5460ff1615612de5576000546001600160a01b03848116911614801590612bb257506000546001600160a01b03838116911614155b8015612bc657506001600160a01b03821615155b8015612bdd57506001600160a01b03821661dead14155b8015612bf35750602954600160a01b900460ff16155b15612de5576001600160a01b03831660009081526026602052604090205460ff168015612c3957506001600160a01b03821660009081526025602052604090205460ff16155b15612cb357602354811115612cae5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cf1565b612d6a565b6001600160a01b03821660009081526026602052604090205460ff168015612cf457506001600160a01b03831660009081526025602052604090205460ff16155b15612d6a57602354811115612d6a5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cf1565b6001600160a01b03821660009081526025602052604090205460ff16612de55760245481612d9784611e32565b612da191906141be565b1115612de55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cf1565b6000612dfe60225460215461310990919063ffffffff16565b90506000612e0b30611e32565b60275460295491925082101590600160a01b900460ff16158015612e385750602954600160a81b900460ff165b8015612e595750602954600090612e57906001600160a01b0316611e32565b115b8015612e655750600083115b8015612e8a57506001600160a01b0385166000908152600d602052604090205460ff16155b8015612eaf57506001600160a01b0386166000908152600d602052604090205460ff16155b8015612ed357506001600160a01b03851660009081526026602052604090205460ff165b8015612edc5750805b15612ee957612ee96131b7565b6001600160a01b0386166000908152600d602052604090205460019060ff1680612f2b57506001600160a01b0386166000908152600d602052604090205460ff165b15612f3d575060036017556000613055565b6001600160a01b03871660009081526026602052604090205460ff1615612fc657612f6661348f565b6001601755602054431415612f84576000601255605a601555613055565b602054612f929060016141be565b431415612fa85760006012556032601555613055565b601854601255601a54601954612fbe91906141be565b601555613055565b6001600160a01b03861660009081526026602052604090205460ff161561304757612fef61348f565b600260175560205443141561300d576000601255605a601555613055565b60205461301b9060016141be565b4314156130315760006012556032601555613055565b601b54601255601d54601c54612fbe91906141be565b61304f61348f565b60036017555b613061878787846134bd565b50505050505050565b6000818484111561308e5760405162461bcd60e51b8152600401610cf191906140c3565b50600061309b8486614217565b95945050505050565b60008060006130b16135e2565b90925090506130c082826130c7565b9250505090565b60006113c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613776565b60008061311683856141be565b9050838110156113c95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf1565b600080600080600080600080600061317f8a6137a4565b925092509250600080600061319d8d86866131986130a4565b6137e6565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b17905560006131d530611e32565b905060006022546021546131e991906141be565b9050600061320360026021546130c790919063ffffffff16565b905060006132118483613836565b90504761321d82613878565b60006132294783613836565b9050600061324c86613246602254856139e190919063ffffffff16565b906130c7565b9050600061325a8383613836565b905060006132796103e8613246601e54866139e190919063ffffffff16565b905060006132986103e8613246601f54876139e190919063ffffffff16565b90506132a48285614217565b93506132b08185614217565b60006021819055602281905560035460405192965090916001600160a01b039091169086908381818185875af1925050503d806000811461330d576040519150601f19603f3d011682016040523d82523d6000602084013e613312565b606091505b50506004546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613362576040519150601f19603f3d011682016040523d82523d6000602084013e613367565b606091505b50506006546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b5050809150506133cc8985612808565b60408051898152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613475576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461346a576040519150601f19603f3d011682016040523d82523d6000602084013e61346f565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b60125415801561349f5750601554155b156134a657565b601280546013556015805460165560009182905555565b806134ca576134ca61348f565b6001600160a01b0384166000908152600e602052604090205460ff16801561350b57506001600160a01b0383166000908152600e602052604090205460ff16155b156135205761351b848484613a60565b6135cc565b6001600160a01b0384166000908152600e602052604090205460ff1615801561356157506001600160a01b0383166000908152600e602052604090205460ff165b156135715761351b848484613b86565b6001600160a01b0384166000908152600e602052604090205460ff1680156135b157506001600160a01b0383166000908152600e602052604090205460ff165b156135c15761351b848484613c2f565b6135cc848484613ca2565b8061263e5761263e601354601255601654601555565b601054600090819066038d7ea4c68000825b600f5481101561373d578260086000600f848154811061361657613616614275565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061368157508160096000600f848154811061365a5761365a614275565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561369b5750506010549366038d7ea4c680009350915050565b6136e160086000600f84815481106136b5576136b5614275565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613836565b925061372960096000600f84815481106136fd576136fd614275565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613836565b9150806137358161422e565b9150506135f4565b506010546137529066038d7ea4c680006130c7565b82101561376d5750506010549266038d7ea4c6800092509050565b90939092509050565b600081836137975760405162461bcd60e51b8152600401610cf191906140c3565b50600061309b84866141d6565b6000806000806137b385613ce6565b905060006137c086613d02565b905060006137d8826137d28986613836565b90613836565b979296509094509092505050565b60008080806137f588866139e1565b9050600061380388876139e1565b9050600061381188886139e1565b90506000613823826137d28686613836565b939b939a50919850919650505050505050565b60006113c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061306a565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138ad576138ad614275565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561390157600080fd5b505afa158015613915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139399190613ec5565b8160018151811061394c5761394c614275565b6001600160a01b0392831660209182029290920101526028546139729130911684612689565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906139ab90859060009086903090429060040161414d565b600060405180830381600087803b1580156139c557600080fd5b505af11580156139d9573d6000803e3d6000fd5b505050505050565b6000826139f05750600061100f565b60006139fc83856141f8565b905082613a0985836141d6565b146113c95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cf1565b600080600080600080613a7287613168565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613aa49088613836565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613ad39087613836565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054613b029086613109565b6001600160a01b038916600090815260086020526040902055613b2481613d1e565b613b2e8483613e84565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7391815260200190565b60405180910390a3505050505050505050565b600080600080600080613b9887613168565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613bca9087613836565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054613c009084613109565b6001600160a01b038916600090815260096020908152604080832093909355600890522054613b029086613109565b600080600080600080613c4187613168565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613c739088613836565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613bca9087613836565b600080600080600080613cb487613168565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613ad39087613836565b600061100f6064613246601254856139e190919063ffffffff16565b600061100f6064613246601554856139e190919063ffffffff16565b60016017541415613d8f57601554601954613d3990836141f8565b613d4391906141d6565b60216000828254613d5491906141be565b9091555050601554601a54613d6990836141f8565b613d7391906141d6565b60226000828254613d8491906141be565b90915550613dfb9050565b60026017541415613dfb57601554601c54613daa90836141f8565b613db491906141d6565b60216000828254613dc591906141be565b9091555050601554601d54613dda90836141f8565b613de491906141d6565b60226000828254613df591906141be565b90915550505b6000613e056130a4565b90506000613e1383836139e1565b30600090815260086020526040902054909150613e309082613109565b30600090815260086020908152604080832093909355600e9052205460ff1615613e7f5730600090815260096020526040902054613e6e9084613109565b306000908152600960205260409020555b505050565b601054613e919083613836565b601055601154613ea19082613109565b6011555050565b600060208284031215613eba57600080fd5b81356113c98161428b565b600060208284031215613ed757600080fd5b81516113c98161428b565b60008060408385031215613ef557600080fd5b8235613f008161428b565b91506020830135613f108161428b565b809150509250929050565b600080600060608486031215613f3057600080fd5b8335613f3b8161428b565b92506020840135613f4b8161428b565b929592945050506040919091013590565b60008060408385031215613f6f57600080fd5b8235613f7a8161428b565b91506020830135613f10816142a3565b60008060408385031215613f9d57600080fd5b8235613fa88161428b565b946020939093013593505050565b600060208284031215613fc857600080fd5b81356113c9816142a3565b600060208284031215613fe557600080fd5b81516113c9816142a3565b60006020828403121561400257600080fd5b5035919050565b60006020828403121561401b57600080fd5b5051919050565b6000806040838503121561403557600080fd5b823591506020830135613f10816142a3565b6000806040838503121561405a57600080fd5b50508035926020909101359150565b60008060006060848603121561407e57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156140aa57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156140f0578581018301518582016040015282016140d4565b81811115614102576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561419d5784516001600160a01b031683529383019391830191600101614178565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156141d1576141d1614249565b500190565b6000826141f357634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561421257614212614249565b500290565b60008282101561422957614229614249565b500390565b600060001982141561424257614242614249565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146142a057600080fd5b50565b80151581146142a057600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205732e462b7c11da81fd98c0bbfb01fbc54cf6251eba651418560f333417f803964736f6c63430008070033

Deployed Bytecode Sourcemap

8209:32535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16742:1006;;;;;;;;;;;;;:::i;:::-;;;6167:14:1;;6160:22;6142:41;;6130:2;6115:18;16742:1006:0;;;;;;;;13518:85;;;;;;;;;;-1:-1:-1;13590:5:0;;;;;;;;;;;;-1:-1:-1;;;13590:5:0;;;;13518:85;;;;;;;:::i;14515:193::-;;;;;;;;;;-1:-1:-1;14515:193:0;;;;;:::i;:::-;;:::i;10626:63::-;;;;;;;;;;-1:-1:-1;10626:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38163:281;;;;;;;;;;-1:-1:-1;38163:281:0;;;;;:::i;:::-;;:::i;:::-;;16054:89;;;;;;;;;;-1:-1:-1;16125:10:0;;16054:89;;;21114:25:1;;;21102:2;21087:18;16054:89:0;20968:177:1;10818:39:0;;;;;;;;;;-1:-1:-1;10818:39:0;;;;-1:-1:-1;;;;;10818:39:0;;;;;;-1:-1:-1;;;;;4526:32:1;;;4508:51;;4496:2;4481:18;10818:39:0;4362:203:1;13801:97:0;;;;;;;;;;-1:-1:-1;9286:15:0;13801:97;;37676:479;;;;;;;;;;-1:-1:-1;37676:479:0;;;;;:::i;:::-;;:::i;36820:189::-;;;;;;;;;;-1:-1:-1;36820:189:0;;;;;:::i;:::-;;:::i;10045:30::-;;;;;;;;;;;;;;;;14716:448;;;;;;;;;;-1:-1:-1;14716:448:0;;;;;:::i;:::-;;:::i;37207:461::-;;;;;;;;;;-1:-1:-1;37207:461:0;;;;;:::i;:::-;;:::i;19022:322::-;;;;;;;;;;-1:-1:-1;19022:322:0;;;;;:::i;:::-;;:::i;13708:85::-;;;;;;;;;;-1:-1:-1;13708:85:0;;9530:1;22601:36:1;;22589:2;22574:18;13708:85:0;22459:184:1;8533:102:0;;;;;;;;;;-1:-1:-1;8533:102:0;;;;-1:-1:-1;;;;;8533:102:0;;;19856:471;;;;;;;;;;-1:-1:-1;19856:471:0;;;;;:::i;:::-;;:::i;15172:302::-;;;;;;;;;;-1:-1:-1;15172:302:0;;;;;:::i;:::-;;:::i;8430:96::-;;;;;;;;;;-1:-1:-1;8430:96:0;;;;-1:-1:-1;;;;;8430:96:0;;;10462:37;;;;;;;;;;;;;;;;38452:390;;;;;;;;;;-1:-1:-1;38452:390:0;;;;;:::i;:::-;;:::i;36503:152::-;;;;;;;;;;-1:-1:-1;36503:152:0;;;;;:::i;:::-;;:::i;27398:175::-;;;;;;;;;;-1:-1:-1;27398:175:0;;;;;:::i;:::-;;:::i;18533:481::-;;;;;;;;;;-1:-1:-1;18533:481:0;;;;;:::i;:::-;;:::i;10864:28::-;;;;;;;;;;-1:-1:-1;10864:28:0;;;;-1:-1:-1;;;;;10864:28:0;;;8965:33;;;;;;;;;;-1:-1:-1;8965:33:0;;;;;;;;10937:41;;;;;;;;;;-1:-1:-1;10937:41:0;;;;-1:-1:-1;;;10937:41:0;;;;;;27046:341;;;;;;;;;;;;;:::i;19352:496::-;;;;;;;;;;-1:-1:-1;19352:496:0;;;;;:::i;:::-;;:::i;38850:378::-;;;;;;;;;;-1:-1:-1;38850:378:0;;;;;:::i;:::-;;:::i;36369:126::-;;;;;;;;;;-1:-1:-1;36369:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36460:27:0;36436:4;36460:27;;;:18;:27;;;;;;;;;36369:126;27581:175;;;;;;;;;;-1:-1:-1;27581:175:0;;;;;:::i;:::-;;:::i;1509:90::-;;;;;;;;;;-1:-1:-1;1576:15:0;1509:90;;37017:182;;;;;;;;;;-1:-1:-1;37017:182:0;;;;;:::i;:::-;;:::i;1411:90::-;;;;;;;;;;-1:-1:-1;1484:9:0;;1411:90;;10326:48;;;;;;;;;;;;;;;;39481:261;;;;;;;;;;-1:-1:-1;39481:261:0;;;;;:::i;:::-;;:::i;10506:32::-;;;;;;;;;;;;;;;;13906:198;;;;;;;;;;-1:-1:-1;13906:198:0;;;;;:::i;:::-;;:::i;966:148::-;;;;;;;;;;;;;:::i;8326:97::-;;;;;;;;;;-1:-1:-1;8326:97:0;;;;-1:-1:-1;;;;;8326:97:0;;;16157:119;;;;;;;;;;;;;:::i;16284:167::-;;;;;;;;;;-1:-1:-1;16284:167:0;;;;;:::i;:::-;;:::i;39971:488::-;;;;;;;;;;-1:-1:-1;39971:488:0;;;;;:::i;:::-;;:::i;10082:36::-;;;;;;;;;;;;;;;;15892:154;;;;;;;;;;-1:-1:-1;15892:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;16018:20:0;15989:4;16018:20;;;:11;:20;;;;;;;;;15892:154;752:79;;;;;;;;;;-1:-1:-1;790:7:0;817:6;-1:-1:-1;;;;;817:6:0;752:79;;13611:89;;;;;;;;;;-1:-1:-1;13685:7:0;;;;;;;;;;;;-1:-1:-1;;;13685:7:0;;;;13611:89;;17886:304;;;;;;;;;;-1:-1:-1;17886:304:0;;;;;:::i;:::-;;:::i;17756:122::-;;;;;;;;;;-1:-1:-1;17847:23:0;;17756:122;;15482:402;;;;;;;;;;-1:-1:-1;15482:402:0;;;;;:::i;:::-;;:::i;14112:201::-;;;;;;;;;;-1:-1:-1;14112:201:0;;;;;:::i;:::-;;:::i;10589:30::-;;;;;;;;;;;;;;;;10276:43;;;;;;;;;;;;;;;;10704:57;;;;;;;;;;-1:-1:-1;10704:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10985:33;;;;;;;;;;-1:-1:-1;10985:33:0;;;;-1:-1:-1;;;10985:33:0;;;;;;10006:30;;;;;;;;;;;;;;;;39750:171;;;;;;;;;;-1:-1:-1;39750:171:0;;;;;:::i;:::-;;:::i;8642:101::-;;;;;;;;;;-1:-1:-1;8642:101:0;;;;-1:-1:-1;;;;;8642:101:0;;;10547:35;;;;;;;;;;;;;;;;10125:32;;;;;;;;;;;;;;;;9964:35;;;;;;;;;;;;;;;;39236:237;;;;;;;;;;-1:-1:-1;39236:237:0;;;;;:::i;:::-;;:::i;14321:186::-;;;;;;;;;;-1:-1:-1;14321:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;14472:18:0;;;14440:7;14472:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14321:186;36663:149;;;;;;;;;;-1:-1:-1;36663:149:0;;;;;:::i;:::-;;:::i;10383:37::-;;;;;;;;;;;;;;;;9928:29;;;;;;;;;;;;;;;;1122:281;;;;;;;;;;-1:-1:-1;1122:281:0;;;;;:::i;:::-;;:::i;40473:268::-;;;;;;;;;;;;;:::i;9005:41::-;;;;;;;;;;-1:-1:-1;9005:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16742:1006;16788:4;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;;;;;;;;;16814:13:::1;::::0;-1:-1:-1;;;16814:13:0;::::1;;;16813:14;16805:70;;;::::0;-1:-1:-1;;;16805:70:0;;18453:2:1;16805:70:0::1;::::0;::::1;18435:21:1::0;18492:2;18472:18;;;18465:30;18531:34;18511:18;;;18504:62;-1:-1:-1;;;18582:18:1;;;18575:41;18633:19;;16805:70:0::1;18251:407:1::0;16805:70:0::1;16888:15;:13;:15::i;:::-;16981:42;17045:58;16981:42:::0;17098:4:::1;17045:25;:58::i;:::-;17114:15;:34:::0;;-1:-1:-1;;;;;;17114:34:0::1;-1:-1:-1::0;;;;;17114:34:0;::::1;::::0;;::::1;::::0;;;17159:58:::1;::::0;17176:4:::1;::::0;9286:15:::1;17159:8;:58::i;:::-;17262:16;-1:-1:-1::0;;;;;17262:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17244:70:0::1;;17323:4;17330:16;-1:-1:-1::0;;;;;17330:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17244:110;::::0;-1:-1:-1;;;;;;17244:110:0::1;::::0;;;;;;-1:-1:-1;;;;;5024:15:1;;;17244:110:0::1;::::0;::::1;5006:34:1::0;5076:15;;5056:18;;;5049:43;4941:18;;17244:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17228:13;:126:::0;;-1:-1:-1;;;;;;17228:126:0::1;-1:-1:-1::0;;;;;17228:126:0;;;::::1;::::0;;::::1;::::0;;17365:55:::1;::::0;-1:-1:-1;17365:25:0::1;:55::i;:::-;17468:13;::::0;17431:58:::1;::::0;-1:-1:-1;;;;;17468:13:0::1;::::0;17431:28:::1;:58::i;:::-;17546:1;17522:21;:25;17500:110;;;::::0;-1:-1:-1;;;17500:110:0;;9212:2:1;17500:110:0::1;::::0;::::1;9194:21:1::0;9251:2;9231:18;;;9224:30;9290:34;9270:18;;;9263:62;-1:-1:-1;;;9341:18:1;;;9334:33;9384:19;;17500:110:0::1;9010:399:1::0;17500:110:0::1;17621:61;17634:24;17652:4;17634:9;:24::i;:::-;17660:21;17621:12;:61::i;:::-;17711:6;::::0;17693:25:::1;::::0;-1:-1:-1;;;;;17711:6:0::1;17693:17;:25::i;:::-;17736:4;17729:11;;;16742:1006:::0;:::o;14515:193::-;14617:4;14639:39;190:10;14662:7;14671:6;14639:8;:39::i;:::-;-1:-1:-1;14696:4:0;14515:193;;;;;:::o;38163:281::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;38314:4:::1;38287:24;38303:8:::0;38287:13;:24:::1;:::i;:::-;:31;38279:59;;;::::0;-1:-1:-1;;;38279:59:0;;9616:2:1;38279:59:0::1;::::0;::::1;9598:21:1::0;9655:2;9635:18;;;9628:30;-1:-1:-1;;;9674:18:1;;;9667:45;9729:18;;38279:59:0::1;9414:339:1::0;38279:59:0::1;38349:27;:43:::0;;;;38403:22:::1;:33:::0;38163:281::o;37676:479::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;37827:11:::1;:24:::0;;;37862:17:::1;:36:::0;;;37909:12:::1;:26:::0;;;38018:2:::1;37924:11:::0;37968:31:::1;37882:16:::0;37841:10;37968:31:::1;:::i;:::-;:46;;;;:::i;:::-;:52;;37946:132;;;::::0;-1:-1:-1;;;37946:132:0;;17689:2:1;37946:132:0::1;::::0;::::1;17671:21:1::0;17728:2;17708:18;;;17701:30;17767:32;17747:18;;;17740:60;17817:18;;37946:132:0::1;17487:354:1::0;37946:132:0::1;38094:53;::::0;;22337:25:1;;;22393:2;22378:18;;22371:34;;;22421:18;;;22414:34;;;38094:53:0::1;::::0;22325:2:1;22310:18;38094:53:0::1;;;;;;;;37676:479:::0;;;:::o;36820:189::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;36922:1:::1;36910:9;:13;36902:37;;;::::0;-1:-1:-1;;;36902:37:0;;13473:2:1;36902:37:0::1;::::0;::::1;13455:21:1::0;13512:2;13492:18;;;13485:30;-1:-1:-1;;;13531:18:1;;;13524:41;13582:18;;36902:37:0::1;13271:335:1::0;36902:37:0::1;36997:4;36974:19;36984:9:::0;9286:15:::1;36974:19;:::i;:::-;36973:28;;;;:::i;:::-;36950:20;:51:::0;-1:-1:-1;36820:189:0:o;14716:448::-;14850:4;14867:36;14877:6;14885:9;14896:6;14867:9;:36::i;:::-;14914:220;14937:6;190:10;14985:138;15041:6;14985:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14985:19:0;;;;;;:11;:19;;;;;;;;190:10;14985:33;;;;;;;;;;:37;:138::i;:::-;14914:8;:220::i;:::-;-1:-1:-1;15152:4:0;14716:448;;;;;:::o;37207:461::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;37354:10:::1;:22:::0;;;37387:16:::1;:34:::0;;;37432:11:::1;:24:::0;;;37536:2:::1;37446:10:::0;37489:29:::1;37406:15:::0;37367:9;37489:29:::1;:::i;:::-;:43;;;;:::i;:::-;:49;;37467:128;;;::::0;-1:-1:-1;;;37467:128:0;;13115:2:1;37467:128:0::1;::::0;::::1;13097:21:1::0;13154:2;13134:18;;;13127:30;13193:31;13173:18;;;13166:59;13242:18;;37467:128:0::1;12913:353:1::0;37467:128:0::1;37611:49;::::0;;22337:25:1;;;22393:2;22378:18;;22371:34;;;22421:18;;;22414:34;;;37611:49:0::1;::::0;22325:2:1;22310:18;37611:49:0::1;22135:319:1::0;19022:322:0;19116:7;19174;;19163;:18;;19141:110;;;;-1:-1:-1;;;19141:110:0;;7991:2:1;19141:110:0;;;7973:21:1;8030:2;8010:18;;;8003:30;8069:34;8049:18;;;8042:62;-1:-1:-1;;;8120:18:1;;;8113:40;8170:19;;19141:110:0;7789:406:1;19141:110:0;19262:19;19284:10;:8;:10::i;:::-;19262:32;-1:-1:-1;19312:24:0;:7;19262:32;19312:11;:24::i;:::-;19305:31;19022:322;-1:-1:-1;;;19022:322:0:o;19856:471::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19934:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19926:56;;;::::0;-1:-1:-1;;;19926:56:0;;12357:2:1;19926:56:0::1;::::0;::::1;12339:21:1::0;12396:2;12376:18;;;12369:30;12435:25;12415:18;;;12408:53;12478:18;;19926:56:0::1;12155:347:1::0;19926:56:0::1;19998:9;19993:327;20017:9;:16:::0;20013:20;::::1;19993:327;;;20075:7;-1:-1:-1::0;;;;;20059:23:0::1;:9;20069:1;20059:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20059:12:0::1;:23;20055:254;;;20118:9;20128:16:::0;;:20:::1;::::0;20147:1:::1;::::0;20128:20:::1;:::i;:::-;20118:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20103:9:::1;:12:::0;;-1:-1:-1;;;;;20118:31:0;;::::1;::::0;20113:1;;20103:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20103:46:0::1;-1:-1:-1::0;;;;;20103:46:0;;::::1;;::::0;;20168:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20207:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20207:28:0::1;::::0;;20254:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20254:15:0;;;;;-1:-1:-1;;;;;;20254:15:0::1;::::0;;;;;19993:327:::1;19856:471:::0;:::o;20055:254::-:1;20035:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19993:327;;;;19856:471:::0;:::o;15172:302::-;190:10;15289:4;15383:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15383:34:0;;;;;;;;;;15289:4;;15311:133;;15361:7;;15383:50;;15422:10;15383:38;:50::i;38452:390::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38550:26:0;::::1;38528:113;;;::::0;-1:-1:-1;;;38528:113:0;;14579:2:1;38528:113:0::1;::::0;::::1;14561:21:1::0;14618:2;14598:18;;;14591:30;14657:34;14637:18;;;14630:62;-1:-1:-1;;;14708:18:1;;;14701:35;14753:19;;38528:113:0::1;14377:401:1::0;38528:113:0::1;38671:11;::::0;;-1:-1:-1;;;;;38671:11:0;;::::1;38686:5;38652:31:::0;;;:18:::1;:31;::::0;;;;;;;:39;;-1:-1:-1;;38652:39:0;;::::1;::::0;;;38702:35;;-1:-1:-1;;;;;;38702:35:0::1;::::0;;::::1;::::0;;::::1;::::0;;;38748:31;;;;;;;:38;;;;::::1;-1:-1:-1::0;38748:38:0::1;::::0;;;38802:32;4508:51:1;;;38802:32:0::1;::::0;4481:18:1;38802:32:0::1;;;;;;;;38452:390:::0;:::o;36503:152::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36574:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;36574:34:0::1;36604:4;36574:34;::::0;;36624:23;;4508:51:1;;;36624:23:0::1;::::0;4481:18:1;36624:23:0::1;4362:203:1::0;27398:175:0;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27477:21:0;::::1;27469:60;;;::::0;-1:-1:-1;;;27469:60:0;;20815:2:1;27469:60:0::1;::::0;::::1;20797:21:1::0;20854:2;20834:18;;;20827:30;20893:28;20873:18;;;20866:56;20939:18;;27469:60:0::1;20613:350:1::0;27469:60:0::1;-1:-1:-1::0;;;;;27540:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;27540:25:0::1;27561:4;27540:25;::::0;;27398:175::o;18533:481::-;18653:7;9286:15;18686:7;:18;;18678:62;;;;-1:-1:-1;;;18678:62:0;;14219:2:1;18678:62:0;;;14201:21:1;14258:2;14238:18;;;14231:30;14297:33;14277:18;;;14270:61;14348:18;;18678:62:0;14017:355:1;18678:62:0;18756:17;18751:256;;18791:15;18820:19;18831:7;18820:10;:19::i;:::-;-1:-1:-1;18790:49:0;;-1:-1:-1;18854:14:0;;-1:-1:-1;;;;;18854:14:0;18751:256;18904:23;18939:19;18950:7;18939:10;:19::i;:::-;-1:-1:-1;18901:57:0;;-1:-1:-1;18973:22:0;;-1:-1:-1;;;;;18973:22:0;27046:341;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;27101:23:::1;27127:24;27145:4;27127:9;:24::i;:::-;27101:50:::0;-1:-1:-1;27203:12:0::1;27213:2;9286:15;27203:12;:::i;:::-;27184:15;:31;;27162:144;;;::::0;-1:-1:-1;;;27162:144:0;;11098:2:1;27162:144:0::1;::::0;::::1;11080:21:1::0;11137:2;11117:18;;;11110:30;11176:34;11156:18;;;11149:62;11247:33;11227:18;;;11220:61;11298:19;;27162:144:0::1;10896:427:1::0;27162:144:0::1;27317:10;:8;:10::i;:::-;27343:36;::::0;27363:15:::1;21114:25:1::0;;27343:36:0::1;::::0;21102:2:1;21087:18;27343:36:0::1;20968:177:1::0;19352:496:0;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19433:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19432:21;19424:61;;;::::0;-1:-1:-1;;;19424:61:0;;10742:2:1;19424:61:0::1;::::0;::::1;10724:21:1::0;10781:2;10761:18;;;10754:30;10820:29;10800:18;;;10793:57;10867:18;;19424:61:0::1;10540:351:1::0;19424:61:0::1;19518:9;:16:::0;19542:2:::1;::::0;19518:20:::1;::::0;19537:1:::1;19518:20;:::i;:::-;:26;;19496:153;;;::::0;-1:-1:-1;;;19496:153:0;;19213:2:1;19496:153:0::1;::::0;::::1;19195:21:1::0;19252:2;19232:18;;;19225:30;19291:34;19271:18;;;19264:62;19362:34;19342:18;;;19335:62;-1:-1:-1;;;19413:19:1;;;19406:44;19467:19;;19496:153:0::1;19011:481:1::0;19496:153:0::1;-1:-1:-1::0;;;;;19664:16:0;::::1;19683:1;19664:16:::0;;;:7:::1;:16;::::0;;;;;:20;19660:109:::1;;-1:-1:-1::0;;;;;19740:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19720:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19701:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19660:109:::1;-1:-1:-1::0;;;;;19779:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19779:27:0::1;19802:4;19779:27:::0;;::::1;::::0;;;19817:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19817:23:0::1;::::0;;::::1;::::0;;19352:496::o;38850:378::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38956:31:0;::::1;38934:118;;;::::0;-1:-1:-1;;;38934:118:0;;12709:2:1;38934:118:0::1;::::0;::::1;12691:21:1::0;12748:2;12728:18;;;12721:30;12787:34;12767:18;;;12760:62;-1:-1:-1;;;12838:18:1;;;12831:35;12883:19;;38934:118:0::1;12507:401:1::0;38934:118:0::1;39063:16;:45:::0;;-1:-1:-1;;;;;;39063:45:0::1;-1:-1:-1::0;;;;;39063:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;39119:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;39119:43:0::1;-1:-1:-1::0;39119:43:0::1;::::0;;39178:42;;4508:51:1;;;39178:42:0::1;::::0;4481:18:1;39178:42:0::1;4362:203:1::0;27581:175:0;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27665:21:0;::::1;27657:54;;;::::0;-1:-1:-1;;;27657:54:0;;19699:2:1;27657:54:0::1;::::0;::::1;19681:21:1::0;19738:2;19718:18;;;19711:30;-1:-1:-1;;;19757:18:1;;;19750:50;19817:18;;27657:54:0::1;19497:344:1::0;27657:54:0::1;-1:-1:-1::0;;;;;27722:18:0::1;27743:5;27722:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;27722:26:0::1;::::0;;27581:175::o;37017:182::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;37114:1:::1;37099:12;:16;37091:40;;;::::0;-1:-1:-1;;;37091:40:0;;13473:2:1;37091:40:0::1;::::0;::::1;13455:21:1::0;13512:2;13492:18;;;13485:30;-1:-1:-1;;;13531:18:1;;;13524:41;13582:18;;37091:40:0::1;13271:335:1::0;37091:40:0::1;37187:4;37161:22;37171:12:::0;9286:15:::1;37161:22;:::i;:::-;37160:31;;;;:::i;:::-;37142:15;:49:::0;-1:-1:-1;37017:182:0:o;39481:261::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39573:30:0;::::1;39565:62;;;::::0;-1:-1:-1;;;39565:62:0;;17341:2:1;39565:62:0::1;::::0;::::1;17323:21:1::0;17380:2;17360:18;;;17353:30;-1:-1:-1;;;17399:18:1;;;17392:49;17458:18;;39565:62:0::1;17139:343:1::0;39565:62:0::1;39638:15;:43:::0;;-1:-1:-1;;;;;39638:43:0;;::::1;-1:-1:-1::0;;;;;;39638:43:0;;::::1;::::0;::::1;::::0;;:15:::1;39692:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;39692:42:0::1;39638:43:::0;39692:42:::1;::::0;;39481:261::o;13906:198::-;-1:-1:-1;;;;;13996:20:0;;13972:7;13996:20;;;:11;:20;;;;;;;;13992:49;;;-1:-1:-1;;;;;;14025:16:0;;;;;:7;:16;;;;;;;13906:198::o;13992:49::-;-1:-1:-1;;;;;14079:16:0;;;;;;:7;:16;;;;;;14059:37;;:19;:37::i;966:148::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;1073:1:::1;1057:6:::0;;1036:40:::1;::::0;-1:-1:-1;;;;;1057:6:0;;::::1;::::0;1036:40:::1;::::0;1073:1;;1036:40:::1;1104:1;1087:19:::0;;-1:-1:-1;;;;;;1087:19:0::1;::::0;;966:148::o;16157:119::-;16209:4;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;16226:14:0::1;:20:::0;;-1:-1:-1;;16226:20:0::1;16242:4;16226:20:::0;;::::1;::::0;;;16157:119;:::o;16284:167::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16397:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16397:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16284:167::o;39971:488::-;40085:10;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40121:20:0;::::1;40113:59;;;::::0;-1:-1:-1;;;40113:59:0;;15407:2:1;40113:59:0::1;::::0;::::1;15389:21:1::0;15446:2;15426:18;;;15419:30;15485:28;15465:18;;;15458:56;15531:18;;40113:59:0::1;15205:350:1::0;40113:59:0::1;-1:-1:-1::0;;;;;40191:23:0;::::1;40209:4;40191:23;;40183:64;;;::::0;-1:-1:-1;;;40183:64:0;;7634:2:1;40183:64:0::1;::::0;::::1;7616:21:1::0;7673:2;7653:18;;;7646:30;7712;7692:18;;;7685:58;7760:18;;40183:64:0::1;7432:352:1::0;40183:64:0::1;40285:39;::::0;-1:-1:-1;;;40285:39:0;;40318:4:::1;40285:39;::::0;::::1;4508:51:1::0;40258:24:0::1;::::0;-1:-1:-1;;;;;40285:24:0;::::1;::::0;::::1;::::0;4481:18:1;;40285:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40343:46;::::0;-1:-1:-1;;;40343:46:0;;-1:-1:-1;;;;;5295:32:1;;;40343:46:0::1;::::0;::::1;5277:51:1::0;5344:18;;;5337:34;;;40258:66:0;;-1:-1:-1;40343:23:0;;::::1;::::0;::::1;::::0;5250:18:1;;40343:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40405;::::0;;-1:-1:-1;;;;;5295:32:1;;5277:51;;5359:2;5344:18;;5337:34;;;40335:54:0;;-1:-1:-1;40405:46:0::1;::::0;5250:18:1;40405:46:0::1;;;;;;;40102:357;39971:488:::0;;;;:::o;17886:304::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;18030:13:::1;::::0;-1:-1:-1;;;;;18022:21:0;;::::1;18030:13:::0;::::1;18022:21;;18000:128;;;::::0;-1:-1:-1;;;18000:128:0;;10316:2:1;18000:128:0::1;::::0;::::1;10298:21:1::0;10355:2;10335:18;;;10328:30;10394:34;10374:18;;;10367:62;10465:27;10445:18;;;10438:55;10510:19;;18000:128:0::1;10114:421:1::0;18000:128:0::1;18141:41;18170:4;18176:5;18141:28;:41::i;15482:402::-:0;15604:4;15626:228;190:10;15676:7;15698:145;15755:15;15698:145;;;;;;;;;;;;;;;;;190:10;15698:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15698:34:0;;;;;;;;;;;;:38;:145::i;14112:201::-;14219:4;14241:42;190:10;14265:9;14276:6;14241:9;:42::i;39750:171::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;39827:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39827:32:0::1;-1:-1:-1::0;;;;39827:32:0;;::::1;;::::0;;39875:38:::1;::::0;::::1;::::0;::::1;::::0;39851:8;6167:14:1;6160:22;6142:41;;6130:2;6115:18;;6002:187;39236:237:0;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39324:25:0;::::1;39316:57;;;::::0;-1:-1:-1;;;39316:57:0;;17341:2:1;39316:57:0::1;::::0;::::1;17323:21:1::0;17380:2;17360:18;;;17353:30;-1:-1:-1;;;17399:18:1;;;17392:49;17458:18;;39316:57:0::1;17139:343:1::0;39316:57:0::1;39384:10;:33:::0;;-1:-1:-1;;;;;39384:33:0;;::::1;-1:-1:-1::0;;;;;;39384:33:0;;::::1;::::0;::::1;::::0;;:10:::1;39428:30:::0;;;:18:::1;:30;::::0;;;;:37;;-1:-1:-1;;39428:37:0::1;39384:33:::0;39428:37:::1;::::0;;39236:237::o;36663:149::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36732:27:0;::::1;36762:5;36732:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;36732:35:0::1;::::0;;36783:21;;4508:51:1;;;36783:21:0::1;::::0;4481:18:1;36783:21:0::1;4362:203:1::0;1122:281:0;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1225:22:0;::::1;1203:110;;;::::0;-1:-1:-1;;;1203:110:0;;8402:2:1;1203:110:0::1;::::0;::::1;8384:21:1::0;8441:2;8421:18;;;8414:30;8480:34;8460:18;;;8453:62;-1:-1:-1;;;8531:18:1;;;8524:36;8577:19;;1203:110:0::1;8200:402:1::0;1203:110:0::1;1350:6;::::0;;1329:38:::1;::::0;-1:-1:-1;;;;;1329:38:0;;::::1;::::0;1350:6;::::1;::::0;1329:38:::1;::::0;::::1;1378:6;:17:::0;;-1:-1:-1;;;;;;1378:17:0::1;-1:-1:-1::0;;;;;1378:17:0;;;::::1;::::0;;;::::1;::::0;;1122:281::o;40473:268::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;40540:13:::1;::::0;-1:-1:-1;;;40540:13:0;::::1;;;40539:14;40531:70;;;::::0;-1:-1:-1;;;40531:70:0;;20048:2:1;40531:70:0::1;::::0;::::1;20030:21:1::0;20087:2;20067:18;;;20060:30;20126:34;20106:18;;;20099:62;-1:-1:-1;;;20177:18:1;;;20170:41;20228:19;;40531:70:0::1;19846:407:1::0;40531:70:0::1;40649:84;::::0;40612:12:::1;::::0;40657:10:::1;::::0;40682:21:::1;::::0;40612:12;40649:84;40612:12;40649:84;40682:21;40657:10;40649:84:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;40473:268:0:o;16505:166::-;879:6;;-1:-1:-1;;;;;879:6:0;190:10;879:22;871:67;;;;-1:-1:-1;;;871:67:0;;;;;;;:::i;:::-;16560:13:::1;:20:::0;;-1:-1:-1;;;;16591:28:0;-1:-1:-1;;;16591:28:0;;;16651:12:::1;16630:18;:33:::0;16505:166::o;20335:371::-;-1:-1:-1;;;;;20462:19:0;;20454:68;;;;-1:-1:-1;;;20454:68:0;;18048:2:1;20454:68:0;;;18030:21:1;18087:2;18067:18;;;18060:30;18126:34;18106:18;;;18099:62;-1:-1:-1;;;18177:18:1;;;18170:34;18221:19;;20454:68:0;17846:400:1;20454:68:0;-1:-1:-1;;;;;20541:21:0;;20533:68;;;;-1:-1:-1;;;20533:68:0;;8809:2:1;20533:68:0;;;8791:21:1;8848:2;8828:18;;;8821:30;8887:34;8867:18;;;8860:62;-1:-1:-1;;;8938:18:1;;;8931:32;8980:19;;20533:68:0;8607:398:1;20533:68:0;-1:-1:-1;;;;;20614:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20666:32;;21114:25:1;;;20666:32:0;;21087:18:1;20666:32:0;;;;;;;20335:371;;;:::o;18198:327::-;-1:-1:-1;;;;;18281:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;18281:39:0;;;;;;;;18331:31;:37;;;;;;;:45;;;;;;;;;;;18387:61;;18413:23;18431:4;18413:17;:23::i;:::-;18463:5;18458:60;;18485:21;18501:4;18485:15;:21::i;28244:373::-;28357:15;;28325:62;;28342:4;;-1:-1:-1;;;;;28357:15:0;28375:11;28325:8;:62::i;:::-;28398:15;;28552:16;;28398:211;;-1:-1:-1;;;28398:211:0;;28472:4;28398:211;;;5731:34:1;5781:18;;;5774:34;;;28398:15:0;5824:18:1;;;5817:34;;;5867:18;;;5860:34;-1:-1:-1;;;;;28552:16:0;;;5910:19:1;;;5903:44;28583:15:0;5963:19:1;;;5956:35;28398:15:0;;;:31;;28438:9;;5665:19:1;;28398:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28244:373;;:::o;20714:4481::-;-1:-1:-1;;;;;20836:18:0;;20828:68;;;;-1:-1:-1;;;20828:68:0;;16935:2:1;20828:68:0;;;16917:21:1;16974:2;16954:18;;;16947:30;17013:34;16993:18;;;16986:62;-1:-1:-1;;;17064:18:1;;;17057:35;17109:19;;20828:68:0;16733:401:1;20828:68:0;-1:-1:-1;;;;;20915:16:0;;20907:64;;;;-1:-1:-1;;;20907:64:0;;7230:2:1;20907:64:0;;;7212:21:1;7269:2;7249:18;;;7242:30;7308:34;7288:18;;;7281:62;-1:-1:-1;;;7359:18:1;;;7352:33;7402:19;;20907:64:0;7028:399:1;20907:64:0;20999:1;20990:6;:10;20982:64;;;;-1:-1:-1;;;20982:64:0;;16525:2:1;20982:64:0;;;16507:21:1;16564:2;16544:18;;;16537:30;16603:34;16583:18;;;16576:62;-1:-1:-1;;;16654:18:1;;;16647:39;16703:19;;20982:64:0;16323:405:1;20982:64:0;-1:-1:-1;;;;;21066:15:0;;;;;;:9;:15;;;;;;;;21065:16;21057:66;;;;-1:-1:-1;;;21057:66:0;;13813:2:1;21057:66:0;;;13795:21:1;13852:2;13832:18;;;13825:30;13891:34;13871:18;;;13864:62;-1:-1:-1;;;13942:18:1;;;13935:35;13987:19;;21057:66:0;13611:401:1;21057:66:0;-1:-1:-1;;;;;21143:13:0;;;;;;:9;:13;;;;;;;;21142:14;21134:62;;;;-1:-1:-1;;;21134:62:0;;11953:2:1;21134:62:0;;;11935:21:1;11992:2;11972:18;;;11965:30;12031:34;12011:18;;;12004:62;-1:-1:-1;;;12082:18:1;;;12075:33;12125:19;;21134:62:0;11751:399:1;21134:62:0;21214:13;;-1:-1:-1;;;21214:13:0;;;;21209:185;;-1:-1:-1;;;;;21270:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;21298:22:0;;;;;;:18;:22;;;;;;;;21270:50;21244:138;;;;-1:-1:-1;;;21244:138:0;;20460:2:1;21244:138:0;;;20442:21:1;20499:2;20479:18;;;20472:30;20538:28;20518:18;;;20511:56;20584:18;;21244:138:0;20258:350:1;21244:138:0;21410:14;;;;21406:1316;;;790:7;817:6;-1:-1:-1;;;;;21463:15:0;;;817:6;;21463:15;;;;:49;;-1:-1:-1;790:7:0;817:6;-1:-1:-1;;;;;21499:13:0;;;817:6;;21499:13;;21463:49;:86;;;;-1:-1:-1;;;;;;21533:16:0;;;;21463:86;:128;;;;-1:-1:-1;;;;;;21570:21:0;;21584:6;21570:21;;21463:128;:166;;;;-1:-1:-1;21613:16:0;;-1:-1:-1;;;21613:16:0;;;;21612:17;21463:166;21441:1270;;;-1:-1:-1;;;;;21718:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;21775:35:0;;;;;;:31;:35;;;;;;;;21774:36;21718:92;21692:753;;;21897:20;;21887:6;:30;;21853:169;;;;-1:-1:-1;;;21853:169:0;;14985:2:1;21853:169:0;;;14967:21:1;15024:2;15004:18;;;14997:30;15063:34;15043:18;;;15036:62;-1:-1:-1;;;15114:18:1;;;15107:51;15175:19;;21853:169:0;14783:417:1;21853:169:0;21692:753;;;-1:-1:-1;;;;;22120:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22175:37:0;;;;;;:31;:37;;;;;;;;22174:38;22120:92;22094:351;;;22299:20;;22289:6;:30;;22255:170;;;;-1:-1:-1;;;22255:170:0;;11530:2:1;22255:170:0;;;11512:21:1;11569:2;11549:18;;;11542:30;11608:34;11588:18;;;11581:62;-1:-1:-1;;;11659:18:1;;;11652:52;11721:19;;22255:170:0;11328:418:1;22255:170:0;-1:-1:-1;;;;;22470:35:0;;;;;;:31;:35;;;;;;;;22465:231;;22590:15;;22580:6;22564:13;22574:2;22564:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;22530:146;;;;-1:-1:-1;;;22530:146:0;;18865:2:1;22530:146:0;;;18847:21:1;18904:2;18884:18;;;18877:30;-1:-1:-1;;;18923:18:1;;;18916:49;18982:18;;22530:146:0;18663:343:1;22530:146:0;22734:25;22762:69;22803:17;;22762:22;;:26;;:69;;;;:::i;:::-;22734:97;;22842:28;22873:24;22891:4;22873:9;:24::i;:::-;22976:23;;23060:16;;22842:55;;-1:-1:-1;22939:60:0;;;;-1:-1:-1;;;23060:16:0;;;;23059:17;:55;;;;-1:-1:-1;23093:21:0;;-1:-1:-1;;;23093:21:0;;;;23059:55;:100;;;;-1:-1:-1;23141:13:0;;23158:1;;23131:24;;-1:-1:-1;;;;;23141:13:0;23131:9;:24::i;:::-;:28;23059:100;:138;;;;;23196:1;23176:17;:21;23059:138;:178;;;;-1:-1:-1;;;;;;23215:22:0;;;;;;:18;:22;;;;;;;;23214:23;23059:178;:220;;;;-1:-1:-1;;;;;;23255:24:0;;;;;;:18;:24;;;;;;;;23254:25;23059:220;:266;;;;-1:-1:-1;;;;;;23296:29:0;;;;;;:25;:29;;;;;;;;23059:266;:306;;;;;23342:23;23059:306;23041:373;;;23392:10;:8;:10::i;:::-;-1:-1:-1;;;;;23547:24:0;;23426:12;23547:24;;;:18;:24;;;;;;23441:4;;23547:24;;;:50;;-1:-1:-1;;;;;;23575:22:0;;;;;;:18;:22;;;;;;;;23547:50;23543:1591;;;-1:-1:-1;9872:1:0;23644:15;:26;23624:5;23543:1591;;;-1:-1:-1;;;;;23758:31:0;;;;;;:25;:31;;;;;;;;23754:1369;;;23810:14;:12;:14::i;:::-;9788:1;23843:15;:21;23903:18;;23887:12;:34;23883:418;;;23956:1;23946:7;:11;23996:2;23980:13;:18;23754:1369;;23883:418;24044:18;;:22;;24065:1;24044:22;:::i;:::-;24028:12;:38;24024:277;;;24101:1;24091:7;:11;24141:2;24125:13;:18;23754:1369;;24024:277;24202:10;;24192:7;:20;24270:11;;24251:16;;:30;;24270:11;24251:30;:::i;:::-;24235:13;:46;23754:1369;;;-1:-1:-1;;;;;24360:29:0;;;;;;:25;:29;;;;;;;;24356:767;;;24410:14;:12;:14::i;:::-;9828:1;24443:15;:22;24522:18;;24506:12;:34;24502:421;;;24575:1;24565:7;:11;24615:2;24599:13;:18;24356:767;;24502:421;24663:18;;:22;;24684:1;24663:22;:::i;:::-;24647:12;:38;24643:280;;;24720:1;24710:7;:11;24760:2;24744:13;:18;23754:1369;;24643:280;24821:11;;24811:7;:21;24891:12;;24871:17;;:32;;24891:12;24871:32;:::i;24356:767::-;25017:14;:12;:14::i;:::-;9872:1;25050:15;:26;24356:767;25146:41;25161:4;25167:2;25171:6;25179:7;25146:14;:41::i;:::-;20817:4378;;;;20714:4481;;;:::o;6987:226::-;7107:7;7143:12;7135:6;;;;7127:29;;;;-1:-1:-1;;;7127:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7167:9:0;7179:5;7183:1;7179;:5;:::i;:::-;7167:17;6987:226;-1:-1:-1;;;;;6987:226:0:o;34026:164::-;34068:7;34089:15;34106;34125:19;:17;:19::i;:::-;34088:56;;-1:-1:-1;34088:56:0;-1:-1:-1;34162:20:0;34088:56;;34162:11;:20::i;:::-;34155:27;;;;34026:164;:::o;7479:132::-;7537:7;7564:39;7568:1;7571;7564:39;;;;;;;;;;;;;;;;;:3;:39::i;6654:181::-;6712:7;;6744:5;6748:1;6744;:5;:::i;:::-;6732:17;;6773:1;6768;:6;;6760:46;;;;-1:-1:-1;;;6760:46:0;;9960:2:1;6760:46:0;;;9942:21:1;9999:2;9979:18;;;9972:30;10038:29;10018:18;;;10011:57;10085:18;;6760:46:0;9758:351:1;32294:742:0;32394:7;32416;32438;32460;32482;32504;32554:23;32592:12;32619:18;32651:20;32663:7;32651:11;:20::i;:::-;32539:132;;;;;;32683:15;32700:23;32725:12;32741:113;32767:7;32789:4;32808:10;32833;:8;:10::i;:::-;32741:11;:113::i;:::-;32682:172;;;;-1:-1:-1;32682:172:0;;-1:-1:-1;32958:15:0;;-1:-1:-1;32988:4:0;;-1:-1:-1;33007:10:0;;-1:-1:-1;32294:742:0;;-1:-1:-1;;;;;32294:742:0:o;25203:1829::-;12173:16;:23;;-1:-1:-1;;;;12173:23:0;-1:-1:-1;;;12173:23:0;;;;25280:24:::1;25298:4;25280:9;:24::i;:::-;25254:50;;25315:25;25368:17;;25343:22;;:42;;;;:::i;:::-;25315:70;;25447:26;25476:29;25503:1;25476:22;;:26;;:29;;;;:::i;:::-;25447:58:::0;-1:-1:-1;25516:26:0::1;25545:39;:15:::0;25447:58;25545:19:::1;:39::i;:::-;25516:68:::0;-1:-1:-1;25625:21:0::1;25659:36;25516:68:::0;25659:16:::1;:36::i;:::-;25708:18;25729:44;:21;25755:17:::0;25729:25:::1;:44::i;:::-;25708:65;;25786:23;25812:80;25864:17;25812:33;25827:17;;25812:10;:14;;:33;;;;:::i;:::-;:37:::0;::::1;:80::i;:::-;25786:106:::0;-1:-1:-1;25905:23:0::1;25931:31;:10:::0;25786:106;25931:14:::1;:31::i;:::-;25905:57;;25975:17;25995:77;26057:4;25995:43;26015:22;;25995:15;:19;;:43;;;;:::i;:77::-;25975:97;;26083:22;26108:86;26189:4;26108:62;26142:27;;26108:15;:33;;:62;;;;:::i;:86::-;26083:111:::0;-1:-1:-1;26205:28:0::1;26224:9:::0;26205:28;::::1;:::i;:::-;::::0;-1:-1:-1;26244:33:0::1;26263:14:::0;26205:28;26244:33:::1;:::i;:::-;26315:1;26290:22;:26:::0;;;26327:17:::1;:21:::0;;;26388:11:::1;::::0;26380:77:::1;::::0;26244:33;;-1:-1:-1;26315:1:0;;-1:-1:-1;;;;;26388:11:0;;::::1;::::0;26244:33;;26315:1;26380:77;26315:1;26380:77;26244:33;26388:11;26380:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26490:10:0::1;::::0;26482:48:::1;::::0;26361:96;;-1:-1:-1;;;;;;26490:10:0::1;::::0;26515:9;;26482:48:::1;::::0;;;26515:9;26490:10;26482:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26563:15:0::1;::::0;26555:82:::1;::::0;26468:62;;-1:-1:-1;;;;;;26563:15:0::1;::::0;26593:14;;26555:82:::1;::::0;;;26593:14;26563:15;26555:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26541:96;;;;;26650:49;26663:18;26683:15;26650:12;:49::i;:::-;26715:121;::::0;;22337:25:1;;;22393:2;22378:18;;22371:34;;;22421:18;;;22414:34;;;26715:121:0::1;::::0;22325:2:1;22310:18;26715:121:0::1;;;;;;;26887:4;26863:21;:28;26859:166;;;26930:11;::::0;26922:91:::1;::::0;-1:-1:-1;;;;;26930:11:0;;::::1;::::0;26973:21:::1;::::0;26922:91:::1;::::0;;;26973:21;26930:11;26922:91:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26908:105:0;;-1:-1:-1;;26859:166:0::1;-1:-1:-1::0;;12219:16:0;:24;;-1:-1:-1;;;;12219:24:0;;;-1:-1:-1;;;;;;;;;25203:1829:0:o;35993:235::-;36040:7;;:12;:34;;;;-1:-1:-1;36056:13:0;;:18;36040:34;36036:47;;;35993:235::o;36036:47::-;36113:7;;;36095:15;:25;36155:13;;;36131:21;:37;-1:-1:-1;36181:11:0;;;;36203:17;35993:235::o;28625:708::-;28781:7;28776:28;;28790:14;:12;:14::i;:::-;-1:-1:-1;;;;;28821:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28845:22:0;;;;;;:11;:22;;;;;;;;28844:23;28821:46;28817:467;;;28884:48;28906:6;28914:9;28925:6;28884:21;:48::i;:::-;28817:467;;;-1:-1:-1;;;;;28955:19:0;;;;;;:11;:19;;;;;;;;28954:20;:46;;;;-1:-1:-1;;;;;;28978:22:0;;;;;;:11;:22;;;;;;;;28954:46;28950:334;;;29017:46;29037:6;29045:9;29056:6;29017:19;:46::i;28950:334::-;-1:-1:-1;;;;;29085:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29108:22:0;;;;;;:11;:22;;;;;;;;29085:45;29081:203;;;29147:48;29169:6;29177:9;29188:6;29147:21;:48::i;29081:203::-;29228:44;29246:6;29254:9;29265:6;29228:17;:44::i;:::-;29301:7;29296:29;;29310:15;36290;;36280:7;:25;36332:21;;36316:13;:37;36236:125;34198:605;34296:7;;34249;;;;9286:15;34249:7;34350:338;34374:9;:16;34370:20;;34350:338;;;34458:7;34434;:21;34442:9;34452:1;34442:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34442:12:0;34434:21;;;;;;;;;;;;;:31;;:83;;;34510:7;34486;:21;34494:9;34504:1;34494:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34494:12:0;34486:21;;;;;;;;;;;;;:31;34434:83;34412:146;;;-1:-1:-1;;34541:7:0;;;9286:15;;-1:-1:-1;34198:605:0;-1:-1:-1;;34198:605:0:o;34412:146::-;34583:34;34595:7;:21;34603:9;34613:1;34603:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34603:12:0;34595:21;;;;;;;;;;;;;34583:7;;:11;:34::i;:::-;34573:44;;34642:34;34654:7;:21;34662:9;34672:1;34662:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34662:12:0;34654:21;;;;;;;;;;;;;34642:7;;:11;:34::i;:::-;34632:44;-1:-1:-1;34392:3:0;;;;:::i;:::-;;;;34350:338;;;-1:-1:-1;34712:7:0;;:20;;9286:15;34712:11;:20::i;:::-;34702:7;:30;34698:61;;;-1:-1:-1;;34742:7:0;;;9286:15;;-1:-1:-1;34198:605:0;-1:-1:-1;34198:605:0:o;34698:61::-;34778:7;;34787;;-1:-1:-1;34198:605:0;-1:-1:-1;34198:605:0:o;7619:235::-;7739:7;7774:12;7767:5;7759:28;;;;-1:-1:-1;;;7759:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7798:9:0;7810:5;7814:1;7810;:5;:::i;33044:412::-;33145:7;33167;33189;33224:12;33239:24;33255:7;33239:15;:24::i;:::-;33224:39;;33274:18;33295:30;33317:7;33295:21;:30::i;:::-;33274:51;-1:-1:-1;33336:23:0;33362:33;33274:51;33362:17;:7;33374:4;33362:11;:17::i;:::-;:21;;:33::i;:::-;33336:59;33431:4;;-1:-1:-1;33437:10:0;;-1:-1:-1;33044:412:0;;-1:-1:-1;;;33044:412:0:o;33464:554::-;33663:7;;;;33760:24;:7;33772:11;33760;:24::i;:::-;33742:42;-1:-1:-1;33795:12:0;33810:21;:4;33819:11;33810:8;:21::i;:::-;33795:36;-1:-1:-1;33842:18:0;33863:27;:10;33878:11;33863:14;:27::i;:::-;33842:48;-1:-1:-1;33901:23:0;33927:33;33842:48;33927:17;:7;33939:4;33927:11;:17::i;:33::-;33979:7;;;;-1:-1:-1;34005:4:0;;-1:-1:-1;33464:554:0;;-1:-1:-1;;;;;;;33464:554:0:o;6843:136::-;6901:7;6928:43;6932:1;6935;6928:43;;;;;;;;;;;;;;;;;:3;:43::i;27764:472::-;27854:16;;;27868:1;27854:16;;;;;;;;27830:21;;27854:16;;;;;;;;;;-1:-1:-1;27854:16:0;27830:40;;27899:4;27881;27886:1;27881:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27881:23:0;;;:7;;;;;;;;;;:23;;;;27925:15;;:22;;;-1:-1:-1;;;27925:22:0;;;;:15;;;;;:20;;:22;;;;;27881:7;;27925:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27915:4;27920:1;27915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27915:32:0;;;:7;;;;;;;;;:32;27990:15;;27958:62;;27975:4;;27990:15;28008:11;27958:8;:62::i;:::-;28031:15;;:197;;-1:-1:-1;;;28031:197:0;;-1:-1:-1;;;;;28031:15:0;;;;:66;;:197;;28112:11;;28031:15;;28155:4;;28182;;28202:15;;28031:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27819:417;27764:472;:::o;7221:250::-;7279:7;7303:6;7299:47;;-1:-1:-1;7333:1:0;7326:8;;7299:47;7358:9;7370:5;7374:1;7370;:5;:::i;:::-;7358:17;-1:-1:-1;7403:1:0;7394:5;7398:1;7358:17;7394:5;:::i;:::-;:10;7386:56;;;;-1:-1:-1;;;7386:56:0;;15762:2:1;7386:56:0;;;15744:21:1;15801:2;15781:18;;;15774:30;15840:34;15820:18;;;15813:62;-1:-1:-1;;;15891:18:1;;;15884:31;15932:19;;7386:56:0;15560:397:1;30680:686:0;30831:15;30861:23;30899:12;30926:23;30964:12;30991:18;31023:19;31034:7;31023:10;:19::i;:::-;-1:-1:-1;;;;;31071:15:0;;;;;;:7;:15;;;;;;30816:226;;-1:-1:-1;30816:226:0;;-1:-1:-1;30816:226:0;;-1:-1:-1;30816:226:0;-1:-1:-1;30816:226:0;-1:-1:-1;30816:226:0;-1:-1:-1;31071:28:0;;31091:7;31071:19;:28::i;:::-;-1:-1:-1;;;;;31053:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31128:7;:15;;;;:28;;31148:7;31128:19;:28::i;:::-;-1:-1:-1;;;;;31110:15:0;;;;;;;:7;:15;;;;;;:46;;;;31188:18;;;;;;;:39;;31211:15;31188:22;:39::i;:::-;-1:-1:-1;;;;;31167:18:0;;;;;;:7;:18;;;;;:60;31238:26;31253:10;31238:14;:26::i;:::-;31275:23;31287:4;31293;31275:11;:23::i;:::-;31331:9;-1:-1:-1;;;;;31314:44:0;31323:6;-1:-1:-1;;;;;31314:44:0;;31342:15;31314:44;;;;21114:25:1;;21102:2;21087:18;;20968:177;31314:44:0;;;;;;;;30805:561;;;;;;30680:686;;;:::o;29974:698::-;30123:15;30153:23;30191:12;30218:23;30256:12;30283:18;30315:19;30326:7;30315:10;:19::i;:::-;-1:-1:-1;;;;;30363:15:0;;;;;;:7;:15;;;;;;30108:226;;-1:-1:-1;30108:226:0;;-1:-1:-1;30108:226:0;;-1:-1:-1;30108:226:0;-1:-1:-1;30108:226:0;-1:-1:-1;30108:226:0;-1:-1:-1;30363:28:0;;30108:226;30363:19;:28::i;:::-;-1:-1:-1;;;;;30345:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30423:18;;;;;:7;:18;;;;;:39;;30446:15;30423:22;:39::i;:::-;-1:-1:-1;;;;;30402:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30494:7;:18;;;;:39;;30517:15;30494:22;:39::i;31374:757::-;31525:15;31555:23;31593:12;31620:23;31658:12;31685:18;31717:19;31728:7;31717:10;:19::i;:::-;-1:-1:-1;;;;;31765:15:0;;;;;;:7;:15;;;;;;31510:226;;-1:-1:-1;31510:226:0;;-1:-1:-1;31510:226:0;;-1:-1:-1;31510:226:0;-1:-1:-1;31510:226:0;-1:-1:-1;31510:226:0;-1:-1:-1;31765:28:0;;31785:7;31765:19;:28::i;:::-;-1:-1:-1;;;;;31747:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31822:7;:15;;;;:28;;31842:7;31822:19;:28::i;29341:625::-;29488:15;29518:23;29556:12;29583:23;29621:12;29648:18;29680:19;29691:7;29680:10;:19::i;:::-;-1:-1:-1;;;;;29728:15:0;;;;;;:7;:15;;;;;;29473:226;;-1:-1:-1;29473:226:0;;-1:-1:-1;29473:226:0;;-1:-1:-1;29473:226:0;-1:-1:-1;29473:226:0;-1:-1:-1;29473:226:0;-1:-1:-1;29728:28:0;;29473:226;29728:19;:28::i;35673:130::-;35737:7;35764:31;35789:5;35764:20;35776:7;;35764;:11;;:20;;;;:::i;35811:174::-;35908:7;35940:37;35971:5;35940:26;35952:13;;35940:7;:11;;:26;;;;:::i;34811:854::-;9788:1;34878:15;;:22;34874:489;;;35011:13;;34974:16;;34961:29;;:10;:29;:::i;:::-;34960:64;;;;:::i;:::-;34917:22;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;35089:13:0;;35074:11;;35061:24;;:10;:24;:::i;:::-;35060:42;;;;:::i;:::-;35039:17;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;34874:489:0;;-1:-1:-1;34874:489:0;;9828:1;35124:15;;:23;35120:243;;;35259:13;;35221:17;;35208:30;;:10;:30;:::i;:::-;35207:65;;;;:::i;:::-;35164:22;;:108;;;;;;;:::i;:::-;;;;-1:-1:-1;;35338:13:0;;35322:12;;35309:25;;:10;:25;:::i;:::-;35308:43;;;;:::i;:::-;35287:17;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;35120:243:0;35373:19;35395:10;:8;:10::i;:::-;35373:32;-1:-1:-1;35416:18:0;35437:27;:10;35373:32;35437:14;:27::i;:::-;35516:4;35500:22;;;;:7;:22;;;;;;35416:48;;-1:-1:-1;35500:38:0;;35416:48;35500:26;:38::i;:::-;35491:4;35475:22;;;;:7;:22;;;;;;;;:63;;;;35553:11;:26;;;;;;35549:108;;;35635:4;35619:22;;;;:7;:22;;;;;;:38;;35646:10;35619:26;:38::i;:::-;35610:4;35594:22;;;;:7;:22;;;;;:63;35549:108;34863:802;;34811:854;:::o;32139:147::-;32217:7;;:17;;32229:4;32217:11;:17::i;:::-;32207:7;:27;32258:10;;:20;;32273:4;32258:14;:20::i;:::-;32245:10;:33;-1:-1:-1;;32139:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:184::-;2834:6;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;-1:-1:-1;2926:16:1;;2764:184;-1:-1:-1;2764:184:1:o;2953:309::-;3018:6;3026;3079:2;3067:9;3058:7;3054:23;3050:32;3047:52;;;3095:1;3092;3085:12;3047:52;3131:9;3118:23;3108:33;;3191:2;3180:9;3176:18;3163:32;3204:28;3226:5;3204:28;:::i;3267:248::-;3335:6;3343;3396:2;3384:9;3375:7;3371:23;3367:32;3364:52;;;3412:1;3409;3402:12;3364:52;-1:-1:-1;;3435:23:1;;;3505:2;3490:18;;;3477:32;;-1:-1:-1;3267:248:1:o;3520:316::-;3597:6;3605;3613;3666:2;3654:9;3645:7;3641:23;3637:32;3634:52;;;3682:1;3679;3672:12;3634:52;-1:-1:-1;;3705:23:1;;;3775:2;3760:18;;3747:32;;-1:-1:-1;3826:2:1;3811:18;;;3798:32;;3520:316;-1:-1:-1;3520:316:1:o;3841:306::-;3929:6;3937;3945;3998:2;3986:9;3977:7;3973:23;3969:32;3966:52;;;4014:1;4011;4004:12;3966:52;4043:9;4037:16;4027:26;;4093:2;4082:9;4078:18;4072:25;4062:35;;4137:2;4126:9;4122:18;4116:25;4106:35;;3841:306;;;;;:::o;6426:597::-;6538:4;6567:2;6596;6585:9;6578:21;6628:6;6622:13;6671:6;6666:2;6655:9;6651:18;6644:34;6696:1;6706:140;6720:6;6717:1;6714:13;6706:140;;;6815:14;;;6811:23;;6805:30;6781:17;;;6800:2;6777:26;6770:66;6735:10;;6706:140;;;6864:6;6861:1;6858:13;6855:91;;;6934:1;6929:2;6920:6;6909:9;6905:22;6901:31;6894:42;6855:91;-1:-1:-1;7007:2:1;6986:15;-1:-1:-1;;6982:29:1;6967:45;;;;7014:2;6963:54;;6426:597;-1:-1:-1;;;6426:597:1:o;15962:356::-;16164:2;16146:21;;;16183:18;;;16176:30;16242:34;16237:2;16222:18;;16215:62;16309:2;16294:18;;15962:356::o;21150:980::-;21412:4;21460:3;21449:9;21445:19;21491:6;21480:9;21473:25;21517:2;21555:6;21550:2;21539:9;21535:18;21528:34;21598:3;21593:2;21582:9;21578:18;21571:31;21622:6;21657;21651:13;21688:6;21680;21673:22;21726:3;21715:9;21711:19;21704:26;;21765:2;21757:6;21753:15;21739:29;;21786:1;21796:195;21810:6;21807:1;21804:13;21796:195;;;21875:13;;-1:-1:-1;;;;;21871:39:1;21859:52;;21966:15;;;;21931:12;;;;21907:1;21825:9;21796:195;;;-1:-1:-1;;;;;;;22047:32:1;;;;22042:2;22027:18;;22020:60;-1:-1:-1;;;22111:3:1;22096:19;22089:35;22008:3;21150:980;-1:-1:-1;;;21150:980:1:o;22648:128::-;22688:3;22719:1;22715:6;22712:1;22709:13;22706:39;;;22725:18;;:::i;:::-;-1:-1:-1;22761:9:1;;22648:128::o;22781:217::-;22821:1;22847;22837:132;;22891:10;22886:3;22882:20;22879:1;22872:31;22926:4;22923:1;22916:15;22954:4;22951:1;22944:15;22837:132;-1:-1:-1;22983:9:1;;22781:217::o;23003:168::-;23043:7;23109:1;23105;23101:6;23097:14;23094:1;23091:21;23086:1;23079:9;23072:17;23068:45;23065:71;;;23116:18;;:::i;:::-;-1:-1:-1;23156:9:1;;23003:168::o;23176:125::-;23216:4;23244:1;23241;23238:8;23235:34;;;23249:18;;:::i;:::-;-1:-1:-1;23286:9:1;;23176:125::o;23306:135::-;23345:3;-1:-1:-1;;23366:17:1;;23363:43;;;23386:18;;:::i;:::-;-1:-1:-1;23433:1:1;23422:13;;23306:135::o;23446:127::-;23507:10;23502:3;23498:20;23495:1;23488:31;23538:4;23535:1;23528:15;23562:4;23559:1;23552:15;23578:127;23639:10;23634:3;23630:20;23627:1;23620:31;23670:4;23667:1;23660:15;23694:4;23691:1;23684:15;23710:127;23771:10;23766:3;23762:20;23759:1;23752:31;23802:4;23799:1;23792:15;23826:4;23823:1;23816:15;23974:131;-1:-1:-1;;;;;24049:31:1;;24039:42;;24029:70;;24095:1;24092;24085:12;24029:70;23974:131;:::o;24110:118::-;24196:5;24189:13;24182:21;24175:5;24172:32;24162:60;;24218:1;24215;24208:12

Swarm Source

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