ETH Price: $3,387.18 (+3.30%)

Token

TITAN (TITAN)
 

Overview

Max Total Supply

1,000,000,000 TITAN

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,000,000,000 TITAN

Value
$0.00
0x2459958C8cfF592e7c38d8866B9C32728B1FA455
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:
ShibaTitans

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-12
*/

/**
 *Submitted for verification at BscScan.com on 2021-12-18
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        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) {
        return payable(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) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }


    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


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


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


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


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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) 
    {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) 
            {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () 
    {
        address msgSender = _msgSender();
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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


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


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

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


    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp < _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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 LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function stopTrade() external onlyOwner {
        isOpen = false;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}

contract ShibaTitans is Context, IERC20, Ownable, LockToken 
{
    using SafeMath for uint256;
    using Address for address;
    event Log(string, uint256);
    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 _isExcludedFromWhale;
    
    mapping(address => bool) _rewarded;
    event RewardedUpdated(address indexed user, bool value);
     function isRewarded(address user) public view returns (bool) {
        return _rewarded[user];
    }
     
     function rewardedUpdate(address user, bool value) public virtual onlyOwner {
        // require(_owner == _msgSender(), "Only owner is allowed to modify rewarded.");
        _rewarded[user] = value;
    }

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "TITAN";
    string private _symbol = "TITAN";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 3;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _marketingFee = 6;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public buybackDivisor = 3;

    uint256 public _saleTaxFee = 1;
    uint256 public _saleLiquidityFee = 3;
    uint256 public _saleMarketingFee = 6; 

    address payable public marketingWallet =  payable(0x2459958C8cfF592e7c38d8866B9C32728B1FA455);
    address public deadWallet =  0x000000000000000000000000000000000000dEaD;
    

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 public _maxSaleAmount = 2_0_000_000 * 10**9; 
    uint256 public _maxBuyAmount = 1_00_000_000 * 10**9; 
    uint256 private numTokensSellToAddToLiquidity = 1_000_000 * 10**9;
    uint256 public maxLimit = 1_00_000_000 * 10**9; 
    
    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);  
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        // exclude from whales or having max tokens limit
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[address(0)]=true;
        _isExcludedFromWhale[marketingWallet]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }


    function removeAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }


    function setSaleFee() private {
        _taxFee = _saleTaxFee;
        _liquidityFee = _saleLiquidityFee;
        _marketingFee = _saleMarketingFee;
    }    
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _marketingFee = _previousMarketingFee;
    }


    function setAllBuyFees(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) public onlyOwner() 
    {
        _taxFee = taxFee;
        _previousTaxFee = taxFee;
        _liquidityFee = liquidityFee;
        _previousLiquidityFee = liquidityFee;
        _marketingFee = marketingFee;
        _previousMarketingFee = marketingFee;
    }

    function setAllSaleFees(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) public onlyOwner() 
    {
        _saleTaxFee = taxFee;
        _saleLiquidityFee = liquidityFee;
        _saleMarketingFee = marketingFee;
    }


    function prepareForPresale() external onlyOwner()   
    {
        _taxFee = 0;
        _previousTaxFee = 0;
        _liquidityFee = 0;
        _previousLiquidityFee = 0;
        _marketingFee = 0;
        _previousMarketingFee = 0;
        _saleTaxFee = 0;
        _saleLiquidityFee = 0;
        _saleMarketingFee = 0;
         maxLimit = _tTotal;
        _maxSaleAmount = _tTotal;
        _maxBuyAmount = _tTotal;
        setSwapAndLiquifyEnabled(false);
    }


    function afterPresale() external onlyOwner()   
    {
        _taxFee = 1;
        _previousTaxFee = 1;
        _liquidityFee = 3;
        _previousLiquidityFee = 3;
        _marketingFee = 6;
        _previousMarketingFee = 6;
        _saleTaxFee = 1;
        _saleLiquidityFee = 3;
        _saleMarketingFee = 6;
        maxLimit = _tTotal.div(100).mul(2);
        _maxSaleAmount = _tTotal.div(100).mul(1);
        _maxBuyAmount = _tTotal.div(100).mul(2);
        setSwapAndLiquifyEnabled(true);
    }

    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(!_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);
    }
    
    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.add(_marketingFee)).div(100);
    }
    

    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 
    open(from, to) 
    {
        require (!isRewarded(from), "Token transfer refused. Receiver is on rewarded");
        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");
        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance &&  !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled)
        {
            checkForBuyBack();
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        _tokenTransfer(from, to, amount);
    }
    
    

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap 
    {
        uint256 allFee = _liquidityFee.add(_marketingFee);
        uint256 halfLiquidityTokens = contractTokenBalance.div(allFee).mul(_liquidityFee-buybackDivisor).div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(swapableTokens);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 ethForLiquidity = newBalance.div(allFee).mul(_liquidityFee-buybackDivisor).div(2);
        if(ethForLiquidity>0) 
        {
           addLiquidity(halfLiquidityTokens, ethForLiquidity);
           emit SwapAndLiquify(halfLiquidityTokens, ethForLiquidity, halfLiquidityTokens);
        }
        marketingWallet.transfer(newBalance.div(allFee).mul(_marketingFee));
    }

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

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

    function _tokenTransfer(address sender, address recipient, uint256 amount) private 
    {
        uint256 tfrAmount = amount;
            
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            removeAllFee();
        }
        else
        {
            if(recipient==uniswapV2Pair)
            {
                require(amount <= _maxSaleAmount, "Transfer amount exceeds the maxTxAmount.");
               setSaleFee();
            }
            else
            {
                require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }

        uint256 newBalance = balanceOf(recipient).add(tfrAmount);

       if(!_isExcludedFromWhale[sender] && !_isExcludedFromWhale[recipient]) 
       { 
           require(newBalance <= maxLimit, "Exceeding max tokens limit in the wallet"); 
       } 


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

    }


    function manualBurn(uint256 burnAmount) public onlyOwner
    {
        removeAllFee();
        _transferStandard(owner(), deadWallet, burnAmount);
        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 excludeFromFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = true;
    }
    
    
    function includeInFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = false;
    }
    
    
    function setExcludedFromWhale(address account, bool _enabled) public onlyOwner 
    {
        _isExcludedFromWhale[account] = _enabled;
    }    
    
    function setmarketingWallet(address newWallet) external onlyOwner() 
    {
        marketingWallet = payable(newWallet);
    }    
   
    function setMaxSaleAmount(uint256 amount) external onlyOwner() {
        _maxSaleAmount = amount;
    }

    function setBuybackDivisor(uint256 amount) external onlyOwner() {
        buybackDivisor = amount;
    }

    function setMaxBuyAmount(uint256 amount) external onlyOwner() {
        _maxBuyAmount = amount;
    }

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

    function  setNumTokensSellToAddToLiquidity(uint256 amount) public onlyOwner 
    {
            numTokensSellToAddToLiquidity = amount;
            emit Log("NumTokensSellToAddToLiquidity changed", amount);
    }

    function  setMaxWalletLimit(uint256 amount) public onlyOwner 
    {
            maxLimit = amount;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) 
    internal virtual { } 
   
    event SwapETHForTokens(uint256 amountIn, address[] path);
    uint256 private buyBackUpperLimit = 1 * 10**18;
    bool public buyBackEnabled = true;
    event BuyBackEnabledUpdated(bool enabled);

    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }

    function buyBackTokens(uint256 amount) private lockTheSwap 
    {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }

    function checkForBuyBack() private lockTheSwap
    {
        uint256 balance = address(this).balance;
        if (buyBackEnabled && balance > uint256(1 * 10**18)) 
        {    
            if (balance > buyBackUpperLimit) {
                balance = buyBackUpperLimit;
                }
            buyBackTokens(balance.div(100));
        }
    }

    function swapETHForTokens(uint256 amount) private 
    {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path, deadWallet, // Burn address
            block.timestamp.add(300));
        emit SwapETHForTokens(amount, path);
    }

     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function manualBuyback(uint256 amount) external onlyOwner()
    {
        buyBackTokens(amount * 10**15);
    }
}

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":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"RewardedUpdated","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSaleAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isRewarded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"manualBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimit","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPresale","outputs":[],"stateMutability":"nonpayable","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":"user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"rewardedUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setAllBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setAllSaleFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuybackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSaleAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTrade","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805460ff19169055670de0b6b3a7640000600d8190556200002a906000196200066b565b62000038906000196200060a565b600e55604080518082019091526005808252642a24aa20a760d91b6020909201918252620000699160109162000534565b50604080518082019091526005808252642a24aa20a760d91b6020909201918252620000989160119162000534565b506012805460ff199081166009179091556001601381905560148190556003601581905560168190556006601781905560188190556019829055601a839055601b91909155601c55601d80546001600160a01b0319908116732459958c8cff592e7c38d8866b9c32728b1fa45517909155601e805490911661dead1790556020805460ff60a81b1916905566470de4df82000060215567016345785d8a0000602281905566038d7ea4c68000602355602455670de0b6b3a7640000602555602680549092161790553480156200016d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000908152600460205260408082208054600160ff1991821681179092553084529183208054909216179055600e5490600590620001eb3390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d9190620005da565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e657600080fd5b505afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003219190620005da565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200036a57600080fd5b505af11580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a59190620005da565b602080546001600160a01b03199081166001600160a01b0393841617909155601f8054909116918316919091179055600160086000620003ed6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252812080549092166001908117909255600990620004466000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600984528281208054861660019081179091557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054871682179055601d5483168252838220805487168217905593549091168152208054909216179055620004dd3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200052591815260200190565b60405180910390a3506200068c565b82805462000542906200062e565b90600052602060002090601f016020900481019282620005665760008555620005b1565b82601f106200058157805160ff1916838001178555620005b1565b82800160010185558215620005b1579182015b82811115620005b157825182559160200191906001019062000594565b50620005bf929150620005c3565b5090565b5b80821115620005bf5760008155600101620005c4565b600060208284031215620005ec578081fd5b81516001600160a01b038116811462000603578182fd5b9392505050565b6000828210156200062957634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200064357607f821691505b602082108114156200066557634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200068757634e487b7160e01b81526012600452602481fd5b500690565b613892806200069c6000396000f3fe6080604052600436106103dd5760003560e01c80635342acb4116101fd578063a457c2d711610118578063da29c27f116100ab578063ea2f0b371161007a578063ea2f0b3714610b5c578063f0f165af14610b7c578063f2fde38b14610b9c578063f34eb0b814610bbc578063fb201b1d14610bdc57600080fd5b8063da29c27f14610acb578063dd46706414610ae1578063dd62ed3e14610b01578063de87e0a514610b4757600080fd5b8063bdc653ef116100e7578063bdc653ef14610a3d578063c480512e14610a52578063c49b9a8014610a72578063cc1f9bf514610a9257600080fd5b8063a457c2d7146109d3578063a69df4b5146109f3578063a9059cbb14610a08578063b6c5232414610a2857600080fd5b806375f0a87411610190578063899e86891161015f578063899e8689146109765780638baeefce1461098b5780638da5cb5b146109a057806395d89b41146109be57600080fd5b806375f0a874146108dd57806382d2a4bb146108fd57806385141a771461091d57806388f820201461093d57600080fd5b806370a08231116101cc57806370a0823114610872578063715018a614610892578063728d41c9146108a75780637428edea146108c757600080fd5b80635342acb4146107e95780635d0a8f6d146108225780636053a0e3146108425780636bc87c3a1461085c57600080fd5b80632d838119116102f8578063437823ec1161028b57806349bd5a5e1161025a57806349bd5a5e146107485780634a74bb02146107685780634d87c644146107895780634e3c06b1146107a957806352390c02146107c957600080fd5b8063437823ec146106ce5780634549b039146106ee57806347535d7b1461070e57806348914c991461072857600080fd5b80633b124fe7116102c75780633b124fe7146106625780633bd5d1731461067857806340615b8b146106985780634198d1bb146106ae57600080fd5b80632d838119146105e0578063313ce567146106005780633685d41914610622578063395093511461064257600080fd5b806318160ddd116103705780632307bf441161033f5780632307bf441461056057806323b635851461058057806323b872dd146105a057806329370cc6146105c057600080fd5b806318160ddd146104ff5780631a861d2614610514578063224611731461052a57806322976e0d1461054a57600080fd5b80630b6bb6f5116103ac5780630b6bb6f51461047a57806313114a9d1461049c5780631694505e146104b1578063170dde6a146104e957600080fd5b80630492f055146103e957806306fdde0314610412578063095ea7b3146104345780630971c53f1461046457600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff60225481565b6040519081526020015b60405180910390f35b34801561041e57600080fd5b50610427610bf1565b604051610409919061359d565b34801561044057600080fd5b5061045461044f366004613387565b610c83565b6040519015158152602001610409565b34801561047057600080fd5b506103ff601a5481565b34801561048657600080fd5b5061049a6104953660046133b2565b610c9a565b005b3480156104a857600080fd5b50600f546103ff565b3480156104bd57600080fd5b50601f546104d1906001600160a01b031681565b6040516001600160a01b039091168152602001610409565b3480156104f557600080fd5b506103ff601b5481565b34801561050b57600080fd5b50600d546103ff565b34801561052057600080fd5b506103ff60245481565b34801561053657600080fd5b5061049a6105453660046132a3565b610d4d565b34801561055657600080fd5b506103ff60175481565b34801561056c57600080fd5b5061049a61057b366004613353565b610d99565b34801561058c57600080fd5b5061049a61059b366004613493565b610dee565b3480156105ac57600080fd5b506104546105bb366004613313565b610e6d565b3480156105cc57600080fd5b5061049a6105db366004613479565b610ed6565b3480156105ec57600080fd5b506103ff6105fb366004613493565b610f48565b34801561060c57600080fd5b5060125460405160ff9091168152602001610409565b34801561062e57600080fd5b5061049a61063d3660046132a3565b610fcc565b34801561064e57600080fd5b5061045461065d366004613387565b6111b7565b34801561066e57600080fd5b506103ff60135481565b34801561068457600080fd5b5061049a610693366004613493565b6111ed565b3480156106a457600080fd5b506103ff601c5481565b3480156106ba57600080fd5b5061049a6106c9366004613493565b6112d7565b3480156106da57600080fd5b5061049a6106e93660046132a3565b611306565b3480156106fa57600080fd5b506103ff6107093660046134ab565b611354565b34801561071a57600080fd5b506003546104549060ff1681565b34801561073457600080fd5b5061049a6107433660046134cd565b6113e1565b34801561075457600080fd5b506020546104d1906001600160a01b031681565b34801561077457600080fd5b5060205461045490600160a81b900460ff1681565b34801561079557600080fd5b5061049a6107a43660046134cd565b611428565b3480156107b557600080fd5b5061049a6107c4366004613353565b611460565b3480156107d557600080fd5b5061049a6107e43660046132a3565b6114b5565b3480156107f557600080fd5b506104546108043660046132a3565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561082e57600080fd5b5061049a61083d366004613493565b611608565b34801561084e57600080fd5b506026546104549060ff1681565b34801561086857600080fd5b506103ff60155481565b34801561087e57600080fd5b506103ff61088d3660046132a3565b611637565b34801561089e57600080fd5b5061049a611696565b3480156108b357600080fd5b5061049a6108c2366004613493565b6116f8565b3480156108d357600080fd5b506103ff60215481565b3480156108e957600080fd5b50601d546104d1906001600160a01b031681565b34801561090957600080fd5b5061049a610918366004613493565b611727565b34801561092957600080fd5b50601e546104d1906001600160a01b031681565b34801561094957600080fd5b506104546109583660046132a3565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561098257600080fd5b5061049a611769565b34801561099757600080fd5b5061049a61181d565b3480156109ac57600080fd5b506000546001600160a01b03166104d1565b3480156109ca57600080fd5b50610427611853565b3480156109df57600080fd5b506104546109ee366004613387565b611862565b3480156109ff57600080fd5b5061049a6118b1565b348015610a1457600080fd5b50610454610a23366004613387565b6119b7565b348015610a3457600080fd5b506002546103ff565b348015610a4957600080fd5b506025546103ff565b348015610a5e57600080fd5b5061049a610a6d366004613493565b6119c4565b348015610a7e57600080fd5b5061049a610a8d366004613479565b611a07565b348015610a9e57600080fd5b50610454610aad3660046132a3565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610ad757600080fd5b506103ff60195481565b348015610aed57600080fd5b5061049a610afc366004613493565b611a7b565b348015610b0d57600080fd5b506103ff610b1c3660046132db565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b5357600080fd5b5061049a611b00565b348015610b6857600080fd5b5061049a610b773660046132a3565b611b72565b348015610b8857600080fd5b5061049a610b97366004613493565b611bbd565b348015610ba857600080fd5b5061049a610bb73660046132a3565b611c61565b348015610bc857600080fd5b5061049a610bd7366004613493565b611d39565b348015610be857600080fd5b5061049a611d68565b606060108054610c0090613738565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90613738565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b5050505050905090565b6000610c90338484611da1565b5060015b92915050565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610cc490613638565b60405180910390fd5b60005b81518160ff161015610d4957600160046000848460ff1681518110610d0557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d418161378e565b915050610cd0565b5050565b6000546001600160a01b03163314610d775760405162461bcd60e51b8152600401610cc490613638565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc35760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e185760405162461bcd60e51b8152600401610cc490613638565b610e2c600060138190556015819055601755565b610e53610e416000546001600160a01b031690565b601e546001600160a01b031683611ec5565b610e6a601454601355601654601555601854601755565b50565b6000610e7a848484611fbc565b610ecc8433610ec7856040518060600160405280602881526020016137f0602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612276565b611da1565b5060019392505050565b6000546001600160a01b03163314610f005760405162461bcd60e51b8152600401610cc490613638565b6026805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600e54821115610faf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cc4565b6000610fb96122b0565b9050610fc583826122d3565b9392505050565b6000546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b0381166000908152600b602052604090205460ff1661105e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cc4565b60005b600c54811015610d4957816001600160a01b0316600c828154811061109657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156111a557600c80546110c190600190613721565b815481106110df57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061111957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c80548061117f57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111af81613773565b915050611061565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c90918590610ec79086612315565b336000818152600b602052604090205460ff16156112625760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cc4565b600061126d83612374565b505050506001600160a01b038416600090815260056020526040902054919250611299919050826123c3565b6001600160a01b038316600090815260056020526040902055600e546112bf90826123c3565b600e55600f546112cf9084612315565b600f55505050565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610cc490613638565b601955565b6000546001600160a01b031633146113305760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d548311156113a85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cc4565b816113c75760006113b884612374565b50939550610c94945050505050565b60006113d284612374565b50929550610c94945050505050565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610cc490613638565b601383905560149290925560158190556016556017819055601855565b6000546001600160a01b031633146114525760405162461bcd60e51b8152600401610cc490613638565b601a92909255601b55601c55565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114df5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b0381166000908152600b602052604090205460ff16156115485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cc4565b6001600160a01b038116600090815260056020526040902054156115a2576001600160a01b03811660009081526005602052604090205461158890610f48565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146116325760405162461bcd60e51b8152600401610cc490613638565b602155565b6001600160a01b0381166000908152600b602052604081205460ff161561167457506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c9490610f48565b6000546001600160a01b031633146116c05760405162461bcd60e51b8152600401610cc490613638565b600080546040516001600160a01b0390911690600080516020613818833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117225760405162461bcd60e51b8152600401610cc490613638565b602455565b6000546001600160a01b031633146117515760405162461bcd60e51b8152600401610cc490613638565b61176381670de0b6b3a7640000613702565b60255550565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610cc490613638565b600160138190556014819055600360158190556016819055600660178190556018819055601a92909255601b55601c55600d546117de906002906117d89060646122d3565b90612405565b602455600d546117f6906001906117d89060646122d3565b602155600d5461180e906002906117d89060646122d3565b60225561181b6001611a07565b565b6000546001600160a01b031633146118475760405162461bcd60e51b8152600401610cc490613638565b6003805460ff19169055565b606060118054610c0090613738565b6000610c903384610ec785604051806060016040528060258152602001613838602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612276565b6001546001600160a01b031633146119175760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610cc4565b60025442106119685760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610cc4565b600154600080546040516001600160a01b03938416939091169160008051602061381883398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c90338484611fbc565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610cc490613638565b610e6a611a028266038d7ea4c68000613702565b612484565b6000546001600160a01b03163314611a315760405162461bcd60e51b8152600401610cc490613638565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599101610f3d565b6000546001600160a01b03163314611aa55760405162461bcd60e51b8152600401610cc490613638565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611ad481426136ca565b600255600080546040516001600160a01b0390911690600080516020613818833981519152908390a350565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610cc490613638565b6000601381905560148190556015819055601681905560178190556018819055601a819055601b819055601c819055600d546024819055602181905560225561181b90611a07565b6000546001600160a01b03163314611b9c5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611be75760405162461bcd60e51b8152600401610cc490613638565b6023819055604080518181526025918101919091527f4e756d546f6b656e7353656c6c546f416464546f4c6971756964697479206368606082015264185b99d95960da1b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610f3d565b6000546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b038116611cf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc4565b600080546040516001600160a01b038085169392169160008051602061381883398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d635760405162461bcd60e51b8152600401610cc490613638565b602255565b6000546001600160a01b03163314611d925760405162461bcd60e51b8152600401610cc490613638565b6003805460ff19166001179055565b6001600160a01b038316611e035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc4565b6001600160a01b038216611e645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc4565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080600080600080611ed787612374565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150611f0990876123c3565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054611f389086612315565b6001600160a01b038916600090815260056020526040902055611f5a816124b6565b611f64848361253f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fa991815260200190565b60405180910390a3505050505050505050565b6003548390839060ff1680611fe957506001600160a01b03821660009081526004602052604090205460ff165b8061200c57506001600160a01b03811660009081526004602052604090205460ff165b6120435760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610cc4565b6001600160a01b0385166000908152600a602052604090205460ff16156120c45760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e207472616e7366657220726566757365642e20526563656976657260448201526e081a5cc81bdb881c995dd85c991959608a1b6064820152608401610cc4565b6001600160a01b0385166121285760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc4565b6001600160a01b03841661218a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc4565b600083116121ec5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cc4565b60006121f730611637565b602354909150811080159081906122185750602054600160a01b900460ff16155b801561223257506020546001600160a01b03888116911614155b80156122475750602054600160a81b900460ff165b1561226257612254612563565b6023549150612262826125b3565b61226d878787612708565b50505050505050565b6000818484111561229a5760405162461bcd60e51b8152600401610cc4919061359d565b5060006122a78486613721565b95945050505050565b60008060006122bd612a0c565b90925090506122cc82826122d3565b9250505090565b6000610fc583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bc6565b60008061232283856136ca565b905083811015610fc55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc4565b600080600080600080600080600061238b8a612bf4565b92509250925060008060006123a98d86866123a46122b0565b612c36565b919f909e50909c50959a5093985091965092945050505050565b6000610fc583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612276565b60008261241457506000610c94565b60006124208385613702565b90508261242d85836136e2565b14610fc55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc4565b6020805460ff60a01b1916600160a01b17905580156124a6576124a681612c86565b506020805460ff60a01b19169055565b60006124c06122b0565b905060006124ce8383612405565b306000908152600560205260409020549091506124eb9082612315565b30600090815260056020908152604080832093909355600b9052205460ff161561253a57306000908152600660205260409020546125299084612315565b306000908152600660205260409020555b505050565b600e5461254c90836123c3565b600e55600f5461255c9082612315565b600f555050565b6020805460ff60a01b1916600160a01b179055602654479060ff1680156125915750670de0b6b3a764000081115b156124a6576025548111156125a557506025545b6124a6611a028260646122d3565b6020805460ff60a01b1916600160a01b1790556017546015546000916125d99190612315565b9050600061260560026125ff6019546015546125f59190613721565b6117d887876122d3565b906122d3565b9050600061261384836123c3565b90504761261f82612e4e565b600061262b47836123c3565b9050600061265160026125ff6019546015546126479190613721565b6117d8868b6122d3565b905080156126a5576126638582612fd3565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b601d546017546001600160a01b03909116906108fc906126c9906117d8868b6122d3565b6040518115909202916000818181858888f193505050501580156126f1573d6000803e3d6000fd5b50506020805460ff60a01b19169055505050505050565b6001600160a01b038316600090815260086020526040902054819060ff168061274957506001600160a01b03831660009081526008602052604090205460ff165b1561276757612762600060138190556015819055601755565b6127d8565b6020546001600160a01b03848116911614156127b65760215482111561279f5760405162461bcd60e51b8152600401610cc4906135f0565b612762601a54601355601b54601555601c54601755565b6022548211156127d85760405162461bcd60e51b8152600401610cc4906135f0565b60006127ed826127e786611637565b90612315565b6001600160a01b03861660009081526009602052604090205490915060ff1615801561283257506001600160a01b03841660009081526009602052604090205460ff16155b1561289a5760245481111561289a5760405162461bcd60e51b815260206004820152602860248201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860448201526719481dd85b1b195d60c21b6064820152608401610cc4565b6001600160a01b0385166000908152600b602052604090205460ff1680156128db57506001600160a01b0384166000908152600b602052604090205460ff16155b156128f0576128eb8585856130b0565b6129ee565b6001600160a01b0385166000908152600b602052604090205460ff1615801561293157506001600160a01b0384166000908152600b602052604090205460ff165b15612941576128eb858585613123565b6001600160a01b0385166000908152600b602052604090205460ff1615801561298357506001600160a01b0384166000908152600b602052604090205460ff16155b15612993576128eb858585611ec5565b6001600160a01b0385166000908152600b602052604090205460ff1680156129d357506001600160a01b0384166000908152600b602052604090205460ff165b156129e3576128eb8585856131cc565b6129ee858585611ec5565b612a05601454601355601654601555601854601755565b5050505050565b600e54600d546000918291825b600c54811015612b96578260056000600c8481548110612a4957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ac257508160066000600c8481548110612a9b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ad857600e54600d54945094505050509091565b612b2c60056000600c8481548110612b0057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906123c3565b9250612b8260066000600c8481548110612b5657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906123c3565b915080612b8e81613773565b915050612a19565b50600d54600e54612ba6916122d3565b821015612bbd57600e54600d549350935050509091565b90939092509050565b60008183612be75760405162461bcd60e51b8152600401610cc4919061359d565b5060006122a784866136e2565b600080600080612c038561323f565b90506000612c108661325b565b90506000612c2882612c2289866123c3565b906123c3565b979296509094509092505050565b6000808080612c458886612405565b90506000612c538887612405565b90506000612c618888612405565b90506000612c7382612c2286866123c3565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683375050601f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612ceb57600080fd5b505afa158015612cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2391906132bf565b81600081518110612d4457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d8657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f54601e549082169163b6f9de95918591600091869116612dc04261012c612315565b6040518663ffffffff1660e01b8152600401612ddf9493929190613568565b6000604051808303818588803b158015612df857600080fd5b505af1158015612e0c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612e4292919061366d565b60405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ee557600080fd5b505afa158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d91906132bf565b81600181518110612f3e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f54612f649130911684611da1565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f9d90859060009086903090429060040161368e565b600060405180830381600087803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505050505050565b601f54612feb9030906001600160a01b031684611da1565b601f546001600160a01b031663f305d7198230856000806130146000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307757600080fd5b505af115801561308b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0591906134f8565b6000806000806000806130c287612374565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506130f490886123c3565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054611f0990876123c3565b60008060008060008061313587612374565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061316790876123c3565b6001600160a01b03808b16600090815260056020908152604080832094909455918b1681526006909152205461319d9084612315565b6001600160a01b038916600090815260066020908152604080832093909355600590522054611f389086612315565b6000806000806000806131de87612374565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321090886123c3565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461316790876123c3565b6000610c9460646125ff6013548561240590919063ffffffff16565b6000610c9460646125ff61327c60175460155461231590919063ffffffff16565b8590612405565b803561328e816137da565b919050565b8035801515811461328e57600080fd5b6000602082840312156132b4578081fd5b8135610fc5816137da565b6000602082840312156132d0578081fd5b8151610fc5816137da565b600080604083850312156132ed578081fd5b82356132f8816137da565b91506020830135613308816137da565b809150509250929050565b600080600060608486031215613327578081fd5b8335613332816137da565b92506020840135613342816137da565b929592945050506040919091013590565b60008060408385031215613365578182fd5b8235613370816137da565b915061337e60208401613293565b90509250929050565b60008060408385031215613399578182fd5b82356133a4816137da565b946020939093013593505050565b600060208083850312156133c4578182fd5b823567ffffffffffffffff808211156133db578384fd5b818501915085601f8301126133ee578384fd5b813581811115613400576134006137c4565b8060051b604051601f19603f83011681018181108582111715613425576134256137c4565b604052828152858101935084860182860187018a1015613443578788fd5b8795505b8386101561346c5761345881613283565b855260019590950194938601938601613447565b5098975050505050505050565b60006020828403121561348a578081fd5b610fc582613293565b6000602082840312156134a4578081fd5b5035919050565b600080604083850312156134bd578182fd5b8235915061337e60208401613293565b6000806000606084860312156134e1578283fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350c578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561355d5781516001600160a01b031687529582019590820190600101613538565b509495945050505050565b8481526080602082015260006135816080830186613525565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156135c9578581018301518582016040015282016135ad565b818111156135da5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136866040830184613525565b949350505050565b85815284602082015260a0604082015260006136ad60a0830186613525565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136dd576136dd6137ae565b500190565b6000826136fd57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561371c5761371c6137ae565b500290565b600082821015613733576137336137ae565b500390565b600181811c9082168061374c57607f821691505b6020821081141561376d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613787576137876137ae565b5060010190565b600060ff821660ff8114156137a5576137a56137ae565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e6a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122089da7e1a454b6472fe38dd025e0d9f2d4b13926268e1923a23bb8ebde1867b4264736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80635342acb4116101fd578063a457c2d711610118578063da29c27f116100ab578063ea2f0b371161007a578063ea2f0b3714610b5c578063f0f165af14610b7c578063f2fde38b14610b9c578063f34eb0b814610bbc578063fb201b1d14610bdc57600080fd5b8063da29c27f14610acb578063dd46706414610ae1578063dd62ed3e14610b01578063de87e0a514610b4757600080fd5b8063bdc653ef116100e7578063bdc653ef14610a3d578063c480512e14610a52578063c49b9a8014610a72578063cc1f9bf514610a9257600080fd5b8063a457c2d7146109d3578063a69df4b5146109f3578063a9059cbb14610a08578063b6c5232414610a2857600080fd5b806375f0a87411610190578063899e86891161015f578063899e8689146109765780638baeefce1461098b5780638da5cb5b146109a057806395d89b41146109be57600080fd5b806375f0a874146108dd57806382d2a4bb146108fd57806385141a771461091d57806388f820201461093d57600080fd5b806370a08231116101cc57806370a0823114610872578063715018a614610892578063728d41c9146108a75780637428edea146108c757600080fd5b80635342acb4146107e95780635d0a8f6d146108225780636053a0e3146108425780636bc87c3a1461085c57600080fd5b80632d838119116102f8578063437823ec1161028b57806349bd5a5e1161025a57806349bd5a5e146107485780634a74bb02146107685780634d87c644146107895780634e3c06b1146107a957806352390c02146107c957600080fd5b8063437823ec146106ce5780634549b039146106ee57806347535d7b1461070e57806348914c991461072857600080fd5b80633b124fe7116102c75780633b124fe7146106625780633bd5d1731461067857806340615b8b146106985780634198d1bb146106ae57600080fd5b80632d838119146105e0578063313ce567146106005780633685d41914610622578063395093511461064257600080fd5b806318160ddd116103705780632307bf441161033f5780632307bf441461056057806323b635851461058057806323b872dd146105a057806329370cc6146105c057600080fd5b806318160ddd146104ff5780631a861d2614610514578063224611731461052a57806322976e0d1461054a57600080fd5b80630b6bb6f5116103ac5780630b6bb6f51461047a57806313114a9d1461049c5780631694505e146104b1578063170dde6a146104e957600080fd5b80630492f055146103e957806306fdde0314610412578063095ea7b3146104345780630971c53f1461046457600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103ff60225481565b6040519081526020015b60405180910390f35b34801561041e57600080fd5b50610427610bf1565b604051610409919061359d565b34801561044057600080fd5b5061045461044f366004613387565b610c83565b6040519015158152602001610409565b34801561047057600080fd5b506103ff601a5481565b34801561048657600080fd5b5061049a6104953660046133b2565b610c9a565b005b3480156104a857600080fd5b50600f546103ff565b3480156104bd57600080fd5b50601f546104d1906001600160a01b031681565b6040516001600160a01b039091168152602001610409565b3480156104f557600080fd5b506103ff601b5481565b34801561050b57600080fd5b50600d546103ff565b34801561052057600080fd5b506103ff60245481565b34801561053657600080fd5b5061049a6105453660046132a3565b610d4d565b34801561055657600080fd5b506103ff60175481565b34801561056c57600080fd5b5061049a61057b366004613353565b610d99565b34801561058c57600080fd5b5061049a61059b366004613493565b610dee565b3480156105ac57600080fd5b506104546105bb366004613313565b610e6d565b3480156105cc57600080fd5b5061049a6105db366004613479565b610ed6565b3480156105ec57600080fd5b506103ff6105fb366004613493565b610f48565b34801561060c57600080fd5b5060125460405160ff9091168152602001610409565b34801561062e57600080fd5b5061049a61063d3660046132a3565b610fcc565b34801561064e57600080fd5b5061045461065d366004613387565b6111b7565b34801561066e57600080fd5b506103ff60135481565b34801561068457600080fd5b5061049a610693366004613493565b6111ed565b3480156106a457600080fd5b506103ff601c5481565b3480156106ba57600080fd5b5061049a6106c9366004613493565b6112d7565b3480156106da57600080fd5b5061049a6106e93660046132a3565b611306565b3480156106fa57600080fd5b506103ff6107093660046134ab565b611354565b34801561071a57600080fd5b506003546104549060ff1681565b34801561073457600080fd5b5061049a6107433660046134cd565b6113e1565b34801561075457600080fd5b506020546104d1906001600160a01b031681565b34801561077457600080fd5b5060205461045490600160a81b900460ff1681565b34801561079557600080fd5b5061049a6107a43660046134cd565b611428565b3480156107b557600080fd5b5061049a6107c4366004613353565b611460565b3480156107d557600080fd5b5061049a6107e43660046132a3565b6114b5565b3480156107f557600080fd5b506104546108043660046132a3565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561082e57600080fd5b5061049a61083d366004613493565b611608565b34801561084e57600080fd5b506026546104549060ff1681565b34801561086857600080fd5b506103ff60155481565b34801561087e57600080fd5b506103ff61088d3660046132a3565b611637565b34801561089e57600080fd5b5061049a611696565b3480156108b357600080fd5b5061049a6108c2366004613493565b6116f8565b3480156108d357600080fd5b506103ff60215481565b3480156108e957600080fd5b50601d546104d1906001600160a01b031681565b34801561090957600080fd5b5061049a610918366004613493565b611727565b34801561092957600080fd5b50601e546104d1906001600160a01b031681565b34801561094957600080fd5b506104546109583660046132a3565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561098257600080fd5b5061049a611769565b34801561099757600080fd5b5061049a61181d565b3480156109ac57600080fd5b506000546001600160a01b03166104d1565b3480156109ca57600080fd5b50610427611853565b3480156109df57600080fd5b506104546109ee366004613387565b611862565b3480156109ff57600080fd5b5061049a6118b1565b348015610a1457600080fd5b50610454610a23366004613387565b6119b7565b348015610a3457600080fd5b506002546103ff565b348015610a4957600080fd5b506025546103ff565b348015610a5e57600080fd5b5061049a610a6d366004613493565b6119c4565b348015610a7e57600080fd5b5061049a610a8d366004613479565b611a07565b348015610a9e57600080fd5b50610454610aad3660046132a3565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610ad757600080fd5b506103ff60195481565b348015610aed57600080fd5b5061049a610afc366004613493565b611a7b565b348015610b0d57600080fd5b506103ff610b1c3660046132db565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b5357600080fd5b5061049a611b00565b348015610b6857600080fd5b5061049a610b773660046132a3565b611b72565b348015610b8857600080fd5b5061049a610b97366004613493565b611bbd565b348015610ba857600080fd5b5061049a610bb73660046132a3565b611c61565b348015610bc857600080fd5b5061049a610bd7366004613493565b611d39565b348015610be857600080fd5b5061049a611d68565b606060108054610c0090613738565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90613738565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b5050505050905090565b6000610c90338484611da1565b5060015b92915050565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610cc490613638565b60405180910390fd5b60005b81518160ff161015610d4957600160046000848460ff1681518110610d0557634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d418161378e565b915050610cd0565b5050565b6000546001600160a01b03163314610d775760405162461bcd60e51b8152600401610cc490613638565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc35760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e185760405162461bcd60e51b8152600401610cc490613638565b610e2c600060138190556015819055601755565b610e53610e416000546001600160a01b031690565b601e546001600160a01b031683611ec5565b610e6a601454601355601654601555601854601755565b50565b6000610e7a848484611fbc565b610ecc8433610ec7856040518060600160405280602881526020016137f0602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612276565b611da1565b5060019392505050565b6000546001600160a01b03163314610f005760405162461bcd60e51b8152600401610cc490613638565b6026805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600e54821115610faf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cc4565b6000610fb96122b0565b9050610fc583826122d3565b9392505050565b6000546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b0381166000908152600b602052604090205460ff1661105e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cc4565b60005b600c54811015610d4957816001600160a01b0316600c828154811061109657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156111a557600c80546110c190600190613721565b815481106110df57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061111957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600b90925220805460ff19169055600c80548061117f57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111af81613773565b915050611061565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c90918590610ec79086612315565b336000818152600b602052604090205460ff16156112625760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cc4565b600061126d83612374565b505050506001600160a01b038416600090815260056020526040902054919250611299919050826123c3565b6001600160a01b038316600090815260056020526040902055600e546112bf90826123c3565b600e55600f546112cf9084612315565b600f55505050565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610cc490613638565b601955565b6000546001600160a01b031633146113305760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d548311156113a85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cc4565b816113c75760006113b884612374565b50939550610c94945050505050565b60006113d284612374565b50929550610c94945050505050565b6000546001600160a01b0316331461140b5760405162461bcd60e51b8152600401610cc490613638565b601383905560149290925560158190556016556017819055601855565b6000546001600160a01b031633146114525760405162461bcd60e51b8152600401610cc490613638565b601a92909255601b55601c55565b6000546001600160a01b0316331461148a5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114df5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b0381166000908152600b602052604090205460ff16156115485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cc4565b6001600160a01b038116600090815260056020526040902054156115a2576001600160a01b03811660009081526005602052604090205461158890610f48565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146116325760405162461bcd60e51b8152600401610cc490613638565b602155565b6001600160a01b0381166000908152600b602052604081205460ff161561167457506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c9490610f48565b6000546001600160a01b031633146116c05760405162461bcd60e51b8152600401610cc490613638565b600080546040516001600160a01b0390911690600080516020613818833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117225760405162461bcd60e51b8152600401610cc490613638565b602455565b6000546001600160a01b031633146117515760405162461bcd60e51b8152600401610cc490613638565b61176381670de0b6b3a7640000613702565b60255550565b6000546001600160a01b031633146117935760405162461bcd60e51b8152600401610cc490613638565b600160138190556014819055600360158190556016819055600660178190556018819055601a92909255601b55601c55600d546117de906002906117d89060646122d3565b90612405565b602455600d546117f6906001906117d89060646122d3565b602155600d5461180e906002906117d89060646122d3565b60225561181b6001611a07565b565b6000546001600160a01b031633146118475760405162461bcd60e51b8152600401610cc490613638565b6003805460ff19169055565b606060118054610c0090613738565b6000610c903384610ec785604051806060016040528060258152602001613838602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612276565b6001546001600160a01b031633146119175760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610cc4565b60025442106119685760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610cc4565b600154600080546040516001600160a01b03938416939091169160008051602061381883398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c90338484611fbc565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610cc490613638565b610e6a611a028266038d7ea4c68000613702565b612484565b6000546001600160a01b03163314611a315760405162461bcd60e51b8152600401610cc490613638565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599101610f3d565b6000546001600160a01b03163314611aa55760405162461bcd60e51b8152600401610cc490613638565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611ad481426136ca565b600255600080546040516001600160a01b0390911690600080516020613818833981519152908390a350565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610cc490613638565b6000601381905560148190556015819055601681905560178190556018819055601a819055601b819055601c819055600d546024819055602181905560225561181b90611a07565b6000546001600160a01b03163314611b9c5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611be75760405162461bcd60e51b8152600401610cc490613638565b6023819055604080518181526025918101919091527f4e756d546f6b656e7353656c6c546f416464546f4c6971756964697479206368606082015264185b99d95960da1b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610f3d565b6000546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610cc490613638565b6001600160a01b038116611cf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cc4565b600080546040516001600160a01b038085169392169160008051602061381883398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d635760405162461bcd60e51b8152600401610cc490613638565b602255565b6000546001600160a01b03163314611d925760405162461bcd60e51b8152600401610cc490613638565b6003805460ff19166001179055565b6001600160a01b038316611e035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cc4565b6001600160a01b038216611e645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cc4565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080600080600080611ed787612374565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150611f0990876123c3565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054611f389086612315565b6001600160a01b038916600090815260056020526040902055611f5a816124b6565b611f64848361253f565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fa991815260200190565b60405180910390a3505050505050505050565b6003548390839060ff1680611fe957506001600160a01b03821660009081526004602052604090205460ff165b8061200c57506001600160a01b03811660009081526004602052604090205460ff165b6120435760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610cc4565b6001600160a01b0385166000908152600a602052604090205460ff16156120c45760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e207472616e7366657220726566757365642e20526563656976657260448201526e081a5cc81bdb881c995dd85c991959608a1b6064820152608401610cc4565b6001600160a01b0385166121285760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc4565b6001600160a01b03841661218a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc4565b600083116121ec5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cc4565b60006121f730611637565b602354909150811080159081906122185750602054600160a01b900460ff16155b801561223257506020546001600160a01b03888116911614155b80156122475750602054600160a81b900460ff165b1561226257612254612563565b6023549150612262826125b3565b61226d878787612708565b50505050505050565b6000818484111561229a5760405162461bcd60e51b8152600401610cc4919061359d565b5060006122a78486613721565b95945050505050565b60008060006122bd612a0c565b90925090506122cc82826122d3565b9250505090565b6000610fc583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bc6565b60008061232283856136ca565b905083811015610fc55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc4565b600080600080600080600080600061238b8a612bf4565b92509250925060008060006123a98d86866123a46122b0565b612c36565b919f909e50909c50959a5093985091965092945050505050565b6000610fc583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612276565b60008261241457506000610c94565b60006124208385613702565b90508261242d85836136e2565b14610fc55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cc4565b6020805460ff60a01b1916600160a01b17905580156124a6576124a681612c86565b506020805460ff60a01b19169055565b60006124c06122b0565b905060006124ce8383612405565b306000908152600560205260409020549091506124eb9082612315565b30600090815260056020908152604080832093909355600b9052205460ff161561253a57306000908152600660205260409020546125299084612315565b306000908152600660205260409020555b505050565b600e5461254c90836123c3565b600e55600f5461255c9082612315565b600f555050565b6020805460ff60a01b1916600160a01b179055602654479060ff1680156125915750670de0b6b3a764000081115b156124a6576025548111156125a557506025545b6124a6611a028260646122d3565b6020805460ff60a01b1916600160a01b1790556017546015546000916125d99190612315565b9050600061260560026125ff6019546015546125f59190613721565b6117d887876122d3565b906122d3565b9050600061261384836123c3565b90504761261f82612e4e565b600061262b47836123c3565b9050600061265160026125ff6019546015546126479190613721565b6117d8868b6122d3565b905080156126a5576126638582612fd3565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b601d546017546001600160a01b03909116906108fc906126c9906117d8868b6122d3565b6040518115909202916000818181858888f193505050501580156126f1573d6000803e3d6000fd5b50506020805460ff60a01b19169055505050505050565b6001600160a01b038316600090815260086020526040902054819060ff168061274957506001600160a01b03831660009081526008602052604090205460ff165b1561276757612762600060138190556015819055601755565b6127d8565b6020546001600160a01b03848116911614156127b65760215482111561279f5760405162461bcd60e51b8152600401610cc4906135f0565b612762601a54601355601b54601555601c54601755565b6022548211156127d85760405162461bcd60e51b8152600401610cc4906135f0565b60006127ed826127e786611637565b90612315565b6001600160a01b03861660009081526009602052604090205490915060ff1615801561283257506001600160a01b03841660009081526009602052604090205460ff16155b1561289a5760245481111561289a5760405162461bcd60e51b815260206004820152602860248201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860448201526719481dd85b1b195d60c21b6064820152608401610cc4565b6001600160a01b0385166000908152600b602052604090205460ff1680156128db57506001600160a01b0384166000908152600b602052604090205460ff16155b156128f0576128eb8585856130b0565b6129ee565b6001600160a01b0385166000908152600b602052604090205460ff1615801561293157506001600160a01b0384166000908152600b602052604090205460ff165b15612941576128eb858585613123565b6001600160a01b0385166000908152600b602052604090205460ff1615801561298357506001600160a01b0384166000908152600b602052604090205460ff16155b15612993576128eb858585611ec5565b6001600160a01b0385166000908152600b602052604090205460ff1680156129d357506001600160a01b0384166000908152600b602052604090205460ff165b156129e3576128eb8585856131cc565b6129ee858585611ec5565b612a05601454601355601654601555601854601755565b5050505050565b600e54600d546000918291825b600c54811015612b96578260056000600c8481548110612a4957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612ac257508160066000600c8481548110612a9b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ad857600e54600d54945094505050509091565b612b2c60056000600c8481548110612b0057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906123c3565b9250612b8260066000600c8481548110612b5657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906123c3565b915080612b8e81613773565b915050612a19565b50600d54600e54612ba6916122d3565b821015612bbd57600e54600d549350935050509091565b90939092509050565b60008183612be75760405162461bcd60e51b8152600401610cc4919061359d565b5060006122a784866136e2565b600080600080612c038561323f565b90506000612c108661325b565b90506000612c2882612c2289866123c3565b906123c3565b979296509094509092505050565b6000808080612c458886612405565b90506000612c538887612405565b90506000612c618888612405565b90506000612c7382612c2286866123c3565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683375050601f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612ceb57600080fd5b505afa158015612cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2391906132bf565b81600081518110612d4457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d8657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f54601e549082169163b6f9de95918591600091869116612dc04261012c612315565b6040518663ffffffff1660e01b8152600401612ddf9493929190613568565b6000604051808303818588803b158015612df857600080fd5b505af1158015612e0c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612e4292919061366d565b60405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e9157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ee557600080fd5b505afa158015612ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1d91906132bf565b81600181518110612f3e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f54612f649130911684611da1565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f9d90859060009086903090429060040161368e565b600060405180830381600087803b158015612fb757600080fd5b505af1158015612fcb573d6000803e3d6000fd5b505050505050565b601f54612feb9030906001600160a01b031684611da1565b601f546001600160a01b031663f305d7198230856000806130146000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561307757600080fd5b505af115801561308b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0591906134f8565b6000806000806000806130c287612374565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506130f490886123c3565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054611f0990876123c3565b60008060008060008061313587612374565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061316790876123c3565b6001600160a01b03808b16600090815260056020908152604080832094909455918b1681526006909152205461319d9084612315565b6001600160a01b038916600090815260066020908152604080832093909355600590522054611f389086612315565b6000806000806000806131de87612374565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061321090886123c3565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461316790876123c3565b6000610c9460646125ff6013548561240590919063ffffffff16565b6000610c9460646125ff61327c60175460155461231590919063ffffffff16565b8590612405565b803561328e816137da565b919050565b8035801515811461328e57600080fd5b6000602082840312156132b4578081fd5b8135610fc5816137da565b6000602082840312156132d0578081fd5b8151610fc5816137da565b600080604083850312156132ed578081fd5b82356132f8816137da565b91506020830135613308816137da565b809150509250929050565b600080600060608486031215613327578081fd5b8335613332816137da565b92506020840135613342816137da565b929592945050506040919091013590565b60008060408385031215613365578182fd5b8235613370816137da565b915061337e60208401613293565b90509250929050565b60008060408385031215613399578182fd5b82356133a4816137da565b946020939093013593505050565b600060208083850312156133c4578182fd5b823567ffffffffffffffff808211156133db578384fd5b818501915085601f8301126133ee578384fd5b813581811115613400576134006137c4565b8060051b604051601f19603f83011681018181108582111715613425576134256137c4565b604052828152858101935084860182860187018a1015613443578788fd5b8795505b8386101561346c5761345881613283565b855260019590950194938601938601613447565b5098975050505050505050565b60006020828403121561348a578081fd5b610fc582613293565b6000602082840312156134a4578081fd5b5035919050565b600080604083850312156134bd578182fd5b8235915061337e60208401613293565b6000806000606084860312156134e1578283fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350c578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b8381101561355d5781516001600160a01b031687529582019590820190600101613538565b509495945050505050565b8481526080602082015260006135816080830186613525565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156135c9578581018301518582016040015282016135ad565b818111156135da5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006136866040830184613525565b949350505050565b85815284602082015260a0604082015260006136ad60a0830186613525565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136dd576136dd6137ae565b500190565b6000826136fd57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561371c5761371c6137ae565b500290565b600082821015613733576137336137ae565b500390565b600181811c9082168061374c57607f821691505b6020821081141561376d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613787576137876137ae565b5060010190565b600060ff821660ff8114156137a5576137a56137ae565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e6a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122089da7e1a454b6472fe38dd025e0d9f2d4b13926268e1923a23bb8ebde1867b4264736f6c63430008040033

Deployed Bytecode Sourcemap

15489:23173:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17671:51;;;;;;;;;;;;;;;;;;;15983:25:1;;;15971:2;15956:18;17671:51:0;;;;;;;;21204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22120:161::-;;;;;;;;;;-1:-1:-1;22120:161:0;;;;;:::i;:::-;;:::i;:::-;;;6544:14:1;;6537:22;6519:41;;6507:2;6492:18;22120:161:0;6474:92:1;17129:30:0;;;;;;;;;;;;;;;;15296:186;;;;;;;;;;-1:-1:-1;15296:186:0;;;;;:::i;:::-;;:::i;:::-;;23241:87;;;;;;;;;;-1:-1:-1;23310:10:0;;23241:87;;17441:41;;;;;;;;;;-1:-1:-1;17441:41:0;;;;-1:-1:-1;;;;;17441:41:0;;;;;;-1:-1:-1;;;;;5499:32:1;;;5481:51;;5469:2;5454:18;17441:41:0;5436:102:1;17166:36:0;;;;;;;;;;;;;;;;21481:95;;;;;;;;;;-1:-1:-1;21561:7:0;;21481:95;;17802:46;;;;;;;;;;;;;;;;35739:129;;;;;;;;;;-1:-1:-1;35739:129:0;;;;;:::i;:::-;;:::i;16986:32::-;;;;;;;;;;;;;;;;16182:207;;;;;;;;;;-1:-1:-1;16182:207:0;;;;;:::i;:::-;;:::i;33425:182::-;;;;;;;;;;-1:-1:-1;33425:182:0;;;;;:::i;:::-;;:::i;22289:313::-;;;;;;;;;;-1:-1:-1;22289:313:0;;;;;:::i;:::-;;:::i;38383:150::-;;;;;;;;;;-1:-1:-1;38383:150:0;;;;;:::i;:::-;;:::i;24165:253::-;;;;;;;;;;-1:-1:-1;24165:253:0;;;;;:::i;:::-;;:::i;21390:83::-;;;;;;;;;;-1:-1:-1;21456:9:0;;21390:83;;21456:9;;;;17409:36:1;;17397:2;17382:18;21390:83:0;17364:87:1;24785:479:0;;;;;;;;;;-1:-1:-1;24785:479:0;;;;;:::i;:::-;;:::i;22610:218::-;;;;;;;;;;-1:-1:-1;22610:218:0;;;;;:::i;:::-;;:::i;16798:26::-;;;;;;;;;;;;;;;;23336:377;;;;;;;;;;-1:-1:-1;23336:377:0;;;;;:::i;:::-;;:::i;17209:36::-;;;;;;;;;;;;;;;;35996:106;;;;;;;;;;-1:-1:-1;35996:106:0;;;;;:::i;:::-;;:::i;35310:117::-;;;;;;;;;;-1:-1:-1;35310:117:0;;;;;:::i;:::-;;:::i;23721:436::-;;;;;;;;;;-1:-1:-1;23721:436:0;;;;;:::i;:::-;;:::i;14795:26::-;;;;;;;;;;-1:-1:-1;14795:26:0;;;;;;;;19589:350;;;;;;;;;;-1:-1:-1;19589:350:0;;;;;:::i;:::-;;:::i;17489:28::-;;;;;;;;;;-1:-1:-1;17489:28:0;;;;-1:-1:-1;;;;;17489:28:0;;;17558:41;;;;;;;;;;-1:-1:-1;17558:41:0;;;;-1:-1:-1;;;17558:41:0;;;;;;19947:234;;;;;;;;;;-1:-1:-1;19947:234:0;;;;;:::i;:::-;;:::i;35579:144::-;;;;;;;;;;-1:-1:-1;35579:144:0;;;;;:::i;:::-;;:::i;24432:339::-;;;;;;;;;;-1:-1:-1;24432:339:0;;;;;:::i;:::-;;:::i;28768:123::-;;;;;;;;;;-1:-1:-1;28768:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;28856:27:0;28832:4;28856:27;;;:18;:27;;;;;;;;;28768:123;35883:105;;;;;;;;;;-1:-1:-1;35883:105:0;;;;;:::i;:::-;;:::i;36964:33::-;;;;;;;;;;-1:-1:-1;36964:33:0;;;;;;;;16885:32;;;;;;;;;;;;;;;;21584:198;;;;;;;;;;-1:-1:-1;21584:198:0;;;;;:::i;:::-;;:::i;5726:148::-;;;;;;;;;;;;;:::i;36623:107::-;;;;;;;;;;-1:-1:-1;36623:107:0;;;;;:::i;:::-;;:::i;17612:51::-;;;;;;;;;;;;;;;;17255:93;;;;;;;;;;-1:-1:-1;17255:93:0;;;;-1:-1:-1;;;;;17255:93:0;;;38242:133;;;;;;;;;;-1:-1:-1;38242:133:0;;;;;:::i;:::-;;:::i;17355:71::-;;;;;;;;;;-1:-1:-1;17355:71:0;;;;-1:-1:-1;;;;;17355:71:0;;;23113:120;;;;;;;;;;-1:-1:-1;23113:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23205:20:0;23181:4;23205:20;;;:11;:20;;;;;;;;;23113:120;20678:518;;;;;;;;;;;;;:::i;15215:73::-;;;;;;;;;;;;;:::i;5510:79::-;;;;;;;;;;-1:-1:-1;5548:7:0;5575:6;-1:-1:-1;;;;;5575:6:0;5510:79;;21295:87;;;;;;;;;;;;;:::i;22836:269::-;;;;;;;;;;-1:-1:-1;22836:269:0;;;;;:::i;:::-;;:::i;6475:305::-;;;;;;;;;;;;;:::i;21790:167::-;;;;;;;;;;-1:-1:-1;21790:167:0;;;;;:::i;:::-;;:::i;6136:89::-;;;;;;;;;;-1:-1:-1;6208:9:0;;6136:89;;37054:108;;;;;;;;;;-1:-1:-1;37137:17:0;;37054:108;;38545:114;;;;;;;;;;-1:-1:-1;38545:114:0;;;;;:::i;:::-;;:::i;36221:171::-;;;;;;;;;;-1:-1:-1;36221:171:0;;;;;:::i;:::-;;:::i;16066:102::-;;;;;;;;;;-1:-1:-1;16066:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;16145:15:0;16121:4;16145:15;;;:9;:15;;;;;;;;;16066:102;17087:33;;;;;;;;;;;;;;;;6235:226;;;;;;;;;;-1:-1:-1;6235:226:0;;;;;:::i;:::-;;:::i;21965:143::-;;;;;;;;;;-1:-1:-1;21965:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22073:18:0;;;22046:7;22073:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21965:143;20191:477;;;;;;;;;;;;;:::i;35445:116::-;;;;;;;;;;-1:-1:-1;35445:116:0;;;;;:::i;:::-;;:::i;36400:215::-;;;;;;;;;;-1:-1:-1;36400:215:0;;;;;:::i;:::-;;:::i;5884:244::-;;;;;;;;;;-1:-1:-1;5884:244:0;;;;;:::i;:::-;;:::i;36110:103::-;;;;;;;;;;-1:-1:-1;36110:103:0;;;;;:::i;:::-;;:::i;15135:72::-;;;;;;;;;;;;;:::i;21204:83::-;21241:13;21274:5;21267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21204:83;:::o;22120:161::-;22195:4;22212:39;2500:10;22235:7;22244:6;22212:8;:39::i;:::-;-1:-1:-1;22269:4:0;22120:161;;;;;:::o;15296:186::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;;;;;;;;;15383:7:::1;15379:96;15400:6;:13;15396:1;:17;;;15379:96;;;15459:4;15435:10;:21;15446:6;15453:1;15446:9;;;;;;;;-1:-1:-1::0;;;15446:9:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;15435:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;15435:21:0;:28;;-1:-1:-1;;15435:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15415:3;::::1;::::0;::::1;:::i;:::-;;;;15379:96;;;;15296:186:::0;:::o;35739:129::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;35824:15:::1;:36:::0;;-1:-1:-1;;;;;;35824:36:0::1;-1:-1:-1::0;;;;;35824:36:0;;;::::1;::::0;;;::::1;::::0;;35739:129::o;16182:207::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16358:15:0;;;::::1;;::::0;;;:9:::1;:15;::::0;;;;:23;;-1:-1:-1;;16358:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16182:207::o;33425:182::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;33498:14:::1;19157:1:::0;19147:7;:11;;;19169:13;:17;;;19197:13;:17;19104:118;33498:14:::1;33523:50;33541:7;5548::::0;5575:6;-1:-1:-1;;;;;5575:6:0;;5510:79;33541:7:::1;33550:10;::::0;-1:-1:-1;;;;;33550:10:0::1;33562::::0;33523:17:::1;:50::i;:::-;33584:15;19460::::0;;19450:7;:25;19502:21;;19486:13;:37;19550:21;;19534:13;:37;19406:173;33584:15:::1;33425:182:::0;:::o;22289:313::-;22387:4;22404:36;22414:6;22422:9;22433:6;22404:9;:36::i;:::-;22451:121;22460:6;2500:10;22482:89;22520:6;22482:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22482:19:0;;;;;;:11;:19;;;;;;;;2500:10;22482:33;;;;;;;;;;:37;:89::i;:::-;22451:8;:121::i;:::-;-1:-1:-1;22590:4:0;22289:313;;;;;:::o;38383:150::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;38453:14:::1;:25:::0;;-1:-1:-1;;38453:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38494:31:::1;::::0;6519:41:1;;;38494:31:0::1;::::0;6507:2:1;6492:18;38494:31:0::1;;;;;;;;38383:150:::0;:::o;24165:253::-;24231:7;24270;;24259;:18;;24251:73;;;;-1:-1:-1;;;24251:73:0;;9015:2:1;24251:73:0;;;8997:21:1;9054:2;9034:18;;;9027:30;9093:34;9073:18;;;9066:62;-1:-1:-1;;;9144:18:1;;;9137:40;9194:19;;24251:73:0;8987:232:1;24251:73:0;24335:19;24358:10;:8;:10::i;:::-;24335:33;-1:-1:-1;24386:24:0;:7;24335:33;24386:11;:24::i;:::-;24379:31;24165:253;-1:-1:-1;;;24165:253:0:o;24785:479::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24867:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24859:60;;;::::0;-1:-1:-1;;;24859:60:0;;11344:2:1;24859:60:0::1;::::0;::::1;11326:21:1::0;11383:2;11363:18;;;11356:30;11422:29;11402:18;;;11395:57;11469:18;;24859:60:0::1;11316:177:1::0;24859:60:0::1;24935:9;24930:327;24954:9;:16:::0;24950:20;::::1;24930:327;;;25012:7;-1:-1:-1::0;;;;;24996:23:0::1;:9;25006:1;24996:12;;;;;;-1:-1:-1::0;;;24996:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24996:12:0::1;:23;24992:254;;;25055:9;25065:16:::0;;:20:::1;::::0;25084:1:::1;::::0;25065:20:::1;:::i;:::-;25055:31;;;;;;-1:-1:-1::0;;;25055:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25040:9:::1;:12:::0;;-1:-1:-1;;;;;25055:31:0;;::::1;::::0;25050:1;;25040:12;::::1;;;-1:-1:-1::0;;;25040:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25040:46:0::1;-1:-1:-1::0;;;;;25040:46:0;;::::1;;::::0;;25105:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25144:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25144:28:0::1;::::0;;25191:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;25191:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25191:15:0;;;;;-1:-1:-1;;;;;;25191:15:0::1;::::0;;;;;15379:96:::1;15296:186:::0;:::o;24992:254::-:1;24972:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24930:327;;22610:218:::0;2500:10;22698:4;22747:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22747:34:0;;;;;;;;;;22698:4;;22715:83;;22738:7;;22747:50;;22786:10;22747:38;:50::i;23336:377::-;2500:10;23388:14;23437:19;;;:11;:19;;;;;;;;23436:20;23428:77;;;;-1:-1:-1;;;23428:77:0;;15222:2:1;23428:77:0;;;15204:21:1;15261:2;15241:18;;;15234:30;15300:34;15280:18;;;15273:62;-1:-1:-1;;;15351:18:1;;;15344:42;15403:19;;23428:77:0;15194:234:1;23428:77:0;23517:15;23541:19;23552:7;23541:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23589:15:0;;;;;;:7;:15;;;;;;23516:44;;-1:-1:-1;23589:28:0;;:15;-1:-1:-1;23516:44:0;23589:19;:28::i;:::-;-1:-1:-1;;;;;23571:15:0;;;;;;:7;:15;;;;;:46;23638:7;;:20;;23650:7;23638:11;:20::i;:::-;23628:7;:30;23682:10;;:23;;23697:7;23682:14;:23::i;:::-;23669:10;:36;-1:-1:-1;;;23336:377:0:o;35996:106::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;36071:14:::1;:23:::0;35996:106::o;35310:117::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35385:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35385:34:0::1;35415:4;35385:34;::::0;;35310:117::o;23721:436::-;23811:7;23850;;23839;:18;;23831:62;;;;-1:-1:-1;;;23831:62:0;;11700:2:1;23831:62:0;;;11682:21:1;11739:2;11719:18;;;11712:30;11778:33;11758:18;;;11751:61;11829:18;;23831:62:0;11672:181:1;23831:62:0;23909:17;23904:246;;23944:15;23968:19;23979:7;23968:10;:19::i;:::-;-1:-1:-1;23943:44:0;;-1:-1:-1;24002:14:0;;-1:-1:-1;;;;;24002:14:0;23904:246;24051:23;24082:19;24093:7;24082:10;:19::i;:::-;-1:-1:-1;24049:52:0;;-1:-1:-1;24116:22:0;;-1:-1:-1;;;;;24116:22:0;19589:350;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;19708:7:::1;:16:::0;;;19735:15:::1;:24:::0;;;;19770:13:::1;:28:::0;;;19809:21:::1;:36:::0;19856:13:::1;:28:::0;;;19895:21:::1;:36:::0;19589:350::o;19947:234::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;20067:11:::1;:20:::0;;;;20098:17:::1;:32:::0;20141:17:::1;:32:::0;19947:234::o;35579:144::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35675:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;35675:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35579:144::o;24432:339::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24521:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24520:21;24512:61;;;::::0;-1:-1:-1;;;24512:61:0;;11344:2:1;24512:61:0::1;::::0;::::1;11326:21:1::0;11383:2;11363:18;;;11356:30;11422:29;11402:18;;;11395:57;11469:18;;24512:61:0::1;11316:177:1::0;24512:61:0::1;-1:-1:-1::0;;;;;24587:16:0;::::1;24606:1;24587:16:::0;;;:7:::1;:16;::::0;;;;;:20;24584:108:::1;;-1:-1:-1::0;;;;;24663:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24643:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24624:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24584:108:::1;-1:-1:-1::0;;;;;24702:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24702:27:0::1;24725:4;24702:27:::0;;::::1;::::0;;;24740:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24740:23:0::1;::::0;;::::1;::::0;;24432:339::o;35883:105::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;35957:14:::1;:23:::0;35883:105::o;21584:198::-;-1:-1:-1;;;;;21674:20:0;;21650:7;21674:20;;;:11;:20;;;;;;;;21670:49;;;-1:-1:-1;;;;;;21703:16:0;;;;;:7;:16;;;;;;;21584:198::o;21670:49::-;-1:-1:-1;;;;;21757:16:0;;;;;;:7;:16;;;;;;21737:37;;:19;:37::i;5726:148::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;5833:1:::1;5817:6:::0;;5796:40:::1;::::0;-1:-1:-1;;;;;5817:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;5796:40:0;5833:1;;5796:40:::1;5864:1;5847:19:::0;;-1:-1:-1;;;;;;5847:19:0::1;::::0;;5726:148::o;36623:107::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;36705:8:::1;:17:::0;36623:107::o;38242:133::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;38346:21:::1;:12:::0;38361:6:::1;38346:21;:::i;:::-;38326:17;:41:::0;-1:-1:-1;38242:133:0:o;20678:518::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;20752:1:::1;20742:7;:11:::0;;;20764:15:::1;:19:::0;;;20810:1:::1;20794:13;:17:::0;;;20822:21:::1;:25:::0;;;20874:1:::1;20858:13;:17:::0;;;20886:21:::1;:25:::0;;;20922:11:::1;:15:::0;;;;20948:17:::1;:21:::0;20980:17:::1;:21:::0;21023:7:::1;::::0;:23:::1;::::0;21044:1:::1;::::0;21023:16:::1;::::0;21035:3:::1;21023:11;:16::i;:::-;:20:::0;::::1;:23::i;:::-;21012:8;:34:::0;21074:7:::1;::::0;:23:::1;::::0;21095:1:::1;::::0;21074:16:::1;::::0;21086:3:::1;21074:11;:16::i;:23::-;21057:14;:40:::0;21124:7:::1;::::0;:23:::1;::::0;21145:1:::1;::::0;21124:16:::1;::::0;21136:3:::1;21124:11;:16::i;:23::-;21108:13;:39:::0;21158:30:::1;21183:4;21158:24;:30::i;:::-;20678:518::o:0;15215:73::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;15266:6:::1;:14:::0;;-1:-1:-1;;15266:14:0::1;::::0;;15215:73::o;21295:87::-;21334:13;21367:7;21360:14;;;;;:::i;22836:269::-;22929:4;22946:129;2500:10;22969:7;22978:96;23017:15;22978:96;;;;;;;;;;;;;;;;;2500:10;22978:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22978:34:0;;;;;;;;;;;;:38;:96::i;6475:305::-;6527:14;;-1:-1:-1;;;;;6527:14:0;6545:10;6527:28;6519:76;;;;-1:-1:-1;;;6519:76:0;;15635:2:1;6519:76:0;;;15617:21:1;15674:2;15654:18;;;15647:30;15713:34;15693:18;;;15686:62;-1:-1:-1;;;15764:18:1;;;15757:33;15807:19;;6519:76:0;15607:225:1;6519:76:0;6632:9;;6614:15;:27;6606:72;;;;-1:-1:-1;;;6606:72:0;;14453:2:1;6606:72:0;;;14435:21:1;14492:2;14472:18;;;14465:30;14531:33;14511:18;;;14504:61;14582:18;;6606:72:0;14425:181:1;6606:72:0;6723:14;;;6715:6;;6694:44;;-1:-1:-1;;;;;6723:14:0;;;;6715:6;;;;-1:-1:-1;;;;;;;;;;;6694:44:0;;6758:14;;;6749:23;;-1:-1:-1;;;;;;6749:23:0;-1:-1:-1;;;;;6758:14:0;;;6749:23;;;;;;6475:305::o;21790:167::-;21868:4;21885:42;2500:10;21909:9;21920:6;21885:9;:42::i;38545:114::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;38621:30:::1;38635:15;:6:::0;38644::::1;38635:15;:::i;:::-;38621:13;:30::i;36221:171::-:0;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;36298:21:::1;:32:::0;;-1:-1:-1;;;;36298:32:0::1;-1:-1:-1::0;;;36298:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;36346:38:::1;::::0;6519:41:1;;;36346:38:0::1;::::0;6492:18:1;36346:38:0::1;6474:92:1::0;6235:226:0;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;6316:6:::1;::::0;;;6299:23;;-1:-1:-1;;;;;;6299:23:0;;::::1;-1:-1:-1::0;;;;;6316:6:0;::::1;6299:23;::::0;;;6333:19:::1;::::0;;6375:22:::1;6393:4:::0;6375:15:::1;:22;:::i;:::-;6363:9;:34:::0;6450:1:::1;6434:6:::0;;6413:40:::1;::::0;-1:-1:-1;;;;;6434:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6413:40:0;6450:1;;6413:40:::1;6235:226:::0;:::o;20191:477::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;20270:1:::1;20260:7;:11:::0;;;20282:15:::1;:19:::0;;;20312:13:::1;:17:::0;;;20340:21:::1;:25:::0;;;20376:13:::1;:17:::0;;;20404:21:::1;:25:::0;;;20440:11:::1;:15:::0;;;20466:17:::1;:21:::0;;;20498:17:::1;:21:::0;;;20542:7:::1;::::0;20531:8:::1;:18:::0;;;20560:14:::1;:24:::0;;;20595:13:::1;:23:::0;20629:31:::1;::::0;:24:::1;:31::i;35445:116::-:0;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35518:27:0::1;35548:5;35518:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35518:35:0::1;::::0;;35445:116::o;36400:215::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;36497:29:::1;:38:::0;;;36555:52:::1;::::0;;8545:21:1;;;8602:2;8582:18;;;8575:30;;;;8641:34;8636:2;8621:18;;8614:62;-1:-1:-1;;;8707:3:1;8692:19;;8685:36;8788:4;8773:20;;8766:36;;;36555:52:0::1;::::0;8753:3:1;8738:19;36555:52:0::1;8535:273:1::0;5884:244:0;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5973:22:0;::::1;5965:73;;;::::0;-1:-1:-1;;;5965:73:0;;9426:2:1;5965:73:0::1;::::0;::::1;9408:21:1::0;9465:2;9445:18;;;9438:30;9504:34;9484:18;;;9477:62;-1:-1:-1;;;9555:18:1;;;9548:36;9601:19;;5965:73:0::1;9398:228:1::0;5965:73:0::1;6075:6;::::0;;6054:38:::1;::::0;-1:-1:-1;;;;;6054:38:0;;::::1;::::0;6075:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6054:38:0;::::1;6103:6;:17:::0;;-1:-1:-1;;;;;;6103:17:0::1;-1:-1:-1::0;;;;;6103:17:0;;;::::1;::::0;;;::::1;::::0;;5884:244::o;36110:103::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;36183:13:::1;:22:::0;36110:103::o;15135:72::-;5637:6;;-1:-1:-1;;;;;5637:6:0;2500:10;5637:22;5629:67;;;;-1:-1:-1;;;5629:67:0;;;;;;;:::i;:::-;15186:6:::1;:13:::0;;-1:-1:-1;;15186:13:0::1;15195:4;15186:13;::::0;;15135:72::o;28899:337::-;-1:-1:-1;;;;;28992:19:0;;28984:68;;;;-1:-1:-1;;;28984:68:0;;14048:2:1;28984:68:0;;;14030:21:1;14087:2;14067:18;;;14060:30;14126:34;14106:18;;;14099:62;-1:-1:-1;;;14177:18:1;;;14170:34;14221:19;;28984:68:0;14020:226:1;28984:68:0;-1:-1:-1;;;;;29071:21:0;;29063:68;;;;-1:-1:-1;;;29063:68:0;;9833:2:1;29063:68:0;;;9815:21:1;9872:2;9852:18;;;9845:30;9911:34;9891:18;;;9884:62;-1:-1:-1;;;9962:18:1;;;9955:32;10004:19;;29063:68:0;9805:224:1;29063:68:0;-1:-1:-1;;;;;29144:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29196:32;;15983:25:1;;;29196:32:0;;15956:18:1;29196:32:0;;;;;;;28899:337;;;:::o;33615:502::-;33714:15;33731:23;33756:12;33770:23;33795:12;33809:18;33831:19;33842:7;33831:10;:19::i;:::-;-1:-1:-1;;;;;33879:15:0;;;;;;:7;:15;;;;;;33713:137;;-1:-1:-1;33713:137:0;;-1:-1:-1;33713:137:0;;-1:-1:-1;33713:137:0;-1:-1:-1;33713:137:0;-1:-1:-1;33713:137:0;-1:-1:-1;33879:28:0;;33713:137;33879:19;:28::i;:::-;-1:-1:-1;;;;;33861:15:0;;;;;;;:7;:15;;;;;;:46;;;;33939:18;;;;;;;:39;;33962:15;33939:22;:39::i;:::-;-1:-1:-1;;;;;33918:18:0;;;;;;:7;:18;;;;;:60;33989:26;34004:10;33989:14;:26::i;:::-;34026:23;34038:4;34044;34026:11;:23::i;:::-;34082:9;-1:-1:-1;;;;;34065:44:0;34074:6;-1:-1:-1;;;;;34065:44:0;;34093:15;34065:44;;;;15983:25:1;;15971:2;15956:18;;15938:76;34065:44:0;;;;;;;;33615:502;;;;;;;;;:::o;29244:908::-;14937:6;;29324:4;;29330:2;;14937:6;;;:26;;-1:-1:-1;;;;;;14947:16:0;;;;;;:10;:16;;;;;;;;14937:26;:44;;;-1:-1:-1;;;;;;14967:14:0;;;;;;:10;:14;;;;;;;;14937:44;14929:65;;;;-1:-1:-1;;;14929:65:0;;11008:2:1;14929:65:0;;;10990:21:1;11047:1;11027:18;;;11020:29;-1:-1:-1;;;11065:18:1;;;11058:38;11113:18;;14929:65:0;10980:157:1;14929:65:0;-1:-1:-1;;;;;16145:15:0;;16121:4;16145:15;;;:9;:15;;;;;;;;29360:17:::1;29351:78;;;::::0;-1:-1:-1;;;29351:78:0;;10236:2:1;29351:78:0::1;::::0;::::1;10218:21:1::0;10275:2;10255:18;;;10248:30;10314:34;10294:18;;;10287:62;-1:-1:-1;;;10365:18:1;;;10358:45;10420:19;;29351:78:0::1;10208:237:1::0;29351:78:0::1;-1:-1:-1::0;;;;;29448:18:0;::::1;29440:68;;;::::0;-1:-1:-1;;;29440:68:0;;13642:2:1;29440:68:0::1;::::0;::::1;13624:21:1::0;13681:2;13661:18;;;13654:30;13720:34;13700:18;;;13693:62;-1:-1:-1;;;13771:18:1;;;13764:35;13816:19;;29440:68:0::1;13614:227:1::0;29440:68:0::1;-1:-1:-1::0;;;;;29527:16:0;::::1;29519:64;;;::::0;-1:-1:-1;;;29519:64:0;;8131:2:1;29519:64:0::1;::::0;::::1;8113:21:1::0;8170:2;8150:18;;;8143:30;8209:34;8189:18;;;8182:62;-1:-1:-1;;;8260:18:1;;;8253:33;8303:19;;29519:64:0::1;8103:225:1::0;29519:64:0::1;29611:1;29602:6;:10;29594:64;;;::::0;-1:-1:-1;;;29594:64:0;;13232:2:1;29594:64:0::1;::::0;::::1;13214:21:1::0;13271:2;13251:18;;;13244:30;13310:34;13290:18;;;13283:62;-1:-1:-1;;;13361:18:1;;;13354:39;13410:19;;29594:64:0::1;13204:231:1::0;29594:64:0::1;29669:28;29700:24;29718:4;29700:9;:24::i;:::-;29794:29;::::0;29669:55;;-1:-1:-1;29770:53:0;::::1;::::0;::::1;::::0;;;29838:41:::1;;-1:-1:-1::0;29863:16:0::1;::::0;-1:-1:-1;;;29863:16:0;::::1;;;29862:17;29838:41;:66;;;;-1:-1:-1::0;29891:13:0::1;::::0;-1:-1:-1;;;;;29883:21:0;;::::1;29891:13:::0;::::1;29883:21;;29838:66;:91;;;;-1:-1:-1::0;29908:21:0::1;::::0;-1:-1:-1;;;29908:21:0;::::1;;;29838:91;29834:268;;;29955:17;:15;:17::i;:::-;30010:29;;29987:52;;30054:36;30069:20;30054:14;:36::i;:::-;30112:32;30127:4;30133:2;30137:6;30112:14;:32::i;:::-;15005:1;;29244:908:::0;;;;;:::o;1176:192::-;1262:7;1298:12;1290:6;;;;1282:29;;;;-1:-1:-1;;;1282:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1322:9:0;1334:5;1338:1;1334;:5;:::i;:::-;1322:17;1176:192;-1:-1:-1;;;;;1176:192:0:o;27338:163::-;27379:7;27400:15;27417;27436:19;:17;:19::i;:::-;27399:56;;-1:-1:-1;27399:56:0;-1:-1:-1;27473:20:0;27399:56;;27473:11;:20::i;:::-;27466:27;;;;27338:163;:::o;1634:132::-;1692:7;1719:39;1723:1;1726;1719:39;;;;;;;;;;;;;;;;;:3;:39::i;845:179::-;903:7;;935:5;939:1;935;:5;:::i;:::-;923:17;;964:1;959;:6;;951:46;;;;-1:-1:-1;;;951:46:0;;10652:2:1;951:46:0;;;10634:21:1;10691:2;10671:18;;;10664:30;10730:29;10710:18;;;10703:57;10777:18;;951:46:0;10624:177:1;26118:431:0;26183:7;26192;26201;26210;26219;26228;26255:23;26280:12;26294:18;26316:20;26328:7;26316:11;:20::i;:::-;26254:82;;;;;;26348:15;26365:23;26390:12;26406:50;26418:7;26427:4;26433:10;26445;:8;:10::i;:::-;26406:11;:50::i;:::-;26347:109;;;;-1:-1:-1;26347:109:0;;-1:-1:-1;26507:15:0;;-1:-1:-1;26524:4:0;;-1:-1:-1;26530:10:0;;-1:-1:-1;26118:431:0;;-1:-1:-1;;;;;26118:431:0:o;1032:136::-;1090:7;1117:43;1121:1;1124;1117:43;;;;;;;;;;;;;;;;;:3;:43::i;1376:250::-;1434:7;1458:6;1454:47;;-1:-1:-1;1488:1:0;1481:8;;1454:47;1513:9;1525:5;1529:1;1525;:5;:::i;:::-;1513:17;-1:-1:-1;1558:1:0;1549:5;1553:1;1513:17;1549:5;:::i;:::-;:10;1541:56;;;;-1:-1:-1;;;1541:56:0;;12469:2:1;1541:56:0;;;12451:21:1;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;-1:-1:-1;;;12598:18:1;;;12591:31;12639:19;;1541:56:0;12441:223:1;37170:141:0;18156:16;:23;;-1:-1:-1;;;;18156:23:0;-1:-1:-1;;;18156:23:0;;;37247:10;;37243:61:::1;;37271:24;37288:6;37271:16;:24::i;:::-;-1:-1:-1::0;18202:16:0;:24;;-1:-1:-1;;;;18202:24:0;;;37170:141::o;28082:355::-;28145:19;28168:10;:8;:10::i;:::-;28145:33;-1:-1:-1;28189:18:0;28210:27;:10;28145:33;28210:14;:27::i;:::-;28289:4;28273:22;;;;:7;:22;;;;;;28189:48;;-1:-1:-1;28273:38:0;;28189:48;28273:26;:38::i;:::-;28264:4;28248:22;;;;:7;:22;;;;;;;;:63;;;;28325:11;:26;;;;;;28322:107;;;28407:4;28391:22;;;;:7;:22;;;;;;:38;;28418:10;28391:26;:38::i;:::-;28382:4;28366:22;;;;:7;:22;;;;;:63;28322:107;28082:355;;;:::o;25963:147::-;26041:7;;:17;;26053:4;26041:11;:17::i;:::-;26031:7;:27;26082:10;;:20;;26097:4;26082:14;:20::i;:::-;26069:10;:33;-1:-1:-1;;25963:147:0:o;37319:358::-;18156:16;:23;;-1:-1:-1;;;;18156:23:0;-1:-1:-1;;;18156:23:0;;;37436:14:::1;::::0;37400:21:::1;::::0;18156:23;37436:14:::1;:47:::0;::::1;;;;37472:10;37454:7;:29;37436:47;37432:238;;;37528:17;;37518:7;:27;37514:99;;;-1:-1:-1::0;37576:17:0::1;::::0;37514:99:::1;37627:31;37641:16;:7:::0;37653:3:::1;37641:11;:16::i;30172:904::-:0;18156:16;:23;;-1:-1:-1;;;;18156:23:0;-1:-1:-1;;;18156:23:0;;;30298:13:::1;::::0;30280::::1;::::0;18156:23;;30280:32:::1;::::0;:13;:17:::1;:32::i;:::-;30263:49;;30323:27;30353:73;30424:1;30353:66;30404:14;;30390:13;;:28;;;;:::i;:::-;30353:32;:20:::0;30378:6;30353:24:::1;:32::i;:66::-;:70:::0;::::1;:73::i;:::-;30323:103:::0;-1:-1:-1;30437:22:0::1;30462:45;:20:::0;30323:103;30462:24:::1;:45::i;:::-;30437:70:::0;-1:-1:-1;30543:21:0::1;30575:32;30437:70:::0;30575:16:::1;:32::i;:::-;30618:18;30639:41;:21;30665:14:::0;30639:25:::1;:41::i;:::-;30618:62;;30691:23;30717:63;30778:1;30717:56;30758:14;;30744:13;;:28;;;;:::i;:::-;30717:22;:10:::0;30732:6;30717:14:::1;:22::i;:63::-;30691:89:::0;-1:-1:-1;30794:17:0;;30791:200:::1;;30837:50;30850:19;30871:15;30837:12;:50::i;:::-;30906:73;::::0;;17145:25:1;;;17201:2;17186:18;;17179:34;;;17229:18;;;17222:34;;;30906:73:0::1;::::0;17133:2:1;17118:18;30906:73:0::1;;;;;;;30791:200;31001:15;::::0;31053:13:::1;::::0;-1:-1:-1;;;;;31001:15:0;;::::1;::::0;:67:::1;::::0;31026:41:::1;::::0;:22:::1;:10:::0;31041:6;31026:14:::1;:22::i;:41::-;31001:67;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18202:16:0;:24;;-1:-1:-1;;;;18202:24:0;;;-1:-1:-1;;;;;;30172:904:0:o;31775:1640::-;-1:-1:-1;;;;;31929:26:0;;31875:17;31929:26;;;:18;:26;;;;;;31895:6;;31929:26;;;:59;;-1:-1:-1;;;;;;31959:29:0;;;;;;:18;:29;;;;;;;;31929:59;31926:491;;;32014:14;19157:1;19147:7;:11;;;19169:13;:17;;;19197:13;:17;19104:118;32014:14;31926:491;;;32093:13;;-1:-1:-1;;;;;32082:24:0;;;32093:13;;32082:24;32079:327;;;32158:14;;32148:6;:24;;32140:77;;;;-1:-1:-1;;;32140:77:0;;;;;;;:::i;:::-;32235:12;19283:11;;19273:7;:21;19321:17;;19305:13;:33;19365:17;;19349:13;:33;19232:158;32079:327;32332:13;;32322:6;:23;;32314:76;;;;-1:-1:-1;;;32314:76:0;;;;;;;:::i;:::-;32429:18;32450:35;32475:9;32450:20;32460:9;32450;:20::i;:::-;:24;;:35::i;:::-;-1:-1:-1;;;;;32501:28:0;;;;;;:20;:28;;;;;;32429:56;;-1:-1:-1;32501:28:0;;32500:29;:65;;;;-1:-1:-1;;;;;;32534:31:0;;;;;;:20;:31;;;;;;;;32533:32;32500:65;32497:181;;;32613:8;;32599:10;:22;;32591:75;;;;-1:-1:-1;;;32591:75:0;;14813:2:1;32591:75:0;;;14795:21:1;14852:2;14832:18;;;14825:30;14891:34;14871:18;;;14864:62;-1:-1:-1;;;14942:18:1;;;14935:38;14990:19;;32591:75:0;14785:230:1;32591:75:0;-1:-1:-1;;;;;32697:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32721:22:0;;;;;;:11;:22;;;;;;;;32720:23;32697:46;32693:677;;;32770:48;32792:6;32800:9;32811:6;32770:21;:48::i;:::-;32693:677;;;-1:-1:-1;;;;;32851:19:0;;;;;;:11;:19;;;;;;;;32850:20;:46;;;;-1:-1:-1;;;;;;32874:22:0;;;;;;:11;:22;;;;;;;;32850:46;32846:524;;;32923:46;32943:6;32951:9;32962:6;32923:19;:46::i;32846:524::-;-1:-1:-1;;;;;33002:19:0;;;;;;:11;:19;;;;;;;;33001:20;:47;;;;-1:-1:-1;;;;;;33026:22:0;;;;;;:11;:22;;;;;;;;33025:23;33001:47;32997:373;;;33075:44;33093:6;33101:9;33112:6;33075:17;:44::i;32997:373::-;-1:-1:-1;;;;;33151:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33174:22:0;;;;;;:11;:22;;;;;;;;33151:45;33147:223;;;33223:48;33245:6;33253:9;33264:6;33223:21;:48::i;33147:223::-;33314:44;33332:6;33340:9;33351:6;33314:17;:44::i;:::-;33390:15;19460;;19450:7;:25;19502:21;;19486:13;:37;19550:21;;19534:13;:37;19406:173;33390:15;31775:1640;;;;;:::o;27509:561::-;27606:7;;27642;;27559;;;;;27666:289;27690:9;:16;27686:20;;27666:289;;;27756:7;27732;:21;27740:9;27750:1;27740:12;;;;;;-1:-1:-1;;;27740:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27740:12:0;27732:21;;;;;;;;;;;;;:31;;:66;;;27791:7;27767;:21;27775:9;27785:1;27775:12;;;;;;-1:-1:-1;;;27775:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27775:12:0;27767:21;;;;;;;;;;;;;:31;27732:66;27728:97;;;27808:7;;27817;;27800:25;;;;;;;27509:561;;:::o;27728:97::-;27850:34;27862:7;:21;27870:9;27880:1;27870:12;;;;;;-1:-1:-1;;;27870:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27870:12:0;27862:21;;;;;;;;;;;;;27850:7;;:11;:34::i;:::-;27840:44;;27909:34;27921:7;:21;27929:9;27939:1;27929:12;;;;;;-1:-1:-1;;;27929:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27929:12:0;27921:21;;;;;;;;;;;;;27909:7;;:11;:34::i;:::-;27899:44;-1:-1:-1;27708:3:0;;;;:::i;:::-;;;;27666:289;;;-1:-1:-1;27991:7:0;;27979;;:20;;:11;:20::i;:::-;27969:7;:30;27965:61;;;28009:7;;28018;;28001:25;;;;;;27509:561;;:::o;27965:61::-;28045:7;;28054;;-1:-1:-1;27509:561:0;-1:-1:-1;27509:561:0:o;1774:278::-;1860:7;1895:12;1888:5;1880:28;;;;-1:-1:-1;;;1880:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1919:9:0;1931:5;1935:1;1931;:5;:::i;26563:330::-;26623:7;26632;26641;26661:12;26676:24;26692:7;26676:15;:24::i;:::-;26661:39;;26711:18;26732:30;26754:7;26732:21;:30::i;:::-;26711:51;-1:-1:-1;26773:23:0;26799:33;26711:51;26799:17;:7;26811:4;26799:11;:17::i;:::-;:21;;:33::i;:::-;26773:59;26868:4;;-1:-1:-1;26874:10:0;;-1:-1:-1;26563:330:0;;-1:-1:-1;;;26563:330:0:o;26901:429::-;27016:7;;;;27072:24;:7;27084:11;27072;:24::i;:::-;27054:42;-1:-1:-1;27107:12:0;27122:21;:4;27131:11;27122:8;:21::i;:::-;27107:36;-1:-1:-1;27154:18:0;27175:27;:10;27190:11;27175:14;:27::i;:::-;27154:48;-1:-1:-1;27213:23:0;27239:33;27154:48;27239:17;:7;27251:4;27239:11;:17::i;:33::-;27291:7;;;;-1:-1:-1;27317:4:0;;-1:-1:-1;26901:429:0;;-1:-1:-1;;;;;;;26901:429:0:o;37685:548::-;37836:16;;;37850:1;37836:16;;;;;;;;37812:21;;37836:16;;;;;;;;-1:-1:-1;;37873:15:0;;:22;;;-1:-1:-1;;;37873:22:0;;;;37812:40;;-1:-1:-1;;;;;;37873:15:0;;;;:20;;-1:-1:-1;37873:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37863:4;37868:1;37863:7;;;;;;-1:-1:-1;;;37863:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;37863:32:0;;;-1:-1:-1;;;;;37863:32:0;;;;;37924:4;37906;37911:1;37906:7;;;;;;-1:-1:-1;;;37906:7:0;;;;;;;;;-1:-1:-1;;;;;37906:23:0;;;:7;;;;;;;;;:23;37964:15;;38113:10;;37964:15;;;;:66;;38038:6;;37964:15;;38107:4;;38113:10;38154:24;:15;38174:3;38154:19;:24::i;:::-;37964:215;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38195:30;38212:6;38220:4;38195:30;;;;;;;:::i;:::-;;;;;;;;37685:548;;:::o;31084:398::-;31180:16;;;31194:1;31180:16;;;;;;;;31156:21;;31180:16;;;;;;;;;;-1:-1:-1;31180:16:0;31156:40;;31225:4;31207;31212:1;31207:7;;;;;;-1:-1:-1;;;31207:7:0;;;;;;;;;-1:-1:-1;;;;;31207:23:0;;;:7;;;;;;;;;;:23;;;;31251:15;;:22;;;-1:-1:-1;;;31251:22:0;;;;:15;;;;;:20;;:22;;;;;31207:7;;31251:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31241:4;31246:1;31241:7;;;;;;-1:-1:-1;;;31241:7:0;;;;;;;;;-1:-1:-1;;;;;31241:32:0;;;:7;;;;;;;;;:32;31316:15;;31284:62;;31301:4;;31316:15;31334:11;31284:8;:62::i;:::-;31357:15;;:117;;-1:-1:-1;;;31357:117:0;;-1:-1:-1;;;;;31357:15:0;;;;:66;;:117;;31424:11;;31357:15;;31438:4;;31451;;31458:15;;31357:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31084:398;;:::o;31490:277::-;31609:15;;31577:62;;31594:4;;-1:-1:-1;;;;;31609:15:0;31627:11;31577:8;:62::i;:::-;31650:15;;-1:-1:-1;;;;;31650:15:0;:31;31689:9;31708:4;31715:11;31650:15;;31734:7;5548;5575:6;-1:-1:-1;;;;;5575:6:0;;5510:79;31734:7;31650:109;;;;;;-1:-1:-1;;;;;;31650:109:0;;;-1:-1:-1;;;;;6126:15:1;;;31650:109:0;;;6108:34:1;6158:18;;;6151:34;;;;6201:18;;;6194:34;;;;6244:18;;;6237:34;6308:15;;;6287:19;;;6280:44;31743:15:0;6340:19:1;;;6333:35;6042:19;;31650:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34732:566::-;34835:15;34852:23;34877:12;34891:23;34916:12;34930:18;34952:19;34963:7;34952:10;:19::i;:::-;-1:-1:-1;;;;;35000:15:0;;;;;;:7;:15;;;;;;34834:137;;-1:-1:-1;34834:137:0;;-1:-1:-1;34834:137:0;;-1:-1:-1;34834:137:0;-1:-1:-1;34834:137:0;-1:-1:-1;34834:137:0;-1:-1:-1;35000:28:0;;35020:7;35000:19;:28::i;:::-;-1:-1:-1;;;;;34982:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35057:7;:15;;;;:28;;35077:7;35057:19;:28::i;34125:592::-;34232:15;34249:23;34274:12;34288:23;34313:12;34327:18;34349:19;34360:7;34349:10;:19::i;:::-;-1:-1:-1;;;;;34397:15:0;;;;;;:7;:15;;;;;;34231:137;;-1:-1:-1;34231:137:0;;-1:-1:-1;34231:137:0;;-1:-1:-1;34231:137:0;-1:-1:-1;34231:137:0;-1:-1:-1;34231:137:0;-1:-1:-1;34397:28:0;;34231:137;34397:19;:28::i;:::-;-1:-1:-1;;;;;34379:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34457:18;;;;;:7;:18;;;;;:39;;34480:15;34457:22;:39::i;:::-;-1:-1:-1;;;;;34436:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34528:7;:18;;;;:39;;34551:15;34528:22;:39::i;25272:642::-;25375:15;25392:23;25417:12;25431:23;25456:12;25470:18;25492:19;25503:7;25492:10;:19::i;:::-;-1:-1:-1;;;;;25540:15:0;;;;;;:7;:15;;;;;;25374:137;;-1:-1:-1;25374:137:0;;-1:-1:-1;25374:137:0;;-1:-1:-1;25374:137:0;-1:-1:-1;25374:137:0;-1:-1:-1;25374:137:0;-1:-1:-1;25540:28:0;;25560:7;25540:19;:28::i;:::-;-1:-1:-1;;;;;25522:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25597:7;:15;;;;:28;;25617:7;25597:19;:28::i;28449:130::-;28513:7;28540:31;28565:5;28540:20;28552:7;;28540;:11;;:20;;;;:::i;28587:167::-;28657:7;28692:54;28742:3;28692:45;28704:32;28722:13;;28704;;:17;;:32;;;;:::i;:::-;28692:7;;:11;:45::i;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:2;;303:1;300;293:12;318:257;377:6;430:2;418:9;409:7;405:23;401:32;398:2;;;451:6;443;436:22;398:2;495:9;482:23;514:31;539:5;514:31;:::i;580:261::-;650:6;703:2;691:9;682:7;678:23;674:32;671:2;;;724:6;716;709:22;671:2;761:9;755:16;780:31;805:5;780:31;:::i;846:398::-;914:6;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;1221:17;;;933:311;;;;;:::o;1249:466::-;1326:6;1334;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:2;;;1416:6;1408;1401:22;1363:2;1460:9;1447:23;1479:31;1504:5;1479:31;:::i;:::-;1529:5;-1:-1:-1;1586:2:1;1571:18;;1558:32;1599:33;1558:32;1599:33;:::i;:::-;1353:362;;1651:7;;-1:-1:-1;;;1705:2:1;1690:18;;;;1677:32;;1353:362::o;1720:325::-;1785:6;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:2;;;1867:6;1859;1852:22;1814:2;1911:9;1898:23;1930:31;1955:5;1930:31;:::i;:::-;1980:5;-1:-1:-1;2004:35:1;2035:2;2020:18;;2004:35;:::i;:::-;1994:45;;1804:241;;;;;:::o;2050:325::-;2118:6;2126;2179:2;2167:9;2158:7;2154:23;2150:32;2147:2;;;2200:6;2192;2185:22;2147:2;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;2365:2;2350:18;;;;2337:32;;-1:-1:-1;;;2137:238:1:o;2380:1177::-;2464:6;2495:2;2538;2526:9;2517:7;2513:23;2509:32;2506:2;;;2559:6;2551;2544:22;2506:2;2604:9;2591:23;2633:18;2674:2;2666:6;2663:14;2660:2;;;2695:6;2687;2680:22;2660:2;2738:6;2727:9;2723:22;2713:32;;2783:7;2776:4;2772:2;2768:13;2764:27;2754:2;;2810:6;2802;2795:22;2754:2;2851;2838:16;2873:2;2869;2866:10;2863:2;;;2879:18;;:::i;:::-;2925:2;2922:1;2918:10;2957:2;2951:9;3020:2;3016:7;3011:2;3007;3003:11;2999:25;2991:6;2987:38;3075:6;3063:10;3060:22;3055:2;3043:10;3040:18;3037:46;3034:2;;;3086:18;;:::i;:::-;3122:2;3115:22;3172:18;;;3206:15;;;;-1:-1:-1;3241:11:1;;;3271;;;3267:20;;3264:33;-1:-1:-1;3261:2:1;;;3315:6;3307;3300:22;3261:2;3342:6;3333:15;;3357:169;3371:2;3368:1;3365:9;3357:169;;;3428:23;3447:3;3428:23;:::i;:::-;3416:36;;3389:1;3382:9;;;;;3472:12;;;;3504;;3357:169;;;-1:-1:-1;3545:6:1;2475:1082;-1:-1:-1;;;;;;;;2475:1082:1:o;3562:190::-;3618:6;3671:2;3659:9;3650:7;3646:23;3642:32;3639:2;;;3692:6;3684;3677:22;3639:2;3720:26;3736:9;3720:26;:::i;3757:190::-;3816:6;3869:2;3857:9;3848:7;3844:23;3840:32;3837:2;;;3890:6;3882;3875:22;3837:2;-1:-1:-1;3918:23:1;;3827:120;-1:-1:-1;3827:120:1:o;3952:258::-;4017:6;4025;4078:2;4066:9;4057:7;4053:23;4049:32;4046:2;;;4099:6;4091;4084:22;4046:2;4140:9;4127:23;4117:33;;4169:35;4200:2;4189:9;4185:18;4169:35;:::i;4215:326::-;4292:6;4300;4308;4361:2;4349:9;4340:7;4336:23;4332:32;4329:2;;;4382:6;4374;4367:22;4329:2;-1:-1:-1;;4410:23:1;;;4480:2;4465:18;;4452:32;;-1:-1:-1;4531:2:1;4516:18;;;4503:32;;4319:222;-1:-1:-1;4319:222:1:o;4546:316::-;4634:6;4642;4650;4703:2;4691:9;4682:7;4678:23;4674:32;4671:2;;;4724:6;4716;4709:22;4671:2;4758:9;4752:16;4742:26;;4808:2;4797:9;4793:18;4787:25;4777:35;;4852:2;4841:9;4837:18;4831:25;4821:35;;4661:201;;;;;:::o;4867:463::-;4920:3;4958:5;4952:12;4985:6;4980:3;4973:19;5011:4;5040:2;5035:3;5031:12;5024:19;;5077:2;5070:5;5066:14;5098:3;5110:195;5124:6;5121:1;5118:13;5110:195;;;5189:13;;-1:-1:-1;;;;;5185:39:1;5173:52;;5245:12;;;;5280:15;;;;5221:1;5139:9;5110:195;;;-1:-1:-1;5321:3:1;;4928:402;-1:-1:-1;;;;;4928:402:1:o;6806:510::-;7077:6;7066:9;7059:25;7120:3;7115:2;7104:9;7100:18;7093:31;7040:4;7141:57;7193:3;7182:9;7178:19;7170:6;7141:57;:::i;:::-;-1:-1:-1;;;;;7234:32:1;;;;7229:2;7214:18;;7207:60;-1:-1:-1;7298:2:1;7283:18;7276:34;7133:65;7049:267;-1:-1:-1;;7049:267:1:o;7321:603::-;7433:4;7462:2;7491;7480:9;7473:21;7523:6;7517:13;7566:6;7561:2;7550:9;7546:18;7539:34;7591:4;7604:140;7618:6;7615:1;7612:13;7604:140;;;7713:14;;;7709:23;;7703:30;7679:17;;;7698:2;7675:26;7668:66;7633:10;;7604:140;;;7762:6;7759:1;7756:13;7753:2;;;7832:4;7827:2;7818:6;7807:9;7803:22;7799:31;7792:45;7753:2;-1:-1:-1;7908:2:1;7887:15;-1:-1:-1;;7883:29:1;7868:45;;;;7915:2;7864:54;;7442:482;-1:-1:-1;;;7442:482:1:o;11858:404::-;12060:2;12042:21;;;12099:2;12079:18;;;12072:30;12138:34;12133:2;12118:18;;12111:62;-1:-1:-1;;;12204:2:1;12189:18;;12182:38;12252:3;12237:19;;12032:230::o;12669:356::-;12871:2;12853:21;;;12890:18;;;12883:30;12949:34;12944:2;12929:18;;12922:62;13016:2;13001:18;;12843:182::o;16019:332::-;16226:6;16215:9;16208:25;16269:2;16264;16253:9;16249:18;16242:30;16189:4;16289:56;16341:2;16330:9;16326:18;16318:6;16289:56;:::i;:::-;16281:64;16198:153;-1:-1:-1;;;;16198:153:1:o;16356:582::-;16655:6;16644:9;16637:25;16698:6;16693:2;16682:9;16678:18;16671:34;16741:3;16736:2;16725:9;16721:18;16714:31;16618:4;16762:57;16814:3;16803:9;16799:19;16791:6;16762:57;:::i;:::-;-1:-1:-1;;;;;16855:32:1;;;;16850:2;16835:18;;16828:60;-1:-1:-1;16919:3:1;16904:19;16897:35;16754:65;16627:311;-1:-1:-1;;;16627:311:1:o;17456:128::-;17496:3;17527:1;17523:6;17520:1;17517:13;17514:2;;;17533:18;;:::i;:::-;-1:-1:-1;17569:9:1;;17504:80::o;17589:217::-;17629:1;17655;17645:2;;-1:-1:-1;;;17680:31:1;;17734:4;17731:1;17724:15;17762:4;17687:1;17752:15;17645:2;-1:-1:-1;17791:9:1;;17635:171::o;17811:168::-;17851:7;17917:1;17913;17909:6;17905:14;17902:1;17899:21;17894:1;17887:9;17880:17;17876:45;17873:2;;;17924:18;;:::i;:::-;-1:-1:-1;17964:9:1;;17863:116::o;17984:125::-;18024:4;18052:1;18049;18046:8;18043:2;;;18057:18;;:::i;:::-;-1:-1:-1;18094:9:1;;18033:76::o;18114:380::-;18193:1;18189:12;;;;18236;;;18257:2;;18311:4;18303:6;18299:17;18289:27;;18257:2;18364;18356:6;18353:14;18333:18;18330:38;18327:2;;;18410:10;18405:3;18401:20;18398:1;18391:31;18445:4;18442:1;18435:15;18473:4;18470:1;18463:15;18327:2;;18169:325;;;:::o;18499:135::-;18538:3;-1:-1:-1;;18559:17:1;;18556:2;;;18579:18;;:::i;:::-;-1:-1:-1;18626:1:1;18615:13;;18546:88::o;18639:175::-;18676:3;18720:4;18713:5;18709:16;18749:4;18740:7;18737:17;18734:2;;;18757:18;;:::i;:::-;18806:1;18793:15;;18684:130;-1:-1:-1;;18684:130:1:o;18819:127::-;18880:10;18875:3;18871:20;18868:1;18861:31;18911:4;18908:1;18901:15;18935:4;18932:1;18925:15;18951:127;19012:10;19007:3;19003:20;19000:1;18993:31;19043:4;19040:1;19033:15;19067:4;19064:1;19057:15;19083:131;-1:-1:-1;;;;;19158:31:1;;19148:42;;19138:2;;19204:1;19201;19194:12

Swarm Source

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