ETH Price: $2,479.39 (+0.11%)

Token

DOGNOBI (DOGNOBI)
 

Overview

Max Total Supply

100,000,000,000,000 DOGNOBI

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
445,900,000,000.000011427976503624 DOGNOBI

Value
$0.00
0x722053a5A4b57808E852B4462e15Dc159CABFE41
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:
DOGNOBI

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-03-06
*/

/**

🐕 DOGNOBI 🐕

██████╗░░█████╗░░██████╗░███╗░░██╗░█████╗░██████╗░██╗
██╔══██╗██╔══██╗██╔════╝░████╗░██║██╔══██╗██╔══██╗██║
██║░░██║██║░░██║██║░░██╗░██╔██╗██║██║░░██║██████╦╝██║
██║░░██║██║░░██║██║░░╚██╗██║╚████║██║░░██║██╔══██╗██║
██████╔╝╚█████╔╝╚██████╔╝██║░╚███║╚█████╔╝██████╦╝██║
╚═════╝░░╚════╝░░╚═════╝░╚═╝░░╚══╝░╚════╝░╚═════╝░╚═╝

https://t.me/dognobi
http://dognobi.com/
https://twitter.com/dognobi




*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
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;
    }
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
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);
}

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;
}
contract DOGNOBI is IERC20, Context, ERC20Ownable {
    using SafeMath for uint256;
    address dead = 0x000000000000000000000000000000000000dEaD;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint) private _setCoolDown;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _maxWalletExclude;
	mapping (address => bool) private _isBot;
	mapping(address => bool) public boughtEarly;
	uint256 public tradingActiveBlock = 0;
    uint256 public earlyBuyPenaltyEnd;
    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e14 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _maxTxAmount = _tTotal;
    uint256 private _tFeeTotal;
    uint256 private _maxWalletSize = 3000000000000 * 10**18;
    string private constant _name = "DOGNOBI";
    string private constant _tick = "DOGNOBI";
    uint8 private constant _deci = 18;
    uint8 private _refTax = 0;
    uint8 private _previousRefTax = _refTax;
    uint8 private _burnTax = 0;
    uint8 private _previouseBurnTax = _burnTax;
    uint8 private _liqTax = 2; 
    uint8 private _previousLiqTax = _liqTax;
    uint8 private _devTax = 4; 
    uint8 private _previousDevTax = _devTax;
    uint8 private _buyBack = 3;
    uint8 private _previousBuyBack = _buyBack;
    uint8 private _liqDiv = _liqTax + _devTax + _buyBack + _burnTax;
    uint256 private burnTokens;
    uint256 private MarketingTokens;
    uint256 private LiquidityTokens;
    uint256 private BuyBackTokens;
    IUniswapV2Router02 private pcsV2Router;
    address private pcsV2Pair;
    address payable private feeWallet;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private coolDownEnabled = false;
    bool private _firstTrans = true;
    bool private _limitBuys = false;
    bool private _clearClog = false;
    bool private _maxWalletOn = false;
    uint256 private numTokensSellToAddToLiquidity;
    uint256 private buyBackUpperLimit = 1 * 10**18;
    event MaxTxAmountUpdated(uint _maxTxAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event updateMxAmt(uint256 mxAmt);
    event BoughtEarly(address indexed sniper);
    event RemovedSniper(address indexed notsnipersupposedly);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        feeWallet = payable(0x9F17FF307AA0121348B94ca646aeC86dA8BB41bA);
        numTokensSellToAddToLiquidity = _tTotal.mul(1).div(1000);
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _maxWalletExclude[address(this)] = true;
        _maxWalletExclude[_msgSender()] = true;
        _maxWalletExclude[address(dead)] = true;
        addBot(0x41B0320bEb1563A048e2431c8C1cC155A0DFA967);
        addBot(0x91B305F0890Fd0534B66D8d479da6529C35A3eeC);

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    function name() public pure override returns (string memory) {
        return _name;
    }
    function symbol() public pure override returns (string memory) {
        return _tick;
    }
    function decimals() public pure override returns (uint8) {
        return _deci;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        coolDownEnabled = onoff;
    }
    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);
    }
    receive() external payable {}
    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 {
        burnTokens += tLiquidity * _burnTax / _liqDiv;
        MarketingTokens += tLiquidity * _devTax / _liqDiv;
		LiquidityTokens += tLiquidity * _liqTax / _liqDiv;
        BuyBackTokens += tLiquidity * _buyBack / _liqDiv;
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_refTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devTax + _burnTax + _liqTax + _buyBack).div(10**2);
    }
    function removeAllFee() private {
        if (_refTax == 0 && _liqTax == 0 && _devTax == 0 && _burnTax == 0 && _buyBack == 0) return;

        _previousRefTax = _refTax;
        _previousLiqTax = _liqTax;
        _previousDevTax = _devTax;
        _previouseBurnTax = _burnTax;
        _previousBuyBack = _buyBack;

        _refTax = 0;
        _liqTax = 0;
        _devTax = 0;
        _burnTax = 0;
        _buyBack = 0;
    }
    function restoreAllFee() private {
        _refTax = _previousRefTax;
        _liqTax = _previousLiqTax;
        _devTax = _previousDevTax;
        _burnTax = _previouseBurnTax;
        _buyBack = _previousBuyBack;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    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 zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
		require(!_isBot[from]);
		require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over.  DM a Mod.");
		if (_maxWalletOn == true && ! _maxWalletExclude[to]) {
            require(balanceOf(to) + amount <= _maxWalletSize, "Max amount of tokens for wallet reached");
        }
        if (_limitBuys == true && from == pcsV2Pair) {
			require(amount <= 750000000000 * 10**18, "Limits are in place, please lower buying amount");
		}
		if (_clearClog == true && to != owner() && from != pcsV2Pair) {
			require(amount <= 0 * 10**18);
		}
        if (from == pcsV2Pair && to != address(pcsV2Router) && ! _isExcludedFromFee[to] && coolDownEnabled) {
                require(amount <= _maxTxAmount);
                require(_setCoolDown[to] < block.timestamp);
                _setCoolDown[to] = block.timestamp + (30 seconds);
            }
        if(_firstTrans == true) {
            IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            pcsV2Router = _pcsV2Router;
            pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).getPair(address(this), _pcsV2Router.WETH());
            tradingActiveBlock = block.number;
            earlyBuyPenaltyEnd = block.timestamp + 72 hours;
            _maxWalletExclude[address(pcsV2Pair)] = true;
            _maxWalletExclude[address(pcsV2Router)] = true;
            _limitBuys = true;
            _firstTrans = false;
            _maxWalletOn = true;
        }
		if(from != owner() && to != pcsV2Pair && block.number == tradingActiveBlock){
			boughtEarly[to] = true;
            emit BoughtEarly(to);
		}
        uint256 contractTokenBalance = balanceOf(address(this));
        if (!inSwapAndLiquify && to == pcsV2Pair && swapAndLiquifyEnabled) {
            if (contractTokenBalance >= numTokensSellToAddToLiquidity) {
				swapBackLiq();
            }
        }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
		if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _refTax = _refTax * 5;
                    _liqTax = _liqTax * 5;
                    _devTax = _devTax * 5;
                    _buyBack = _buyBack * 5;
                }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function buyBackTokens(uint256 amount) public onlyOwner lockTheSwap {
        if (amount <= BuyBackTokens) {
            swapETHForTokens(amount);
        }
    }
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = pcsV2Router.WETH();
        path[1] = address(this);

        // make the swap
        pcsV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            dead, // Burn address
            block.timestamp.add(300)
        );
    }
	function addBot(address _user) public onlyOwner {
        require(_user != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        require(!_isBot[_user], "user already blacklisted");
        _isBot[_user] = true;
    }
	function removeBot(address _user) public onlyOwner {
        require(_isBot[_user], "user already whitelisted");
        _isBot[_user] = false;
    }
	function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }
	function swapBackNoLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + BuyBackTokens;
        uint256 amountToSwapForETH = contractBalance;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        MarketingTokens = 0;
        BuyBackTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        if(address(this).balance.sub(initialETHBalance) > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance.sub(initialETHBalance)}("");
        }
    }
    //  FOR USE IF TAKING LIQUIDITY AND ADDING BACK TO POOL
	function swapBackLiq() private lockTheSwap {
        if(_burnTax != 0) {
            _transfer(address(this), dead, burnTokens);
            burnTokens = 0;
        }
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = MarketingTokens + LiquidityTokens + BuyBackTokens;
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = LiquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(MarketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        LiquidityTokens = 0;
        MarketingTokens = 0;
        (bool success,) = address(feeWallet).call{value: ethForMarketing}("");
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        if(address(this).balance > 0 * 10**18){
            (success,) = address(feeWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp.add(300)
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp.add(300)
        );
    }
    // Initiate true from deployment
    function Initiate() external onlyOwner {
        _firstTrans = true;
    }
    function TaxSwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function TaxSwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function LimitBuysOn() external onlyOwner {
        _limitBuys = true;
    }
    function LimitBuysOff() external onlyOwner {
        _limitBuys = false;
    }
    function turnMaxWalletOn() external onlyOwner {
        _maxWalletOn = true;
    }
    function turnMaxWalletOff() external onlyOwner {
        _maxWalletOn = false;
    }
    // FOR USE TO CLEAR IF CLOGS OCCUR IN THE ROUTER
    // STOPS ALL TRANSACTIONS SO OWNER CAN TRANSFER 1 TOKEN TO CLEAR CLOG
    function ClearClog() external onlyOwner {
        _clearClog = true;
    }
    function ClearClogReset() external onlyOwner {
        _clearClog = false;
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mxAmt","type":"uint256"}],"name":"updateMxAmt","type":"event"},{"inputs":[],"name":"ClearClog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClearClogReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Initiate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitBuysOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_user","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"turnMaxWalletOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnMaxWalletOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b03191661dead1790556000600b55620000396d04ee2d6d415b85acef810000000060001962000545565b62000047906000196200052b565b600e556d04ee2d6d415b85acef8100000000600f556c25dd85d670d35ec9bec00000006011556012805460ff60481b1961ffff60381b1961ffff60281b1964ffffffffff19841660ff6201000062ffffff19909616869004811663010000000260ff60201b19169190911764020000000017918216640100000000928390048216650100000000000260ff60301b19161766040000000000001792831666010000000000009384900482166701000000000000000260ff60401b191617680300000000000000001793841668010000000000000000948590048216690100000000000000000002179586905593850484169492830484169362000155939283048116929190910416620004ca565b620001619190620004ca565b6200016d9190620004ca565b6012805460ff929092166a01000000000000000000000260ff60501b199092169190911790556019805465ffffffffffff60a81b19166201000160a81b179055670de0b6b3a7640000601b55348015620001c657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e5433600090815260026020908152604090912091909155601980546001600160a01b031916739f17ff307aa0121348b94ca646aec86da8bb41ba1790556200028b906103e89062000277906d04ee2d6d415b85acef8100000000906001906200103a6200037f821b17901c565b6200039460201b620010461790919060201c565b601a553360008181526006602090815260408083208054600160ff199182168117909255308552828520805482168317905560089093528184208054841682179055938352808320805483168517905583546001600160a01b0316835290912080549091169091179055620003147341b0320beb1563a048e2431c8c1cc155a0dfa967620003a2565b620003337391b305f0890fd0534b66d8d479da6529c35a3eec620003a2565b6040516d04ee2d6d415b85acef8100000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000588565b60006200038d828462000509565b9392505050565b60006200038d8284620004f2565b6000546001600160a01b03163314620004105760405162461bcd60e51b815260206004820152602560248201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156200043b57600080fd5b6001600160a01b03811660009081526009602052604090205460ff1615620004a65760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015260640162000407565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600060ff821660ff84168060ff03821115620004ea57620004ea6200055c565b019392505050565b60008262000504576200050462000572565b500490565b60008160001904831182151516156200052657620005266200055c565b500290565b6000828210156200054057620005406200055c565b500390565b60008262000557576200055762000572565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612f5d80620005986000396000f3fe60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b1461063b578063f5648a4f1461065b578063f5eb223d14610670578063fc155d1d14610685578063ffecf516146106a557600080fd5b8063a457c2d71461058a578063a9059cbb146105aa578063d3dbc861146105ca578063dd62ed3e146105df578063ee40166e1461062557600080fd5b806380f0f48b116100f257806380f0f48b146104e457806385ecfd28146104f957806388f82020146105295780638da5cb5b1461056257806395d89b411461022a57600080fd5b80636e86ea8b1461048557806370a082311461049a578063715018a6146104ba5780637b7141e4146104cf57600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c9146104065780635c0fdd4c146104265780635fecd9261461043b578063620b4bfc1461045b5780636465de5d1461047057600080fd5b8063437823ec1461036d5780634549b0391461038d5780635342acb4146103ad5780635932ead1146103e657600080fd5b806323b872dd116101ed57806323b872dd146102da5780632d838119146102fa578063313ce5671461031a57806339509351146103365780633f97d3f41461035657600080fd5b806306fdde031461022a578063095ea7b31461026957806318160ddd146102995780631fc851bd146102c457600080fd5b3661022557005b600080fd5b34801561023657600080fd5b506040805180820182526007815266444f474e4f424960c81b602082015290516102609190612ce7565b60405180910390f35b34801561027557600080fd5b50610289610284366004612bb4565b6106c5565b6040519015158152602001610260565b3480156102a557600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610260565b3480156102d057600080fd5b506102b6600c5481565b3480156102e657600080fd5b506102896102f5366004612b73565b6106dc565b34801561030657600080fd5b506102b6610315366004612bfb565b610745565b34801561032657600080fd5b5060405160128152602001610260565b34801561034257600080fd5b50610289610351366004612bb4565b6107bb565b34801561036257600080fd5b5061036b6107f1565b005b34801561037957600080fd5b5061036b610388366004612b00565b610830565b34801561039957600080fd5b506102b66103a8366004612c14565b61087e565b3480156103b957600080fd5b506102896103c8366004612b00565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103f257600080fd5b5061036b610401366004612be0565b610917565b34801561041257600080fd5b5061036b610421366004612b00565b61095f565b34801561043257600080fd5b5061036b6109d2565b34801561044757600080fd5b5061036b610456366004612b00565b610a0b565b34801561046757600080fd5b5061036b610abe565b34801561047c57600080fd5b5061036b610af7565b34801561049157600080fd5b5061036b610b30565b3480156104a657600080fd5b506102b66104b5366004612b00565b610b6f565b3480156104c657600080fd5b5061036b610bce565b3480156104db57600080fd5b5061036b610c42565b3480156104f057600080fd5b5061036b610c7b565b34801561050557600080fd5b50610289610514366004612b00565b600a6020526000908152604090205460ff1681565b34801561053557600080fd5b50610289610544366004612b00565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561056e57600080fd5b506000546040516001600160a01b039091168152602001610260565b34801561059657600080fd5b506102896105a5366004612bb4565b610cba565b3480156105b657600080fd5b506102896105c5366004612bb4565b610d09565b3480156105d657600080fd5b5061036b610d16565b3480156105eb57600080fd5b506102b66105fa366004612b3a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561063157600080fd5b506102b6600b5481565b34801561064757600080fd5b5061036b610656366004612b00565b610d55565b34801561066757600080fd5b5061036b610e44565b34801561067c57600080fd5b5061036b610ebb565b34801561069157600080fd5b5061036b6106a0366004612bfb565b610efa565b3480156106b157600080fd5b5061036b6106c0366004612b00565b610f59565b60006106d2338484611052565b5060015b92915050565b60006106e984848461115f565b61073b843361073685604051806060016040528060288152602001612edb602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a2e565b611052565b5060019392505050565b6000600e5482111561079e5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107a8611a5a565b90506107b48382611046565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916106d29185906107369086611a7d565b6000546001600160a01b0316331461081b5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461085a5760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef81000000008311156108de5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610795565b816108fd5760006108ee84611a89565b509395506106d6945050505050565b600061090884611a89565b509295506106d6945050505050565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161079590612d3c565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109895760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146109fc5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a355760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b03811660009081526009602052604090205460ff16610a9d5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610795565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610ae85760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b215760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610bac57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546106d690610745565b6000546001600160a01b03163314610bf85760405162461bcd60e51b815260040161079590612d3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610ca55760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c81b1916600160c81b179055565b60006106d2338461073685604051806060016040528060258152602001612f03602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a2e565b60006106d233848461115f565b6000546001600160a01b03163314610d405760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b038116610de95760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e6e5760405162461bcd60e51b815260040161079590612d3c565b604051600090339047908381818185875af1925050503d8060008114610eb0576040519150601f19603f3d011682016040523d82523d6000602084013e610eb5565b606091505b50505050565b6000546001600160a01b03163314610ee55760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f245760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a01b1916600160a01b1790556016548111610f4957610f4981611ad8565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610f835760405162461bcd60e51b815260040161079590612d3c565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fad57600080fd5b6001600160a01b03811660009081526009602052604090205460ff16156110165760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610795565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107b48284612e1c565b60006107b48284612dfa565b6001600160a01b0383166110a85760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610795565b6001600160a01b0382166110fe5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610795565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111bf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610795565b6001600160a01b0382166112155760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610795565b600081116112775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610795565b6001600160a01b03831660009081526009602052604090205460ff161561129d57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff1615806112c7575042600c5411155b61135f5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610795565b601954600160d01b900460ff161515600114801561139657506001600160a01b03821660009081526008602052604090205460ff16155b1561141057601154816113a884610b6f565b6113b29190612dbd565b11156114105760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610795565b601954600160c01b900460ff161515600114801561143b57506018546001600160a01b038481169116145b156114b5576c097761759c34d7b26fb00000008111156114b55760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b6064820152608401610795565b601954600160c81b900460ff16151560011480156114e157506000546001600160a01b03838116911614155b80156114fb57506018546001600160a01b03848116911614155b1561150b57801561150b57600080fd5b6018546001600160a01b03848116911614801561153657506017546001600160a01b03838116911614155b801561155b57506001600160a01b03821660009081526006602052604090205460ff16155b80156115705750601954600160b01b900460ff165b156115cd57600f5481111561158457600080fd5b6001600160a01b03821660009081526005602052604090205442116115a857600080fd5b6115b342601e612dbd565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561180657601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561164457600080fd5b505afa158015611658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167c9190612b1d565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c457600080fd5b505afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190612b1d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a9190612b1d565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117ab426203f480612dbd565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061183257506018546001600160a01b03838116911614155b801561183f5750600b5443145b1561188e576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b600061189930610b6f565b601954909150600160a01b900460ff161580156118c357506018546001600160a01b038481169116145b80156118d85750601954600160a81b900460ff165b156118ee57601a5481106118ee576118ee611c4b565b6001600160a01b03841660009081526006602052604090205460019060ff168061193057506001600160a01b03841660009081526006602052604090205460ff165b15611939575060005b6001600160a01b0385166000908152600a602052604090205460ff168015611962575042600c54115b15611a1b576012546119789060ff166005612e3b565b6012805460ff191660ff928316179081905561199e91600160201b909104166005612e3b565b6012805464ff000000001916600160201b60ff9384160217908190556119ce91600160301b909104166005612e3b565b6012805466ff0000000000001916600160301b60ff938416021790819055611a0091600160401b909104166005612e3b565b601260086101000a81548160ff021916908360ff1602179055505b611a2785858584611e56565b5050505050565b60008184841115611a525760405162461bcd60e51b81526004016107959190612ce7565b505050900390565b6000806000611a67612062565b9092509050611a768282611046565b9250505090565b60006107b48284612dbd565b6000806000806000806000806000611aa08a612212565b9250925092506000806000611abe8d8686611ab9611a5a565b612254565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b3d57600080fd5b505afa158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b759190612b1d565b81600081518110611b8857611b88612eac565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bbc57611bbc612eac565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611bf64261012c611a7d565b6040518663ffffffff1660e01b8152600401611c159493929190612cb2565b6000604051808303818588803b158015611c2e57600080fd5b505af1158015611c42573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611c9257600154601354611c8c9130916001600160a01b039091169061115f565b60006013555b6000611c9d30610b6f565b90506000601654601554601454611cb49190612dbd565b611cbe9190612dbd565b90506000611cd8600260155461104690919063ffffffff16565b90506000611ce684836122a4565b905047611cf2826122b0565b6000611cfe47836122a4565b90506000611d2186611d1b6014548561103a90919063ffffffff16565b90611046565b90506000611d2f83836122a4565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611d8c576040519150601f19603f3d011682016040523d82523d6000602084013e611d91565b606091505b50509050611d9f8783612422565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e3e576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e33576040519150601f19603f3d011682016040523d82523d6000602084013e611e38565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611e6357611e6361250b565b6001600160a01b03841660009081526007602052604090205460ff168015611ea457506001600160a01b03831660009081526007602052604090205460ff16155b15611eb957611eb4848484612635565b611fb7565b6001600160a01b03841660009081526007602052604090205460ff16158015611efa57506001600160a01b03831660009081526007602052604090205460ff165b15611f0a57611eb484848461275b565b6001600160a01b03841660009081526007602052604090205460ff16158015611f4c57506001600160a01b03831660009081526007602052604090205460ff16155b15611f5c57611eb4848484612804565b6001600160a01b03841660009081526007602052604090205460ff168015611f9c57506001600160a01b03831660009081526007602052604090205460ff165b15611fac57611eb4848484612848565b611fb7848484612804565b80610eb5576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610eb5565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d548110156121cb578260026000600d848154811061209d5761209d612eac565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210857508160036000600d84815481106120e1576120e1612eac565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612129575050600e54936d04ee2d6d415b85acef81000000009350915050565b61216f60026000600d848154811061214357612143612eac565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122a4565b92506121b760036000600d848154811061218b5761218b612eac565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122a4565b9150806121c381612e7b565b91505061207b565b50600e546121e7906d04ee2d6d415b85acef8100000000611046565b821015612209575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b600080600080612221856128bb565b9050600061222e866128d6565b905060006122468261224089866122a4565b906122a4565b979296509094509092505050565b6000808080612263888661103a565b90506000612271888761103a565b9050600061227f888861103a565b905060006122918261224086866122a4565b939b939a50919850919650505050505050565b60006107b48284612e64565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122e5576122e5612eac565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123719190612b1d565b8160018151811061238457612384612eac565b6001600160a01b0392831660209182029290920101526017546123aa9130911684611052565b6017546001600160a01b031663791ac94783600084306123cc4261012c611a7d565b6040518663ffffffff1660e01b81526004016123ec959493929190612d81565b600060405180830381600087803b15801561240657600080fd5b505af115801561241a573d6000803e3d6000fd5b505050505050565b60175461243a9030906001600160a01b031684611052565b6017546001546001600160a01b039182169163f305d7199184913091879160009182911661246a4261012c611a7d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b1580156124d257600080fd5b505af11580156124e6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a279190612c40565b60125460ff161580156125285750601254600160201b900460ff16155b801561253e5750601254600160301b900460ff16155b8015612553575060125462010000900460ff16155b80156125695750601254600160401b900460ff16155b1561257057565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061264787611a89565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061267990886122a4565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126a890876122a4565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546126d79086611a7d565b6001600160a01b0389166000908152600260205260409020556126f981612936565b6127038483612ac7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274891815260200190565b60405180910390a3505050505050505050565b60008060008060008061276d87611a89565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061279f90876122a4565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546127d59084611a7d565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546126d79086611a7d565b60008060008060008061281687611a89565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126a890876122a4565b60008060008060008061285a87611a89565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061288c90886122a4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461279f90876122a4565b6012546000906106d690606490611d1b90859060ff1661103a565b6012546000906106d690606490611d1b9060ff600160401b8204811691600160201b810482169161291891620100008104821691600160301b90910416612dd5565b6129229190612dd5565b61292c9190612dd5565b859060ff1661103a565b60125460ff600160501b820481169161295791620100009091041683612e1c565b6129619190612dfa565b601360008282546129729190612dbd565b909155505060125460ff600160501b820481169161299991600160301b9091041683612e1c565b6129a39190612dfa565b601460008282546129b49190612dbd565b909155505060125460ff600160501b82048116916129db91600160201b9091041683612e1c565b6129e59190612dfa565b601560008282546129f69190612dbd565b909155505060125460ff600160501b8204811691612a1d91600160401b9091041683612e1c565b612a279190612dfa565b60166000828254612a389190612dbd565b9091555060009050612a48611a5a565b90506000612a56838361103a565b30600090815260026020526040902054909150612a739082611a7d565b3060009081526002602090815260408083209390935560079052205460ff1615612ac25730600090815260036020526040902054612ab19084611a7d565b306000908152600360205260409020555b505050565b600e54612ad490836122a4565b600e55601054612ae49082611a7d565b6010555050565b80358015158114612afb57600080fd5b919050565b600060208284031215612b1257600080fd5b81356107b481612ec2565b600060208284031215612b2f57600080fd5b81516107b481612ec2565b60008060408385031215612b4d57600080fd5b8235612b5881612ec2565b91506020830135612b6881612ec2565b809150509250929050565b600080600060608486031215612b8857600080fd5b8335612b9381612ec2565b92506020840135612ba381612ec2565b929592945050506040919091013590565b60008060408385031215612bc757600080fd5b8235612bd281612ec2565b946020939093013593505050565b600060208284031215612bf257600080fd5b6107b482612aeb565b600060208284031215612c0d57600080fd5b5035919050565b60008060408385031215612c2757600080fd5b82359150612c3760208401612aeb565b90509250929050565b600080600060608486031215612c5557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612ca75781516001600160a01b031687529582019590820190600101612c82565b509495945050505050565b848152608060208201526000612ccb6080830186612c6e565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d1457858101830151858201604001528201612cf8565b81811115612d26576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612da060a0830186612c6e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612dd057612dd0612e96565b500190565b600060ff821660ff84168060ff03821115612df257612df2612e96565b019392505050565b600082612e1757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e3657612e36612e96565b500290565b600060ff821660ff84168160ff0481118215151615612e5c57612e5c612e96565b029392505050565b600082821015612e7657612e76612e96565b500390565b6000600019821415612e8f57612e8f612e96565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612ed757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207b2cd4539d19457e2e5b5932a1633f30aa4d1a0ccd6fafdea5bfa0c5d7c0bdd864736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80636e86ea8b11610123578063a457c2d7116100ab578063f2fde38b1161006f578063f2fde38b1461063b578063f5648a4f1461065b578063f5eb223d14610670578063fc155d1d14610685578063ffecf516146106a557600080fd5b8063a457c2d71461058a578063a9059cbb146105aa578063d3dbc861146105ca578063dd62ed3e146105df578063ee40166e1461062557600080fd5b806380f0f48b116100f257806380f0f48b146104e457806385ecfd28146104f957806388f82020146105295780638da5cb5b1461056257806395d89b411461022a57600080fd5b80636e86ea8b1461048557806370a082311461049a578063715018a6146104ba5780637b7141e4146104cf57600080fd5b8063437823ec116101a65780635bb988c9116101755780635bb988c9146104065780635c0fdd4c146104265780635fecd9261461043b578063620b4bfc1461045b5780636465de5d1461047057600080fd5b8063437823ec1461036d5780634549b0391461038d5780635342acb4146103ad5780635932ead1146103e657600080fd5b806323b872dd116101ed57806323b872dd146102da5780632d838119146102fa578063313ce5671461031a57806339509351146103365780633f97d3f41461035657600080fd5b806306fdde031461022a578063095ea7b31461026957806318160ddd146102995780631fc851bd146102c457600080fd5b3661022557005b600080fd5b34801561023657600080fd5b506040805180820182526007815266444f474e4f424960c81b602082015290516102609190612ce7565b60405180910390f35b34801561027557600080fd5b50610289610284366004612bb4565b6106c5565b6040519015158152602001610260565b3480156102a557600080fd5b506d04ee2d6d415b85acef81000000005b604051908152602001610260565b3480156102d057600080fd5b506102b6600c5481565b3480156102e657600080fd5b506102896102f5366004612b73565b6106dc565b34801561030657600080fd5b506102b6610315366004612bfb565b610745565b34801561032657600080fd5b5060405160128152602001610260565b34801561034257600080fd5b50610289610351366004612bb4565b6107bb565b34801561036257600080fd5b5061036b6107f1565b005b34801561037957600080fd5b5061036b610388366004612b00565b610830565b34801561039957600080fd5b506102b66103a8366004612c14565b61087e565b3480156103b957600080fd5b506102896103c8366004612b00565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156103f257600080fd5b5061036b610401366004612be0565b610917565b34801561041257600080fd5b5061036b610421366004612b00565b61095f565b34801561043257600080fd5b5061036b6109d2565b34801561044757600080fd5b5061036b610456366004612b00565b610a0b565b34801561046757600080fd5b5061036b610abe565b34801561047c57600080fd5b5061036b610af7565b34801561049157600080fd5b5061036b610b30565b3480156104a657600080fd5b506102b66104b5366004612b00565b610b6f565b3480156104c657600080fd5b5061036b610bce565b3480156104db57600080fd5b5061036b610c42565b3480156104f057600080fd5b5061036b610c7b565b34801561050557600080fd5b50610289610514366004612b00565b600a6020526000908152604090205460ff1681565b34801561053557600080fd5b50610289610544366004612b00565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561056e57600080fd5b506000546040516001600160a01b039091168152602001610260565b34801561059657600080fd5b506102896105a5366004612bb4565b610cba565b3480156105b657600080fd5b506102896105c5366004612bb4565b610d09565b3480156105d657600080fd5b5061036b610d16565b3480156105eb57600080fd5b506102b66105fa366004612b3a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561063157600080fd5b506102b6600b5481565b34801561064757600080fd5b5061036b610656366004612b00565b610d55565b34801561066757600080fd5b5061036b610e44565b34801561067c57600080fd5b5061036b610ebb565b34801561069157600080fd5b5061036b6106a0366004612bfb565b610efa565b3480156106b157600080fd5b5061036b6106c0366004612b00565b610f59565b60006106d2338484611052565b5060015b92915050565b60006106e984848461115f565b61073b843361073685604051806060016040528060288152602001612edb602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611a2e565b611052565b5060019392505050565b6000600e5482111561079e5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b60006107a8611a5a565b90506107b48382611046565b9392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916106d29185906107369086611a7d565b6000546001600160a01b0316331461081b5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c01b1916600160c01b179055565b6000546001600160a01b0316331461085a5760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006d04ee2d6d415b85acef81000000008311156108de5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610795565b816108fd5760006108ee84611a89565b509395506106d6945050505050565b600061090884611a89565b509295506106d6945050505050565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161079590612d3c565b60198054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146109895760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000546001600160a01b031633146109fc5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60d01b19169055565b6000546001600160a01b03163314610a355760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b03811660009081526009602052604090205460ff16610a9d5760405162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c697374656400000000000000006044820152606401610795565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314610ae85760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a81b19169055565b6000546001600160a01b03163314610b215760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c81b19169055565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526007602052604081205460ff1615610bac57506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546106d690610745565b6000546001600160a01b03163314610bf85760405162461bcd60e51b815260040161079590612d3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c01b19169055565b6000546001600160a01b03163314610ca55760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60c81b1916600160c81b179055565b60006106d2338461073685604051806060016040528060258152602001612f03602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611a2e565b60006106d233848461115f565b6000546001600160a01b03163314610d405760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260040161079590612d3c565b6001600160a01b038116610de95760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e6e5760405162461bcd60e51b815260040161079590612d3c565b604051600090339047908381818185875af1925050503d8060008114610eb0576040519150601f19603f3d011682016040523d82523d6000602084013e610eb5565b606091505b50505050565b6000546001600160a01b03163314610ee55760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60d01b1916600160d01b179055565b6000546001600160a01b03163314610f245760405162461bcd60e51b815260040161079590612d3c565b6019805460ff60a01b1916600160a01b1790556016548111610f4957610f4981611ad8565b506019805460ff60a01b19169055565b6000546001600160a01b03163314610f835760405162461bcd60e51b815260040161079590612d3c565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610fad57600080fd5b6001600160a01b03811660009081526009602052604090205460ff16156110165760405162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c697374656400000000000000006044820152606401610795565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006107b48284612e1c565b60006107b48284612dfa565b6001600160a01b0383166110a85760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610795565b6001600160a01b0382166110fe5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610795565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111bf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610795565b6001600160a01b0382166112155760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610795565b600081116112775760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610795565b6001600160a01b03831660009081526009602052604090205460ff161561129d57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff1615806112c7575042600c5411155b61135f5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610795565b601954600160d01b900460ff161515600114801561139657506001600160a01b03821660009081526008602052604090205460ff16155b1561141057601154816113a884610b6f565b6113b29190612dbd565b11156114105760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610795565b601954600160c01b900460ff161515600114801561143b57506018546001600160a01b038481169116145b156114b5576c097761759c34d7b26fb00000008111156114b55760405162461bcd60e51b815260206004820152602f60248201527f4c696d6974732061726520696e20706c6163652c20706c65617365206c6f776560448201526e1c88189d5e5a5b99c8185b5bdd5b9d608a1b6064820152608401610795565b601954600160c81b900460ff16151560011480156114e157506000546001600160a01b03838116911614155b80156114fb57506018546001600160a01b03848116911614155b1561150b57801561150b57600080fd5b6018546001600160a01b03848116911614801561153657506017546001600160a01b03838116911614155b801561155b57506001600160a01b03821660009081526006602052604090205460ff16155b80156115705750601954600160b01b900460ff165b156115cd57600f5481111561158457600080fd5b6001600160a01b03821660009081526005602052604090205442116115a857600080fd5b6115b342601e612dbd565b6001600160a01b0383166000908152600560205260409020555b601954600160b81b900460ff1615156001141561180657601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b15801561164457600080fd5b505afa158015611658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167c9190612b1d565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c457600080fd5b505afa1580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190612b1d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a9190612b1d565b601880546001600160a01b0319166001600160a01b039290921691909117905543600b556117ab426203f480612dbd565b600c55506018546001600160a01b039081166000908152600860205260408082208054600160ff1991821681179092556017549094168352912080549092161790556019805463ff00ffff60b81b19166201000160c01b1790555b6000546001600160a01b0384811691161480159061183257506018546001600160a01b03838116911614155b801561183f5750600b5443145b1561188e576001600160a01b0382166000818152600a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b600061189930610b6f565b601954909150600160a01b900460ff161580156118c357506018546001600160a01b038481169116145b80156118d85750601954600160a81b900460ff165b156118ee57601a5481106118ee576118ee611c4b565b6001600160a01b03841660009081526006602052604090205460019060ff168061193057506001600160a01b03841660009081526006602052604090205460ff165b15611939575060005b6001600160a01b0385166000908152600a602052604090205460ff168015611962575042600c54115b15611a1b576012546119789060ff166005612e3b565b6012805460ff191660ff928316179081905561199e91600160201b909104166005612e3b565b6012805464ff000000001916600160201b60ff9384160217908190556119ce91600160301b909104166005612e3b565b6012805466ff0000000000001916600160301b60ff938416021790819055611a0091600160401b909104166005612e3b565b601260086101000a81548160ff021916908360ff1602179055505b611a2785858584611e56565b5050505050565b60008184841115611a525760405162461bcd60e51b81526004016107959190612ce7565b505050900390565b6000806000611a67612062565b9092509050611a768282611046565b9250505090565b60006107b48284612dbd565b6000806000806000806000806000611aa08a612212565b9250925092506000806000611abe8d8686611ab9611a5a565b612254565b919f909e50909c50959a5093985091965092945050505050565b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611b3d57600080fd5b505afa158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b759190612b1d565b81600081518110611b8857611b88612eac565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611bbc57611bbc612eac565b6001600160a01b0392831660209182029290920101526017546001549082169163b6f9de95918591600091869116611bf64261012c611a7d565b6040518663ffffffff1660e01b8152600401611c159493929190612cb2565b6000604051808303818588803b158015611c2e57600080fd5b505af1158015611c42573d6000803e3d6000fd5b50505050505050565b6019805460ff60a01b1916600160a01b17905560125462010000900460ff1615611c9257600154601354611c8c9130916001600160a01b039091169061115f565b60006013555b6000611c9d30610b6f565b90506000601654601554601454611cb49190612dbd565b611cbe9190612dbd565b90506000611cd8600260155461104690919063ffffffff16565b90506000611ce684836122a4565b905047611cf2826122b0565b6000611cfe47836122a4565b90506000611d2186611d1b6014548561103a90919063ffffffff16565b90611046565b90506000611d2f83836122a4565b60006015819055601481905560195460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611d8c576040519150601f19603f3d011682016040523d82523d6000602084013e611d91565b606091505b50509050611d9f8783612422565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611e3e576019546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611e33576040519150601f19603f3d011682016040523d82523d6000602084013e611e38565b606091505b50909150505b50506019805460ff60a01b1916905550505050505050565b80611e6357611e6361250b565b6001600160a01b03841660009081526007602052604090205460ff168015611ea457506001600160a01b03831660009081526007602052604090205460ff16155b15611eb957611eb4848484612635565b611fb7565b6001600160a01b03841660009081526007602052604090205460ff16158015611efa57506001600160a01b03831660009081526007602052604090205460ff165b15611f0a57611eb484848461275b565b6001600160a01b03841660009081526007602052604090205460ff16158015611f4c57506001600160a01b03831660009081526007602052604090205460ff16155b15611f5c57611eb4848484612804565b6001600160a01b03841660009081526007602052604090205460ff168015611f9c57506001600160a01b03831660009081526007602052604090205460ff165b15611fac57611eb4848484612848565b611fb7848484612804565b80610eb5576012805468ff00000000000000001966ff000000ff00001964ff000000ff198316610100840460ff9081169182176501000000000060ff1990961692909217949094048416600160201b021790811662ff000019600160381b83048516600160301b0290811691909117630100000066ff00000000000019909316909117919091048316620100000217908116600160481b909104909116600160401b02179055610eb5565b600e5460009081906d04ee2d6d415b85acef8100000000825b600d548110156121cb578260026000600d848154811061209d5761209d612eac565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210857508160036000600d84815481106120e1576120e1612eac565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612129575050600e54936d04ee2d6d415b85acef81000000009350915050565b61216f60026000600d848154811061214357612143612eac565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122a4565b92506121b760036000600d848154811061218b5761218b612eac565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122a4565b9150806121c381612e7b565b91505061207b565b50600e546121e7906d04ee2d6d415b85acef8100000000611046565b821015612209575050600e54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b600080600080612221856128bb565b9050600061222e866128d6565b905060006122468261224089866122a4565b906122a4565b979296509094509092505050565b6000808080612263888661103a565b90506000612271888761103a565b9050600061227f888861103a565b905060006122918261224086866122a4565b939b939a50919850919650505050505050565b60006107b48284612e64565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122e5576122e5612eac565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123719190612b1d565b8160018151811061238457612384612eac565b6001600160a01b0392831660209182029290920101526017546123aa9130911684611052565b6017546001600160a01b031663791ac94783600084306123cc4261012c611a7d565b6040518663ffffffff1660e01b81526004016123ec959493929190612d81565b600060405180830381600087803b15801561240657600080fd5b505af115801561241a573d6000803e3d6000fd5b505050505050565b60175461243a9030906001600160a01b031684611052565b6017546001546001600160a01b039182169163f305d7199184913091879160009182911661246a4261012c611a7d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b1580156124d257600080fd5b505af11580156124e6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a279190612c40565b60125460ff161580156125285750601254600160201b900460ff16155b801561253e5750601254600160301b900460ff16155b8015612553575060125462010000900460ff16155b80156125695750601254600160401b900460ff16155b1561257057565b6012805469ffff00ff00ff00ff00ff1967ff000000ff0000001965ff000000ff0019831665ff00000000001961010060ff8087169190910291821692909217600160201b61ff001990961690911794909404811665010000000000029390931790811663ff00000019600160301b83048516600160381b02908116919091176201000067ff000000000000001990931690911791909104831663010000000217908116600160401b909104909116600160481b0268ff00ff00ff00ff00ff1916179055565b60008060008060008061264787611a89565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061267990886122a4565b6001600160a01b038a166000908152600360209081526040808320939093556002905220546126a890876122a4565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546126d79086611a7d565b6001600160a01b0389166000908152600260205260409020556126f981612936565b6127038483612ac7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274891815260200190565b60405180910390a3505050505050505050565b60008060008060008061276d87611a89565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061279f90876122a4565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546127d59084611a7d565b6001600160a01b0389166000908152600360209081526040808320939093556002905220546126d79086611a7d565b60008060008060008061281687611a89565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506126a890876122a4565b60008060008060008061285a87611a89565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061288c90886122a4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461279f90876122a4565b6012546000906106d690606490611d1b90859060ff1661103a565b6012546000906106d690606490611d1b9060ff600160401b8204811691600160201b810482169161291891620100008104821691600160301b90910416612dd5565b6129229190612dd5565b61292c9190612dd5565b859060ff1661103a565b60125460ff600160501b820481169161295791620100009091041683612e1c565b6129619190612dfa565b601360008282546129729190612dbd565b909155505060125460ff600160501b820481169161299991600160301b9091041683612e1c565b6129a39190612dfa565b601460008282546129b49190612dbd565b909155505060125460ff600160501b82048116916129db91600160201b9091041683612e1c565b6129e59190612dfa565b601560008282546129f69190612dbd565b909155505060125460ff600160501b8204811691612a1d91600160401b9091041683612e1c565b612a279190612dfa565b60166000828254612a389190612dbd565b9091555060009050612a48611a5a565b90506000612a56838361103a565b30600090815260026020526040902054909150612a739082611a7d565b3060009081526002602090815260408083209390935560079052205460ff1615612ac25730600090815260036020526040902054612ab19084611a7d565b306000908152600360205260409020555b505050565b600e54612ad490836122a4565b600e55601054612ae49082611a7d565b6010555050565b80358015158114612afb57600080fd5b919050565b600060208284031215612b1257600080fd5b81356107b481612ec2565b600060208284031215612b2f57600080fd5b81516107b481612ec2565b60008060408385031215612b4d57600080fd5b8235612b5881612ec2565b91506020830135612b6881612ec2565b809150509250929050565b600080600060608486031215612b8857600080fd5b8335612b9381612ec2565b92506020840135612ba381612ec2565b929592945050506040919091013590565b60008060408385031215612bc757600080fd5b8235612bd281612ec2565b946020939093013593505050565b600060208284031215612bf257600080fd5b6107b482612aeb565b600060208284031215612c0d57600080fd5b5035919050565b60008060408385031215612c2757600080fd5b82359150612c3760208401612aeb565b90509250929050565b600080600060608486031215612c5557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015612ca75781516001600160a01b031687529582019590820190600101612c82565b509495945050505050565b848152608060208201526000612ccb6080830186612c6e565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612d1457858101830151858201604001528201612cf8565b81811115612d26576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b85815284602082015260a060408201526000612da060a0830186612c6e565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612dd057612dd0612e96565b500190565b600060ff821660ff84168060ff03821115612df257612df2612e96565b019392505050565b600082612e1757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612e3657612e36612e96565b500290565b600060ff821660ff84168160ff0481118215151615612e5c57612e5c612e96565b029392505050565b600082821015612e7657612e76612e96565b500390565b6000600019821415612e8f57612e8f612e96565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612ed757600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207b2cd4539d19457e2e5b5932a1633f30aa4d1a0ccd6fafdea5bfa0c5d7c0bdd864736f6c63430008070033

Deployed Bytecode Sourcemap

13971:22843:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17385:92;;;;;;;;;;-1:-1:-1;17464:5:0;;;;;;;;;;;-1:-1:-1;;;17464:5:0;;;;17385:92;;;;17464:5;17385:92;:::i;:::-;;;;;;;;18304:161;;;;;;;;;;-1:-1:-1;18304:161:0;;;;;:::i;:::-;;:::i;:::-;;;4765:14:1;;4758:22;4740:41;;4728:2;4713:18;18304:161:0;4600:187:1;17677:95:0;;;;;;;;;;-1:-1:-1;14808:13:0;17677:95;;;11509:25:1;;;11497:2;11482:18;17677:95:0;11363:177:1;14650:33:0;;;;;;;;;;;;;;;;18471:329;;;;;;;;;;-1:-1:-1;18471:329:0;;;;;:::i;:::-;;:::i;20042:241::-;;;;;;;;;;-1:-1:-1;20042:241:0;;;;;:::i;:::-;;:::i;17583:88::-;;;;;;;;;;-1:-1:-1;17583:88:0;;15151:2;12598:36:1;;12586:2;12571:18;17583:88:0;12456:184:1;18806:218:0;;;;;;;;;;-1:-1:-1;18806:218:0;;;;;:::i;:::-;;:::i;32066:78::-;;;;;;;;;;;;;:::i;:::-;;23959:111;;;;;;;;;;-1:-1:-1;23959:111:0;;;;;:::i;:::-;;:::i;19592:444::-;;;;;;;;;;-1:-1:-1;19592:444:0;;;;;:::i;:::-;;:::i;24076:124::-;;;;;;;;;;-1:-1:-1;24076:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;24165:27:0;24141:4;24165:27;;;:18;:27;;;;;;;;;24076:124;19483:103;;;;;;;;;;-1:-1:-1;19483:103:0;;;;;:::i;:::-;;:::i;28347:148::-;;;;;;;;;;-1:-1:-1;28347:148:0;;;;;:::i;:::-;;:::i;32326:86::-;;;;;;;;;;;;;:::i;28192:152::-;;;;;;;;;;-1:-1:-1;28192:152:0;;;;;:::i;:::-;;:::i;31967:93::-;;;;;;;;;;;;;:::i;32629:82::-;;;;;;;;;;;;;:::i;31870:91::-;;;;;;;;;;;;;:::i;17778:198::-;;;;;;;;;;-1:-1:-1;17778:198:0;;;;;:::i;:::-;;:::i;1826:148::-;;;;;;;;;;;;;:::i;32150:80::-;;;;;;;;;;;;;:::i;32547:76::-;;;;;;;;;;;;;:::i;14559:43::-;;;;;;;;;;-1:-1:-1;14559:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19355:120;;;;;;;;;;-1:-1:-1;19355:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19447:20:0;19423:4;19447:20;;;:11;:20;;;;;;;;;19355:120;1598:87;;;;;;;;;;-1:-1:-1;1644:7:0;1671:6;1598:87;;-1:-1:-1;;;;;1671:6:0;;;3617:51:1;;3605:2;3590:18;1598:87:0;3471:203:1;19030:319:0;;;;;;;;;;-1:-1:-1;19030:319:0;;;;;:::i;:::-;;:::i;17982:167::-;;;;;;;;;;-1:-1:-1;17982:167:0;;;;;:::i;:::-;;:::i;31788:76::-;;;;;;;;;;;;;:::i;18155:143::-;;;;;;;;;;-1:-1:-1;18155:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18263:18:0;;;18236:7;18263:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18155:143;14606:37;;;;;;;;;;;;;;;;1982:249;;;;;;;;;;-1:-1:-1;1982:249:0;;;;;:::i;:::-;;:::i;32717:160::-;;;;;;;;;;;;;:::i;32236:84::-;;;;;;;;;;;;;:::i;27285:166::-;;;;;;;;;;-1:-1:-1;27285:166:0;;;;;:::i;:::-;;:::i;27969:220::-;;;;;;;;;;-1:-1:-1;27969:220:0;;;;;:::i;:::-;;:::i;18304:161::-;18379:4;18396:39;1251:10;18419:7;18428:6;18396:8;:39::i;:::-;-1:-1:-1;18453:4:0;18304:161;;;;;:::o;18471:329::-;18567:4;18584:36;18594:6;18602:9;18613:6;18584:9;:36::i;:::-;18631:139;18640:6;1251:10;18670:89;18708:6;18670:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18670:19:0;;;;;;:11;:19;;;;;;;;1251:10;18670:33;;;;;;;;;;:37;:89::i;:::-;18631:8;:139::i;:::-;-1:-1:-1;18788:4:0;18471:329;;;;;:::o;20042:241::-;20109:7;20148;;20137;:18;;20129:61;;;;-1:-1:-1;;;20129:61:0;;8413:2:1;20129:61:0;;;8395:21:1;8452:2;8432:18;;;8425:30;8491:32;8471:18;;;8464:60;8541:18;;20129:61:0;;;;;;;;;20201:19;20223:10;:8;:10::i;:::-;20201:32;-1:-1:-1;20251:24:0;:7;20201:32;20251:11;:24::i;:::-;20244:31;20042:241;-1:-1:-1;;;20042:241:0:o;18806:218::-;1251:10;18894:4;18943:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18943:34:0;;;;;;;;;;18894:4;;18911:83;;18934:7;;18943:50;;18982:10;18943:38;:50::i;32066:78::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32119:10:::1;:17:::0;;-1:-1:-1;;;;32119:17:0::1;-1:-1:-1::0;;;32119:17:0::1;::::0;;32066:78::o;23959:111::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24028:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24028:34:0::1;24058:4;24028:34;::::0;;23959:111::o;19592:444::-;19683:7;14808:13;19711:7;:18;;19703:59;;;;-1:-1:-1;;;19703:59:0;;6470:2:1;19703:59:0;;;6452:21:1;6509:2;6489:18;;;6482:30;6548;6528:18;;;6521:58;6596:18;;19703:59:0;6268:352:1;19703:59:0;19778:17;19773:256;;19813:15;19842:19;19853:7;19842:10;:19::i;:::-;-1:-1:-1;19812:49:0;;-1:-1:-1;19876:14:0;;-1:-1:-1;;;;;19876:14:0;19773:256;19926:23;19961:19;19972:7;19961:10;:19::i;:::-;-1:-1:-1;19923:57:0;;-1:-1:-1;19995:22:0;;-1:-1:-1;;;;;19995:22:0;19483:103;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;19555:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;19555:23:0::1;-1:-1:-1::0;;;;19555:23:0;;::::1;::::0;;;::::1;::::0;;19483:103::o;28347:148::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28421:20:0;::::1;28444:5;28421:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;28421:28:0::1;::::0;;28465:22;::::1;::::0;28444:5;28465:22:::1;28347:148:::0;:::o;32326:86::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32384:12:::1;:20:::0;;-1:-1:-1;;;;32384:20:0::1;::::0;;32326:86::o;28192:152::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28262:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;28254:50;;;::::0;-1:-1:-1;;;28254:50:0;;9125:2:1;28254:50:0::1;::::0;::::1;9107:21:1::0;9164:2;9144:18;;;9137:30;9203:26;9183:18;;;9176:54;9247:18;;28254:50:0::1;8923:348:1::0;28254:50:0::1;-1:-1:-1::0;;;;;28315:13:0::1;28331:5;28315:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;28315:21:0::1;::::0;;28192:152::o;31967:93::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32023:21:::1;:29:::0;;-1:-1:-1;;;;32023:29:0::1;::::0;;31967:93::o;32629:82::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32685:10:::1;:18:::0;;-1:-1:-1;;;;32685:18:0::1;::::0;;32629:82::o;31870:91::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;31925:21:::1;:28:::0;;-1:-1:-1;;;;31925:28:0::1;-1:-1:-1::0;;;31925:28:0::1;::::0;;31870:91::o;17778:198::-;-1:-1:-1;;;;;17868:20:0;;17844:7;17868:20;;;:11;:20;;;;;;;;17864:49;;;-1:-1:-1;;;;;;17897:16:0;;;;;:7;:16;;;;;;;17778:198::o;17864:49::-;-1:-1:-1;;;;;17951:16:0;;;;;;:7;:16;;;;;;17931:37;;:19;:37::i;1826:148::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;1933:1:::1;1917:6:::0;;1896:40:::1;::::0;-1:-1:-1;;;;;1917:6:0;;::::1;::::0;1896:40:::1;::::0;1933:1;;1896:40:::1;1964:1;1947:19:::0;;-1:-1:-1;;;;;;1947:19:0::1;::::0;;1826:148::o;32150:80::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32204:10:::1;:18:::0;;-1:-1:-1;;;;32204:18:0::1;::::0;;32150:80::o;32547:76::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32598:10:::1;:17:::0;;-1:-1:-1;;;;32598:17:0::1;-1:-1:-1::0;;;32598:17:0::1;::::0;;32547:76::o;19030:319::-;19123:4;19140:179;1251:10;19190:7;19212:96;19251:15;19212:96;;;;;;;;;;;;;;;;;1251:10;19212:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19212:34:0;;;;;;;;;;;;:38;:96::i;17982:167::-;18060:4;18077:42;1251:10;18101:9;18112:6;18077:9;:42::i;31788:76::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;31838:11:::1;:18:::0;;-1:-1:-1;;;;31838:18:0::1;-1:-1:-1::0;;;31838:18:0::1;::::0;;31788:76::o;1982:249::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2071:22:0;::::1;2063:78;;;::::0;-1:-1:-1;;;2063:78:0;;9478:2:1;2063:78:0::1;::::0;::::1;9460:21:1::0;9517:2;9497:18;;;9490:30;9556:34;9536:18;;;9529:62;-1:-1:-1;;;9607:18:1;;;9600:41;9658:19;;2063:78:0::1;9276:407:1::0;2063:78:0::1;2178:6;::::0;;2157:38:::1;::::0;-1:-1:-1;;;;;2157:38:0;;::::1;::::0;2178:6;::::1;::::0;2157:38:::1;::::0;::::1;2206:6;:17:::0;;-1:-1:-1;;;;;;2206:17:0::1;-1:-1:-1::0;;;;;2206:17:0;;;::::1;::::0;;;::::1;::::0;;1982:249::o;32717:160::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32811:58:::1;::::0;32775:12:::1;::::0;32819:10:::1;::::0;32843:21:::1;::::0;32775:12;32811:58;32775:12;32811:58;32843:21;32819:10;32811:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;32717:160:0:o;32236:84::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;32293:12:::1;:19:::0;;-1:-1:-1;;;;32293:19:0::1;-1:-1:-1::0;;;32293:19:0::1;::::0;;32236:84::o;27285:166::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;16657:16:::1;:23:::0;;-1:-1:-1;;;;16657:23:0::1;-1:-1:-1::0;;;16657:23:0::1;::::0;;27378:13:::2;::::0;27368:23;::::2;27364:80;;27408:24;27425:6;27408:16;:24::i;:::-;-1:-1:-1::0;16703:16:0::1;:24:::0;;-1:-1:-1;;;;16703:24:0::1;::::0;;27285:166::o;27969:220::-;1644:7;1671:6;-1:-1:-1;;;;;1671:6:0;1251:10;1733:23;1725:73;;;;-1:-1:-1;;;1725:73:0;;;;;;;:::i;:::-;28045:42:::1;-1:-1:-1::0;;;;;28036:51:0;::::1;;;28028:60;;;::::0;::::1;;-1:-1:-1::0;;;;;28108:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;28107:14;28099:51;;;::::0;-1:-1:-1;;;28099:51:0;;8772:2:1;28099:51:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:26;8830:18;;;8823:54;8894:18;;28099:51:0::1;8570:348:1::0;28099:51:0::1;-1:-1:-1::0;;;;;28161:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;28161:20:0::1;28177:4;28161:20;::::0;;27969:220::o;3962:98::-;4020:7;4047:5;4051:1;4047;:5;:::i;4066:98::-;4124:7;4151:5;4155:1;4151;:5;:::i;24206:325::-;-1:-1:-1;;;;;24297:19:0;;24289:64;;;;-1:-1:-1;;;24289:64:0;;11204:2:1;24289:64:0;;;11186:21:1;;;11223:18;;;11216:30;11282:34;11262:18;;;11255:62;11334:18;;24289:64:0;11002:356:1;24289:64:0;-1:-1:-1;;;;;24372:21:0;;24364:64;;;;-1:-1:-1;;;24364:64:0;;6111:2:1;24364:64:0;;;6093:21:1;6150:2;6130:18;;;6123:30;6189:32;6169:18;;;6162:60;6239:18;;24364:64:0;5909:354:1;24364:64:0;-1:-1:-1;;;;;24439:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24491:32;;11509:25:1;;;24491:32:0;;11482:18:1;24491:32:0;;;;;;;24206:325;;;:::o;24537:2742::-;-1:-1:-1;;;;;24623:18:0;;24615:64;;;;-1:-1:-1;;;24615:64:0;;7243:2:1;24615:64:0;;;7225:21:1;7282:2;7262:18;;;7255:30;7321:34;7301:18;;;7294:62;-1:-1:-1;;;7372:18:1;;;7365:31;7413:19;;24615:64:0;7041:397:1;24615:64:0;-1:-1:-1;;;;;24698:16:0;;24690:60;;;;-1:-1:-1;;;24690:60:0;;7645:2:1;24690:60:0;;;7627:21:1;7684:2;7664:18;;;7657:30;7723:33;7703:18;;;7696:61;7774:18;;24690:60:0;7443:355:1;24690:60:0;24778:1;24769:6;:10;24761:64;;;;-1:-1:-1;;;24761:64:0;;10296:2:1;24761:64:0;;;10278:21:1;10335:2;10315:18;;;10308:30;10374:34;10354:18;;;10347:62;-1:-1:-1;;;10425:18:1;;;10418:39;10474:19;;24761:64:0;10094:405:1;24761:64:0;-1:-1:-1;;;;;24839:12:0;;;;;;:6;:12;;;;;;;;24838:13;24830:22;;;;;;-1:-1:-1;;;;;24866:17:0;;;;;;:11;:17;;;;;;;;24865:18;;:59;;;24909:15;24887:18;;:37;;24865:59;24857:161;;;;-1:-1:-1;;;24857:161:0;;10706:2:1;24857:161:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;10855:34;10835:18;;;10828:62;10927:27;10906:19;;;10899:56;10972:19;;24857:161:0;10504:493:1;24857:161:0;25027:12;;-1:-1:-1;;;25027:12:0;;;;:20;;25043:4;25027:20;:47;;;;-1:-1:-1;;;;;;25053:21:0;;;;;;:17;:21;;;;;;;;25051:23;25027:47;25023:172;;;25125:14;;25115:6;25099:13;25109:2;25099:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25091:92;;;;-1:-1:-1;;;25091:92:0;;8005:2:1;25091:92:0;;;7987:21:1;8044:2;8024:18;;;8017:30;8083:34;8063:18;;;8056:62;-1:-1:-1;;;8134:18:1;;;8127:37;8181:19;;25091:92:0;7803:403:1;25091:92:0;25209:10;;-1:-1:-1;;;25209:10:0;;;;:18;;25223:4;25209:18;:39;;;;-1:-1:-1;25239:9:0;;-1:-1:-1;;;;;25231:17:0;;;25239:9;;25231:17;25209:39;25205:148;;;25274:21;25264:6;:31;;25256:91;;;;-1:-1:-1;;;25256:91:0;;6827:2:1;25256:91:0;;;6809:21:1;6866:2;6846:18;;;6839:30;6905:34;6885:18;;;6878:62;-1:-1:-1;;;6956:18:1;;;6949:45;7011:19;;25256:91:0;6625:411:1;25256:91:0;25361:10;;-1:-1:-1;;;25361:10:0;;;;:18;;25375:4;25361:18;:35;;;;-1:-1:-1;1644:7:0;1671:6;-1:-1:-1;;;;;25383:13:0;;;1671:6;;25383:13;;25361:35;:56;;;;-1:-1:-1;25408:9:0;;-1:-1:-1;;;;;25400:17:0;;;25408:9;;25400:17;;25361:56;25357:103;;;25433:20;;25425:29;;;;;;25482:9;;-1:-1:-1;;;;;25474:17:0;;;25482:9;;25474:17;:47;;;;-1:-1:-1;25509:11:0;;-1:-1:-1;;;;;25495:26:0;;;25509:11;;25495:26;;25474:47;:75;;;;-1:-1:-1;;;;;;25527:22:0;;;;;;:18;:22;;;;;;;;25525:24;25474:75;:94;;;;-1:-1:-1;25553:15:0;;-1:-1:-1;;;25553:15:0;;;;25474:94;25470:296;;;25607:12;;25597:6;:22;;25589:31;;;;;;-1:-1:-1;;;;;25647:16:0;;;;;;:12;:16;;;;;;25666:15;-1:-1:-1;25639:43:0;;;;;;25720:30;:15;25739:10;25720:30;:::i;:::-;-1:-1:-1;;;;;25701:16:0;;;;;;:12;:16;;;;;:49;25470:296;25779:11;;-1:-1:-1;;;25779:11:0;;;;:19;;25794:4;25779:19;25776:630;;;25926:11;:26;;-1:-1:-1;;;;;;25926:26:0;25868:42;25926:26;;;;;;25997:22;;;-1:-1:-1;;;25997:22:0;;;;25868:42;;25997:20;;:22;;;;;;;;;;;;;;25868:42;25997:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25979:49:0;;26037:4;26044:12;-1:-1:-1;;;;;26044:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25979:85;;-1:-1:-1;;;;;;25979:85:0;;;;;;;-1:-1:-1;;;;;3909:15:1;;;25979:85:0;;;3891:34:1;3961:15;;3941:18;;;3934:43;3826:18;;25979:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25967:9;:97;;-1:-1:-1;;;;;;25967:97:0;-1:-1:-1;;;;;25967:97:0;;;;;;;;;;26100:12;26079:18;:33;26148:26;:15;26166:8;26148:26;:::i;:::-;26127:18;:47;-1:-1:-1;26215:9:0;;-1:-1:-1;;;;;26215:9:0;;;26189:37;;;;:17;:37;;;;;;:44;;26229:4;-1:-1:-1;;26189:44:0;;;;;;;;26274:11;;;;;26248:39;;;;:46;;;;;;;;26309:10;:17;;-1:-1:-1;;;;26375:19:0;-1:-1:-1;;;26375:19:0;;;25776:630;1644:7;1671:6;-1:-1:-1;;;;;26413:15:0;;;1671:6;;26413:15;;;;:34;;-1:-1:-1;26438:9:0;;-1:-1:-1;;;;;26432:15:0;;;26438:9;;26432:15;;26413:34;:72;;;;;26467:18;;26451:12;:34;26413:72;26410:145;;;-1:-1:-1;;;;;26492:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;26492:22:0;26510:4;26492:22;;;26534:15;;;26492;26534;26410:145;26565:28;26596:24;26614:4;26596:9;:24::i;:::-;26636:16;;26565:55;;-1:-1:-1;;;;26636:16:0;;;;26635:17;:36;;;;-1:-1:-1;26662:9:0;;-1:-1:-1;;;;;26656:15:0;;;26662:9;;26656:15;26635:36;:61;;;;-1:-1:-1;26675:21:0;;-1:-1:-1;;;26675:21:0;;;;26635:61;26631:188;;;26741:29;;26717:20;:53;26713:95;;26779:13;:11;:13::i;:::-;-1:-1:-1;;;;;26863:24:0;;26829:12;26863:24;;;:18;:24;;;;;;26844:4;;26863:24;;;:50;;-1:-1:-1;;;;;;26891:22:0;;;;;;:18;:22;;;;;;;;26863:50;26859:98;;;-1:-1:-1;26940:5:0;26859:98;-1:-1:-1;;;;;26964:17:0;;;;;;:11;:17;;;;;;;;:57;;;;;27006:15;26985:18;;:36;26964:57;26961:259;;;27055:7;;:11;;:7;;27065:1;27055:11;:::i;:::-;27045:7;:21;;-1:-1:-1;;27045:21:0;;;;;;;;;;27099:11;;-1:-1:-1;;;27099:7:0;;;;27109:1;27099:11;:::i;:::-;27089:7;:21;;-1:-1:-1;;27089:21:0;-1:-1:-1;;;27089:21:0;;;;;;;;;;27143:11;;-1:-1:-1;;;27143:7:0;;;;27153:1;27143:11;:::i;:::-;27133:7;:21;;-1:-1:-1;;27133:21:0;-1:-1:-1;;;27133:21:0;;;;;;;;;;27188:12;;-1:-1:-1;;;27188:8:0;;;;27199:1;27188:12;:::i;:::-;27177:8;;:23;;;;;;;;;;;;;;;;;;26961:259;27230:41;27245:4;27251:2;27255:6;27263:7;27230:14;:41::i;:::-;24604:2675;;24537:2742;;;:::o;4274:206::-;4360:7;4421:12;4413:6;;;;4405:29;;;;-1:-1:-1;;;4405:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4456:5:0;;;4274:206::o;21660:164::-;21702:7;21723:15;21740;21759:19;:17;:19::i;:::-;21722:56;;-1:-1:-1;21722:56:0;-1:-1:-1;21796:20:0;21722:56;;21796:11;:20::i;:::-;21789:27;;;;21660:164;:::o;3754:98::-;3812:7;3839:5;3843:1;3839;:5;:::i;20477:414::-;20536:7;20544;20552;20560;20568;20576;20597:23;20622:12;20636:18;20658:20;20670:7;20658:11;:20::i;:::-;20596:82;;;;;;20690:15;20707:23;20732:12;20748:50;20760:7;20769:4;20775:10;20787;:8;:10::i;:::-;20748:11;:50::i;:::-;20689:109;;;;-1:-1:-1;20689:109:0;;-1:-1:-1;20849:15:0;;-1:-1:-1;20866:4:0;;-1:-1:-1;20872:10:0;;-1:-1:-1;20477:414:0;;-1:-1:-1;;;;;20477:414:0:o;27457:509::-;27602:16;;;27616:1;27602:16;;;;;;;;27578:21;;27602:16;;;;;;;;-1:-1:-1;;27639:11:0;;:18;;;-1:-1:-1;;;27639:18:0;;;;27578:40;;-1:-1:-1;;;;;;27639:11:0;;;;:16;;-1:-1:-1;27639:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27629:4;27634:1;27629:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;27629:28:0;;;-1:-1:-1;;;;;27629:28:0;;;;;27686:4;27668;27673:1;27668:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27668:23:0;;;:7;;;;;;;;;:23;27730:11;;;27888:4;27730:11;;;;:62;;27800:6;;27730:11;;27869:4;;27888;27923:24;:15;27943:3;27923:19;:24::i;:::-;27730:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27507:459;27457:509;:::o;29531:1291::-;16657:16;:23;;-1:-1:-1;;;;16657:23:0;-1:-1:-1;;;16657:23:0;;;29588:8:::1;::::0;;;::::1;16657:23:::0;29588:8:::1;:13:::0;29585:116:::1;;29643:4;::::0;29649:10:::1;::::0;29618:42:::1;::::0;29636:4:::1;::::0;-1:-1:-1;;;;;29643:4:0;;::::1;::::0;29618:9:::1;:42::i;:::-;29688:1;29675:10;:14:::0;29585:116:::1;29711:23;29737:24;29755:4;29737:9;:24::i;:::-;29711:50;;29772:25;29836:13;;29818:15;;29800;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;29772:77;;29909:26;29938:22;29958:1;29938:15;;:19;;:22;;;;:::i;:::-;29909:51:::0;-1:-1:-1;29971:26:0::1;30000:39;:15:::0;29909:51;30000:19:::1;:39::i;:::-;29971:68:::0;-1:-1:-1;30078:21:0::1;30110:36;29971:68:::0;30110:16:::1;:36::i;:::-;30158:18;30179:44;:21;30205:17:::0;30179:25:::1;:44::i;:::-;30158:65;;30234:23;30260:54;30296:17;30260:31;30275:15;;30260:10;:14;;:31;;;;:::i;:::-;:35:::0;::::1;:54::i;:::-;30234:80:::0;-1:-1:-1;30325:23:0::1;30351:31;:10:::0;30234:80;30351:14:::1;:31::i;:::-;30411:1;30393:15;:19:::0;;;30423:15:::1;:19:::0;;;30479:9:::1;::::0;30471:51:::1;::::0;30325:57;;-1:-1:-1;30411:1:0;;-1:-1:-1;;;;;30479:9:0;;::::1;::::0;30502:15;;30411:1;30471:51;30411:1;30471:51;30502:15;30479:9;30471:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30453:69;;;30533:49;30546:18;30566:15;30533:12;:49::i;:::-;30598:71;::::0;;12334:25:1;;;12390:2;12375:18;;12368:34;;;12418:18;;;12411:34;;;30598:71:0::1;::::0;12322:2:1;12307:18;30598:71:0::1;;;;;;;30683:21;:34:::0;30680:135:::1;;30754:9;::::0;30746:57:::1;::::0;-1:-1:-1;;;;;30754:9:0;;::::1;::::0;30777:21:::1;::::0;30746:57:::1;::::0;;;30777:21;30754:9;30746:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30733:70:0;;-1:-1:-1;;30680:135:0::1;-1:-1:-1::0;;16703:16:0;:24;;-1:-1:-1;;;;16703:24:0;;;-1:-1:-1;;;;;;;29531:1291:0:o;32883:788::-;32993:7;32988:28;;33002:14;:12;:14::i;:::-;-1:-1:-1;;;;;33031:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33055:22:0;;;;;;:11;:22;;;;;;;;33054:23;33031:46;33027:597;;;33094:48;33116:6;33124:9;33135:6;33094:21;:48::i;:::-;33027:597;;;-1:-1:-1;;;;;33165:19:0;;;;;;:11;:19;;;;;;;;33164:20;:46;;;;-1:-1:-1;;;;;;33188:22:0;;;;;;:11;:22;;;;;;;;33164:46;33160:464;;;33227:46;33247:6;33255:9;33266:6;33227:19;:46::i;33160:464::-;-1:-1:-1;;;;;33296:19:0;;;;;;:11;:19;;;;;;;;33295:20;:47;;;;-1:-1:-1;;;;;;33320:22:0;;;;;;:11;:22;;;;;;;;33319:23;33295:47;33291:333;;;33359:44;33377:6;33385:9;33396:6;33359:17;:44::i;33291:333::-;-1:-1:-1;;;;;33425:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33448:22:0;;;;;;:11;:22;;;;;;;;33425:45;33421:203;;;33487:48;33509:6;33517:9;33528:6;33487:21;:48::i;33421:203::-;33568:44;33586:6;33594:9;33605:6;33568:17;:44::i;:::-;33639:7;33634:29;;23781:15;;;-1:-1:-1;;;;;;23807:25:0;;23781:15;;;;;;;23807:25;;;23817:15;-1:-1:-1;;23771:25:0;;;;;;;23817:15;;;;;;-1:-1:-1;;;23807:25:0;;23879:28;;;-1:-1:-1;;;;;23853:15:0;;;;-1:-1:-1;;;23843:25:0;23879:28;;;;;;;23890:17;-1:-1:-1;;23843:25:0;;;;;;23890:17;;;;;;23879:28;;;23918:27;;;-1:-1:-1;;;23929:16:0;;;;;;-1:-1:-1;;;23918:27:0;;;;33648:15;23727:226;21830:556;21928:7;;21881;;;;14808:13;21881:7;21982:289;22006:9;:16;22002:20;;21982:289;;;22072:7;22048;:21;22056:9;22066:1;22056:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22056:12:0;22048:21;;;;;;;;;;;;;:31;;:66;;;22107:7;22083;:21;22091:9;22101:1;22091:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22091:12:0;22083:21;;;;;;;;;;;;;:31;22048:66;22044:97;;;-1:-1:-1;;22124:7:0;;;14808:13;;-1:-1:-1;21830:556:0;-1:-1:-1;;21830:556:0:o;22044:97::-;22166:34;22178:7;:21;22186:9;22196:1;22186:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22186:12:0;22178:21;;;;;;;;;;;;;22166:7;;:11;:34::i;:::-;22156:44;;22225:34;22237:7;:21;22245:9;22255:1;22245:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22245:12:0;22237:21;;;;;;;;;;;;;22225:7;;:11;:34::i;:::-;22215:44;-1:-1:-1;22024:3:0;;;;:::i;:::-;;;;21982:289;;;-1:-1:-1;22295:7:0;;:20;;14808:13;22295:11;:20::i;:::-;22285:7;:30;22281:61;;;-1:-1:-1;;22325:7:0;;;14808:13;;-1:-1:-1;21830:556:0;-1:-1:-1;21830:556:0:o;22281:61::-;22361:7;;22370;;-1:-1:-1;21830:556:0;-1:-1:-1;21830:556:0:o;20897:327::-;20956:7;20964;20972;20992:12;21007:24;21023:7;21007:15;:24::i;:::-;20992:39;;21042:18;21063:30;21085:7;21063:21;:30::i;:::-;21042:51;-1:-1:-1;21104:23:0;21130:33;21042:51;21130:17;:7;21142:4;21130:11;:17::i;:::-;:21;;:33::i;:::-;21104:59;21199:4;;-1:-1:-1;21205:10:0;;-1:-1:-1;20897:327:0;;-1:-1:-1;;;20897:327:0:o;21230:424::-;21342:7;;;;21396:24;:7;21408:11;21396;:24::i;:::-;21378:42;-1:-1:-1;21431:12:0;21446:21;:4;21455:11;21446:8;:21::i;:::-;21431:36;-1:-1:-1;21478:18:0;21499:27;:10;21514:11;21499:14;:27::i;:::-;21478:48;-1:-1:-1;21537:23:0;21563:33;21478:48;21563:17;:7;21575:4;21563:11;:17::i;:33::-;21615:7;;;;-1:-1:-1;21641:4:0;;-1:-1:-1;21230:424:0;;-1:-1:-1;;;;;;;21230:424:0:o;3858:98::-;3916:7;3943:5;3947:1;3943;:5;:::i;30830:496::-;30920:16;;;30934:1;30920:16;;;;;;;;30896:21;;30920:16;;;;;;;;;;-1:-1:-1;30920:16:0;30896:40;;30965:4;30947;30952:1;30947:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30947:23:0;;;:7;;;;;;;;;;:23;;;;30991:11;;:18;;;-1:-1:-1;;;30991:18:0;;;;:11;;;;;:16;;:18;;;;;30947:7;;30991:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30981:4;30986:1;30981:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30981:28:0;;;:7;;;;;;;;;:28;31052:11;;31020:58;;31037:4;;31052:11;31066;31020:8;:58::i;:::-;31089:11;;-1:-1:-1;;;;;31089:11:0;:62;31166:11;31089;31236:4;31263;31283:24;:15;31303:3;31283:19;:24::i;:::-;31089:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30885:441;30830:496;:::o;31332:412::-;31445:11;;31413:58;;31430:4;;-1:-1:-1;;;;;31445:11:0;31459;31413:8;:58::i;:::-;31482:11;;;31682:4;-1:-1:-1;;;;;31482:11:0;;;;:27;;31517:9;;31550:4;;31570:11;;31482;;;;31682:4;31701:24;:15;31721:3;31701:19;:24::i;:::-;31482:254;;;;;;-1:-1:-1;;;;;;31482:254:0;;;-1:-1:-1;;;;;4347:15:1;;;31482:254:0;;;4329:34:1;4379:18;;;4372:34;;;;4422:18;;;4415:34;;;;4465:18;;;4458:34;;;;4529:15;;;4508:19;;;4501:44;4561:19;;;4554:35;;;;4263:19;;31482:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23279:442::-;23326:7;;;;:12;:28;;;;-1:-1:-1;23342:7:0;;-1:-1:-1;;;23342:7:0;;;;:12;23326:28;:44;;;;-1:-1:-1;23358:7:0;;-1:-1:-1;;;23358:7:0;;;;:12;23326:44;:61;;;;-1:-1:-1;23374:8:0;;;;;;;:13;23326:61;:78;;;;-1:-1:-1;23391:8:0;;-1:-1:-1;;;23391:8:0;;;;:13;23326:78;23322:91;;;23279:442::o;23322:91::-;23443:7;;;-1:-1:-1;;;;;;23461:25:0;;-1:-1:-1;;23443:7:0;;;;;23425:25;;;;23461;;;;;;;-1:-1:-1;;;;;23425:25:0;;;;;;23479:7;;;;;;23461:25;;;;;;23533:28;;;-1:-1:-1;;;;;23515:7:0;;;;-1:-1:-1;;;23497:25:0;23533:28;;;;;;;23553:8;-1:-1:-1;;23497:25:0;;;;;;23553:8;;;;;;23533:28;;;23701:12;;;-1:-1:-1;;;23591:8:0;;;;;;-1:-1:-1;;;23572:27:0;-1:-1:-1;;23701:12:0;;;;23279:442::o;34940:650::-;35055:15;35085:23;35123:12;35150:23;35188:12;35215:18;35247:19;35258:7;35247:10;:19::i;:::-;-1:-1:-1;;;;;35295:15:0;;;;;;:7;:15;;;;;;35040:226;;-1:-1:-1;35040:226:0;;-1:-1:-1;35040:226:0;;-1:-1:-1;35040:226:0;-1:-1:-1;35040:226:0;-1:-1:-1;35040:226:0;-1:-1:-1;35295:28:0;;35315:7;35295:19;:28::i;:::-;-1:-1:-1;;;;;35277:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35352:7;:15;;;;:28;;35372:7;35352:19;:28::i;:::-;-1:-1:-1;;;;;35334:15:0;;;;;;;:7;:15;;;;;;:46;;;;35412:18;;;;;;;:39;;35435:15;35412:22;:39::i;:::-;-1:-1:-1;;;;;35391:18:0;;;;;;:7;:18;;;;;:60;35462:26;35477:10;35462:14;:26::i;:::-;35499:23;35511:4;35517;35499:11;:23::i;:::-;35555:9;-1:-1:-1;;;;;35538:44:0;35547:6;-1:-1:-1;;;;;35538:44:0;;35566:15;35538:44;;;;11509:25:1;;11497:2;11482:18;;11363:177;35538:44:0;;;;;;;;35029:561;;;;;;34940:650;;;:::o;34272:662::-;34385:15;34415:23;34453:12;34480:23;34518:12;34545:18;34577:19;34588:7;34577:10;:19::i;:::-;-1:-1:-1;;;;;34625:15:0;;;;;;:7;:15;;;;;;34370:226;;-1:-1:-1;34370:226:0;;-1:-1:-1;34370:226:0;;-1:-1:-1;34370:226:0;-1:-1:-1;34370:226:0;-1:-1:-1;34370:226:0;-1:-1:-1;34625:28:0;;34370:226;34625:19;:28::i;:::-;-1:-1:-1;;;;;34607:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34685:18;;;;;:7;:18;;;;;:39;;34708:15;34685:22;:39::i;:::-;-1:-1:-1;;;;;34664:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34756:7;:18;;;;:39;;34779:15;34756:22;:39::i;33677:589::-;33788:15;33818:23;33856:12;33883:23;33921:12;33948:18;33980:19;33991:7;33980:10;:19::i;:::-;-1:-1:-1;;;;;34028:15:0;;;;;;:7;:15;;;;;;33773:226;;-1:-1:-1;33773:226:0;;-1:-1:-1;33773:226:0;;-1:-1:-1;33773:226:0;-1:-1:-1;33773:226:0;-1:-1:-1;33773:226:0;-1:-1:-1;34028:28:0;;33773:226;34028:19;:28::i;35596:721::-;35711:15;35741:23;35779:12;35806:23;35844:12;35871:18;35903:19;35914:7;35903:10;:19::i;:::-;-1:-1:-1;;;;;35951:15:0;;;;;;:7;:15;;;;;;35696:226;;-1:-1:-1;35696:226:0;;-1:-1:-1;35696:226:0;;-1:-1:-1;35696:226:0;-1:-1:-1;35696:226:0;-1:-1:-1;35696:226:0;-1:-1:-1;35951:28:0;;35971:7;35951:19;:28::i;:::-;-1:-1:-1;;;;;35933:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36008:7;:15;;;;:28;;36028:7;36008:19;:28::i;22969:130::-;23072:7;;23033;;23060:31;;23085:5;;23060:20;;:7;;23072;;23060:11;:20::i;23105:168::-;23245:8;;23175:7;;23202:63;;23259:5;;23202:52;;23245:8;-1:-1:-1;;;23245:8:0;;;;;-1:-1:-1;;;23235:7:0;;;;;23214:18;;23224:8;;;;;;-1:-1:-1;;;23214:7:0;;;;:18;:::i;:::-;:28;;;;:::i;:::-;:39;;;;:::i;:::-;23202:7;;:52;;:11;:52::i;22392:571::-;22493:7;;;-1:-1:-1;;;22493:7:0;;;;;22469:21;;22482:8;;;;;22469:10;:21;:::i;:::-;:31;;;;:::i;:::-;22455:10;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;22553:7:0;;;-1:-1:-1;;;22553:7:0;;;;;22530:20;;-1:-1:-1;;;22543:7:0;;;;22530:10;:20;:::i;:::-;:30;;;;:::i;:::-;22511:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22607:7:0;;;-1:-1:-1;;;22607:7:0;;;;;22584:20;;-1:-1:-1;;;22597:7:0;;;;22584:10;:20;:::i;:::-;:30;;;;:::i;:::-;22565:15;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22666:7:0;;;-1:-1:-1;;;22666:7:0;;;;;22642:21;;-1:-1:-1;;;22655:8:0;;;;22642:10;:21;:::i;:::-;:31;;;;:::i;:::-;22625:13;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;22684:19:0;;-1:-1:-1;22706:10:0;:8;:10::i;:::-;22684:32;-1:-1:-1;22727:18:0;22748:27;:10;22684:32;22748:14;:27::i;:::-;22827:4;22811:22;;;;:7;:22;;;;;;22727:48;;-1:-1:-1;22811:38:0;;22727:48;22811:26;:38::i;:::-;22802:4;22786:22;;;;:7;:22;;;;;;;;:63;;;;22864:11;:26;;;;;;22860:95;;;22933:4;22917:22;;;;:7;:22;;;;;;:38;;22944:10;22917:26;:38::i;:::-;22908:4;22892:22;;;;:7;:22;;;;;:63;22860:95;22444:519;;22392:571;:::o;20324:147::-;20402:7;;:17;;20414:4;20402:11;:17::i;:::-;20392:7;:27;20443:10;;:20;;20458:4;20443:14;:20::i;:::-;20430:10;:33;-1:-1:-1;;20324:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2484:306;;;;;:::o;2795:461::-;2848:3;2886:5;2880:12;2913:6;2908:3;2901:19;2939:4;2968:2;2963:3;2959:12;2952:19;;3005:2;2998:5;2994:14;3026:1;3036:195;3050:6;3047:1;3044:13;3036:195;;;3115:13;;-1:-1:-1;;;;;3111:39:1;3099:52;;3171:12;;;;3206:15;;;;3147:1;3065:9;3036:195;;;-1:-1:-1;3247:3:1;;2795:461;-1:-1:-1;;;;;2795:461:1:o;4792:510::-;5063:6;5052:9;5045:25;5106:3;5101:2;5090:9;5086:18;5079:31;5026:4;5127:57;5179:3;5168:9;5164:19;5156:6;5127:57;:::i;:::-;-1:-1:-1;;;;;5220:32:1;;;;5215:2;5200:18;;5193:60;-1:-1:-1;5284:2:1;5269:18;5262:34;5119:65;4792:510;-1:-1:-1;;4792:510:1:o;5307:597::-;5419:4;5448:2;5477;5466:9;5459:21;5509:6;5503:13;5552:6;5547:2;5536:9;5532:18;5525:34;5577:1;5587:140;5601:6;5598:1;5595:13;5587:140;;;5696:14;;;5692:23;;5686:30;5662:17;;;5681:2;5658:26;5651:66;5616:10;;5587:140;;;5745:6;5742:1;5739:13;5736:91;;;5815:1;5810:2;5801:6;5790:9;5786:22;5782:31;5775:42;5736:91;-1:-1:-1;5888:2:1;5867:15;-1:-1:-1;;5863:29:1;5848:45;;;;5895:2;5844:54;;5307:597;-1:-1:-1;;;5307:597:1:o;9688:401::-;9890:2;9872:21;;;9929:2;9909:18;;;9902:30;9968:34;9963:2;9948:18;;9941:62;-1:-1:-1;;;10034:2:1;10019:18;;10012:35;10079:3;10064:19;;9688:401::o;11545:582::-;11844:6;11833:9;11826:25;11887:6;11882:2;11871:9;11867:18;11860:34;11930:3;11925:2;11914:9;11910:18;11903:31;11807:4;11951:57;12003:3;11992:9;11988:19;11980:6;11951:57;:::i;:::-;-1:-1:-1;;;;;12044:32:1;;;;12039:2;12024:18;;12017:60;-1:-1:-1;12108:3:1;12093:19;12086:35;11943:65;11545:582;-1:-1:-1;;;11545:582:1:o;12645:128::-;12685:3;12716:1;12712:6;12709:1;12706:13;12703:39;;;12722:18;;:::i;:::-;-1:-1:-1;12758:9:1;;12645:128::o;12778:204::-;12816:3;12852:4;12849:1;12845:12;12884:4;12881:1;12877:12;12919:3;12913:4;12909:14;12904:3;12901:23;12898:49;;;12927:18;;:::i;:::-;12963:13;;12778:204;-1:-1:-1;;;12778:204:1:o;12987:217::-;13027:1;13053;13043:132;;13097:10;13092:3;13088:20;13085:1;13078:31;13132:4;13129:1;13122:15;13160:4;13157:1;13150:15;13043:132;-1:-1:-1;13189:9:1;;12987:217::o;13209:168::-;13249:7;13315:1;13311;13307:6;13303:14;13300:1;13297:21;13292:1;13285:9;13278:17;13274:45;13271:71;;;13322:18;;:::i;:::-;-1:-1:-1;13362:9:1;;13209:168::o;13382:238::-;13420:7;13460:4;13457:1;13453:12;13492:4;13489:1;13485:12;13552:3;13546:4;13542:14;13537:3;13534:23;13527:3;13520:11;13513:19;13509:49;13506:75;;;13561:18;;:::i;:::-;13601:13;;13382:238;-1:-1:-1;;;13382:238:1:o;13625:125::-;13665:4;13693:1;13690;13687:8;13684:34;;;13698:18;;:::i;:::-;-1:-1:-1;13735:9:1;;13625:125::o;13755:135::-;13794:3;-1:-1:-1;;13815:17:1;;13812:43;;;13835:18;;:::i;:::-;-1:-1:-1;13882:1:1;13871:13;;13755:135::o;13895:127::-;13956:10;13951:3;13947:20;13944:1;13937:31;13987:4;13984:1;13977:15;14011:4;14008:1;14001:15;14027:127;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14291:131;-1:-1:-1;;;;;14366:31:1;;14356:42;;14346:70;;14412:1;14409;14402:12;14346:70;14291:131;:::o

Swarm Source

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