ETH Price: $3,165.46 (-6.15%)

Token

SHAMOON (SHAMOON)
 

Overview

Max Total Supply

10,000,000,000 SHAMOON

Holders

88

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,199,202.626793950679355877 SHAMOON

Value
$0.00
0xe5e26398d4afbebf820cdeaeebf62a6bd67f74ca
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:
SHAMOON

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-28
*/

// SPDX-License-Identifier: UNLICENSED // THIS IS FOR THE WHALES SHAMOON TO THE MOON - SAFU DEV 
pragma solidity ^0.8.7;
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: 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), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}
contract SHAMOON is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    string private constant tokenName = "SHAMOON";
    string private constant tokenSymbol = "SHAMOON";
    uint8 private constant tokenDecimal = 18;

    uint256 private constant tMAX = ~uint256(0);
    uint256 private constant _tTotal = 1e10 * 10**18;
    uint256 private _rTotal = (tMAX - (tMAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private maximumTokens;
	uint256 private minimumTokensForTaxSwap;
    address payable private MWAddress; //Marketing Wallet Address
    address payable private OWAddress; //Other Misc Wallet Address
    address payable private DWAddress; //Dev Wallet Address
    address payable public LQPAddress; //Liquidity Pool Token Owner. Gets set to BURN after inital LP is created.
    address burn = address(0xdead);
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address[] private _excluded;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private Excluded;
	mapping(address => bool) private ExcludedFromTax;
    mapping(address => bool) private MaxWalletExclude;
    mapping (address => bool) public BotAddress;
    mapping(address => bool) public SniperAddress;
	uint256 private MarketingTokens;
	uint256 private LiquidityTokens;
    uint256 private MiscTokens;
    uint256 private BurnGiveAwayTokens;

    //Place Holders: Overridden each txn
    uint256 private MWTax = 7; //Marketing Tax
    uint256 private prevMWTax = MWTax;
    uint256 private OWTax = 5; //Misc/Other Tax
    uint256 private prevOWTax = OWTax;
    uint256 private LQTax = 6; //Liquidity Tax
    uint256 private prevLQTax = LQTax;
    uint256 private BGWTax = 0; //Burn/GiveAway Tax
    uint256 private prevBGWTax = BGWTax;
    uint256 private REFTax = 0; //Reflections Tax
    uint256 private prevREFTax = REFTax;
    uint256 private LQDivision = MWTax + OWTax + LQTax + BGWTax;

    uint256 private buyMWTax = 0; //Buy Marketing Tax
    uint256 private buyOWTax = 0; //Buy Misc/Other Tax
    uint256 private buyLQTax = 0; //Buy Liquidity Tax
    uint256 private buyBGWTax = 0; //Buy Burn/GiveAway Tax
    uint256 private buyREFTax = 0; //Buy Reflections Tax

    uint256 private sellMWTax = 6; //Sell Marketing Tax
    uint256 private sellOWTax = 5; //Sell Misc/Other Tax
    uint256 private sellLQTax = 2; //Sell Liquidity Tax
    uint256 private sellBGWTax = 4; //Sell Burn/GiveAway Tax
    uint256 private sellREFTax = 0; //Sell Reflections Tax

    uint256 public MarketOpenedBlock = 0;
    bool public maxTokensAllowed = false;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public OpenTrades = false;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        _rOwned[address(this)] = _rTotal;
        maximumTokens = _tTotal * 2 / 100; // Max Tokens Allowed Per-Wallet is 2.5% of total supply
        minimumTokensForTaxSwap = _tTotal * 5 / 10000; //Min Tokens Needed for TaxSwap is 0.05% of total supply
        MWAddress = payable(0xB6a479918512c975F7D728e6aF5eaF9F992ccE73); //Marketing Wallet Address
        OWAddress = payable(0x1ede20ea6AD4BB991fa6B451ec1D28d57E1A958A); //Other Misc Wallet Address
        DWAddress = payable(0xab30d156c6697AB654345dEba2B92fa419Bce681); //Dev Wallet Address

        // LEAVE AS OWNER
        LQPAddress = payable(owner()); //Liquidity Pool Token Owner. Gets set to BURN after inital LP is created.

        Excluded[burn] = true;
        ExcludedFromTax[_msgSender()] = true;
        ExcludedFromTax[burn] = true;
        ExcludedFromTax[address(this)] = true;
        ExcludedFromTax[MWAddress] = true;
        ExcludedFromTax[OWAddress] = true;
        ExcludedFromTax[DWAddress] = true;
        MaxWalletExclude[address(this)] = true;
        MaxWalletExclude[_msgSender()] = true;
        MaxWalletExclude[burn] = true;
        MaxWalletExclude[MWAddress] = true;
        MaxWalletExclude[OWAddress] = true;
        MaxWalletExclude[DWAddress] = true;

        emit Transfer(address(0), address(this), _tTotal);
    }
    receive() external payable {}
    function name() public pure override returns (string memory) {
        return tokenName;
    }
    function symbol() public pure override returns (string memory) {
        return tokenSymbol;
    }
    function decimals() public pure override returns (uint8) {
        return tokenDecimal;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (Excluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public 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) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt 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, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    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 {
        MarketingTokens += tLiquidity * MWTax / LQDivision;
        BurnGiveAwayTokens += tLiquidity * BGWTax / LQDivision;
        MiscTokens += tLiquidity * OWTax / LQDivision;
        LiquidityTokens += tLiquidity * LQTax / LQDivision;
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (Excluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(REFTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(MWTax + OWTax + BGWTax + LQTax).div(10**2);
    }
    function OpenMarket() external onlyOwner returns (bool){
        require(!OpenTrades, "Market already Open!");
        maxTokensAllowed = true;
        swapAndLiquifyEnabled = true;
        OpenTrades = true;
        MarketOpenedBlock = block.number;
        IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniV2Router;
        MaxWalletExclude[address(uniswapV2Router)] = true;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        MaxWalletExclude[address(uniswapV2Pair)] = true;
        require(address(this).balance > 0, "Must have ETH on contract to Open Market!");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        setLQPAddress(burn);
        return true;
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to 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(!BotAddress[from]);
        if(!OpenTrades){
            require(ExcludedFromTax[from] || ExcludedFromTax[to], "Market is not yet Open!");
        }
        if (maxTokensAllowed == true && ! MaxWalletExclude[to]) {
            require(balanceOf(to) + amount <= maximumTokens, "Max amount of tokens for wallet reached!");
        }
        if (from != owner() && to != owner() && to != address(0) && to != burn && !inSwapAndLiquify) {
            if(from != owner() && to != uniswapV2Pair) {
                if(block.number == MarketOpenedBlock) {
                    SniperAddress[to] = true;
                }
            }
        }
        uint256 totalTokensToSwap = LiquidityTokens.add(MarketingTokens).add(MiscTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensForTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0 && totalTokensToSwap > 0 && !ExcludedFromTax[to] && !ExcludedFromTax[from] && to == uniswapV2Pair && overMinimumTokenBalance) {
            doTaxSwap();
            }
        bool takeFee = true;
        if (ExcludedFromTax[from] || ExcludedFromTax[to]) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair) {
                removeAllTax();
                MWTax = buyMWTax;
                BGWTax = buyBGWTax;
                OWTax = buyOWTax;
                REFTax = buyREFTax;
                LQTax = buyLQTax;
            } 
            else if (to == uniswapV2Pair) {
                removeAllTax();
                MWTax = sellMWTax;
                BGWTax = sellBGWTax;
                OWTax = sellOWTax;
                REFTax = sellREFTax;
                LQTax = sellLQTax;
                if(SniperAddress[from]) {
                    MWTax = 95;
                }
            } else {
                require(!SniperAddress[from]);
                removeAllTax();
            }
        }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function doTaxSwap() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + MiscTokens + LiquidityTokens;
        uint256 swapLiquidityTokens = LiquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens).sub(BurnGiveAwayTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        uint256 ethForMisc = ethBalance.mul(MiscTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForMisc);
        MarketingTokens = 0;
        MiscTokens = 0;
        LiquidityTokens = 0;
        (bool success,) = address(MWAddress).call{value: ethForMarketing}("");
        (success,) = address(OWAddress).call{value: ethForMisc}("");
        addLiquidity(swapLiquidityTokens, ethForLiquidity);
        if(address(this).balance > 5 * 10**17){
            (success,) = address(DWAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            LQPAddress,
            block.timestamp
        );
    }
    function removeAllTax() private {
        if (LQTax == 0 && MWTax == 0 && BGWTax == 0 && OWTax == 0 && REFTax == 0) return;
        prevLQTax = LQTax;
        prevMWTax = MWTax;
        prevOWTax = OWTax;
        prevBGWTax = BGWTax;
        prevREFTax = REFTax;

        LQTax = 0;
        MWTax = 0;
        OWTax = 0;
        BGWTax = 0;
        REFTax = 0;
    }
    function restoreAllTax() private {
        MWTax = prevMWTax;
        OWTax = prevOWTax;
        BGWTax = prevBGWTax;
        REFTax = prevREFTax;
        LQTax = prevLQTax;
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllTax();
        if (Excluded[sender] && !Excluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!Excluded[sender] && Excluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!Excluded[sender] && !Excluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (Excluded[sender] && Excluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllTax();
    }
    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 _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (Excluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (Excluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
    function setLQPAddress(address _LQPAddress) internal {
        LQPAddress = payable(_LQPAddress);
        ExcludedFromTax[LQPAddress] = true;
    }
    function excludeFromTax(address account) external onlyOwner {
        ExcludedFromTax[account] = true;
    }
    function includeInTax(address account) external onlyOwner {
        ExcludedFromTax[account] = false;
    }
    function excludeFromMaxTokens(address account) external onlyOwner {
        MaxWalletExclude[account] = true;
    }
    function includeInMaxTokens(address account) external onlyOwner {
        MaxWalletExclude[account] = false;
    }
    function AddBot(address _user) public onlyOwner {
        require(!BotAddress[_user]);
        BotAddress[_user] = true;
    }
	function RemoveBot(address _user) public onlyOwner {
        require(BotAddress[_user]);
        BotAddress[_user] = false;
    }
    function removeSniper(address account) external onlyOwner {
        SniperAddress[account] = false;
    }
    function ManualTaxSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= _tTotal * 1 / 10000, "Can only swap back if more than 0.01% of tokens stuck on contract");
        doTaxSwap();
    }
    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success,) = address(DWAddress).call{value: address(this).balance}("");
    }
    function withdrawTokens(uint256 _percent, address _address) public onlyOwner {
        uint256 amount = balanceOf(address(this)) * _percent / 10**2;
        require(amount > 0, "Must have Tokens on CA");
        _transfer(address(this), _address, amount);
    }
    function BurnOrGiveAwayTokens(uint256 _percent, address _address) public onlyOwner {
        uint256 amountToBurnExtract = BurnGiveAwayTokens * _percent / 10**2;
        require(amountToBurnExtract > 0, "Must have Tokens for Burn on CA");
        _transfer(address(this), _address, amountToBurnExtract);
        BurnGiveAwayTokens -= amountToBurnExtract;
    }
    function setBuyTaxes(uint256 _buyMarketingTax, uint256 _buyOtherTax, uint256 _buyBurnTax, uint256 _buyLiquidityTax, uint256 _buyReflectionsTax) external onlyOwner {
        buyMWTax = _buyMarketingTax;
        buyOWTax = _buyOtherTax;
        buyBGWTax = _buyBurnTax;
        buyLQTax = _buyLiquidityTax;
        buyREFTax = _buyReflectionsTax;
    }
    function setSellTaxes(uint256 _sellMarketingTax, uint256 _sellOtherTax, uint256 _sellBurnTax, uint256 _sellLiquidityTax, uint256 _sellReflectionsTax) external onlyOwner {
        sellMWTax = _sellMarketingTax;
        sellOWTax = _sellOtherTax;
        sellBGWTax = _sellBurnTax;
        sellLQTax = _sellLiquidityTax;
        sellREFTax = _sellReflectionsTax;
    }
    function Taxes() public view returns(uint256 BuyMarketing, uint256 buyDev, uint256 buyLiquidity, uint256 sellMarketing, uint256 sellDev, uint256 sellLiquidity){
        return(buyMWTax,buyOWTax,buyLQTax,sellMWTax,sellOWTax,sellLQTax);
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"AddBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"BotAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"BurnOrGiveAwayTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LQPAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ManualTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MarketOpenedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OpenMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"OpenTrades","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"RemoveBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"SniperAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Taxes","outputs":[{"internalType":"uint256","name":"BuyMarketing","type":"uint256"},{"internalType":"uint256","name":"buyDev","type":"uint256"},{"internalType":"uint256","name":"buyLiquidity","type":"uint256"},{"internalType":"uint256","name":"sellMarketing","type":"uint256"},{"internalType":"uint256","name":"sellDev","type":"uint256"},{"internalType":"uint256","name":"sellLiquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInTax","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":[],"name":"maxTokensAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyOtherTax","type":"uint256"},{"internalType":"uint256","name":"_buyBurnTax","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionsTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellOtherTax","type":"uint256"},{"internalType":"uint256","name":"_sellBurnTax","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionsTax","type":"uint256"}],"name":"setSellTaxes","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001e6b204fce5e3e250261100000006000196200043e565b6200002c9060001962000424565b600155600980546001600160a01b03191661dead17905560076019819055601a8190556005601b819055601c8190556006601d819055601e8190556000601f8190556020819055602181905560228190559290916200008b91620003d0565b620000979190620003d0565b620000a39190620003d0565b60235560006024819055602581905560268190556027819055602881905560066029556005602a556002602b556004602c55602d819055602e819055602f805463ffff00ff1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600154306000908152600d60205260409020556064620001596b204fce5e3e25026110000000600262000402565b620001659190620003eb565b600355612710620001846b204fce5e3e25026110000000600562000402565b620001909190620003eb565b600455600580546001600160a01b031990811673b6a479918512c975f7d728e6af5eaf9f992cce7317909155600680548216731ede20ea6ad4bb991fa6b451ec1d28d57e1a958a1790556007805490911673ab30d156c6697ab654345deba2b92fa419bce6811790556200020c6000546001600160a01b031690565b600880546001600160a01b0319166001600160a01b03928316179055600954166000908152601060205260408120805460ff1916600190811790915590601190620002543390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560095482168152601184528281208054861660019081179091553080835284832080548816831790556005548416835284832080548816831790556006548416835284832080548816831790556007549093168252838220805487168217905591815260129384905291822080549094168117909355620003003390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600954821681526012909352818320805485166001908117909155600554821684528284208054861682179055600654821684528284208054861682179055600754909116835281832080549094161790925590513091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003c2906b204fce5e3e25026110000000815260200190565b60405180910390a362000481565b60008219821115620003e657620003e662000455565b500190565b600082620003fd57620003fd6200046b565b500490565b60008160001904831182151516156200041f576200041f62000455565b500290565b60008282101562000439576200043962000455565b500390565b6000826200045057620004506200046b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612d0580620004916000396000f3fe60806040526004361061023f5760003560e01c80634a74bb021161012e578063a457c2d7116100ab578063d971c4f21161006f578063d971c4f2146106e3578063dd62ed3e14610713578063e17c4c7414610759578063f2fde38b14610779578063f5648a4f1461079957600080fd5b8063a457c2d71461064e578063a9059cbb1461066e578063b74510e11461068e578063c791fc54146106a3578063cf1e568d146106c357600080fd5b8063715018a6116100f2578063715018a6146105ca57806377468d06146105df5780638c3975fd1461060f5780638da5cb5b1461063057806395d89b411461024b57600080fd5b80634a74bb02146105345780634e6f29251461055457806360d1259e1461056a5780636656e9831461058a57806370a08231146105aa57600080fd5b8063288a0f21116101bc578063398d92bb11610180578063398d92bb1461049457806340ac48d3146104b4578063432f0d09146104d45780634549b039146104f457806349bd5a5e1461051457600080fd5b8063288a0f21146103f85780632d83811914610418578063313ce5671461043857806333251a0b14610454578063395093511461047457600080fd5b80631694505e116102035780631694505e1461032157806318160ddd146103415780631a3f193b1461036a578063203cb8f1146103b657806323b872dd146103d857600080fd5b806306fdde031461024b578063095ea7b31461028a5780631143021d146102ba5780631255589b146102d457806314a4e63c146102e957600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50604080518082018252600781526629a420a6a7a7a760c91b602082015290516102819190612aab565b60405180910390f35b34801561029657600080fd5b506102aa6102a53660046129ae565b6107ae565b6040519015158152602001610281565b3480156102c657600080fd5b50602f546102aa9060ff1681565b3480156102e057600080fd5b506102aa6107c5565b3480156102f557600080fd5b50600854610309906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032d57600080fd5b50600a54610309906001600160a01b031681565b34801561034d57600080fd5b506b204fce5e3e250261100000005b604051908152602001610281565b34801561037657600080fd5b50602454602554602654602954602a54602b54604080519687526020870195909552938501929092526060840152608083015260a082015260c001610281565b3480156103c257600080fd5b506103d66103d13660046128fa565b610b34565b005b3480156103e457600080fd5b506102aa6103f336600461296d565b610b82565b34801561040457600080fd5b506103d66104133660046128fa565b610beb565b34801561042457600080fd5b5061035c6104333660046129da565b610c5f565b34801561044457600080fd5b5060405160128152602001610281565b34801561046057600080fd5b506103d661046f3660046128fa565b610cd0565b34801561048057600080fd5b506102aa61048f3660046129ae565b610d1b565b3480156104a057600080fd5b506103d66104af3660046129f3565b610d51565b3480156104c057600080fd5b506103d66104cf366004612a70565b610df8565b3480156104e057600080fd5b506103d66104ef3660046129f3565b610e39565b34801561050057600080fd5b5061035c61050f366004612a18565b610ef8565b34801561052057600080fd5b50600b54610309906001600160a01b031681565b34801561054057600080fd5b50602f546102aa9062010000900460ff1681565b34801561056057600080fd5b5061035c602e5481565b34801561057657600080fd5b506103d66105853660046128fa565b610f8f565b34801561059657600080fd5b506103d66105a53660046128fa565b610fdd565b3480156105b657600080fd5b5061035c6105c53660046128fa565b61104d565b3480156105d657600080fd5b506103d66110ac565b3480156105eb57600080fd5b506102aa6105fa3660046128fa565b60136020526000908152604090205460ff1681565b34801561061b57600080fd5b50602f546102aa906301000000900460ff1681565b34801561063c57600080fd5b506000546001600160a01b0316610309565b34801561065a57600080fd5b506102aa6106693660046129ae565b611120565b34801561067a57600080fd5b506102aa6106893660046129ae565b61116f565b34801561069a57600080fd5b506103d661117c565b3480156106af57600080fd5b506103d66106be366004612a70565b611261565b3480156106cf57600080fd5b506103d66106de3660046128fa565b6112a2565b3480156106ef57600080fd5b506102aa6106fe3660046128fa565b60146020526000908152604090205460ff1681565b34801561071f57600080fd5b5061035c61072e366004612934565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561076557600080fd5b506103d66107743660046128fa565b6112ed565b34801561078557600080fd5b506103d66107943660046128fa565b611338565b3480156107a557600080fd5b506103d6611427565b60006107bb3384846114a9565b5060015b92915050565b600080546001600160a01b031633146107f95760405162461bcd60e51b81526004016107f090612b00565b60405180910390fd5b602f546301000000900460ff161561084a5760405162461bcd60e51b81526020600482015260146024820152734d61726b657420616c7265616479204f70656e2160601b60448201526064016107f0565b602f805463ffff00ff1916630101000117905543602e55600a8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03199091168117909155600081905260126020527f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec2805460ff191660011790556108d830826b204fce5e3e250261100000006114a9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190612917565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561099157600080fd5b505afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190612917565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190612917565b600b80546001600160a01b0319166001600160a01b039290921691821790556000908152601260205260409020805460ff1916600117905547610ae05760405162461bcd60e51b815260206004820152602960248201527f4d757374206861766520455448206f6e20636f6e747261637420746f204f70656044820152686e204d61726b65742160b81b60648201526084016107f0565b610af2610aec3061104d565b476115b6565b600954600880546001600160a01b0319166001600160a01b0390921691821790556000908152601160205260409020805460ff19166001179055600191505090565b6000546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610b8f848484611679565b610be18433610bdc85604051806060016040528060288152602001612c83602891396001600160a01b038a166000908152600f602090815260408083203384529091529020549190611c1d565b6114a9565b5060019392505050565b6000546001600160a01b03163314610c155760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03811660009081526013602052604090205460ff1615610c3b57600080fd5b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6000600154821115610cb35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064016107f0565b6000610cbd611c49565b9050610cc98382611c6c565b9392505050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601460205260409020805460ff19169055565b336000818152600f602090815260408083206001600160a01b038716845290915281205490916107bb918590610bdc9086611c78565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b81526004016107f090612b00565b6000606483610d893061104d565b610d939190612bf0565b610d9d9190612bce565b905060008111610de85760405162461bcd60e51b81526020600482015260166024820152754d757374206861766520546f6b656e73206f6e20434160501b60448201526064016107f0565b610df3308383611679565b505050565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016107f090612b00565b602494909455602592909255602755602655602855565b6000546001600160a01b03163314610e635760405162461bcd60e51b81526004016107f090612b00565b6000606483601854610e759190612bf0565b610e7f9190612bce565b905060008111610ed15760405162461bcd60e51b815260206004820152601f60248201527f4d757374206861766520546f6b656e7320666f72204275726e206f6e2043410060448201526064016107f0565b610edc308383611679565b8060186000828254610eee9190612c0f565b9091555050505050565b60006b204fce5e3e25026110000000831115610f565760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107f0565b81610f75576000610f6684611c84565b509395506107bf945050505050565b6000610f8084611c84565b509295506107bf945050505050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b031633146110075760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03811660009081526013602052604090205460ff1661102c57600080fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6001600160a01b03811660009081526010602052604081205460ff161561108a57506001600160a01b03166000908152600e602052604090205490565b6001600160a01b0382166000908152600d60205260409020546107bf90610c5f565b6000546001600160a01b031633146110d65760405162461bcd60e51b81526004016107f090612b00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006107bb3384610bdc85604051806060016040528060258152602001612cab60259139336000908152600f602090815260408083206001600160a01b038d1684529091529020549190611c1d565b60006107bb338484611679565b6000546001600160a01b031633146111a65760405162461bcd60e51b81526004016107f090612b00565b60006111b13061104d565b90506127106111cd6b204fce5e3e250261100000006001612bf0565b6111d79190612bce565b8110156112565760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303125206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a4016107f0565b61125e611cd3565b50565b6000546001600160a01b0316331461128b5760405162461bcd60e51b81526004016107f090612b00565b602994909455602a92909255602c55602b55602d55565b6000546001600160a01b031633146112cc5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146113175760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b81526004016107f090612b00565b6007546040516000916001600160a01b03169047908381818185875af1925050503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b50505050565b6001600160a01b0383166114ff5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107f0565b6001600160a01b0382166115555760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107f0565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600a546115ce9030906001600160a01b0316846114a9565b600a5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116729190612a42565b5050505050565b6001600160a01b0383166116dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f0565b6001600160a01b03821661173f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f0565b600081116117a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107f0565b6001600160a01b03831660009081526013602052604090205460ff16156117c757600080fd5b602f546301000000900460ff16611863576001600160a01b03831660009081526011602052604090205460ff168061181757506001600160a01b03821660009081526011602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152601760248201527f4d61726b6574206973206e6f7420796574204f70656e2100000000000000000060448201526064016107f0565b602f5460ff161515600114801561189357506001600160a01b03821660009081526012602052604090205460ff16155b1561190e57600354816118a58461104d565b6118af9190612bb6565b111561190e5760405162461bcd60e51b815260206004820152602860248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c657420604482015267726561636865642160c01b60648201526084016107f0565b6000546001600160a01b0384811691161480159061193a57506000546001600160a01b03838116911614155b801561194e57506001600160a01b03821615155b801561196857506009546001600160a01b03838116911614155b801561197c5750602f54610100900460ff16155b156119e0576000546001600160a01b038481169116148015906119ad5750600b546001600160a01b03838116911614155b156119e057602e544314156119e0576001600160a01b0382166000908152601460205260409020805460ff191660011790555b6000611a056017546119ff601554601654611c7890919063ffffffff16565b90611c78565b90506000611a123061104d565b600454602f5491925082101590610100900460ff16158015611a3c5750602f5462010000900460ff165b8015611a5d5750600b54600090611a5b906001600160a01b031661104d565b115b8015611a695750600083115b8015611a8e57506001600160a01b03851660009081526011602052604090205460ff16155b8015611ab357506001600160a01b03861660009081526011602052604090205460ff16155b8015611acc5750600b546001600160a01b038681169116145b8015611ad55750805b15611ae257611ae2611cd3565b6001600160a01b03861660009081526011602052604090205460019060ff1680611b2457506001600160a01b03861660009081526011602052604090205460ff165b15611b3157506000611c08565b600b546001600160a01b0388811691161415611b7257611b4f611f00565b602454601955602754601f55602554601b55602854602155602654601d55611c08565b600b546001600160a01b0387811691161415611bda57611b90611f00565b602954601955602c54601f55602a54601b55602d54602155602b54601d556001600160a01b03871660009081526014602052604090205460ff1615611bd557605f6019555b611c08565b6001600160a01b03871660009081526014602052604090205460ff1615611c0057600080fd5b611c08611f00565b611c1487878784611f72565b50505050505050565b60008184841115611c415760405162461bcd60e51b81526004016107f09190612aab565b505050900390565b6000806000611c566120fb565b9092509050611c658282611c6c565b9250505090565b6000610cc98284612bce565b6000610cc98284612bb6565b6000806000806000806000806000611c9b8a6122a3565b9250925092506000806000611cb98d8686611cb4611c49565b6122df565b919f909e50909c50959a5093985091965092945050505050565b602f805461ff0019166101001790556000611ced3061104d565b90506000601654601754601554611d049190612bb6565b611d0e9190612bb6565b90506000611d286002601654611c6c90919063ffffffff16565b90506000611d4b601854611d45848761232f90919063ffffffff16565b9061232f565b905047611d578261233b565b6000611d63478361232f565b90506000611d8686611d80601554856124a490919063ffffffff16565b90611c6c565b90506000611da387611d80601754866124a490919063ffffffff16565b90506000611db582611d45868661232f565b600060158190556017819055601681905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114611e17576040519150601f19603f3d011682016040523d82523d6000602084013e611e1c565b606091505b50506006546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611e6c576040519150601f19603f3d011682016040523d82523d6000602084013e611e71565b606091505b505080915050611e8188836115b6565b6706f05b59d3b20000471115611ee9576007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611ede576040519150601f19603f3d011682016040523d82523d6000602084013e611ee3565b606091505b50909150505b5050602f805461ff00191690555050505050505050565b601d54158015611f105750601954155b8015611f1c5750601f54155b8015611f285750601b54155b8015611f345750602154155b15611f3b57565b601d8054601e5560198054601a55601b8054601c55601f805460205560218054602255600094859055928490559083905582905555565b80611f7f57611f7f611f00565b6001600160a01b03841660009081526010602052604090205460ff168015611fc057506001600160a01b03831660009081526010602052604090205460ff16155b15611fd557611fd08484846124b0565b6120d3565b6001600160a01b03841660009081526010602052604090205460ff1615801561201657506001600160a01b03831660009081526010602052604090205460ff165b1561202657611fd08484846125d6565b6001600160a01b03841660009081526010602052604090205460ff1615801561206857506001600160a01b03831660009081526010602052604090205460ff16155b1561207857611fd084848461267f565b6001600160a01b03841660009081526010602052604090205460ff1680156120b857506001600160a01b03831660009081526010602052604090205460ff165b156120c857611fd08484846126c3565b6120d384848461267f565b806114a3576114a3601a54601955601c54601b55602054601f55602254602155601e54601d55565b60015460009081906b204fce5e3e25026110000000825b600c548110156122605782600d6000600c848154811061213457612134612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061219f575081600e6000600c848154811061217857612178612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121be575050600154936b204fce5e3e250261100000009350915050565b612204600d6000600c84815481106121d8576121d8612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061232f565b925061224c600e6000600c848154811061222057612220612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061232f565b91508061225881612c26565b915050612112565b5060015461227a906b204fce5e3e25026110000000611c6c565b82101561229a575050600154926b204fce5e3e2502611000000092509050565b90939092509050565b6000806000806122b285612736565b905060006122bf86612752565b905060006122d182611d45898661232f565b979296509094509092505050565b60008080806122ee88866124a4565b905060006122fc88876124a4565b9050600061230a88886124a4565b9050600061231c82611d45868661232f565b939b939a50919850919650505050505050565b6000610cc98284612c0f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061237057612370612c57565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123c457600080fd5b505afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190612917565b8160018151811061240f5761240f612c57565b6001600160a01b039283166020918202929092010152600a5461243591309116846114a9565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061246e908590600090869030904290600401612b45565b600060405180830381600087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050505050565b6000610cc98284612bf0565b6000806000806000806124c287611c84565b6001600160a01b038f166000908152600e6020526040902054959b509399509197509550935091506124f4908861232f565b6001600160a01b038a166000908152600e6020908152604080832093909355600d90522054612523908761232f565b6001600160a01b03808b166000908152600d602052604080822093909355908a16815220546125529086611c78565b6001600160a01b0389166000908152600d60205260409020556125748161278d565b61257e84836128d6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125c391815260200190565b60405180910390a3505050505050505050565b6000806000806000806125e887611c84565b6001600160a01b038f166000908152600d6020526040902054959b5093995091975095509350915061261a908761232f565b6001600160a01b03808b166000908152600d6020908152604080832094909455918b168152600e90915220546126509084611c78565b6001600160a01b0389166000908152600e6020908152604080832093909355600d905220546125529086611c78565b60008060008060008061269187611c84565b6001600160a01b038f166000908152600d6020526040902054959b50939950919750955093509150612523908761232f565b6000806000806000806126d587611c84565b6001600160a01b038f166000908152600e6020526040902054959b50939950919750955093509150612707908861232f565b6001600160a01b038a166000908152600e6020908152604080832093909355600d9052205461261a908761232f565b60006107bf6064611d80602154856124a490919063ffffffff16565b60006107bf6064611d80601d54601f54601b546019546127729190612bb6565b61277c9190612bb6565b6127869190612bb6565b85906124a4565b60235460195461279d9083612bf0565b6127a79190612bce565b601560008282546127b89190612bb6565b9091555050602354601f546127cd9083612bf0565b6127d79190612bce565b601860008282546127e89190612bb6565b9091555050602354601b546127fd9083612bf0565b6128079190612bce565b601760008282546128189190612bb6565b9091555050602354601d5461282d9083612bf0565b6128379190612bce565b601660008282546128489190612bb6565b9091555060009050612858611c49565b9050600061286683836124a4565b306000908152600d60205260409020549091506128839082611c78565b306000908152600d602090815260408083209390935560109052205460ff1615610df357306000908152600e60205260409020546128c19084611c78565b306000908152600e6020526040902055505050565b6001546128e3908361232f565b6001556002546128f39082611c78565b6002555050565b60006020828403121561290c57600080fd5b8135610cc981612c6d565b60006020828403121561292957600080fd5b8151610cc981612c6d565b6000806040838503121561294757600080fd5b823561295281612c6d565b9150602083013561296281612c6d565b809150509250929050565b60008060006060848603121561298257600080fd5b833561298d81612c6d565b9250602084013561299d81612c6d565b929592945050506040919091013590565b600080604083850312156129c157600080fd5b82356129cc81612c6d565b946020939093013593505050565b6000602082840312156129ec57600080fd5b5035919050565b60008060408385031215612a0657600080fd5b82359150602083013561296281612c6d565b60008060408385031215612a2b57600080fd5b823591506020830135801515811461296257600080fd5b600080600060608486031215612a5757600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612a8857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612ad857858101830151858201604001528201612abc565b81811115612aea576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b955784516001600160a01b031683529383019391830191600101612b70565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612bc957612bc9612c41565b500190565b600082612beb57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612c0a57612c0a612c41565b500290565b600082821015612c2157612c21612c41565b500390565b6000600019821415612c3a57612c3a612c41565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461125e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e0fbdb03785b92941b53ce1803a78929fedec95daaff32e25bb0b6f37b7c53de64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80634a74bb021161012e578063a457c2d7116100ab578063d971c4f21161006f578063d971c4f2146106e3578063dd62ed3e14610713578063e17c4c7414610759578063f2fde38b14610779578063f5648a4f1461079957600080fd5b8063a457c2d71461064e578063a9059cbb1461066e578063b74510e11461068e578063c791fc54146106a3578063cf1e568d146106c357600080fd5b8063715018a6116100f2578063715018a6146105ca57806377468d06146105df5780638c3975fd1461060f5780638da5cb5b1461063057806395d89b411461024b57600080fd5b80634a74bb02146105345780634e6f29251461055457806360d1259e1461056a5780636656e9831461058a57806370a08231146105aa57600080fd5b8063288a0f21116101bc578063398d92bb11610180578063398d92bb1461049457806340ac48d3146104b4578063432f0d09146104d45780634549b039146104f457806349bd5a5e1461051457600080fd5b8063288a0f21146103f85780632d83811914610418578063313ce5671461043857806333251a0b14610454578063395093511461047457600080fd5b80631694505e116102035780631694505e1461032157806318160ddd146103415780631a3f193b1461036a578063203cb8f1146103b657806323b872dd146103d857600080fd5b806306fdde031461024b578063095ea7b31461028a5780631143021d146102ba5780631255589b146102d457806314a4e63c146102e957600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50604080518082018252600781526629a420a6a7a7a760c91b602082015290516102819190612aab565b60405180910390f35b34801561029657600080fd5b506102aa6102a53660046129ae565b6107ae565b6040519015158152602001610281565b3480156102c657600080fd5b50602f546102aa9060ff1681565b3480156102e057600080fd5b506102aa6107c5565b3480156102f557600080fd5b50600854610309906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032d57600080fd5b50600a54610309906001600160a01b031681565b34801561034d57600080fd5b506b204fce5e3e250261100000005b604051908152602001610281565b34801561037657600080fd5b50602454602554602654602954602a54602b54604080519687526020870195909552938501929092526060840152608083015260a082015260c001610281565b3480156103c257600080fd5b506103d66103d13660046128fa565b610b34565b005b3480156103e457600080fd5b506102aa6103f336600461296d565b610b82565b34801561040457600080fd5b506103d66104133660046128fa565b610beb565b34801561042457600080fd5b5061035c6104333660046129da565b610c5f565b34801561044457600080fd5b5060405160128152602001610281565b34801561046057600080fd5b506103d661046f3660046128fa565b610cd0565b34801561048057600080fd5b506102aa61048f3660046129ae565b610d1b565b3480156104a057600080fd5b506103d66104af3660046129f3565b610d51565b3480156104c057600080fd5b506103d66104cf366004612a70565b610df8565b3480156104e057600080fd5b506103d66104ef3660046129f3565b610e39565b34801561050057600080fd5b5061035c61050f366004612a18565b610ef8565b34801561052057600080fd5b50600b54610309906001600160a01b031681565b34801561054057600080fd5b50602f546102aa9062010000900460ff1681565b34801561056057600080fd5b5061035c602e5481565b34801561057657600080fd5b506103d66105853660046128fa565b610f8f565b34801561059657600080fd5b506103d66105a53660046128fa565b610fdd565b3480156105b657600080fd5b5061035c6105c53660046128fa565b61104d565b3480156105d657600080fd5b506103d66110ac565b3480156105eb57600080fd5b506102aa6105fa3660046128fa565b60136020526000908152604090205460ff1681565b34801561061b57600080fd5b50602f546102aa906301000000900460ff1681565b34801561063c57600080fd5b506000546001600160a01b0316610309565b34801561065a57600080fd5b506102aa6106693660046129ae565b611120565b34801561067a57600080fd5b506102aa6106893660046129ae565b61116f565b34801561069a57600080fd5b506103d661117c565b3480156106af57600080fd5b506103d66106be366004612a70565b611261565b3480156106cf57600080fd5b506103d66106de3660046128fa565b6112a2565b3480156106ef57600080fd5b506102aa6106fe3660046128fa565b60146020526000908152604090205460ff1681565b34801561071f57600080fd5b5061035c61072e366004612934565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561076557600080fd5b506103d66107743660046128fa565b6112ed565b34801561078557600080fd5b506103d66107943660046128fa565b611338565b3480156107a557600080fd5b506103d6611427565b60006107bb3384846114a9565b5060015b92915050565b600080546001600160a01b031633146107f95760405162461bcd60e51b81526004016107f090612b00565b60405180910390fd5b602f546301000000900460ff161561084a5760405162461bcd60e51b81526020600482015260146024820152734d61726b657420616c7265616479204f70656e2160601b60448201526064016107f0565b602f805463ffff00ff1916630101000117905543602e55600a8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03199091168117909155600081905260126020527f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec2805460ff191660011790556108d830826b204fce5e3e250261100000006114a9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109499190612917565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561099157600080fd5b505afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190612917565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610a1157600080fd5b505af1158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190612917565b600b80546001600160a01b0319166001600160a01b039290921691821790556000908152601260205260409020805460ff1916600117905547610ae05760405162461bcd60e51b815260206004820152602960248201527f4d757374206861766520455448206f6e20636f6e747261637420746f204f70656044820152686e204d61726b65742160b81b60648201526084016107f0565b610af2610aec3061104d565b476115b6565b600954600880546001600160a01b0319166001600160a01b0390921691821790556000908152601160205260409020805460ff19166001179055600191505090565b6000546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610b8f848484611679565b610be18433610bdc85604051806060016040528060288152602001612c83602891396001600160a01b038a166000908152600f602090815260408083203384529091529020549190611c1d565b6114a9565b5060019392505050565b6000546001600160a01b03163314610c155760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03811660009081526013602052604090205460ff1615610c3b57600080fd5b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6000600154821115610cb35760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064016107f0565b6000610cbd611c49565b9050610cc98382611c6c565b9392505050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601460205260409020805460ff19169055565b336000818152600f602090815260408083206001600160a01b038716845290915281205490916107bb918590610bdc9086611c78565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b81526004016107f090612b00565b6000606483610d893061104d565b610d939190612bf0565b610d9d9190612bce565b905060008111610de85760405162461bcd60e51b81526020600482015260166024820152754d757374206861766520546f6b656e73206f6e20434160501b60448201526064016107f0565b610df3308383611679565b505050565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016107f090612b00565b602494909455602592909255602755602655602855565b6000546001600160a01b03163314610e635760405162461bcd60e51b81526004016107f090612b00565b6000606483601854610e759190612bf0565b610e7f9190612bce565b905060008111610ed15760405162461bcd60e51b815260206004820152601f60248201527f4d757374206861766520546f6b656e7320666f72204275726e206f6e2043410060448201526064016107f0565b610edc308383611679565b8060186000828254610eee9190612c0f565b9091555050505050565b60006b204fce5e3e25026110000000831115610f565760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c790000000060448201526064016107f0565b81610f75576000610f6684611c84565b509395506107bf945050505050565b6000610f8084611c84565b509295506107bf945050505050565b6000546001600160a01b03163314610fb95760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6000546001600160a01b031633146110075760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03811660009081526013602052604090205460ff1661102c57600080fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6001600160a01b03811660009081526010602052604081205460ff161561108a57506001600160a01b03166000908152600e602052604090205490565b6001600160a01b0382166000908152600d60205260409020546107bf90610c5f565b6000546001600160a01b031633146110d65760405162461bcd60e51b81526004016107f090612b00565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006107bb3384610bdc85604051806060016040528060258152602001612cab60259139336000908152600f602090815260408083206001600160a01b038d1684529091529020549190611c1d565b60006107bb338484611679565b6000546001600160a01b031633146111a65760405162461bcd60e51b81526004016107f090612b00565b60006111b13061104d565b90506127106111cd6b204fce5e3e250261100000006001612bf0565b6111d79190612bce565b8110156112565760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303125206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a4016107f0565b61125e611cd3565b50565b6000546001600160a01b0316331461128b5760405162461bcd60e51b81526004016107f090612b00565b602994909455602a92909255602c55602b55602d55565b6000546001600160a01b031633146112cc5760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000546001600160a01b031633146113175760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6000546001600160a01b031633146113625760405162461bcd60e51b81526004016107f090612b00565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016107f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114515760405162461bcd60e51b81526004016107f090612b00565b6007546040516000916001600160a01b03169047908381818185875af1925050503d806000811461149e576040519150601f19603f3d011682016040523d82523d6000602084013e6114a3565b606091505b50505050565b6001600160a01b0383166114ff5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f206164647265737360448201526064016107f0565b6001600160a01b0382166115555760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f2061646472657373000060448201526064016107f0565b6001600160a01b038381166000818152600f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600a546115ce9030906001600160a01b0316846114a9565b600a5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116729190612a42565b5050505050565b6001600160a01b0383166116dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f0565b6001600160a01b03821661173f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f0565b600081116117a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107f0565b6001600160a01b03831660009081526013602052604090205460ff16156117c757600080fd5b602f546301000000900460ff16611863576001600160a01b03831660009081526011602052604090205460ff168061181757506001600160a01b03821660009081526011602052604090205460ff165b6118635760405162461bcd60e51b815260206004820152601760248201527f4d61726b6574206973206e6f7420796574204f70656e2100000000000000000060448201526064016107f0565b602f5460ff161515600114801561189357506001600160a01b03821660009081526012602052604090205460ff16155b1561190e57600354816118a58461104d565b6118af9190612bb6565b111561190e5760405162461bcd60e51b815260206004820152602860248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c657420604482015267726561636865642160c01b60648201526084016107f0565b6000546001600160a01b0384811691161480159061193a57506000546001600160a01b03838116911614155b801561194e57506001600160a01b03821615155b801561196857506009546001600160a01b03838116911614155b801561197c5750602f54610100900460ff16155b156119e0576000546001600160a01b038481169116148015906119ad5750600b546001600160a01b03838116911614155b156119e057602e544314156119e0576001600160a01b0382166000908152601460205260409020805460ff191660011790555b6000611a056017546119ff601554601654611c7890919063ffffffff16565b90611c78565b90506000611a123061104d565b600454602f5491925082101590610100900460ff16158015611a3c5750602f5462010000900460ff165b8015611a5d5750600b54600090611a5b906001600160a01b031661104d565b115b8015611a695750600083115b8015611a8e57506001600160a01b03851660009081526011602052604090205460ff16155b8015611ab357506001600160a01b03861660009081526011602052604090205460ff16155b8015611acc5750600b546001600160a01b038681169116145b8015611ad55750805b15611ae257611ae2611cd3565b6001600160a01b03861660009081526011602052604090205460019060ff1680611b2457506001600160a01b03861660009081526011602052604090205460ff165b15611b3157506000611c08565b600b546001600160a01b0388811691161415611b7257611b4f611f00565b602454601955602754601f55602554601b55602854602155602654601d55611c08565b600b546001600160a01b0387811691161415611bda57611b90611f00565b602954601955602c54601f55602a54601b55602d54602155602b54601d556001600160a01b03871660009081526014602052604090205460ff1615611bd557605f6019555b611c08565b6001600160a01b03871660009081526014602052604090205460ff1615611c0057600080fd5b611c08611f00565b611c1487878784611f72565b50505050505050565b60008184841115611c415760405162461bcd60e51b81526004016107f09190612aab565b505050900390565b6000806000611c566120fb565b9092509050611c658282611c6c565b9250505090565b6000610cc98284612bce565b6000610cc98284612bb6565b6000806000806000806000806000611c9b8a6122a3565b9250925092506000806000611cb98d8686611cb4611c49565b6122df565b919f909e50909c50959a5093985091965092945050505050565b602f805461ff0019166101001790556000611ced3061104d565b90506000601654601754601554611d049190612bb6565b611d0e9190612bb6565b90506000611d286002601654611c6c90919063ffffffff16565b90506000611d4b601854611d45848761232f90919063ffffffff16565b9061232f565b905047611d578261233b565b6000611d63478361232f565b90506000611d8686611d80601554856124a490919063ffffffff16565b90611c6c565b90506000611da387611d80601754866124a490919063ffffffff16565b90506000611db582611d45868661232f565b600060158190556017819055601681905560055460405192935090916001600160a01b039091169085908381818185875af1925050503d8060008114611e17576040519150601f19603f3d011682016040523d82523d6000602084013e611e1c565b606091505b50506006546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611e6c576040519150601f19603f3d011682016040523d82523d6000602084013e611e71565b606091505b505080915050611e8188836115b6565b6706f05b59d3b20000471115611ee9576007546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611ede576040519150601f19603f3d011682016040523d82523d6000602084013e611ee3565b606091505b50909150505b5050602f805461ff00191690555050505050505050565b601d54158015611f105750601954155b8015611f1c5750601f54155b8015611f285750601b54155b8015611f345750602154155b15611f3b57565b601d8054601e5560198054601a55601b8054601c55601f805460205560218054602255600094859055928490559083905582905555565b80611f7f57611f7f611f00565b6001600160a01b03841660009081526010602052604090205460ff168015611fc057506001600160a01b03831660009081526010602052604090205460ff16155b15611fd557611fd08484846124b0565b6120d3565b6001600160a01b03841660009081526010602052604090205460ff1615801561201657506001600160a01b03831660009081526010602052604090205460ff165b1561202657611fd08484846125d6565b6001600160a01b03841660009081526010602052604090205460ff1615801561206857506001600160a01b03831660009081526010602052604090205460ff16155b1561207857611fd084848461267f565b6001600160a01b03841660009081526010602052604090205460ff1680156120b857506001600160a01b03831660009081526010602052604090205460ff165b156120c857611fd08484846126c3565b6120d384848461267f565b806114a3576114a3601a54601955601c54601b55602054601f55602254602155601e54601d55565b60015460009081906b204fce5e3e25026110000000825b600c548110156122605782600d6000600c848154811061213457612134612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061219f575081600e6000600c848154811061217857612178612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121be575050600154936b204fce5e3e250261100000009350915050565b612204600d6000600c84815481106121d8576121d8612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061232f565b925061224c600e6000600c848154811061222057612220612c57565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061232f565b91508061225881612c26565b915050612112565b5060015461227a906b204fce5e3e25026110000000611c6c565b82101561229a575050600154926b204fce5e3e2502611000000092509050565b90939092509050565b6000806000806122b285612736565b905060006122bf86612752565b905060006122d182611d45898661232f565b979296509094509092505050565b60008080806122ee88866124a4565b905060006122fc88876124a4565b9050600061230a88886124a4565b9050600061231c82611d45868661232f565b939b939a50919850919650505050505050565b6000610cc98284612c0f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061237057612370612c57565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123c457600080fd5b505afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190612917565b8160018151811061240f5761240f612c57565b6001600160a01b039283166020918202929092010152600a5461243591309116846114a9565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061246e908590600090869030904290600401612b45565b600060405180830381600087803b15801561248857600080fd5b505af115801561249c573d6000803e3d6000fd5b505050505050565b6000610cc98284612bf0565b6000806000806000806124c287611c84565b6001600160a01b038f166000908152600e6020526040902054959b509399509197509550935091506124f4908861232f565b6001600160a01b038a166000908152600e6020908152604080832093909355600d90522054612523908761232f565b6001600160a01b03808b166000908152600d602052604080822093909355908a16815220546125529086611c78565b6001600160a01b0389166000908152600d60205260409020556125748161278d565b61257e84836128d6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125c391815260200190565b60405180910390a3505050505050505050565b6000806000806000806125e887611c84565b6001600160a01b038f166000908152600d6020526040902054959b5093995091975095509350915061261a908761232f565b6001600160a01b03808b166000908152600d6020908152604080832094909455918b168152600e90915220546126509084611c78565b6001600160a01b0389166000908152600e6020908152604080832093909355600d905220546125529086611c78565b60008060008060008061269187611c84565b6001600160a01b038f166000908152600d6020526040902054959b50939950919750955093509150612523908761232f565b6000806000806000806126d587611c84565b6001600160a01b038f166000908152600e6020526040902054959b50939950919750955093509150612707908861232f565b6001600160a01b038a166000908152600e6020908152604080832093909355600d9052205461261a908761232f565b60006107bf6064611d80602154856124a490919063ffffffff16565b60006107bf6064611d80601d54601f54601b546019546127729190612bb6565b61277c9190612bb6565b6127869190612bb6565b85906124a4565b60235460195461279d9083612bf0565b6127a79190612bce565b601560008282546127b89190612bb6565b9091555050602354601f546127cd9083612bf0565b6127d79190612bce565b601860008282546127e89190612bb6565b9091555050602354601b546127fd9083612bf0565b6128079190612bce565b601760008282546128189190612bb6565b9091555050602354601d5461282d9083612bf0565b6128379190612bce565b601660008282546128489190612bb6565b9091555060009050612858611c49565b9050600061286683836124a4565b306000908152600d60205260409020549091506128839082611c78565b306000908152600d602090815260408083209390935560109052205460ff1615610df357306000908152600e60205260409020546128c19084611c78565b306000908152600e6020526040902055505050565b6001546128e3908361232f565b6001556002546128f39082611c78565b6002555050565b60006020828403121561290c57600080fd5b8135610cc981612c6d565b60006020828403121561292957600080fd5b8151610cc981612c6d565b6000806040838503121561294757600080fd5b823561295281612c6d565b9150602083013561296281612c6d565b809150509250929050565b60008060006060848603121561298257600080fd5b833561298d81612c6d565b9250602084013561299d81612c6d565b929592945050506040919091013590565b600080604083850312156129c157600080fd5b82356129cc81612c6d565b946020939093013593505050565b6000602082840312156129ec57600080fd5b5035919050565b60008060408385031215612a0657600080fd5b82359150602083013561296281612c6d565b60008060408385031215612a2b57600080fd5b823591506020830135801515811461296257600080fd5b600080600060608486031215612a5757600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612a8857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b81811015612ad857858101830151858201604001528201612abc565b81811115612aea576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b955784516001600160a01b031683529383019391830191600101612b70565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612bc957612bc9612c41565b500190565b600082612beb57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612c0a57612c0a612c41565b500290565b600082821015612c2157612c21612c41565b500390565b6000600019821415612c3a57612c3a612c41565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461125e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e0fbdb03785b92941b53ce1803a78929fedec95daaff32e25bb0b6f37b7c53de64736f6c63430008070033

Deployed Bytecode Sourcemap

15067:23499:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19496:96;;;;;;;;;;-1:-1:-1;19575:9:0;;;;;;;;;;;-1:-1:-1;;;19575:9:0;;;;19496:96;;;;19575:9;19496:96;:::i;:::-;;;;;;;;20429:161;;;;;;;;;;-1:-1:-1;20429:161:0;;;;;:::i;:::-;;:::i;:::-;;;5053:14:1;;5046:22;5028:41;;5016:2;5001:18;20429:161:0;4888:187:1;17818:36:0;;;;;;;;;;-1:-1:-1;17818:36:0;;;;;;;;25146:926;;;;;;;;;;;;;:::i;15783:33::-;;;;;;;;;;-1:-1:-1;15783:33:0;;;;-1:-1:-1;;;;;15783:33:0;;;;;;-1:-1:-1;;;;;3691:32:1;;;3673:51;;3661:2;3646:18;15783:33:0;3527:203:1;15935:41:0;;;;;;;;;;-1:-1:-1;15935:41:0;;;;-1:-1:-1;;;;;15935:41:0;;;19805:95;;;;;;;;;;-1:-1:-1;15397:13:0;19805:95;;;12241:25:1;;;12229:2;12214:18;19805:95:0;12095:177:1;38321:242:0;;;;;;;;;;-1:-1:-1;38498:8:0;;38507;;38516;;38525:9;;38535;;38545;;38321:242;;;13549:25:1;;;13605:2;13590:18;;13583:34;;;;13633:18;;;13626:34;;;;13691:2;13676:18;;13669:34;13734:3;13719:19;;13712:35;13778:3;13763:19;;13756:35;13536:3;13521:19;38321:242:0;13262:535:1;35880:117:0;;;;;;;;;;-1:-1:-1;35880:117:0;;;;;:::i;:::-;;:::i;:::-;;20596:329;;;;;;;;;;-1:-1:-1;20596:329:0;;;;;:::i;:::-;;:::i;36125:129::-;;;;;;;;;;-1:-1:-1;36125:129:0;;;;;:::i;:::-;;:::i;21930:241::-;;;;;;;;;;-1:-1:-1;21930:241:0;;;;;:::i;:::-;;:::i;19704:95::-;;;;;;;;;;-1:-1:-1;19704:95:0;;15301:2;13944:36:1;;13932:2;13917:18;19704:95:0;13802:184:1;36395:107:0;;;;;;;;;;-1:-1:-1;36395:107:0;;;;;:::i;:::-;;:::i;20931:218::-;;;;;;;;;;-1:-1:-1;20931:218:0;;;;;:::i;:::-;;:::i;36939:265::-;;;;;;;;;;-1:-1:-1;36939:265:0;;;;;:::i;:::-;;:::i;37581:356::-;;;;;;;;;;-1:-1:-1;37581:356:0;;;;;:::i;:::-;;:::i;37210:365::-;;;;;;;;;;-1:-1:-1;37210:365:0;;;;;:::i;:::-;;:::i;21480:444::-;;;;;;;;;;-1:-1:-1;21480:444:0;;;;;:::i;:::-;;:::i;15983:28::-;;;;;;;;;;-1:-1:-1;15983:28:0;;;;-1:-1:-1;;;;;15983:28:0;;;17889:41;;;;;;;;;;-1:-1:-1;17889:41:0;;;;;;;;;;;17775:36;;;;;;;;;;;;;;;;35649:110;;;;;;;;;;-1:-1:-1;35649:110:0;;;;;:::i;:::-;;:::i;36257:132::-;;;;;;;;;;-1:-1:-1;36257:132:0;;;;;:::i;:::-;;:::i;19906:195::-;;;;;;;;;;-1:-1:-1;19906:195:0;;;;;:::i;:::-;;:::i;11335:148::-;;;;;;;;;;;;;:::i;16382:43::-;;;;;;;;;;-1:-1:-1;16382:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17937:30;;;;;;;;;;-1:-1:-1;17937:30:0;;;;;;;;;;;11111:87;;;;;;;;;;-1:-1:-1;11157:7:0;11184:6;-1:-1:-1;;;;;11184:6:0;11111:87;;21155:319;;;;;;;;;;-1:-1:-1;21155:319:0;;;;;:::i;:::-;;:::i;20107:167::-;;;;;;;;;;-1:-1:-1;20107:167:0;;;;;:::i;:::-;;:::i;36508:262::-;;;;;;;;;;;;;:::i;37943:372::-;;;;;;;;;;-1:-1:-1;37943:372:0;;;;;:::i;:::-;;:::i;36003:116::-;;;;;;;;;;-1:-1:-1;36003:116:0;;;;;:::i;:::-;;:::i;16432:45::-;;;;;;;;;;-1:-1:-1;16432:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20280:143;;;;;;;;;;-1:-1:-1;20280:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20388:18:0;;;20361:7;20388:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20280:143;35765:109;;;;;;;;;;-1:-1:-1;35765:109:0;;;;;:::i;:::-;;:::i;11489:249::-;;;;;;;;;;-1:-1:-1;11489:249:0;;;;;:::i;:::-;;:::i;36776:157::-;;;;;;;;;;;;;:::i;20429:161::-;20504:4;20521:39;10770:10;20544:7;20553:6;20521:8;:39::i;:::-;-1:-1:-1;20578:4:0;20429:161;;;;;:::o;25146:926::-;25196:4;11184:6;;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;;;;;;;;;25221:10:::1;::::0;;;::::1;;;25220:11;25212:44;;;::::0;-1:-1:-1;;;25212:44:0;;9995:2:1;25212:44:0::1;::::0;::::1;9977:21:1::0;10034:2;10014:18;;;10007:30;-1:-1:-1;;;10053:18:1;;;10046:50;10113:18;;25212:44:0::1;9793:344:1::0;25212:44:0::1;25267:16;:23:::0;;-1:-1:-1;;25340:17:0;;;;;25388:12:::1;25368:17;:32:::0;25518:15:::1;:30:::0;;25464:42:::1;-1:-1:-1::0;;;;;;25518:30:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;25559:42:0;;;:16:::1;:42;::::0;;:49;;-1:-1:-1;;25559:49:0::1;-1:-1:-1::0;25559:49:0::1;::::0;;25619:58:::1;25636:4;25464:42:::0;15397:13:::1;25619:8;:58::i;:::-;25722:12;-1:-1:-1::0;;;;;25722:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25704:52:0::1;;25765:4;25772:12;-1:-1:-1::0;;;;;25772:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25704:88;::::0;-1:-1:-1;;;;;;25704:88:0::1;::::0;;;;;;-1:-1:-1;;;;;4189:15:1;;;25704:88:0::1;::::0;::::1;4171:34:1::0;4241:15;;4221:18;;;4214:43;4106:18;;25704:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25688:13;:104:::0;;-1:-1:-1;;;;;;25688:104:0::1;-1:-1:-1::0;;;;;25688:104:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;25803:40:0;;;:16:::1;:40;::::0;;;;:47;;-1:-1:-1;;25803:47:0::1;-1:-1:-1::0;25803:47:0::1;::::0;;25869:21:::1;25861:79;;;::::0;-1:-1:-1;;;25861:79:0;;7647:2:1;25861:79:0::1;::::0;::::1;7629:21:1::0;7686:2;7666:18;;;7659:30;7725:34;7705:18;;;7698:62;-1:-1:-1;;;7776:18:1;;;7769:39;7825:19;;25861:79:0::1;7445:405:1::0;25861:79:0::1;25951:61;25964:24;25982:4;25964:9;:24::i;:::-;25990:21;25951:12;:61::i;:::-;26037:4;::::0;35557:10;:33;;-1:-1:-1;;;;;;35557:33:0;-1:-1:-1;;;;;26037:4:0;;::::1;35557:33:::0;;;;;-1:-1:-1;35601:27:0;;;:15;:27;;;;;:34;;-1:-1:-1;;35601:34:0;-1:-1:-1;35601:34:0;;;26060:4:::1;26053:11;;;25146:926:::0;:::o;35880:117::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35957:25:0::1;;::::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;35957:32:0::1;35985:4;35957:32;::::0;;35880:117::o;20596:329::-;20692:4;20709:36;20719:6;20727:9;20738:6;20709:9;:36::i;:::-;20756:139;20765:6;10770:10;20795:89;20833:6;20795:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20795:19:0;;;;;;:11;:19;;;;;;;;10770:10;20795:33;;;;;;;;;;:37;:89::i;:::-;20756:8;:139::i;:::-;-1:-1:-1;20913:4:0;20596:329;;;;;:::o;36125:129::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36193:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;::::1;;36192:18;36184:27;;;::::0;::::1;;-1:-1:-1::0;;;;;36222:17:0::1;;::::0;;;:10:::1;:17;::::0;;;;:24;;-1:-1:-1;;36222:24:0::1;36242:4;36222:24;::::0;;36125:129::o;21930:241::-;21997:7;22036;;22025;:18;;22017:61;;;;-1:-1:-1;;;22017:61:0;;8057:2:1;22017:61:0;;;8039:21:1;8096:2;8076:18;;;8069:30;8135:32;8115:18;;;8108:60;8185:18;;22017:61:0;7855:354:1;22017:61:0;22089:19;22111:10;:8;:10::i;:::-;22089:32;-1:-1:-1;22139:24:0;:7;22089:32;22139:11;:24::i;:::-;22132:31;21930:241;-1:-1:-1;;;21930:241:0:o;36395:107::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36464:22:0::1;36489:5;36464:22:::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;36464:30:0::1;::::0;;36395:107::o;20931:218::-;10770:10;21019:4;21068:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21068:34:0;;;;;;;;;;21019:4;;21036:83;;21059:7;;21068:50;;21107:10;21068:38;:50::i;36939:265::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;37027:14:::1;37082:5;37071:8;37044:24;37062:4;37044:9;:24::i;:::-;:35;;;;:::i;:::-;:43;;;;:::i;:::-;37027:60;;37115:1;37106:6;:10;37098:45;;;::::0;-1:-1:-1;;;37098:45:0;;9234:2:1;37098:45:0::1;::::0;::::1;9216:21:1::0;9273:2;9253:18;;;9246:30;-1:-1:-1;;;9292:18:1;;;9285:52;9354:18;;37098:45:0::1;9032:346:1::0;37098:45:0::1;37154:42;37172:4;37179:8;37189:6;37154:9;:42::i;:::-;37016:188;36939:265:::0;;:::o;37581:356::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;37755:8:::1;:27:::0;;;;37793:8:::1;:23:::0;;;;37827:9:::1;:23:::0;37861:8:::1;:27:::0;37899:9:::1;:30:::0;37581:356::o;37210:365::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;37304:27:::1;37366:5;37355:8;37334:18;;:29;;;;:::i;:::-;:37;;;;:::i;:::-;37304:67;;37412:1;37390:19;:23;37382:67;;;::::0;-1:-1:-1;;;37382:67:0;;11224:2:1;37382:67:0::1;::::0;::::1;11206:21:1::0;11263:2;11243:18;;;11236:30;11302:33;11282:18;;;11275:61;11353:18;;37382:67:0::1;11022:355:1::0;37382:67:0::1;37460:55;37478:4;37485:8;37495:19;37460:9;:55::i;:::-;37548:19;37526:18;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;37210:365:0:o;21480:444::-;21571:7;15397:13;21599:7;:18;;21591:59;;;;-1:-1:-1;;;21591:59:0;;6881:2:1;21591:59:0;;;6863:21:1;6920:2;6900:18;;;6893:30;6959;6939:18;;;6932:58;7007:18;;21591:59:0;6679:352:1;21591:59:0;21666:17;21661:256;;21701:15;21730:19;21741:7;21730:10;:19::i;:::-;-1:-1:-1;21700:49:0;;-1:-1:-1;21764:14:0;;-1:-1:-1;;;;;21764:14:0;21661:256;21814:23;21849:19;21860:7;21849:10;:19::i;:::-;-1:-1:-1;21811:57:0;;-1:-1:-1;21883:22:0;;-1:-1:-1;;;;;21883:22:0;35649:110;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35720:24:0::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;35720:31:0::1;35747:4;35720:31;::::0;;35649:110::o;36257:132::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36327:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;::::1;;36319:26;;;::::0;::::1;;-1:-1:-1::0;;;;;36356:17:0::1;36376:5;36356:17:::0;;;:10:::1;:17;::::0;;;;:25;;-1:-1:-1;;36356:25:0::1;::::0;;36257:132::o;19906:195::-;-1:-1:-1;;;;;19996:17:0;;19972:7;19996:17;;;:8;:17;;;;;;;;19992:46;;;-1:-1:-1;;;;;;20022:16:0;;;;;:7;:16;;;;;;;19906:195::o;19992:46::-;-1:-1:-1;;;;;20076:16:0;;;;;;:7;:16;;;;;;20056:37;;:19;:37::i;11335:148::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;11442:1:::1;11426:6:::0;;11405:40:::1;::::0;-1:-1:-1;;;;;11426:6:0;;::::1;::::0;11405:40:::1;::::0;11442:1;;11405:40:::1;11473:1;11456:19:::0;;-1:-1:-1;;;;;;11456:19:0::1;::::0;;11335:148::o;21155:319::-;21248:4;21265:179;10770:10;21315:7;21337:96;21376:15;21337:96;;;;;;;;;;;;;;;;;10770:10;21337:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21337:34:0;;;;;;;;;;;;:38;:96::i;20107:167::-;20185:4;20202:42;10770:10;20226:9;20237:6;20202:9;:42::i;36508:262::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;36563:23:::1;36589:24;36607:4;36589:9;:24::i;:::-;36563:50:::0;-1:-1:-1;36665:5:0::1;36651:11;15397:13;36661:1;36651:11;:::i;:::-;:19;;;;:::i;:::-;36632:15;:38;;36624:116;;;::::0;-1:-1:-1;;;36624:116:0;;10750:2:1;36624:116:0::1;::::0;::::1;10732:21:1::0;10789:2;10769:18;;;10762:30;10828:34;10808:18;;;10801:62;10899:34;10879:18;;;10872:62;-1:-1:-1;;;10950:19:1;;;10943:32;10992:19;;36624:116:0::1;10548:469:1::0;36624:116:0::1;36751:11;:9;:11::i;:::-;36552:218;36508:262::o:0;37943:372::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;38123:9:::1;:29:::0;;;;38163:9:::1;:25:::0;;;;38199:10:::1;:25:::0;38235:9:::1;:29:::0;38275:10:::1;:32:::0;37943:372::o;36003:116::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36078:25:0::1;36106:5;36078:25:::0;;;:16:::1;:25;::::0;;;;:33;;-1:-1:-1;;36078:33:0::1;::::0;;36003:116::o;35765:109::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35834:24:0::1;35861:5;35834:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;35834:32:0::1;::::0;;35765:109::o;11489:249::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11578:22:0;::::1;11570:78;;;::::0;-1:-1:-1;;;11570:78:0;;8416:2:1;11570:78:0::1;::::0;::::1;8398:21:1::0;8455:2;8435:18;;;8428:30;8494:34;8474:18;;;8467:62;-1:-1:-1;;;8545:18:1;;;8538:41;8596:19;;11570:78:0::1;8214:407:1::0;11570:78:0::1;11685:6;::::0;;11664:38:::1;::::0;-1:-1:-1;;;;;11664:38:0;;::::1;::::0;11685:6;::::1;::::0;11664:38:::1;::::0;::::1;11713:6;:17:::0;;-1:-1:-1;;;;;;11713:17:0::1;-1:-1:-1::0;;;;;11713:17:0;;;::::1;::::0;;;::::1;::::0;;11489:249::o;36776:157::-;11157:7;11184:6;-1:-1:-1;;;;;11184:6:0;10770:10;11244:23;11236:73;;;;-1:-1:-1;;;11236:73:0;;;;;;;:::i;:::-;36876:9:::1;::::0;36868:57:::1;::::0;36832:12:::1;::::0;-1:-1:-1;;;;;36876:9:0::1;::::0;36899:21:::1;::::0;36832:12;36868:57;36832:12;36868:57;36899:21;36876:9;36868:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36776:157:0:o;26078:325::-;-1:-1:-1;;;;;26169:19:0;;26161:64;;;;-1:-1:-1;;;26161:64:0;;11936:2:1;26161:64:0;;;11918:21:1;;;11955:18;;;11948:30;12014:34;11994:18;;;11987:62;12066:18;;26161:64:0;11734:356:1;26161:64:0;-1:-1:-1;;;;;26244:21:0;;26236:64;;;;-1:-1:-1;;;26236:64:0;;6522:2:1;26236:64:0;;;6504:21:1;6561:2;6541:18;;;6534:30;6600:32;6580:18;;;6573:60;6650:18;;26236:64:0;6320:354:1;26236:64:0;-1:-1:-1;;;;;26311:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26363:32;;12241:25:1;;;26363:32:0;;12214:18:1;26363:32:0;;;;;;;26078:325;;;:::o;30590:417::-;30703:15;;30671:62;;30688:4;;-1:-1:-1;;;;;30703:15:0;30721:11;30671:8;:62::i;:::-;30744:15;;30948:10;;30744:255;;-1:-1:-1;;;30744:255:0;;30816:4;30744:255;;;4617:34:1;4667:18;;;4660:34;;;30744:15:0;4710:18:1;;;4703:34;;;4753:18;;;4746:34;-1:-1:-1;;;;;30948:10:0;;;4796:19:1;;;4789:44;30973:15:0;4849:19:1;;;4842:35;30744:15:0;;;:31;;30783:9;;4551:19:1;;30744:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30590:417;;:::o;26409:2421::-;-1:-1:-1;;;;;26497:18:0;;26489:68;;;;-1:-1:-1;;;26489:68:0;;10344:2:1;26489:68:0;;;10326:21:1;10383:2;10363:18;;;10356:30;10422:34;10402:18;;;10395:62;-1:-1:-1;;;10473:18:1;;;10466:35;10518:19;;26489:68:0;10142:401:1;26489:68:0;-1:-1:-1;;;;;26576:16:0;;26568:64;;;;-1:-1:-1;;;26568:64:0;;6118:2:1;26568:64:0;;;6100:21:1;6157:2;6137:18;;;6130:30;6196:34;6176:18;;;6169:62;-1:-1:-1;;;6247:18:1;;;6240:33;6290:19;;26568:64:0;5916:399:1;26568:64:0;26660:1;26651:6;:10;26643:64;;;;-1:-1:-1;;;26643:64:0;;9585:2:1;26643:64:0;;;9567:21:1;9624:2;9604:18;;;9597:30;9663:34;9643:18;;;9636:62;-1:-1:-1;;;9714:18:1;;;9707:39;9763:19;;26643:64:0;9383:405:1;26643:64:0;-1:-1:-1;;;;;26727:16:0;;;;;;:10;:16;;;;;;;;26726:17;26718:26;;;;;;26759:10;;;;;;;26755:122;;-1:-1:-1;;;;;26793:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;26818:19:0;;;;;;:15;:19;;;;;;;;26793:44;26785:80;;;;-1:-1:-1;;;26785:80:0;;11584:2:1;26785:80:0;;;11566:21:1;11623:2;11603:18;;;11596:30;11662:25;11642:18;;;11635:53;11705:18;;26785:80:0;11382:347:1;26785:80:0;26891:16;;;;:24;;:16;:24;:50;;;;-1:-1:-1;;;;;;26921:20:0;;;;;;:16;:20;;;;;;;;26919:22;26891:50;26887:175;;;26992:13;;26982:6;26966:13;26976:2;26966:9;:13::i;:::-;:22;;;;:::i;:::-;:39;;26958:92;;;;-1:-1:-1;;;26958:92:0;;7238:2:1;26958:92:0;;;7220:21:1;7277:2;7257:18;;;7250:30;7316:34;7296:18;;;7289:62;-1:-1:-1;;;7367:18:1;;;7360:38;7415:19;;26958:92:0;7036:404:1;26958:92:0;11157:7;11184:6;-1:-1:-1;;;;;27076:15:0;;;11184:6;;27076:15;;;;:32;;-1:-1:-1;11157:7:0;11184:6;-1:-1:-1;;;;;27095:13:0;;;11184:6;;27095:13;;27076:32;:52;;;;-1:-1:-1;;;;;;27112:16:0;;;;27076:52;:66;;;;-1:-1:-1;27138:4:0;;-1:-1:-1;;;;;27132:10:0;;;27138:4;;27132:10;;27076:66;:87;;;;-1:-1:-1;27147:16:0;;;;;;;27146:17;27076:87;27072:301;;;11157:7;11184:6;-1:-1:-1;;;;;27183:15:0;;;11184:6;;27183:15;;;;:38;;-1:-1:-1;27208:13:0;;-1:-1:-1;;;;;27202:19:0;;;27208:13;;27202:19;;27183:38;27180:182;;;27261:17;;27245:12;:33;27242:105;;;-1:-1:-1;;;;;27303:17:0;;;;;;:13;:17;;;;;:24;;-1:-1:-1;;27303:24:0;27323:4;27303:24;;;27242:105;27383:25;27411:52;27452:10;;27411:36;27431:15;;27411;;:19;;:36;;;;:::i;:::-;:40;;:52::i;:::-;27383:80;;27474:28;27505:24;27523:4;27505:9;:24::i;:::-;27595:23;;27634:16;;27474:55;;-1:-1:-1;27571:47:0;;;;27634:16;;;;;27633:17;:42;;;;-1:-1:-1;27654:21:0;;;;;;;27633:42;:74;;;;-1:-1:-1;27689:13:0;;27706:1;;27679:24;;-1:-1:-1;;;;;27689:13:0;27679:9;:24::i;:::-;:28;27633:74;:99;;;;;27731:1;27711:17;:21;27633:99;:123;;;;-1:-1:-1;;;;;;27737:19:0;;;;;;:15;:19;;;;;;;;27736:20;27633:123;:149;;;;-1:-1:-1;;;;;;27761:21:0;;;;;;:15;:21;;;;;;;;27760:22;27633:149;:172;;;;-1:-1:-1;27792:13:0;;-1:-1:-1;;;;;27786:19:0;;;27792:13;;27786:19;27633:172;:199;;;;;27809:23;27633:199;27629:247;;;27849:11;:9;:11::i;:::-;-1:-1:-1;;;;;27920:21:0;;27886:12;27920:21;;;:15;:21;;;;;;27901:4;;27920:21;;;:44;;-1:-1:-1;;;;;;27945:19:0;;;;;;:15;:19;;;;;;;;27920:44;27916:855;;;-1:-1:-1;27991:5:0;27916:855;;;28041:13;;-1:-1:-1;;;;;28033:21:0;;;28041:13;;28033:21;28029:731;;;28075:14;:12;:14::i;:::-;28116:8;;28108:5;:16;28152:9;;28143:6;:18;28188:8;;28180:5;:16;28224:9;;28215:6;:18;28260:8;;28252:5;:16;28029:731;;;28314:13;;-1:-1:-1;;;;;28308:19:0;;;28314:13;;28308:19;28304:456;;;28348:14;:12;:14::i;:::-;28389:9;;28381:5;:17;28426:10;;28417:6;:19;28463:9;;28455:5;:17;28500:10;;28491:6;:19;28537:9;;28529:5;:17;-1:-1:-1;;;;;28568:19:0;;-1:-1:-1;28568:19:0;;;:13;:19;;;;;;;;28565:77;;;28620:2;28612:5;:10;28565:77;28304:456;;;-1:-1:-1;;;;;28691:19:0;;;;;;:13;:19;;;;;;;;28690:20;28682:29;;;;;;28730:14;:12;:14::i;:::-;28781:41;28796:4;28802:2;28806:6;28814:7;28781:14;:41::i;:::-;26478:2352;;;;26409:2421;;;:::o;13626:206::-;13712:7;13773:12;13765:6;;;;13757:29;;;;-1:-1:-1;;;13757:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;13808:5:0;;;13626:206::o;23513:164::-;23555:7;23576:15;23593;23612:19;:17;:19::i;:::-;23575:56;;-1:-1:-1;23575:56:0;-1:-1:-1;23649:20:0;23575:56;;23649:11;:20::i;:::-;23642:27;;;;23513:164;:::o;13418:98::-;13476:7;13503:5;13507:1;13503;:5;:::i;13106:98::-;13164:7;13191:5;13195:1;13191;:5;:::i;22330:414::-;22389:7;22397;22405;22413;22421;22429;22450:23;22475:12;22489:18;22511:20;22523:7;22511:11;:20::i;:::-;22449:82;;;;;;22543:15;22560:23;22585:12;22601:50;22613:7;22622:4;22628:10;22640;:8;:10::i;:::-;22601:11;:50::i;:::-;22542:109;;;;-1:-1:-1;22542:109:0;;-1:-1:-1;22702:15:0;;-1:-1:-1;22719:4:0;;-1:-1:-1;22725:10:0;;-1:-1:-1;22330:414:0;;-1:-1:-1;;;;;22330:414:0:o;28836:1243::-;18008:16;:23;;-1:-1:-1;;18008:23:0;;;;;;28914:24:::1;28932:4;28914:9;:24::i;:::-;28888:50;;28949:25;29008:15;;28995:10;;28977:15;;:28;;;;:::i;:::-;:46;;;;:::i;:::-;28949:74;;29034:27;29064:22;29084:1;29064:15;;:19;;:22;;;;:::i;:::-;29034:52;;29097:26;29126:64;29171:18;;29126:40;29146:19;29126:15;:19;;:40;;;;:::i;:::-;:44:::0;::::1;:64::i;:::-;29097:93:::0;-1:-1:-1;29229:21:0::1;29261:36;29097:93:::0;29261:16:::1;:36::i;:::-;29309:18;29330:44;:21;29356:17:::0;29330:25:::1;:44::i;:::-;29309:65;;29385:23;29411:54;29447:17;29411:31;29426:15;;29411:10;:14;;:31;;;;:::i;:::-;:35:::0;::::1;:54::i;:::-;29385:80;;29476:18;29497:49;29528:17;29497:26;29512:10;;29497;:14;;:26;;;;:::i;:49::-;29476:70:::0;-1:-1:-1;29557:23:0::1;29583:47;29476:70:::0;29583:31:::1;:10:::0;29598:15;29583:14:::1;:31::i;:47::-;29659:1;29641:15;:19:::0;;;29671:10:::1;:14:::0;;;29696:15:::1;:19:::0;;;29752:9:::1;::::0;29744:51:::1;::::0;29557:73;;-1:-1:-1;29659:1:0;;-1:-1:-1;;;;;29752:9:0;;::::1;::::0;29775:15;;29659:1;29744:51;29659:1;29744:51;29775:15;29752:9;29744:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29827:9:0::1;::::0;29819:46:::1;::::0;29726:69;;-1:-1:-1;;;;;;29827:9:0::1;::::0;29850:10;;29819:46:::1;::::0;;;29850:10;29827:9;29819:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29806:59;;;;;29876:50;29889:19;29910:15;29876:12;:50::i;:::-;29964:10;29940:21;:34;29937:135;;;30011:9;::::0;30003:57:::1;::::0;-1:-1:-1;;;;;30011:9:0;;::::1;::::0;30034:21:::1;::::0;30003:57:::1;::::0;;;30034:21;30011:9;30003:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29990:70:0;;-1:-1:-1;;29937:135:0::1;-1:-1:-1::0;;18054:16:0;:24;;-1:-1:-1;;18054:24:0;;;-1:-1:-1;;;;;;;;28836:1243:0:o;31013:379::-;31060:5;;:10;:24;;;;-1:-1:-1;31074:5:0;;:10;31060:24;:39;;;;-1:-1:-1;31088:6:0;;:11;31060:39;:53;;;;-1:-1:-1;31103:5:0;;:10;31060:53;:68;;;;-1:-1:-1;31117:6:0;;:11;31060:68;31056:81;;;31013:379::o;31056:81::-;31159:5;;;31147:9;:17;31187:5;;;31175:9;:17;31215:5;;;31203:9;:17;31244:6;;;31231:10;:19;31274:6;;;31261:10;:19;-1:-1:-1;31293:9:0;;;;31313;;;;31333;;;;31353:10;;;31374;31013:379::o;31589:764::-;31699:7;31694:28;;31708:14;:12;:14::i;:::-;-1:-1:-1;;;;;31737:16:0;;;;;;:8;:16;;;;;;;;:40;;;;-1:-1:-1;;;;;;31758:19:0;;;;;;:8;:19;;;;;;;;31757:20;31737:40;31733:573;;;31794:48;31816:6;31824:9;31835:6;31794:21;:48::i;:::-;31733:573;;;-1:-1:-1;;;;;31865:16:0;;;;;;:8;:16;;;;;;;;31864:17;:40;;;;-1:-1:-1;;;;;;31885:19:0;;;;;;:8;:19;;;;;;;;31864:40;31860:446;;;31921:46;31941:6;31949:9;31960:6;31921:19;:46::i;31860:446::-;-1:-1:-1;;;;;31990:16:0;;;;;;:8;:16;;;;;;;;31989:17;:41;;;;-1:-1:-1;;;;;;32011:19:0;;;;;;:8;:19;;;;;;;;32010:20;31989:41;31985:321;;;32047:44;32065:6;32073:9;32084:6;32047:17;:44::i;31985:321::-;-1:-1:-1;;;;;32113:16:0;;;;;;:8;:16;;;;;;;;:39;;;;-1:-1:-1;;;;;;32133:19:0;;;;;;:8;:19;;;;;;;;32113:39;32109:197;;;32169:48;32191:6;32199:9;32210:6;32169:21;:48::i;32109:197::-;32250:44;32268:6;32276:9;32287:6;32250:17;:44::i;:::-;32321:7;32316:29;;32330:15;31450:9;;31442:5;:17;31478:9;;31470:5;:17;31507:10;;31498:6;:19;31537:10;;31528:6;:19;31566:9;;31558:5;:17;31398:185;23683:556;23781:7;;23734;;;;15397:13;23734:7;23835:289;23859:9;:16;23855:20;;23835:289;;;23925:7;23901;:21;23909:9;23919:1;23909:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23909:12:0;23901:21;;;;;;;;;;;;;:31;;:66;;;23960:7;23936;:21;23944:9;23954:1;23944:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23944:12:0;23936:21;;;;;;;;;;;;;:31;23901:66;23897:97;;;-1:-1:-1;;23977:7:0;;;15397:13;;-1:-1:-1;23683:556:0;-1:-1:-1;;23683:556:0:o;23897:97::-;24019:34;24031:7;:21;24039:9;24049:1;24039:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24039:12:0;24031:21;;;;;;;;;;;;;24019:7;;:11;:34::i;:::-;24009:44;;24078:34;24090:7;:21;24098:9;24108:1;24098:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24098:12:0;24090:21;;;;;;;;;;;;;24078:7;;:11;:34::i;:::-;24068:44;-1:-1:-1;23877:3:0;;;;:::i;:::-;;;;23835:289;;;-1:-1:-1;24148:7:0;;:20;;15397:13;24148:11;:20::i;:::-;24138:7;:30;24134:61;;;-1:-1:-1;;24178:7:0;;;15397:13;;-1:-1:-1;23683:556:0;-1:-1:-1;23683:556:0:o;24134:61::-;24214:7;;24223;;-1:-1:-1;23683:556:0;-1:-1:-1;23683:556:0:o;22750:327::-;22809:7;22817;22825;22845:12;22860:24;22876:7;22860:15;:24::i;:::-;22845:39;;22895:18;22916:30;22938:7;22916:21;:30::i;:::-;22895:51;-1:-1:-1;22957:23:0;22983:33;22895:51;22983:17;:7;22995:4;22983:11;:17::i;:33::-;22957:59;23052:4;;-1:-1:-1;23058:10:0;;-1:-1:-1;22750:327:0;;-1:-1:-1;;;22750:327:0:o;23083:424::-;23195:7;;;;23249:24;:7;23261:11;23249;:24::i;:::-;23231:42;-1:-1:-1;23284:12:0;23299:21;:4;23308:11;23299:8;:21::i;:::-;23284:36;-1:-1:-1;23331:18:0;23352:27;:10;23367:11;23352:14;:27::i;:::-;23331:48;-1:-1:-1;23390:23:0;23416:33;23331:48;23416:17;:7;23428:4;23416:11;:17::i;:33::-;23468:7;;;;-1:-1:-1;23494:4:0;;-1:-1:-1;23083:424:0;;-1:-1:-1;;;;;;;23083:424:0:o;13210:98::-;13268:7;13295:5;13299:1;13295;:5;:::i;30085:499::-;30175:16;;;30189:1;30175:16;;;;;;;;30151:21;;30175:16;;;;;;;;;;-1:-1:-1;30175:16:0;30151:40;;30220:4;30202;30207:1;30202:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30202:23:0;;;:7;;;;;;;;;;:23;;;;30246:15;;:22;;;-1:-1:-1;;;30246:22:0;;;;:15;;;;;:20;;:22;;;;;30202:7;;30246:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30236:4;30241:1;30236:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30236:32:0;;;:7;;;;;;;;;:32;30311:15;;30279:62;;30296:4;;30311:15;30329:11;30279:8;:62::i;:::-;30352:15;;:224;;-1:-1:-1;;;30352:224:0;;-1:-1:-1;;;;;30352:15:0;;;;:66;;:224;;30433:11;;30352:15;;30503:4;;30530;;30550:15;;30352:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30140:444;30085:499;:::o;13314:98::-;13372:7;13399:5;13403:1;13399;:5;:::i;33622:650::-;33737:15;33767:23;33805:12;33832:23;33870:12;33897:18;33929:19;33940:7;33929:10;:19::i;:::-;-1:-1:-1;;;;;33977:15:0;;;;;;:7;:15;;;;;;33722:226;;-1:-1:-1;33722:226:0;;-1:-1:-1;33722:226:0;;-1:-1:-1;33722:226:0;-1:-1:-1;33722:226:0;-1:-1:-1;33722:226:0;-1:-1:-1;33977:28:0;;33997:7;33977:19;:28::i;:::-;-1:-1:-1;;;;;33959:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34034:7;:15;;;;:28;;34054:7;34034:19;:28::i;:::-;-1:-1:-1;;;;;34016:15:0;;;;;;;:7;:15;;;;;;:46;;;;34094:18;;;;;;;:39;;34117:15;34094:22;:39::i;:::-;-1:-1:-1;;;;;34073:18:0;;;;;;:7;:18;;;;;:60;34144:26;34159:10;34144:14;:26::i;:::-;34181:23;34193:4;34199;34181:11;:23::i;:::-;34237:9;-1:-1:-1;;;;;34220:44:0;34229:6;-1:-1:-1;;;;;34220:44:0;;34248:15;34220:44;;;;12241:25:1;;12229:2;12214:18;;12095:177;34220:44:0;;;;;;;;33711:561;;;;;;33622:650;;;:::o;32954:662::-;33067:15;33097:23;33135:12;33162:23;33200:12;33227:18;33259:19;33270:7;33259:10;:19::i;:::-;-1:-1:-1;;;;;33307:15:0;;;;;;:7;:15;;;;;;33052:226;;-1:-1:-1;33052:226:0;;-1:-1:-1;33052:226:0;;-1:-1:-1;33052:226:0;-1:-1:-1;33052:226:0;-1:-1:-1;33052:226:0;-1:-1:-1;33307:28:0;;33052:226;33307:19;:28::i;:::-;-1:-1:-1;;;;;33289:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33367:18;;;;;:7;:18;;;;;:39;;33390:15;33367:22;:39::i;:::-;-1:-1:-1;;;;;33346:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33438:7;:18;;;;:39;;33461:15;33438:22;:39::i;32359:589::-;32470:15;32500:23;32538:12;32565:23;32603:12;32630:18;32662:19;32673:7;32662:10;:19::i;:::-;-1:-1:-1;;;;;32710:15:0;;;;;;:7;:15;;;;;;32455:226;;-1:-1:-1;32455:226:0;;-1:-1:-1;32455:226:0;;-1:-1:-1;32455:226:0;-1:-1:-1;32455:226:0;-1:-1:-1;32455:226:0;-1:-1:-1;32710:28:0;;32455:226;32710:19;:28::i;34278:721::-;34393:15;34423:23;34461:12;34488:23;34526:12;34553:18;34585:19;34596:7;34585:10;:19::i;:::-;-1:-1:-1;;;;;34633:15:0;;;;;;:7;:15;;;;;;34378:226;;-1:-1:-1;34378:226:0;;-1:-1:-1;34378:226:0;;-1:-1:-1;34378:226:0;-1:-1:-1;34378:226:0;-1:-1:-1;34378:226:0;-1:-1:-1;34633:28:0;;34653:7;34633:19;:28::i;:::-;-1:-1:-1;;;;;34615:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34690:7;:15;;;;:28;;34710:7;34690:19;:28::i;24846:129::-;24910:7;24937:30;24961:5;24937:19;24949:6;;24937:7;:11;;:19;;;;:::i;24981:159::-;25051:7;25078:54;25126:5;25078:43;25115:5;;25106:6;;25098:5;;25090;;:13;;;;:::i;:::-;:22;;;;:::i;:::-;:30;;;;:::i;:::-;25078:7;;:11;:43::i;24245:595::-;24348:10;;24340:5;;24327:18;;:10;:18;:::i;:::-;:31;;;;:::i;:::-;24308:15;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;24413:10:0;;24404:6;;24391:19;;:10;:19;:::i;:::-;:32;;;;:::i;:::-;24369:18;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;24469:10:0;;24461:5;;24448:18;;:10;:18;:::i;:::-;:31;;;;:::i;:::-;24434:10;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;24530:10:0;;24522:5;;24509:18;;:10;:18;:::i;:::-;:31;;;;:::i;:::-;24490:15;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;24551:19:0;;-1:-1:-1;24573:10:0;:8;:10::i;:::-;24551:32;-1:-1:-1;24594:18:0;24615:27;:10;24551:32;24615:14;:27::i;:::-;24694:4;24678:22;;;;:7;:22;;;;;;24594:48;;-1:-1:-1;24678:38:0;;24594:48;24678:26;:38::i;:::-;24669:4;24653:22;;;;:7;:22;;;;;;;;:63;;;;24731:8;:23;;;;;;24727:105;;;24810:4;24794:22;;;;:7;:22;;;;;;:38;;24821:10;24794:26;:38::i;:::-;24785:4;24769:22;;;;:7;:22;;;;;:63;24297:543;;24245:595;:::o;22177:147::-;22255:7;;:17;;22267:4;22255:11;:17::i;:::-;22245:7;:27;22296:10;;:20;;22311:4;22296:14;:20::i;:::-;22283:10;:33;-1:-1:-1;;22177: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:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:180::-;1755:6;1808:2;1796:9;1787:7;1783:23;1779:32;1776:52;;;1824:1;1821;1814:12;1776:52;-1:-1:-1;1847:23:1;;1696:180;-1:-1:-1;1696:180:1:o;1881:315::-;1949:6;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2062:9;2049:23;2039:33;;2122:2;2111:9;2107:18;2094:32;2135:31;2160:5;2135:31;:::i;2201:341::-;2266:6;2274;2327:2;2315:9;2306:7;2302:23;2298:32;2295:52;;;2343:1;2340;2333:12;2295:52;2379:9;2366:23;2356:33;;2439:2;2428:9;2424:18;2411:32;2486:5;2479:13;2472:21;2465:5;2462:32;2452:60;;2508:1;2505;2498:12;2547:306;2635:6;2643;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2749:9;2743:16;2733:26;;2799:2;2788:9;2784:18;2778:25;2768:35;;2843:2;2832:9;2828:18;2822:25;2812:35;;2547:306;;;;;:::o;2858:454::-;2953:6;2961;2969;2977;2985;3038:3;3026:9;3017:7;3013:23;3009:33;3006:53;;;3055:1;3052;3045:12;3006:53;-1:-1:-1;;3078:23:1;;;3148:2;3133:18;;3120:32;;-1:-1:-1;3199:2:1;3184:18;;3171:32;;3250:2;3235:18;;3222:32;;-1:-1:-1;3301:3:1;3286:19;3273:33;;-1:-1:-1;2858:454:1;-1:-1:-1;2858:454:1:o;5314:597::-;5426:4;5455:2;5484;5473:9;5466:21;5516:6;5510:13;5559:6;5554:2;5543:9;5539:18;5532:34;5584:1;5594:140;5608:6;5605:1;5602:13;5594:140;;;5703:14;;;5699:23;;5693:30;5669:17;;;5688:2;5665:26;5658:66;5623:10;;5594:140;;;5752:6;5749:1;5746:13;5743:91;;;5822:1;5817:2;5808:6;5797:9;5793:22;5789:31;5782:42;5743:91;-1:-1:-1;5895:2:1;5874:15;-1:-1:-1;;5870:29:1;5855:45;;;;5902:2;5851:54;;5314:597;-1:-1:-1;;;5314:597:1:o;8626:401::-;8828:2;8810:21;;;8867:2;8847:18;;;8840:30;8906:34;8901:2;8886:18;;8879:62;-1:-1:-1;;;8972:2:1;8957:18;;8950:35;9017:3;9002:19;;8626:401::o;12277:980::-;12539:4;12587:3;12576:9;12572:19;12618:6;12607:9;12600:25;12644:2;12682:6;12677:2;12666:9;12662:18;12655:34;12725:3;12720:2;12709:9;12705:18;12698:31;12749:6;12784;12778:13;12815:6;12807;12800:22;12853:3;12842:9;12838:19;12831:26;;12892:2;12884:6;12880:15;12866:29;;12913:1;12923:195;12937:6;12934:1;12931:13;12923:195;;;13002:13;;-1:-1:-1;;;;;12998:39:1;12986:52;;13093:15;;;;13058:12;;;;13034:1;12952:9;12923:195;;;-1:-1:-1;;;;;;;13174:32:1;;;;13169:2;13154:18;;13147:60;-1:-1:-1;;;13238:3:1;13223:19;13216:35;13135:3;12277:980;-1:-1:-1;;;12277:980:1:o;13991:128::-;14031:3;14062:1;14058:6;14055:1;14052:13;14049:39;;;14068:18;;:::i;:::-;-1:-1:-1;14104:9:1;;13991:128::o;14124:217::-;14164:1;14190;14180:132;;14234:10;14229:3;14225:20;14222:1;14215:31;14269:4;14266:1;14259:15;14297:4;14294:1;14287:15;14180:132;-1:-1:-1;14326:9:1;;14124:217::o;14346:168::-;14386:7;14452:1;14448;14444:6;14440:14;14437:1;14434:21;14429:1;14422:9;14415:17;14411:45;14408:71;;;14459:18;;:::i;:::-;-1:-1:-1;14499:9:1;;14346:168::o;14519:125::-;14559:4;14587:1;14584;14581:8;14578:34;;;14592:18;;:::i;:::-;-1:-1:-1;14629:9:1;;14519:125::o;14649:135::-;14688:3;-1:-1:-1;;14709:17:1;;14706:43;;;14729:18;;:::i;:::-;-1:-1:-1;14776:1:1;14765:13;;14649:135::o;14789:127::-;14850:10;14845:3;14841:20;14838:1;14831:31;14881:4;14878:1;14871:15;14905:4;14902:1;14895:15;14921:127;14982:10;14977:3;14973:20;14970:1;14963:31;15013:4;15010:1;15003:15;15037:4;15034:1;15027:15;15185:131;-1:-1:-1;;;;;15260:31:1;;15250:42;;15240:70;;15306:1;15303;15296:12

Swarm Source

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