ETH Price: $3,173.63 (-7.66%)
Gas: 9 Gwei

Token

Akemashi Inu (AKEMASHI)
 

Overview

Max Total Supply

1,000,000 AKEMASHI

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,265.88880000000001039 AKEMASHI

Value
$0.00
0xd34c67c72bda980aee4fe669c1f31228ba69e826
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:
AkemashiInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-29
*/

/*
Telegram: https://t.me/AkemashiInu
Web: https://akemashiinu.com/
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);  
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}



library Address {
   
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
   
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


contract Ownable 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 returns (address) {
        return _owner;
    }

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

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

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


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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}



interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



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

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

    mapping (address => bool) private _isExcludedFromFee;

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

    mapping(address => bool) private _isSniper;
    address[] private _confirmedSnipers;
    
    bool public tradingOpen = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public maxWalletamount = 10000 * 10**18;
    uint256 public launchTime;
    address public marketingWallet = payable(0x88dB337B37DafDE33caF67bD4c2760217C688941);
	address public devWallet = payable(0xb4B2cA4F9c69F9cAfdB0a30731df665A579f89b1);

    string private _name = "Akemashi Inu";
    string private _symbol = "AKEMASHI";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 1000000 * 10**18;
    uint256 public numTokensSellToAddToLiquidity = 100 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view 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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setMarketingWallet(address marketingwalletAddress) public onlyOwner {
        marketingWallet = marketingwalletAddress;
    }

    function setDevWallet(address devwalletAddress) public onlyOwner {
        devWallet = devwalletAddress;
    }

    function normalizeTxAmount() external onlyOwner() {
        _maxTxAmount = 1000000 * 10**18;
    }
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**18;
    }
    
    function clearStuckBalance() public {
        payable(marketingWallet).transfer(address(this).balance);
    }
    
    function enabletrading() external onlyOwner() {
        tradingOpen = true;
        launchTime = block.timestamp;
    }
    
    function setMaxWalletAmount(uint256 _maxwalletamount) public onlyOwner {
        require(_maxwalletamount > 5000 * 10**18, "Max wallet amount should be greater than 0.5% of the total supply");
        maxWalletamount = _maxwalletamount;
    }

    function clearERCtokens(IERC20 tokenAddress) external {
        tokenAddress.transfer(marketingWallet, tokenAddress.balanceOf(address(this)));
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    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 {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], 'You have no power here!');
        require(!_isSniper[msg.sender], 'You have no power here!');
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if (to != owner() && from == uniswapV2Pair) {
            uint256 BalanceRecepient = balanceOf(to);
            require(
                BalanceRecepient + amount <= maxWalletamount,
                "Transfer exceeds maximum wallet token amount."
            );
        }
 
        // buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, 'Trading not yet enabled.');

            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }
    
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = balanceOf(address(this));
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }


    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into liquidity, marketing and dev quotas
		
        uint256 convertQuota = contractTokenBalance.div(6).mul(5);
        uint256 liquHalf = contractTokenBalance.sub(convertQuota);

		
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
		
        swapTokensForEth(convertQuota); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.div(5).mul(2);
        payable(marketingWallet).transfer(marketingshare);
		uint256 afterMarketBalance = newBalance.sub(marketingshare);
		uint256 devshare = afterMarketBalance.div(3).mul(2);
		payable(devWallet).transfer(devshare);
		uint256 afterDevBalance = afterMarketBalance.sub(devshare);
		
        
        // add liquidity to uniswap
        addLiquidity(liquHalf, afterDevBalance);
        
        emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            marketingWallet,
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!tradingOpen){
            require(sender == owner()); // only owner allowed to trade or add liquidity
        }
        
        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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function _amnestySniper(address account) external onlyOwner {
        require(_isSniper[account], 'Account is not blacklisted');
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

}

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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"clearERCtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enabletrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalizeTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devwalletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingwalletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxwalletamount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009805460ff1916905569d3c21bcecceda1000000600a8190556200002c90600019620004ab565b6200003a90600019620004ce565b600b5569021e19e0c9bab2400000600d55600f80546001600160a01b03199081167388db337b37dafde33caf67bd4c2760217c688941179091556010805490911673b4b2ca4f9c69f9cafdb0a30731df665a579f89b117905560408051808201909152600c8082526b416b656d6173686920496e7560a01b6020909201918252620000c89160119162000405565b5060408051808201909152600880825267414b454d4153484960c01b6020909201918252620000fa9160129162000405565b506013805460ff1916601217905560006014819055601555600c60168190556017556018805461ff00191661010017905569d3c21bcecceda100000060195568056bc75e2d63100000601a553480156200015357600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001f757600080fd5b505afa1580156200020c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002329190620004f4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b69190620004f4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ff57600080fd5b505af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a9190620004f4565b6001600160a01b0390811660a0528116608052600160046000620003666000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003ae3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003f691815260200190565b60405180910390a35062000563565b828054620004139062000526565b90600052602060002090601f01602090048101928262000437576000855562000482565b82601f106200045257805160ff191683800117855562000482565b8280016001018555821562000482579182015b828111156200048257825182559160200191906001019062000465565b506200049092915062000494565b5090565b5b8082111562000490576000815560010162000495565b600082620004c957634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620004ef57634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200050757600080fd5b81516001600160a01b03811681146200051f57600080fd5b9392505050565b600181811c908216806200053b57607f821691505b602082108114156200055d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612fe7620005c86000396000818161058d01528181611ada01528181611b960152611d2e01526000818161035d01528181611bd20152818161259b015281816126630152818161269f0152818161271101526127790152612fe76000f3fe60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063d12a76881161007a578063d12a7688146107f4578063dc4b7f2a1461080a578063dd62ed3e14610820578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b41146107555780639b457b6d1461076a578063a457c2d71461077f578063a9059cbb1461079f578063ade176f3146107bf578063c49b9a80146107d457600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c0565b6040516102ba9190612b9f565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c09565b610952565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c35565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600c545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600a5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c35565b610969565b005b3480156103da57600080fd5b506102e36103e9366004612c52565b6109be565b3480156103fa57600080fd5b506103cc610409366004612c93565b610a27565b34801561041a57600080fd5b506103cc610429366004612c35565b610adf565b34801561043a57600080fd5b506103cc610449366004612c93565b610be7565b34801561045a57600080fd5b5061033d610469366004612c93565b610c29565b34801561047a57600080fd5b5060135460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c35565b610cad565b3480156104bc57600080fd5b506103cc610e57565b3480156104d157600080fd5b506103cc6104e0366004612c35565b610e93565b3480156104f157600080fd5b506102e3610500366004612c09565b611020565b34801561051157600080fd5b5061033d60145481565b34801561052757600080fd5b506103cc610536366004612c93565b611056565b34801561054757600080fd5b506103cc610556366004612c35565b611140565b34801561056757600080fd5b5061033d610576366004612cba565b61118e565b34801561058757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bb57600080fd5b506018546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c35565b61121b565b3480156105fa57600080fd5b506102e3610609366004612c35565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c35565b61136e565b34801561065357600080fd5b5061033d60165481565b34801561066957600080fd5b5061033d610678366004612c35565b6113ba565b34801561068957600080fd5b506103cc611419565b34801561069e57600080fd5b50600f5461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600e5481565b3480156106d457600080fd5b5061033d60195481565b3480156106ea57600080fd5b506102e36106f9366004612c35565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b5060105461037f906001600160a01b031681565b34801561076157600080fd5b506102ad61148d565b34801561077657600080fd5b506103cc61149c565b34801561078b57600080fd5b506102e361079a366004612c09565b6114d9565b3480156107ab57600080fd5b506102e36107ba366004612c09565b611528565b3480156107cb57600080fd5b506103cc611535565b3480156107e057600080fd5b506103cc6107ef366004612cea565b61156f565b34801561080057600080fd5b5061033d601a5481565b34801561081657600080fd5b5061033d600d5481565b34801561082c57600080fd5b5061033d61083b366004612d07565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561087257600080fd5b506103cc610881366004612c35565b6115ed565b34801561089257600080fd5b506103cc6108a1366004612c35565b611638565b3480156108b257600080fd5b506009546102e39060ff1681565b6060601180546108cf90612d35565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb90612d35565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b600061095f338484611722565b5060015b92915050565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161099390612d70565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006109cb848484611846565b610a1d8433610a1885604051806060016040528060288152602001612f65602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611dee565b611722565b5060019392505050565b6000546001600160a01b03163314610a515760405162461bcd60e51b815260040161099390612d70565b69010f0cf064dd592000008111610ada5760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a401610993565b600d55565b600f546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b2d57600080fd5b505afa158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b659190612da5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be39190612dbe565b5050565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260040161099390612d70565b610c2381670de0b6b3a7640000612df1565b601a5550565b6000600b54821115610c905760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610993565b6000610c9a611e28565b9050610ca68382611e4b565b9392505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526007602052604090205460ff16610d3f5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610993565b60005b600854811015610be357816001600160a01b031660088281548110610d6957610d69612e10565b6000918252602090912001546001600160a01b03161415610e455760088054610d9490600190612e26565b81548110610da457610da4612e10565b600091825260209091200154600880546001600160a01b039092169183908110610dd057610dd0612e10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e1f57610e1f612e3d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e4f81612e53565b915050610d42565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e90573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ebd5760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526005602052604090205460ff16610f255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610993565b60005b600654811015610be357816001600160a01b031660068281548110610f4f57610f4f612e10565b6000918252602090912001546001600160a01b0316141561100e5760068054610f7a90600190612e26565b81548110610f8a57610f8a612e10565b600091825260209091200154600680546001600160a01b039092169183908110610fb657610fb6612e10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e1f57610e1f612e3d565b8061101881612e53565b915050610f28565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161095f918590610a189086611e8d565b3360008181526005602052604090205460ff16156110cb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610993565b60006110d683611eec565b505050506001600160a01b03841660009081526001602052604090205491925061110291905082611f3b565b6001600160a01b038316600090815260016020526040902055600b546111289082611f3b565b600b55600c546111389084611e8d565b600c55505050565b6000546001600160a01b0316331461116a5760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a548311156111e25760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610993565b816112015760006111f284611eec565b50939550610963945050505050565b600061120c84611eec565b50929550610963945050505050565b6000546001600160a01b031633146112455760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526005602052604090205460ff16156112ae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610993565b6001600160a01b03811660009081526001602052604090205415611308576001600160a01b0381166000908152600160205260409020546112ee90610c29565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113985760405162461bcd60e51b815260040161099390612d70565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113f757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096390610c29565b6000546001600160a01b031633146114435760405162461bcd60e51b815260040161099390612d70565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601280546108cf90612d35565b6000546001600160a01b031633146114c65760405162461bcd60e51b815260040161099390612d70565b6009805460ff1916600117905542600e55565b600061095f3384610a1885604051806060016040528060258152602001612f8d602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611dee565b600061095f338484611846565b6000546001600160a01b0316331461155f5760405162461bcd60e51b815260040161099390612d70565b69d3c21bcecceda1000000601955565b6000546001600160a01b031633146115995760405162461bcd60e51b815260040161099390612d70565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115e290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116175760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146116625760405162461bcd60e51b815260040161099390612d70565b6001600160a01b0381166116c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610993565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610993565b6001600160a01b0382166117e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610993565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610993565b6001600160a01b03821661190c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610993565b6000811161196e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610993565b6001600160a01b03821660009081526007602052604090205460ff16156119d15760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610993565b3360009081526007602052604090205460ff1615611a2b5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610993565b6000546001600160a01b03848116911614801590611a5757506000546001600160a01b03838116911614155b15611abf57601954811115611abf5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610993565b6000546001600160a01b03838116911614801590611b0e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611b94576000611b1e836113ba565b600d54909150611b2e8383612e6e565b1115611b925760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b6064820152608401610993565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611c0757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c2c57506001600160a01b03821660009081526004602052604090205460ff16155b15611cf35760095460ff16611c835760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610993565b600e54421415611cf3576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611cfe306113ba565b90506019548110611d0e57506019545b601a5481108015908190611d25575060185460ff16155b8015611d6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611d765750601854610100900460ff165b15611d8f57611d84306113ba565b9150611d8f82611f7d565b6001600160a01b03851660009081526004602052604090205460019060ff1680611dd157506001600160a01b03851660009081526004602052604090205460ff165b15611dda575060005b611de6868686846120e2565b505050505050565b60008184841115611e125760405162461bcd60e51b81526004016109939190612b9f565b506000611e1f8486612e26565b95945050505050565b6000806000611e35612283565b9092509050611e448282611e4b565b9250505090565b6000610ca683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612405565b600080611e9a8385612e6e565b905083811015610ca65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610993565b6000806000806000806000806000611f038a612433565b9250925092506000806000611f218d8686611f1c611e28565b612475565b919f909e50909c50959a5093985091965092945050505050565b6000610ca683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dee565b6018805460ff191660011790556000611fa26005611f9c846006611e4b565b906124c5565b90506000611fb08383611f3b565b905047611fbc83612544565b6000611fc84783611f3b565b90506000611fdc6002611f9c846005611e4b565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612017573d6000803e3d6000fd5b5060006120248383611f3b565b905060006120386002611f9c846003611e4b565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612073573d6000803e3d6000fd5b5060006120808383611f3b565b905061208c878261270b565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff1916905550505050505050565b60095460ff16612106576000546001600160a01b0385811691161461210657600080fd5b8061211357612113612800565b6001600160a01b03841660009081526005602052604090205460ff16801561215457506001600160a01b03831660009081526005602052604090205460ff16155b156121695761216484848461282e565b612267565b6001600160a01b03841660009081526005602052604090205460ff161580156121aa57506001600160a01b03831660009081526005602052604090205460ff165b156121ba57612164848484612954565b6001600160a01b03841660009081526005602052604090205460ff161580156121fc57506001600160a01b03831660009081526005602052604090205460ff16155b1561220c576121648484846129fd565b6001600160a01b03841660009081526005602052604090205460ff16801561224c57506001600160a01b03831660009081526005602052604090205460ff165b1561225c57612164848484612a41565b6122678484846129fd565b8061227d5761227d601554601455601754601655565b50505050565b600b54600a546000918291825b6006548110156123d5578260016000600684815481106122b2576122b2612e10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061231d57508160026000600684815481106122f6576122f6612e10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561233357600b54600a54945094505050509091565b612379600160006006848154811061234d5761234d612e10565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f3b565b92506123c1600260006006848154811061239557612395612e10565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f3b565b9150806123cd81612e53565b915050612290565b50600a54600b546123e591611e4b565b8210156123fc57600b54600a549350935050509091565b90939092509050565b600081836124265760405162461bcd60e51b81526004016109939190612b9f565b506000611e1f8486612e86565b60008060008061244285612ab4565b9050600061244f86612ad6565b90506000612467826124618986611f3b565b90611f3b565b979296509094509092505050565b600080808061248488866124c5565b9050600061249288876124c5565b905060006124a088886124c5565b905060006124b2826124618686611f3b565b939b939a50919850919650505050505050565b6000826124d457506000610963565b60006124e08385612df1565b9050826124ed8583612e86565b14610ca65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610993565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257957612579612e10565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262a9190612ea8565b8160018151811061263d5761263d612e10565b60200260200101906001600160a01b031690816001600160a01b031681525050612688307f000000000000000000000000000000000000000000000000000000000000000084611722565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126dd908590600090869030904290600401612ec5565b600060405180830381600087803b1580156126f757600080fd5b505af1158015611de6573d6000803e3d6000fd5b612736307f000000000000000000000000000000000000000000000000000000000000000084611722565b600f5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b1580156127c057600080fd5b505af11580156127d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127f99190612f36565b5050505050565b6014541580156128105750601654155b1561281757565b601480546015556016805460175560009182905555565b60008060008060008061284087611eec565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128729088611f3b565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128a19087611f3b565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128d09086611e8d565b6001600160a01b0389166000908152600160205260409020556128f281612af2565b6128fc8483612b7b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161294191815260200190565b60405180910390a3505050505050505050565b60008060008060008061296687611eec565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129989087611f3b565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129ce9084611e8d565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128d09086611e8d565b600080600080600080612a0f87611eec565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128a19087611f3b565b600080600080600080612a5387611eec565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612a859088611f3b565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129989087611f3b565b60006109636064612ad0601454856124c590919063ffffffff16565b90611e4b565b60006109636064612ad0601654856124c590919063ffffffff16565b6000612afc611e28565b90506000612b0a83836124c5565b30600090815260016020526040902054909150612b279082611e8d565b3060009081526001602090815260408083209390935560059052205460ff1615612b765730600090815260026020526040902054612b659084611e8d565b306000908152600260205260409020555b505050565b600b54612b889083611f3b565b600b55600c54612b989082611e8d565b600c555050565b600060208083528351808285015260005b81811015612bcc57858101830151858201604001528201612bb0565b81811115612bde576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9057600080fd5b60008060408385031215612c1c57600080fd5b8235612c2781612bf4565b946020939093013593505050565b600060208284031215612c4757600080fd5b8135610ca681612bf4565b600080600060608486031215612c6757600080fd5b8335612c7281612bf4565b92506020840135612c8281612bf4565b929592945050506040919091013590565b600060208284031215612ca557600080fd5b5035919050565b8015158114610e9057600080fd5b60008060408385031215612ccd57600080fd5b823591506020830135612cdf81612cac565b809150509250929050565b600060208284031215612cfc57600080fd5b8135610ca681612cac565b60008060408385031215612d1a57600080fd5b8235612d2581612bf4565b91506020830135612cdf81612bf4565b600181811c90821680612d4957607f821691505b60208210811415612d6a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612db757600080fd5b5051919050565b600060208284031215612dd057600080fd5b8151610ca681612cac565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e0b57612e0b612ddb565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e3857612e38612ddb565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e6757612e67612ddb565b5060010190565b60008219821115612e8157612e81612ddb565b500190565b600082612ea357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612eba57600080fd5b8151610ca681612bf4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f155784516001600160a01b031683529383019391830191600101612ef0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f4b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004cc91c2fddda2c018d8a934d8376b6d26017d0042b89ac318939e77c7add32764736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063d12a76881161007a578063d12a7688146107f4578063dc4b7f2a1461080a578063dd62ed3e14610820578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b41146107555780639b457b6d1461076a578063a457c2d71461077f578063a9059cbb1461079f578063ade176f3146107bf578063c49b9a80146107d457600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c0565b6040516102ba9190612b9f565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c09565b610952565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c35565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600c545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600a5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c35565b610969565b005b3480156103da57600080fd5b506102e36103e9366004612c52565b6109be565b3480156103fa57600080fd5b506103cc610409366004612c93565b610a27565b34801561041a57600080fd5b506103cc610429366004612c35565b610adf565b34801561043a57600080fd5b506103cc610449366004612c93565b610be7565b34801561045a57600080fd5b5061033d610469366004612c93565b610c29565b34801561047a57600080fd5b5060135460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c35565b610cad565b3480156104bc57600080fd5b506103cc610e57565b3480156104d157600080fd5b506103cc6104e0366004612c35565b610e93565b3480156104f157600080fd5b506102e3610500366004612c09565b611020565b34801561051157600080fd5b5061033d60145481565b34801561052757600080fd5b506103cc610536366004612c93565b611056565b34801561054757600080fd5b506103cc610556366004612c35565b611140565b34801561056757600080fd5b5061033d610576366004612cba565b61118e565b34801561058757600080fd5b5061037f7f0000000000000000000000009c1106cfb95f0e223248e10f96b37951514d8d2681565b3480156105bb57600080fd5b506018546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c35565b61121b565b3480156105fa57600080fd5b506102e3610609366004612c35565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c35565b61136e565b34801561065357600080fd5b5061033d60165481565b34801561066957600080fd5b5061033d610678366004612c35565b6113ba565b34801561068957600080fd5b506103cc611419565b34801561069e57600080fd5b50600f5461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600e5481565b3480156106d457600080fd5b5061033d60195481565b3480156106ea57600080fd5b506102e36106f9366004612c35565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b5060105461037f906001600160a01b031681565b34801561076157600080fd5b506102ad61148d565b34801561077657600080fd5b506103cc61149c565b34801561078b57600080fd5b506102e361079a366004612c09565b6114d9565b3480156107ab57600080fd5b506102e36107ba366004612c09565b611528565b3480156107cb57600080fd5b506103cc611535565b3480156107e057600080fd5b506103cc6107ef366004612cea565b61156f565b34801561080057600080fd5b5061033d601a5481565b34801561081657600080fd5b5061033d600d5481565b34801561082c57600080fd5b5061033d61083b366004612d07565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561087257600080fd5b506103cc610881366004612c35565b6115ed565b34801561089257600080fd5b506103cc6108a1366004612c35565b611638565b3480156108b257600080fd5b506009546102e39060ff1681565b6060601180546108cf90612d35565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb90612d35565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b600061095f338484611722565b5060015b92915050565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161099390612d70565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006109cb848484611846565b610a1d8433610a1885604051806060016040528060288152602001612f65602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611dee565b611722565b5060019392505050565b6000546001600160a01b03163314610a515760405162461bcd60e51b815260040161099390612d70565b69010f0cf064dd592000008111610ada5760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a401610993565b600d55565b600f546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b2d57600080fd5b505afa158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b659190612da5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be39190612dbe565b5050565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260040161099390612d70565b610c2381670de0b6b3a7640000612df1565b601a5550565b6000600b54821115610c905760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610993565b6000610c9a611e28565b9050610ca68382611e4b565b9392505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526007602052604090205460ff16610d3f5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610993565b60005b600854811015610be357816001600160a01b031660088281548110610d6957610d69612e10565b6000918252602090912001546001600160a01b03161415610e455760088054610d9490600190612e26565b81548110610da457610da4612e10565b600091825260209091200154600880546001600160a01b039092169183908110610dd057610dd0612e10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e1f57610e1f612e3d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e4f81612e53565b915050610d42565b600f546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e90573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ebd5760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526005602052604090205460ff16610f255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610993565b60005b600654811015610be357816001600160a01b031660068281548110610f4f57610f4f612e10565b6000918252602090912001546001600160a01b0316141561100e5760068054610f7a90600190612e26565b81548110610f8a57610f8a612e10565b600091825260209091200154600680546001600160a01b039092169183908110610fb657610fb6612e10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e1f57610e1f612e3d565b8061101881612e53565b915050610f28565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161095f918590610a189086611e8d565b3360008181526005602052604090205460ff16156110cb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610993565b60006110d683611eec565b505050506001600160a01b03841660009081526001602052604090205491925061110291905082611f3b565b6001600160a01b038316600090815260016020526040902055600b546111289082611f3b565b600b55600c546111389084611e8d565b600c55505050565b6000546001600160a01b0316331461116a5760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a548311156111e25760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610993565b816112015760006111f284611eec565b50939550610963945050505050565b600061120c84611eec565b50929550610963945050505050565b6000546001600160a01b031633146112455760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03811660009081526005602052604090205460ff16156112ae5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610993565b6001600160a01b03811660009081526001602052604090205415611308576001600160a01b0381166000908152600160205260409020546112ee90610c29565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113985760405162461bcd60e51b815260040161099390612d70565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113f757506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096390610c29565b6000546001600160a01b031633146114435760405162461bcd60e51b815260040161099390612d70565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601280546108cf90612d35565b6000546001600160a01b031633146114c65760405162461bcd60e51b815260040161099390612d70565b6009805460ff1916600117905542600e55565b600061095f3384610a1885604051806060016040528060258152602001612f8d602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611dee565b600061095f338484611846565b6000546001600160a01b0316331461155f5760405162461bcd60e51b815260040161099390612d70565b69d3c21bcecceda1000000601955565b6000546001600160a01b031633146115995760405162461bcd60e51b815260040161099390612d70565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115e290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116175760405162461bcd60e51b815260040161099390612d70565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146116625760405162461bcd60e51b815260040161099390612d70565b6001600160a01b0381166116c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610993565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610993565b6001600160a01b0382166117e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610993565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610993565b6001600160a01b03821661190c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610993565b6000811161196e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610993565b6001600160a01b03821660009081526007602052604090205460ff16156119d15760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610993565b3360009081526007602052604090205460ff1615611a2b5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610993565b6000546001600160a01b03848116911614801590611a5757506000546001600160a01b03838116911614155b15611abf57601954811115611abf5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610993565b6000546001600160a01b03838116911614801590611b0e57507f0000000000000000000000009c1106cfb95f0e223248e10f96b37951514d8d266001600160a01b0316836001600160a01b0316145b15611b94576000611b1e836113ba565b600d54909150611b2e8383612e6e565b1115611b925760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b6064820152608401610993565b505b7f0000000000000000000000009c1106cfb95f0e223248e10f96b37951514d8d266001600160a01b0316836001600160a01b0316148015611c0757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c2c57506001600160a01b03821660009081526004602052604090205460ff16155b15611cf35760095460ff16611c835760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610993565b600e54421415611cf3576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611cfe306113ba565b90506019548110611d0e57506019545b601a5481108015908190611d25575060185460ff16155b8015611d6357507f0000000000000000000000009c1106cfb95f0e223248e10f96b37951514d8d266001600160a01b0316856001600160a01b031614155b8015611d765750601854610100900460ff165b15611d8f57611d84306113ba565b9150611d8f82611f7d565b6001600160a01b03851660009081526004602052604090205460019060ff1680611dd157506001600160a01b03851660009081526004602052604090205460ff165b15611dda575060005b611de6868686846120e2565b505050505050565b60008184841115611e125760405162461bcd60e51b81526004016109939190612b9f565b506000611e1f8486612e26565b95945050505050565b6000806000611e35612283565b9092509050611e448282611e4b565b9250505090565b6000610ca683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612405565b600080611e9a8385612e6e565b905083811015610ca65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610993565b6000806000806000806000806000611f038a612433565b9250925092506000806000611f218d8686611f1c611e28565b612475565b919f909e50909c50959a5093985091965092945050505050565b6000610ca683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dee565b6018805460ff191660011790556000611fa26005611f9c846006611e4b565b906124c5565b90506000611fb08383611f3b565b905047611fbc83612544565b6000611fc84783611f3b565b90506000611fdc6002611f9c846005611e4b565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612017573d6000803e3d6000fd5b5060006120248383611f3b565b905060006120386002611f9c846003611e4b565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612073573d6000803e3d6000fd5b5060006120808383611f3b565b905061208c878261270b565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff1916905550505050505050565b60095460ff16612106576000546001600160a01b0385811691161461210657600080fd5b8061211357612113612800565b6001600160a01b03841660009081526005602052604090205460ff16801561215457506001600160a01b03831660009081526005602052604090205460ff16155b156121695761216484848461282e565b612267565b6001600160a01b03841660009081526005602052604090205460ff161580156121aa57506001600160a01b03831660009081526005602052604090205460ff165b156121ba57612164848484612954565b6001600160a01b03841660009081526005602052604090205460ff161580156121fc57506001600160a01b03831660009081526005602052604090205460ff16155b1561220c576121648484846129fd565b6001600160a01b03841660009081526005602052604090205460ff16801561224c57506001600160a01b03831660009081526005602052604090205460ff165b1561225c57612164848484612a41565b6122678484846129fd565b8061227d5761227d601554601455601754601655565b50505050565b600b54600a546000918291825b6006548110156123d5578260016000600684815481106122b2576122b2612e10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061231d57508160026000600684815481106122f6576122f6612e10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561233357600b54600a54945094505050509091565b612379600160006006848154811061234d5761234d612e10565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f3b565b92506123c1600260006006848154811061239557612395612e10565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f3b565b9150806123cd81612e53565b915050612290565b50600a54600b546123e591611e4b565b8210156123fc57600b54600a549350935050509091565b90939092509050565b600081836124265760405162461bcd60e51b81526004016109939190612b9f565b506000611e1f8486612e86565b60008060008061244285612ab4565b9050600061244f86612ad6565b90506000612467826124618986611f3b565b90611f3b565b979296509094509092505050565b600080808061248488866124c5565b9050600061249288876124c5565b905060006124a088886124c5565b905060006124b2826124618686611f3b565b939b939a50919850919650505050505050565b6000826124d457506000610963565b60006124e08385612df1565b9050826124ed8583612e86565b14610ca65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610993565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257957612579612e10565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262a9190612ea8565b8160018151811061263d5761263d612e10565b60200260200101906001600160a01b031690816001600160a01b031681525050612688307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611722565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126dd908590600090869030904290600401612ec5565b600060405180830381600087803b1580156126f757600080fd5b505af1158015611de6573d6000803e3d6000fd5b612736307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611722565b600f5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b1580156127c057600080fd5b505af11580156127d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127f99190612f36565b5050505050565b6014541580156128105750601654155b1561281757565b601480546015556016805460175560009182905555565b60008060008060008061284087611eec565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506128729088611f3b565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128a19087611f3b565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128d09086611e8d565b6001600160a01b0389166000908152600160205260409020556128f281612af2565b6128fc8483612b7b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161294191815260200190565b60405180910390a3505050505050505050565b60008060008060008061296687611eec565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129989087611f3b565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129ce9084611e8d565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128d09086611e8d565b600080600080600080612a0f87611eec565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128a19087611f3b565b600080600080600080612a5387611eec565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612a859088611f3b565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129989087611f3b565b60006109636064612ad0601454856124c590919063ffffffff16565b90611e4b565b60006109636064612ad0601654856124c590919063ffffffff16565b6000612afc611e28565b90506000612b0a83836124c5565b30600090815260016020526040902054909150612b279082611e8d565b3060009081526001602090815260408083209390935560059052205460ff1615612b765730600090815260026020526040902054612b659084611e8d565b306000908152600260205260409020555b505050565b600b54612b889083611f3b565b600b55600c54612b989082611e8d565b600c555050565b600060208083528351808285015260005b81811015612bcc57858101830151858201604001528201612bb0565b81811115612bde576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9057600080fd5b60008060408385031215612c1c57600080fd5b8235612c2781612bf4565b946020939093013593505050565b600060208284031215612c4757600080fd5b8135610ca681612bf4565b600080600060608486031215612c6757600080fd5b8335612c7281612bf4565b92506020840135612c8281612bf4565b929592945050506040919091013590565b600060208284031215612ca557600080fd5b5035919050565b8015158114610e9057600080fd5b60008060408385031215612ccd57600080fd5b823591506020830135612cdf81612cac565b809150509250929050565b600060208284031215612cfc57600080fd5b8135610ca681612cac565b60008060408385031215612d1a57600080fd5b8235612d2581612bf4565b91506020830135612cdf81612bf4565b600181811c90821680612d4957607f821691505b60208210811415612d6a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612db757600080fd5b5051919050565b600060208284031215612dd057600080fd5b8151610ca681612cac565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e0b57612e0b612ddb565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e3857612e38612ddb565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e6757612e67612ddb565b5060010190565b60008219821115612e8157612e81612ddb565b500190565b600082612ea357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612eba57600080fd5b8151610ca681612bf4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f155784516001600160a01b031683529383019391830191600101612ef0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f4b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004cc91c2fddda2c018d8a934d8376b6d26017d0042b89ac318939e77c7add32764736f6c63430008090033

Deployed Bytecode Sourcemap

14682:20918:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17471:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18383:161;;;;;;;;;;-1:-1:-1;18383:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;18383:161:0;1072:187:1;35001:106:0;;;;;;;;;;-1:-1:-1;35001:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35081:18:0;35057:4;35081:18;;;:9;:18;;;;;;;;;35001:106;19504:87;;;;;;;;;;-1:-1:-1;19573:10:0;;19504:87;;;1662:25:1;;;1650:2;1635:18;19504:87:0;1516:177:1;16038:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;16038:51:0;1698:230:1;17748:95:0;;;;;;;;;;-1:-1:-1;17828:7:0;;17748:95;;22672:112;;;;;;;;;;-1:-1:-1;22672:112:0;;;;;:::i;:::-;;:::i;:::-;;18552:313;;;;;;;;;;-1:-1:-1;18552:313:0;;;;;:::i;:::-;;:::i;23334:245::-;;;;;;;;;;-1:-1:-1;23334:245:0;;;;;:::i;:::-;;:::i;23587:150::-;;;;;;;;;;-1:-1:-1;23587:150:0;;;;;:::i;:::-;;:::i;22904:161::-;;;;;;;;;;-1:-1:-1;22904:161:0;;;;;:::i;:::-;;:::i;20428:253::-;;;;;;;;;;-1:-1:-1;20428:253:0;;;;;:::i;:::-;;:::i;17657:83::-;;;;;;;;;;-1:-1:-1;17723:9:0;;17657:83;;17723:9;;;;2986:36:1;;2974:2;2959:18;17657:83:0;2844:184:1;35115:480:0;;;;;;;;;;-1:-1:-1;35115:480:0;;;;;:::i;:::-;;:::i;23077:111::-;;;;;;;;;;;;;:::i;21144:479::-;;;;;;;;;;-1:-1:-1;21144:479:0;;;;;:::i;:::-;;:::i;18873:218::-;;;;;;;;;;-1:-1:-1;18873:218:0;;;;;:::i;:::-;;:::i;15849:26::-;;;;;;;;;;;;;;;;19599:377;;;;;;;;;;-1:-1:-1;19599:377:0;;;;;:::i;:::-;;:::i;22287:111::-;;;;;;;;;;-1:-1:-1;22287:111:0;;;;;:::i;:::-;;:::i;19984:436::-;;;;;;;;;;-1:-1:-1;19984:436:0;;;;;:::i;:::-;;:::i;16096:38::-;;;;;;;;;;;;;;;16175:40;;;;;;;;;;-1:-1:-1;16175:40:0;;;;;;;;;;;20689:447;;;;;;;;;;-1:-1:-1;20689:447:0;;;;;:::i;:::-;;:::i;27233:123::-;;;;;;;;;;-1:-1:-1;27233:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;27321:27:0;27297:4;27321:27;;;:18;:27;;;;;;;;;27233:123;22528:136;;;;;;;;;;-1:-1:-1;22528:136:0;;;;;:::i;:::-;;:::i;15936:33::-;;;;;;;;;;;;;;;;17851:198;;;;;;;;;;-1:-1:-1;17851:198:0;;;;;:::i;:::-;;:::i;6294:148::-;;;;;;;;;;;;;:::i;15547:84::-;;;;;;;;;;-1:-1:-1;15547:84:0;;;;-1:-1:-1;;;;;15547:84:0;;;15515:25;;;;;;;;;;;;;;;;16228:46;;;;;;;;;;;;;;;;19376:120;;;;;;;;;;-1:-1:-1;19376:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19468:20:0;19444:4;19468:20;;;:11;:20;;;;;;;;;19376:120;6080:79;;;;;;;;;;-1:-1:-1;6118:7:0;6145:6;-1:-1:-1;;;;;6145:6:0;6080:79;;15635:78;;;;;;;;;;-1:-1:-1;15635:78:0;;;;-1:-1:-1;;;;;15635:78:0;;;17562:87;;;;;;;;;;;;;:::i;23200:122::-;;;;;;;;;;;;;:::i;19099:269::-;;;;;;;;;;-1:-1:-1;19099:269:0;;;;;:::i;:::-;;:::i;18057:167::-;;;;;;;;;;-1:-1:-1;18057:167:0;;;;;:::i;:::-;;:::i;22792:100::-;;;;;;;;;;;;;:::i;23749:171::-;;;;;;;;;;-1:-1:-1;23749:171:0;;;;;:::i;:::-;;:::i;16281:59::-;;;;;;;;;;;;;;;;15461:47;;;;;;;;;;;;;;;;18232:143;;;;;;;;;;-1:-1:-1;18232:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18340:18:0;;;18313:7;18340:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18232:143;22410:110;;;;;;;;;;-1:-1:-1;22410:110:0;;;;;:::i;:::-;;:::i;6450:244::-;;;;;;;;;;-1:-1:-1;6450:244:0;;;;;:::i;:::-;;:::i;15231:31::-;;;;;;;;;;-1:-1:-1;15231:31:0;;;;;;;;17471:83;17508:13;17541:5;17534:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17471:83;:::o;18383:161::-;18458:4;18475:39;2496:10;18498:7;18507:6;18475:8;:39::i;:::-;-1:-1:-1;18532:4:0;18383:161;;;;;:::o;22672:112::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;;;;;;;;;22748:9:::1;:28:::0;;-1:-1:-1;;;;;;22748:28:0::1;-1:-1:-1::0;;;;;22748:28:0;;;::::1;::::0;;;::::1;::::0;;22672:112::o;18552:313::-;18650:4;18667:36;18677:6;18685:9;18696:6;18667:9;:36::i;:::-;18714:121;18723:6;2496:10;18745:89;18783:6;18745:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18745:19:0;;;;;;:11;:19;;;;;;;;2496:10;18745:33;;;;;;;;;;:37;:89::i;:::-;18714:8;:121::i;:::-;-1:-1:-1;18853:4:0;18552:313;;;;;:::o;23334:245::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;23443:13:::1;23424:16;:32;23416:110;;;::::0;-1:-1:-1;;;23416:110:0;;5265:2:1;23416:110:0::1;::::0;::::1;5247:21:1::0;5304:2;5284:18;;;5277:30;5343:34;5323:18;;;5316:62;5414:34;5394:18;;;5387:62;-1:-1:-1;;;5465:19:1;;;5458:32;5507:19;;23416:110:0::1;5063:469:1::0;23416:110:0::1;23537:15;:34:::0;23334:245::o;23587:150::-;23674:15;;23691:37;;-1:-1:-1;;;23691:37:0;;23722:4;23691:37;;;1871:51:1;-1:-1:-1;;;;;23652:21:0;;;;;;23674:15;;;23652:21;;23691:22;;1844:18:1;;23691:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23652:77;;-1:-1:-1;;;;;;23652:77:0;;;;;;;-1:-1:-1;;;;;5918:32:1;;;23652:77:0;;;5900:51:1;5967:18;;;5960:34;5873:18;;23652:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23587:150;:::o;22904:161::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;23029:28:::1;:19:::0;23051:6:::1;23029:28;:::i;:::-;22997:29;:60:::0;-1:-1:-1;22904:161:0:o;20428:253::-;20494:7;20533;;20522;:18;;20514:73;;;;-1:-1:-1;;;20514:73:0;;6762:2:1;20514:73:0;;;6744:21:1;6801:2;6781:18;;;6774:30;6840:34;6820:18;;;6813:62;-1:-1:-1;;;6891:18:1;;;6884:40;6941:19;;20514:73:0;6560:406:1;20514:73:0;20598:19;20621:10;:8;:10::i;:::-;20598:33;-1:-1:-1;20649:24:0;:7;20598:33;20649:11;:24::i;:::-;20642:31;20428:253;-1:-1:-1;;;20428:253:0:o;35115:480::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35194:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;35186:57;;;::::0;-1:-1:-1;;;35186:57:0;;7173:2:1;35186:57:0::1;::::0;::::1;7155:21:1::0;7212:2;7192:18;;;7185:30;7251:28;7231:18;;;7224:56;7297:18;;35186:57:0::1;6971:350:1::0;35186:57:0::1;35259:9;35254:334;35278:17;:24:::0;35274:28;::::1;35254:334;;;35352:7;-1:-1:-1::0;;;;;35328:31:0::1;:17;35346:1;35328:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35328:20:0::1;:31;35324:253;;;35403:17;35421:24:::0;;:28:::1;::::0;35448:1:::1;::::0;35421:28:::1;:::i;:::-;35403:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;35380:17:::1;:20:::0;;-1:-1:-1;;;;;35403:47:0;;::::1;::::0;35398:1;;35380:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;35380:70:0::1;-1:-1:-1::0;;;;;35380:70:0;;::::1;;::::0;;35469:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;35469:26:0::1;::::0;;35514:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35514:23:0;;;;;-1:-1:-1;;;;;;35514:23:0::1;::::0;;;;;23652:77;23587:150;:::o;35324:253::-:1;35304:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35254:334;;23077:111:::0;23132:15;;23124:56;;-1:-1:-1;;;;;23132:15:0;;;;23158:21;23124:56;;;;;23132:15;23124:56;23132:15;23124:56;23158:21;23132:15;23124:56;;;;;;;;;;;;;;;;;;;;;23077:111::o;21144:479::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21226:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21218:60;;;::::0;-1:-1:-1;;;21218:60:0;;8062:2:1;21218:60:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;21218:60:0::1;7860:351:1::0;21218:60:0::1;21294:9;21289:327;21313:9;:16:::0;21309:20;::::1;21289:327;;;21371:7;-1:-1:-1::0;;;;;21355:23:0::1;:9;21365:1;21355:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21355:12:0::1;:23;21351:254;;;21414:9;21424:16:::0;;:20:::1;::::0;21443:1:::1;::::0;21424:20:::1;:::i;:::-;21414:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21399:9:::1;:12:::0;;-1:-1:-1;;;;;21414:31:0;;::::1;::::0;21409:1;;21399:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21399:46:0::1;-1:-1:-1::0;;;;;21399:46:0;;::::1;;::::0;;21464:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21503:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21503:28:0::1;::::0;;21550:9:::1;:15:::0;;;::::1;;;;:::i;21351:254::-;21331:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21289:327;;18873:218:::0;2496:10;18961:4;19010:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19010:34:0;;;;;;;;;;18961:4;;18978:83;;19001:7;;19010:50;;19049:10;19010:38;:50::i;19599:377::-;2496:10;19651:14;19700:19;;;:11;:19;;;;;;;;19699:20;19691:77;;;;-1:-1:-1;;;19691:77:0;;8418:2:1;19691:77:0;;;8400:21:1;8457:2;8437:18;;;8430:30;8496:34;8476:18;;;8469:62;-1:-1:-1;;;8547:18:1;;;8540:42;8599:19;;19691:77:0;8216:408:1;19691:77:0;19780:15;19804:19;19815:7;19804:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19852:15:0;;;;;;:7;:15;;;;;;19779:44;;-1:-1:-1;19852:28:0;;:15;-1:-1:-1;19779:44:0;19852:19;:28::i;:::-;-1:-1:-1;;;;;19834:15:0;;;;;;:7;:15;;;;;:46;19901:7;;:20;;19913:7;19901:11;:20::i;:::-;19891:7;:30;19945:10;;:23;;19960:7;19945:14;:23::i;:::-;19932:10;:36;-1:-1:-1;;;19599:377:0:o;22287:111::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22356:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22356:34:0::1;22386:4;22356:34;::::0;;22287:111::o;19984:436::-;20074:7;20113;;20102;:18;;20094:62;;;;-1:-1:-1;;;20094:62:0;;8831:2:1;20094:62:0;;;8813:21:1;8870:2;8850:18;;;8843:30;8909:33;8889:18;;;8882:61;8960:18;;20094:62:0;8629:355:1;20094:62:0;20172:17;20167:246;;20207:15;20231:19;20242:7;20231:10;:19::i;:::-;-1:-1:-1;20206:44:0;;-1:-1:-1;20265:14:0;;-1:-1:-1;;;;;20265:14:0;20167:246;20314:23;20345:19;20356:7;20345:10;:19::i;:::-;-1:-1:-1;20312:52:0;;-1:-1:-1;20379:22:0;;-1:-1:-1;;;;;20379:22:0;20689:447;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20886:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20885:21;20877:61;;;::::0;-1:-1:-1;;;20877:61:0;;8062:2:1;20877:61:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;20877:61:0::1;7860:351:1::0;20877:61:0::1;-1:-1:-1::0;;;;;20952:16:0;::::1;20971:1;20952:16:::0;;;:7:::1;:16;::::0;;;;;:20;20949:108:::1;;-1:-1:-1::0;;;;;21028:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21008:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20989:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20949:108:::1;-1:-1:-1::0;;;;;21067:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21067:27:0::1;21090:4;21067:27:::0;;::::1;::::0;;;21105:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21105:23:0::1;::::0;;::::1;::::0;;20689:447::o;22528:136::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;22616:15:::1;:40:::0;;-1:-1:-1;;;;;;22616:40:0::1;-1:-1:-1::0;;;;;22616:40:0;;;::::1;::::0;;;::::1;::::0;;22528:136::o;17851:198::-;-1:-1:-1;;;;;17941:20:0;;17917:7;17941:20;;;:11;:20;;;;;;;;17937:49;;;-1:-1:-1;;;;;;17970:16:0;;;;;:7;:16;;;;;;;17851:198::o;17937:49::-;-1:-1:-1;;;;;18024:16:0;;;;;;:7;:16;;;;;;18004:37;;:19;:37::i;6294:148::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;6401:1:::1;6385:6:::0;;6364:40:::1;::::0;-1:-1:-1;;;;;6385:6:0;;::::1;::::0;6364:40:::1;::::0;6401:1;;6364:40:::1;6432:1;6415:19:::0;;-1:-1:-1;;;;;;6415:19:0::1;::::0;;6294:148::o;17562:87::-;17601:13;17634:7;17627:14;;;;;:::i;23200:122::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;23257:11:::1;:18:::0;;-1:-1:-1;;23257:18:0::1;23271:4;23257:18;::::0;;23299:15:::1;23286:10;:28:::0;23200:122::o;19099:269::-;19192:4;19209:129;2496:10;19232:7;19241:96;19280:15;19241:96;;;;;;;;;;;;;;;;;2496:10;19241:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19241:34:0;;;;;;;;;;;;:38;:96::i;18057:167::-;18135:4;18152:42;2496:10;18176:9;18187:6;18152:9;:42::i;22792:100::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;22868:16:::1;22853:12;:31:::0;22792:100::o;23749:171::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;23826:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;23826:32:0;;::::1;;::::0;;23874:38:::1;::::0;::::1;::::0;::::1;::::0;23850:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;23874:38:0::1;;;;;;;;23749:171:::0;:::o;22410:110::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22477:27:0::1;22507:5;22477:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22477:35:0::1;::::0;;22410:110::o;6450:244::-;6207:6;;-1:-1:-1;;;;;6207:6:0;2496:10;6207:22;6199:67;;;;-1:-1:-1;;;6199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6539:22:0;::::1;6531:73;;;::::0;-1:-1:-1;;;6531:73:0;;9191:2:1;6531:73:0::1;::::0;::::1;9173:21:1::0;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:36;9366:19;;6531:73:0::1;8989:402:1::0;6531:73:0::1;6641:6;::::0;;6620:38:::1;::::0;-1:-1:-1;;;;;6620:38:0;;::::1;::::0;6641:6;::::1;::::0;6620:38:::1;::::0;::::1;6669:6;:17:::0;;-1:-1:-1;;;;;;6669:17:0::1;-1:-1:-1::0;;;;;6669:17:0;;;::::1;::::0;;;::::1;::::0;;6450:244::o;27364:337::-;-1:-1:-1;;;;;27457:19:0;;27449:68;;;;-1:-1:-1;;;27449:68:0;;9598:2:1;27449:68:0;;;9580:21:1;9637:2;9617:18;;;9610:30;9676:34;9656:18;;;9649:62;-1:-1:-1;;;9727:18:1;;;9720:34;9771:19;;27449:68:0;9396:400:1;27449:68:0;-1:-1:-1;;;;;27536:21:0;;27528:68;;;;-1:-1:-1;;;27528:68:0;;10003:2:1;27528:68:0;;;9985:21:1;10042:2;10022:18;;;10015:30;10081:34;10061:18;;;10054:62;-1:-1:-1;;;10132:18:1;;;10125:32;10174:19;;27528:68:0;9801:398:1;27528:68:0;-1:-1:-1;;;;;27609:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27661:32;;1662:25:1;;;27661:32:0;;1635:18:1;27661:32:0;;;;;;;27364:337;;;:::o;27709:2323::-;-1:-1:-1;;;;;27831:18:0;;27823:68;;;;-1:-1:-1;;;27823:68:0;;10406:2:1;27823:68:0;;;10388:21:1;10445:2;10425:18;;;10418:30;10484:34;10464:18;;;10457:62;-1:-1:-1;;;10535:18:1;;;10528:35;10580:19;;27823:68:0;10204:401:1;27823:68:0;-1:-1:-1;;;;;27910:16:0;;27902:64;;;;-1:-1:-1;;;27902:64:0;;10812:2:1;27902:64:0;;;10794:21:1;10851:2;10831:18;;;10824:30;10890:34;10870:18;;;10863:62;-1:-1:-1;;;10941:18:1;;;10934:33;10984:19;;27902:64:0;10610:399:1;27902:64:0;27994:1;27985:6;:10;27977:64;;;;-1:-1:-1;;;27977:64:0;;11216:2:1;27977:64:0;;;11198:21:1;11255:2;11235:18;;;11228:30;11294:34;11274:18;;;11267:62;-1:-1:-1;;;11345:18:1;;;11338:39;11394:19;;27977:64:0;11014:405:1;27977:64:0;-1:-1:-1;;;;;28061:13:0;;;;;;:9;:13;;;;;;;;28060:14;28052:50;;;;-1:-1:-1;;;28052:50:0;;11626:2:1;28052:50:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28052:50:0;11424:347:1;28052:50:0;28132:10;28122:21;;;;:9;:21;;;;;;;;28121:22;28113:58;;;;-1:-1:-1;;;28113:58:0;;11626:2:1;28113:58:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28113:58:0;11424:347:1;28113:58:0;6118:7;6145:6;-1:-1:-1;;;;;28185:15:0;;;6145:6;;28185:15;;;;:32;;-1:-1:-1;6118:7:0;6145:6;-1:-1:-1;;;;;28204:13:0;;;6145:6;;28204:13;;28185:32;28182:125;;;28250:12;;28240:6;:22;;28232:75;;;;-1:-1:-1;;;28232:75:0;;11978:2:1;28232:75:0;;;11960:21:1;12017:2;11997:18;;;11990:30;12056:34;12036:18;;;12029:62;-1:-1:-1;;;12107:18:1;;;12100:38;12155:19;;28232:75:0;11776:404:1;28232:75:0;6118:7;6145:6;-1:-1:-1;;;;;28332:13:0;;;6145:6;;28332:13;;;;:38;;;28357:13;-1:-1:-1;;;;;28349:21:0;:4;-1:-1:-1;;;;;28349:21:0;;28332:38;28328:277;;;28387:24;28414:13;28424:2;28414:9;:13::i;:::-;28497:15;;28387:40;;-1:-1:-1;28468:25:0;28487:6;28387:40;28468:25;:::i;:::-;:44;;28442:151;;;;-1:-1:-1;;;28442:151:0;;12520:2:1;28442:151:0;;;12502:21:1;12559:2;12539:18;;;12532:30;12598:34;12578:18;;;12571:62;-1:-1:-1;;;12649:18:1;;;12642:43;12702:19;;28442:151:0;12318:409:1;28442:151:0;28372:233;28328:277;28646:13;-1:-1:-1;;;;;28638:21:0;:4;-1:-1:-1;;;;;28638:21:0;;:55;;;;;28677:15;-1:-1:-1;;;;;28663:30:0;:2;-1:-1:-1;;;;;28663:30:0;;;28638:55;:82;;;;-1:-1:-1;;;;;;28698:22:0;;;;;;:18;:22;;;;;;;;28697:23;28638:82;28634:337;;;28745:11;;;;28737:48;;;;-1:-1:-1;;;28737:48:0;;12934:2:1;28737:48:0;;;12916:21:1;12973:2;12953:18;;;12946:30;13012:26;12992:18;;;12985:54;13056:18;;28737:48:0;12732:348:1;28737:48:0;28848:10;;28829:15;:29;28825:135;;;-1:-1:-1;;;;;28879:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;28879:20:0;28895:4;28879:20;;;;;;28918:17;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;28918:26:0;;;;;;28825:135;28987:28;29018:24;29036:4;29018:9;:24::i;:::-;28987:55;;29090:12;;29066:20;:36;29063:112;;-1:-1:-1;29151:12:0;;29063:112;29246:29;;29222:53;;;;;;;29304;;-1:-1:-1;29341:16:0;;;;29340:17;29304:53;:91;;;;;29382:13;-1:-1:-1;;;;;29374:21:0;:4;-1:-1:-1;;;;;29374:21:0;;;29304:91;:129;;;;-1:-1:-1;29412:21:0;;;;;;;29304:129;29286:313;;;29483:24;29501:4;29483:9;:24::i;:::-;29460:47;;29551:36;29566:20;29551:14;:36::i;:::-;-1:-1:-1;;;;;29807:24:0;;29680:12;29807:24;;;:18;:24;;;;;;29695:4;;29807:24;;;:50;;-1:-1:-1;;;;;;29835:22:0;;;;;;:18;:22;;;;;;;;29807:50;29804:96;;;-1:-1:-1;29883:5:0;29804:96;29986:38;30001:4;30006:2;30009:6;30016:7;29986:14;:38::i;:::-;27812:2220;;;27709:2323;;;:::o;1189:192::-;1275:7;1311:12;1303:6;;;;1295:29;;;;-1:-1:-1;;;1295:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1335:9:0;1347:5;1351:1;1347;:5;:::i;:::-;1335:17;1189:192;-1:-1:-1;;;;;1189:192:0:o;25383:163::-;25424:7;25445:15;25462;25481:19;:17;:19::i;:::-;25444:56;;-1:-1:-1;25444:56:0;-1:-1:-1;25518:20:0;25444:56;;25518:11;:20::i;:::-;25511:27;;;;25383:163;:::o;1652:132::-;1710:7;1737:39;1741:1;1744;1737:39;;;;;;;;;;;;;;;;;:3;:39::i;855:181::-;913:7;;945:5;949:1;945;:5;:::i;:::-;933:17;;974:1;969;:6;;961:46;;;;-1:-1:-1;;;961:46:0;;13287:2:1;961:46:0;;;13269:21:1;13326:2;13306:18;;;13299:30;13365:29;13345:18;;;13338:57;13412:18;;961:46:0;13085:351:1;24181:419:0;24240:7;24249;24258;24267;24276;24285;24306:23;24331:12;24345:18;24367:20;24379:7;24367:11;:20::i;:::-;24305:82;;;;;;24399:15;24416:23;24441:12;24457:50;24469:7;24478:4;24484:10;24496;:8;:10::i;:::-;24457:11;:50::i;:::-;24398:109;;;;-1:-1:-1;24398:109:0;;-1:-1:-1;24558:15:0;;-1:-1:-1;24575:4:0;;-1:-1:-1;24581:10:0;;-1:-1:-1;24181:419:0;;-1:-1:-1;;;;;24181:419:0:o;1044:136::-;1102:7;1129:43;1133:1;1136;1129:43;;;;;;;;;;;;;;;;;:3;:43::i;30042:1091::-;16647:16;:23;;-1:-1:-1;;16647:23:0;16666:4;16647:23;;;:16;30234:34:::1;30266:1;30234:27;:20:::0;30259:1:::1;30234:24;:27::i;:::-;:31:::0;::::1;:34::i;:::-;30211:57:::0;-1:-1:-1;30279:16:0::1;30298:38;:20:::0;30211:57;30298:24:::1;:38::i;:::-;30279:57:::0;-1:-1:-1;30378:21:0::1;30448:30;30465:12:::0;30448:16:::1;:30::i;:::-;30540:18;30561:41;:21;30587:14:::0;30561:25:::1;:41::i;:::-;30540:62:::0;-1:-1:-1;30613:22:0::1;30638:24;30660:1;30638:17;30540:62:::0;30653:1:::1;30638:14;:17::i;:24::-;30681:15;::::0;30673:49:::1;::::0;30613;;-1:-1:-1;;;;;;30681:15:0::1;::::0;30673:49;::::1;;;::::0;30613;;30681:15:::1;30673:49:::0;30681:15;30673:49;30613;30681:15;30673:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30727:26:0::1;30756:30;:10:::0;30771:14;30756::::1;:30::i;:::-;30727:59:::0;-1:-1:-1;30791:16:0::1;30810:32;30840:1;30810:25;30727:59:::0;30833:1:::1;30810:22;:25::i;:32::-;30855:9;::::0;30847:37:::1;::::0;30791:51;;-1:-1:-1;;;;;;30855:9:0::1;::::0;30847:37;::::1;;;::::0;30791:51;;30855:9:::1;30847:37:::0;30855:9;30847:37;30791:51;30855:9;30847:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30889:23:0::1;30915:32;:18:::0;30938:8;30915:22:::1;:32::i;:::-;30889:58;;31009:39;31022:8;31032:15;31009:12;:39::i;:::-;31074:51;::::0;;13643:25:1;;;13699:2;13684:18;;13677:34;;;13727:18;;;13720:34;;;31074:51:0::1;::::0;13631:2:1;13616:18;31074:51:0::1;;;;;;;-1:-1:-1::0;;16693:16:0;:24;;-1:-1:-1;;16693:24:0;;;-1:-1:-1;;;;;;;30042:1091:0:o;32340:975::-;32451:11;;;;32447:117;;6118:7;6145:6;-1:-1:-1;;;;;32486:17:0;;;6145:6;;32486:17;32478:26;;;;;;32588:7;32584:40;;32610:14;:12;:14::i;:::-;-1:-1:-1;;;;;32653:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32677:22:0;;;;;;:11;:22;;;;;;;;32676:23;32653:46;32649:597;;;32716:48;32738:6;32746:9;32757:6;32716:21;:48::i;:::-;32649:597;;;-1:-1:-1;;;;;32787:19:0;;;;;;:11;:19;;;;;;;;32786:20;:46;;;;-1:-1:-1;;;;;;32810:22:0;;;;;;:11;:22;;;;;;;;32786:46;32782:464;;;32849:46;32869:6;32877:9;32888:6;32849:19;:46::i;32782:464::-;-1:-1:-1;;;;;32918:19:0;;;;;;:11;:19;;;;;;;;32917:20;:47;;;;-1:-1:-1;;;;;;32942:22:0;;;;;;:11;:22;;;;;;;;32941:23;32917:47;32913:333;;;32981:44;32999:6;33007:9;33018:6;32981:17;:44::i;32913:333::-;-1:-1:-1;;;;;33047:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33070:22:0;;;;;;:11;:22;;;;;;;;33047:45;33043:203;;;33109:48;33131:6;33139:9;33150:6;33109:21;:48::i;33043:203::-;33190:44;33208:6;33216:9;33227:6;33190:17;:44::i;:::-;33270:7;33266:41;;33292:15;27150;;27140:7;:25;27192:21;;27176:13;:37;27096:125;33292:15;32340:975;;;;:::o;25554:561::-;25651:7;;25687;;25604;;;;;25711:289;25735:9;:16;25731:20;;25711:289;;;25801:7;25777;:21;25785:9;25795:1;25785:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25785:12:0;25777:21;;;;;;;;;;;;;:31;;:66;;;25836:7;25812;:21;25820:9;25830:1;25820:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25820:12:0;25812:21;;;;;;;;;;;;;:31;25777:66;25773:97;;;25853:7;;25862;;25845:25;;;;;;;25554:561;;:::o;25773:97::-;25895:34;25907:7;:21;25915:9;25925:1;25915:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25915:12:0;25907:21;;;;;;;;;;;;;25895:7;;:11;:34::i;:::-;25885:44;;25954:34;25966:7;:21;25974:9;25984:1;25974:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25974:12:0;25966:21;;;;;;;;;;;;;25954:7;;:11;:34::i;:::-;25944:44;-1:-1:-1;25753:3:0;;;;:::i;:::-;;;;25711:289;;;-1:-1:-1;26036:7:0;;26024;;:20;;:11;:20::i;:::-;26014:7;:30;26010:61;;;26054:7;;26063;;26046:25;;;;;;25554:561;;:::o;26010:61::-;26090:7;;26099;;-1:-1:-1;25554:561:0;-1:-1:-1;25554:561:0:o;1792:189::-;1878:7;1913:12;1906:5;1898:28;;;;-1:-1:-1;;;1898:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1937:9:0;1949:5;1953:1;1949;:5;:::i;24608:330::-;24668:7;24677;24686;24706:12;24721:24;24737:7;24721:15;:24::i;:::-;24706:39;;24756:18;24777:30;24799:7;24777:21;:30::i;:::-;24756:51;-1:-1:-1;24818:23:0;24844:33;24756:51;24844:17;:7;24856:4;24844:11;:17::i;:::-;:21;;:33::i;:::-;24818:59;24913:4;;-1:-1:-1;24919:10:0;;-1:-1:-1;24608:330:0;;-1:-1:-1;;;24608:330:0:o;24946:429::-;25061:7;;;;25117:24;:7;25129:11;25117;:24::i;:::-;25099:42;-1:-1:-1;25152:12:0;25167:21;:4;25176:11;25167:8;:21::i;:::-;25152:36;-1:-1:-1;25199:18:0;25220:27;:10;25235:11;25220:14;:27::i;:::-;25199:48;-1:-1:-1;25258:23:0;25284:33;25199:48;25284:17;:7;25296:4;25284:11;:17::i;:33::-;25336:7;;;;-1:-1:-1;25362:4:0;;-1:-1:-1;24946:429:0;;-1:-1:-1;;;;;;;24946:429:0:o;1389:250::-;1447:7;1471:6;1467:47;;-1:-1:-1;1501:1:0;1494:8;;1467:47;1526:9;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;-1:-1:-1;1571:1:0;1562:5;1566:1;1526:17;1562:5;:::i;:::-;:10;1554:56;;;;-1:-1:-1;;;1554:56:0;;14189:2:1;1554:56:0;;;14171:21:1;14228:2;14208:18;;;14201:30;14267:34;14247:18;;;14240:62;-1:-1:-1;;;14318:18:1;;;14311:31;14359:19;;1554:56:0;13987:397:1;31141:589:0;31291:16;;;31305:1;31291:16;;;;;;;;31267:21;;31291:16;;;;;;;;;;-1:-1:-1;31291:16:0;31267:40;;31336:4;31318;31323:1;31318:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31318:23:0;;;-1:-1:-1;;;;;31318:23:0;;;;;31362:15;-1:-1:-1;;;;;31362:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31352:4;31357:1;31352:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31352:32:0;;;-1:-1:-1;;;;;31352:32:0;;;;;31397:62;31414:4;31429:15;31447:11;31397:8;:62::i;:::-;31498:224;;-1:-1:-1;;;31498:224:0;;-1:-1:-1;;;;;31498:15:0;:66;;;;:224;;31579:11;;31605:1;;31649:4;;31676;;31696:15;;31498:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31738:521;31886:62;31903:4;31918:15;31936:11;31886:8;:62::i;:::-;32195:15;;31991:260;;-1:-1:-1;;;31991:260:0;;32063:4;31991:260;;;16103:34:1;16153:18;;;16146:34;;;32109:1:0;16196:18:1;;;16189:34;;;16239:18;;;16232:34;-1:-1:-1;;;;;32195:15:0;;;16282:19:1;;;16275:44;32225:15:0;16335:19:1;;;16328:35;31991:15:0;:31;;;;;;32030:9;;16037:19:1;;31991:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31738:521;;:::o;26834:250::-;26880:7;;:12;:34;;;;-1:-1:-1;26896:13:0;;:18;26880:34;26877:46;;;26834:250::o;26877:46::-;26961:7;;;26943:15;:25;27003:13;;;26979:21;:37;-1:-1:-1;27037:11:0;;;;27059:17;26834:250::o;34427:566::-;34530:15;34547:23;34572:12;34586:23;34611:12;34625:18;34647:19;34658:7;34647:10;:19::i;:::-;-1:-1:-1;;;;;34695:15:0;;;;;;:7;:15;;;;;;34529:137;;-1:-1:-1;34529:137:0;;-1:-1:-1;34529:137:0;;-1:-1:-1;34529:137:0;-1:-1:-1;34529:137:0;-1:-1:-1;34529:137:0;-1:-1:-1;34695:28:0;;34715:7;34695:19;:28::i;:::-;-1:-1:-1;;;;;34677:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34752:7;:15;;;;:28;;34772:7;34752:19;:28::i;:::-;-1:-1:-1;;;;;34734:15:0;;;;;;;:7;:15;;;;;;:46;;;;34812:18;;;;;;;:39;;34835:15;34812:22;:39::i;:::-;-1:-1:-1;;;;;34791:18:0;;;;;;:7;:18;;;;;:60;34865:26;34880:10;34865:14;:26::i;:::-;34902:23;34914:4;34920;34902:11;:23::i;:::-;34958:9;-1:-1:-1;;;;;34941:44:0;34950:6;-1:-1:-1;;;;;34941:44:0;;34969:15;34941:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;34941:44:0;;;;;;;;34518:475;;;;;;34427:566;;;:::o;33833:586::-;33934:15;33951:23;33976:12;33990:23;34015:12;34029:18;34051:19;34062:7;34051:10;:19::i;:::-;-1:-1:-1;;;;;34099:15:0;;;;;;:7;:15;;;;;;33933:137;;-1:-1:-1;33933:137:0;;-1:-1:-1;33933:137:0;;-1:-1:-1;33933:137:0;-1:-1:-1;33933:137:0;-1:-1:-1;33933:137:0;-1:-1:-1;34099:28:0;;33933:137;34099:19;:28::i;:::-;-1:-1:-1;;;;;34081:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34159:18;;;;;:7;:18;;;;;:39;;34182:15;34159:22;:39::i;:::-;-1:-1:-1;;;;;34138:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34230:7;:18;;;;:39;;34253:15;34230:22;:39::i;33323:502::-;33422:15;33439:23;33464:12;33478:23;33503:12;33517:18;33539:19;33550:7;33539:10;:19::i;:::-;-1:-1:-1;;;;;33587:15:0;;;;;;:7;:15;;;;;;33421:137;;-1:-1:-1;33421:137:0;;-1:-1:-1;33421:137:0;;-1:-1:-1;33421:137:0;-1:-1:-1;33421:137:0;-1:-1:-1;33421:137:0;-1:-1:-1;33587:28:0;;33421:137;33587:19;:28::i;21633:642::-;21736:15;21753:23;21778:12;21792:23;21817:12;21831:18;21853:19;21864:7;21853:10;:19::i;:::-;-1:-1:-1;;;;;21901:15:0;;;;;;:7;:15;;;;;;21735:137;;-1:-1:-1;21735:137:0;;-1:-1:-1;21735:137:0;;-1:-1:-1;21735:137:0;-1:-1:-1;21735:137:0;-1:-1:-1;21735:137:0;-1:-1:-1;21901:28:0;;21921:7;21901:19;:28::i;:::-;-1:-1:-1;;;;;21883:15:0;;;;;;:7;:15;;;;;;;;:46;;;;21958:7;:15;;;;:28;;21978:7;21958:19;:28::i;26494:154::-;26558:7;26585:55;26624:5;26585:20;26597:7;;26585;:11;;:20;;;;:::i;:::-;:24;;:55::i;26656:166::-;26726:7;26753:61;26798:5;26753:26;26765:13;;26753:7;:11;;:26;;;;:::i;26127:355::-;26190:19;26213:10;:8;:10::i;:::-;26190:33;-1:-1:-1;26234:18:0;26255:27;:10;26190:33;26255:14;:27::i;:::-;26334:4;26318:22;;;;:7;:22;;;;;;26234:48;;-1:-1:-1;26318:38:0;;26234:48;26318:26;:38::i;:::-;26309:4;26293:22;;;;:7;:22;;;;;;;;:63;;;;26370:11;:26;;;;;;26367:107;;;26452:4;26436:22;;;;:7;:22;;;;;;:38;;26463:10;26436:26;:38::i;:::-;26427:4;26411:22;;;;:7;:22;;;;;:63;26367:107;26179:303;;26127:355;:::o;24026:147::-;24104:7;;:17;;24116:4;24104:11;:17::i;:::-;24094:7;:27;24145:10;;:20;;24160:4;24145:14;:20::i;:::-;24132:10;:33;-1:-1:-1;;24026:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:241::-;3734:6;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3842:9;3829:23;3861:28;3883:5;3861:28;:::i;3924:388::-;3992:6;4000;4053:2;4041:9;4032:7;4028:23;4024:32;4021:52;;;4069:1;4066;4059:12;4021:52;4108:9;4095:23;4127:31;4152:5;4127:31;:::i;:::-;4177:5;-1:-1:-1;4234:2:1;4219:18;;4206:32;4247:33;4206:32;4247:33;:::i;4317:380::-;4396:1;4392:12;;;;4439;;;4460:61;;4514:4;4506:6;4502:17;4492:27;;4460:61;4567:2;4559:6;4556:14;4536:18;4533:38;4530:161;;;4613:10;4608:3;4604:20;4601:1;4594:31;4648:4;4645:1;4638:15;4676:4;4673:1;4666:15;4530:161;;4317:380;;;:::o;4702:356::-;4904:2;4886:21;;;4923:18;;;4916:30;4982:34;4977:2;4962:18;;4955:62;5049:2;5034:18;;4702:356::o;5537:184::-;5607:6;5660:2;5648:9;5639:7;5635:23;5631:32;5628:52;;;5676:1;5673;5666:12;5628:52;-1:-1:-1;5699:16:1;;5537:184;-1:-1:-1;5537:184:1:o;6005:245::-;6072:6;6125:2;6113:9;6104:7;6100:23;6096:32;6093:52;;;6141:1;6138;6131:12;6093:52;6173:9;6167:16;6192:28;6214:5;6192:28;:::i;6255:127::-;6316:10;6311:3;6307:20;6304:1;6297:31;6347:4;6344:1;6337:15;6371:4;6368:1;6361:15;6387:168;6427:7;6493:1;6489;6485:6;6481:14;6478:1;6475:21;6470:1;6463:9;6456:17;6452:45;6449:71;;;6500:18;;:::i;:::-;-1:-1:-1;6540:9:1;;6387:168::o;7326:127::-;7387:10;7382:3;7378:20;7375:1;7368:31;7418:4;7415:1;7408:15;7442:4;7439:1;7432:15;7458:125;7498:4;7526:1;7523;7520:8;7517:34;;;7531:18;;:::i;:::-;-1:-1:-1;7568:9:1;;7458:125::o;7588:127::-;7649:10;7644:3;7640:20;7637:1;7630:31;7680:4;7677:1;7670:15;7704:4;7701:1;7694:15;7720:135;7759:3;-1:-1:-1;;7780:17:1;;7777:43;;;7800:18;;:::i;:::-;-1:-1:-1;7847:1:1;7836:13;;7720:135::o;12185:128::-;12225:3;12256:1;12252:6;12249:1;12246:13;12243:39;;;12262:18;;:::i;:::-;-1:-1:-1;12298:9:1;;12185:128::o;13765:217::-;13805:1;13831;13821:132;;13875:10;13870:3;13866:20;13863:1;13856:31;13910:4;13907:1;13900:15;13938:4;13935:1;13928:15;13821:132;-1:-1:-1;13967:9:1;;13765:217::o;14521:251::-;14591:6;14644:2;14632:9;14623:7;14619:23;14615:32;14612:52;;;14660:1;14657;14650:12;14612:52;14692:9;14686:16;14711:31;14736:5;14711:31;:::i;14777:980::-;15039:4;15087:3;15076:9;15072:19;15118:6;15107:9;15100:25;15144:2;15182:6;15177:2;15166:9;15162:18;15155:34;15225:3;15220:2;15209:9;15205:18;15198:31;15249:6;15284;15278:13;15315:6;15307;15300:22;15353:3;15342:9;15338:19;15331:26;;15392:2;15384:6;15380:15;15366:29;;15413:1;15423:195;15437:6;15434:1;15431:13;15423:195;;;15502:13;;-1:-1:-1;;;;;15498:39:1;15486:52;;15593:15;;;;15558:12;;;;15534:1;15452:9;15423:195;;;-1:-1:-1;;;;;;;15674:32:1;;;;15669:2;15654:18;;15647:60;-1:-1:-1;;;15738:3:1;15723:19;15716:35;15635:3;14777:980;-1:-1:-1;;;14777:980:1:o;16374:306::-;16462:6;16470;16478;16531:2;16519:9;16510:7;16506:23;16502:32;16499:52;;;16547:1;16544;16537:12;16499:52;16576:9;16570:16;16560:26;;16626:2;16615:9;16611:18;16605:25;16595:35;;16670:2;16659:9;16655:18;16649:25;16639:35;;16374:306;;;;;:::o

Swarm Source

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