ETH Price: $2,508.37 (-1.27%)

Token

SharesGram (SG)
 

Overview

Max Total Supply

1,000,000,000 SG

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,127,149.100684645 SG

Value
$0.00
0x1f08d424d961384f9134ac441f2f41b3156c2a97
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:
SG

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-28
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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

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

library Address {

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

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

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


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

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

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

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

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

        (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 = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event 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 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 SG is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint8 private _decimals = 9;
    uint256 public deadBlocks = 2;
    uint256 public launchedAt = 0;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //2% for first few mins

    uint256 public _buyLiquidityFee = 0;    
    uint256 public _buymarketdevFee = 80;   
    uint256 public _buyReflectionFee = 0;

    uint256 public _sellLiquidityFee = 0; 
    uint256 public _sellmarketdevFee = 100;  
    uint256 public _sellReflectionFee = 0;
      
    uint256 private liquidityFee = _buyLiquidityFee;
    uint256 private marketdevFee = _buymarketdevFee;
    uint256 private reflectionFee=_buyReflectionFee;

    uint256 private totalFee = liquidityFee.add(marketdevFee);
    uint256 private currenttotalFee = totalFee;
    
    uint256 public swapThreshold = _tTotal.div(10000).mul(20); //0.2% 

    bool inSwap;
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;

    string private _name = "SharesGram";
    string private _symbol = "SG";
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address payable private marketdevWallet = payable (0x1F6c7d48Cbdf6082e6a665db11700086d2BAbb01); // marketdev Wallet
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTrusted;
    address[] private _excluded;

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = 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;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    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 _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 transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "Sorry Boss");
        require(!_isSniper[from], "Sorry Boss");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
        bool takeFee = false;
        //take fee on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && ((launchedAt + deadBlocks) > block.number)){
                require(amount+ balanceOf(to)<=_maxWalletToken,
                    "Total Holding is currently limited");
        } 

        currenttotalFee=totalFee;
        reflectionFee=_buyReflectionFee;

        if(tradingOpen && to == uniswapV2Pair) { //sell
            currenttotalFee= _sellLiquidityFee.add(_sellmarketdevFee);
            reflectionFee=_sellReflectionFee;
        }
        
        //antibot
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //only bot 
        if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=950;    //95%
        }

        //buys
        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { 
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance>=swapThreshold){
                    contractTokenBalance = swapThreshold;
                    swapTokens(contractTokenBalance);
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        uint256 _previousReflectionFee=reflectionFee;
        uint256 _previousTotalFee=currenttotalFee;
        if(!takeFee){
            reflectionFee = 0;
            currenttotalFee=0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee){
            reflectionFee = _previousReflectionFee;
            currenttotalFee=_previousTotalFee;
        }
    }

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

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

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

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

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

    function _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 _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);
    }

    //Swap and send 
    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 amountToLiquify = contractTokenBalance
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
        
        swapTokensForEth(amountToSwap);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        
        uint256 amountETHmarketdev = amountETH.mul(marketdevFee).div(totalETHFee);
        //Send to marketdev wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(amountETHmarketdev,marketdevWallet);
        }
        if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
        }
    }
    
    function sendETHToFee(uint256 amount,address payable wallet) private {
        wallet.transfer(amount);
    }
   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

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

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

    //-------------------Private View-------------------
    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 _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 calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(reflectionFee).div(
            10**3
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(currenttotalFee).div(
            10**3
        );
    }

    //-------------------Public View-------------------
    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 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 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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

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

    //-------------------only Owner-------------------
    function excludeFromReward(address account) public onlyOwner() {
        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 openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        excludeFromReward(address(this));
        excludeFromReward(uniswapV2Pair);
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }
    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }
    
    function excludeMultiple(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setWallet(address _marketdevWallet) external onlyOwner() {
        marketdevWallet = payable(_marketdevWallet);
    }
    
    function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
                _isSniper[addresses[i]] = status; 
        }
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
   
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuck(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletBase1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletVoid(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
    }

    function multiTransfer( address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + (tokens[i] * 10**_decimals);
        }

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(msg.sender,addresses[i],(tokens[i] * 10**_decimals));
        
        }
    }

    function multiTransferRighteous( address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow

        uint256 SCCC = tokens* 10**_decimals * addresses.length;

        require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _transfer(msg.sender,addresses[i],(tokens* 10**_decimals));

        }
    }

    function equipTaxFees(uint256 _bReflectionFee, uint256 _bLiquidityFee, uint256 _bMarketdevFee) external onlyOwner {
       
        _buyLiquidityFee = _bLiquidityFee;
        _buymarketdevFee = _bMarketdevFee;
        _buyReflectionFee= _bReflectionFee;

        reflectionFee= _bReflectionFee;
        liquidityFee = _bLiquidityFee;
        marketdevFee = _bMarketdevFee;
        totalFee = liquidityFee.add(marketdevFee);
    }

    function equipSellFees(uint256 _sReflectionFee,uint256 _sLiquidityFee, uint256 _sMarketdevFee) external onlyOwner {
        _sellLiquidityFee = _sLiquidityFee;
        _sellmarketdevFee = _sMarketdevFee;
        _sellReflectionFee= _sReflectionFee;
    }
     //to recieve ETH uniswapV2Router
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buymarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellmarketdevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_sReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sMarketdevFee","type":"uint256"}],"name":"equipSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"equipTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransferRighteous","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletBase1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletVoid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketdevWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805460ff1916600990811790915560026004555f6005556200002a90600a6200078b565b6200003a90633b9aca006200079b565b60068190556200004c905f19620007c9565b62000059905f19620007df565b6007556006546200007c90600a9062000075906103e862000506565b9062000558565b6009555f600a556050600b555f600c555f600d556064600e555f600f55600a54601055600b54601155600c54601255620000c4601154601054620005e260201b90919060201c565b60138190556014908155600654620000e59190620000759061271062000506565b6015556016805463ffffff001916630100000017905560408051808201909152600a8152695368617265734772616d60b01b60208201526017906200012b908262000895565b50604080518082019091526002815261534760f01b602082015260189062000154908262000895565b50601b80546001600160a01b0319908116731f6c7d48cbdf6082e6a665db11700086d2babb0117909155601c805490911661dead17905534801562000197575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754335f908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200023c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026291906200095d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d491906200095d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200031f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200034591906200095d565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160215f6200038b5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526021909252812080549092166001908117909255602290620003e25f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c54909116835290822080549093168117909255602490620004625f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620004b03390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620004f791815260200190565b60405180910390a350620009fe565b5f6200054f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200064460201b60201c565b90505b92915050565b5f825f036200056957505f62000552565b5f6200057683856200079b565b90508262000585858362000985565b146200054f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b5f80620005f083856200099b565b9050838110156200054f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005d9565b5f8183620006675760405162461bcd60e51b8152600401620005d99190620009b1565b505f62000675848662000985565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006d257815f1904821115620006b657620006b66200067e565b80851615620006c457918102915b93841c939080029062000697565b509250929050565b5f82620006ea5750600162000552565b81620006f857505f62000552565b81600181146200071157600281146200071c576200073c565b600191505062000552565b60ff8411156200073057620007306200067e565b50506001821b62000552565b5060208310610133831016604e8410600b841016171562000761575081810a62000552565b6200076d838362000692565b805f19048211156200078357620007836200067e565b029392505050565b5f6200054f60ff841683620006da565b80820281158282048414176200055257620005526200067e565b634e487b7160e01b5f52601260045260245ffd5b5f82620007da57620007da620007b5565b500690565b818103818111156200055257620005526200067e565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200081e57607f821691505b6020821081036200083d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000890575f81815260208120601f850160051c810160208610156200086b5750805b601f850160051c820191505b818110156200088c5782815560010162000877565b5050505b505050565b81516001600160401b03811115620008b157620008b1620007f5565b620008c981620008c2845462000809565b8462000843565b602080601f831160018114620008ff575f8415620008e75750858301515b5f19600386901b1c1916600185901b1785556200088c565b5f85815260208120601f198616915b828110156200092f578886015182559484019460019091019084016200090e565b50858210156200094d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f602082840312156200096e575f80fd5b81516001600160a01b03811681146200054f575f80fd5b5f82620009965762000996620007b5565b500490565b808201808211156200055257620005526200067e565b5f6020808352835180828501525f5b81811015620009de57858101830151858201604001528201620009c0565b505f604082860101526040601f19601f8301168501019250505092915050565b6138ac8062000a0c5f395ff3fe608060405260043610610344575f3560e01c8063618d638e116101bd578063a457c2d7116100f2578063ea2f0b3711610092578063f2fde38b1161006d578063f2fde38b14610992578063f3b1e83b146109b1578063fabb0b4f146109c6578063ffb54a99146109db575f80fd5b8063ea2f0b3714610935578063eafb5a3c14610954578063f259c57b14610973575f80fd5b8063bf56b371116100cd578063bf56b371146108a8578063dc44b6a0146108bd578063dd62ed3e146108d2578063deaa59df14610916575f80fd5b8063a457c2d71461084b578063a9059cbb1461086a578063bd198ac214610889575f80fd5b806378109e541161015d57806388f820201161013857806388f82020146107c55780638da5cb5b146107fc5780638f4590d21461081857806395d89b4114610837575f80fd5b806378109e541461077c57806384530c461461079157806388790a68146107b0575f80fd5b806371b9189c1161019857806371b9189c1461071457806372fdf6ee14610733578063743942b6146107485780637598f8bc14610767575f80fd5b8063618d638e146106c257806370a08231146106e1578063715018a614610700575f80fd5b80632d83811911610293578063401aa5c0116102335780634b01547f1161020e5780634b01547f1461064657806352390c021461066557806359cca624146106845780635d54c0af146106a3575f80fd5b8063401aa5c0146105f35780634549b0391461060857806349bd5a5e14610627575f80fd5b8063395093511161026e57806339509351146105775780633af7f6f2146105965780633bd5d173146105b55780633ddf65ab146105d4575f80fd5b80632d83811914610518578063313ce567146105375780633685d41914610558575f80fd5b806318160ddd116102fe5780632691bc80116102d95780632691bc801461049c57806328a23cd1146104bb57806328b83ee6146104da5780632d4103d6146104f9575f80fd5b806318160ddd146104485780631e89d5451461045c57806323b872dd1461047d575f80fd5b80630445b6671461034f57806306fdde0314610377578063095ea7b3146103985780630f3a325f146103c757806313114a9d146103fd5780631694505e14610411575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460155481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b6109f9565b60405161036e919061319d565b3480156103a3575f80fd5b506103b76103b23660046131ff565b610a89565b604051901515815260200161036e565b3480156103d2575f80fd5b506103b76103e1366004613229565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610408575f80fd5b50600854610364565b34801561041c575f80fd5b50601954610430906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b348015610453575f80fd5b50600654610364565b348015610467575f80fd5b5061047b61047636600461328c565b610a9f565b005b348015610488575f80fd5b506103b76104973660046132f3565b610cd6565b3480156104a7575f80fd5b506016546103b79062010000900460ff1681565b3480156104c6575f80fd5b5061047b6104d5366004613331565b610d3d565b3480156104e5575f80fd5b5061047b6104f4366004613368565b610e48565b348015610504575f80fd5b5061047b61051336600461339e565b610e7f565b348015610523575f80fd5b506103646105323660046133ba565b610f03565b348015610542575f80fd5b5060035460405160ff909116815260200161036e565b348015610563575f80fd5b5061047b610572366004613229565b610f85565b348015610582575f80fd5b506103b76105913660046131ff565b61112f565b3480156105a1575f80fd5b5061047b6105b03660046133ba565b611164565b3480156105c0575f80fd5b5061047b6105cf3660046133ba565b6111b4565b3480156105df575f80fd5b5061047b6105ee3660046133d1565b61129a565b3480156105fe575f80fd5b50610364600c5481565b348015610613575f80fd5b506103646106223660046133ec565b6112e1565b348015610632575f80fd5b50601a54610430906001600160a01b031681565b348015610651575f80fd5b5061047b6106603660046133d1565b61136b565b348015610670575f80fd5b5061047b61067f366004613229565b6113b0565b34801561068f575f80fd5b5061047b61069e366004613229565b611495565b3480156106ae575f80fd5b5061047b6106bd36600461340f565b6114e1565b3480156106cd575f80fd5b5061047b6106dc366004613462565b611576565b3480156106ec575f80fd5b506103646106fb366004613229565b6116f3565b34801561070b575f80fd5b5061047b61174f565b34801561071f575f80fd5b5061047b61072e3660046134aa565b6117c0565b34801561073e575f80fd5b50610364600b5481565b348015610753575f80fd5b5061047b610762366004613229565b61185b565b348015610772575f80fd5b50610364600f5481565b348015610787575f80fd5b5061036460095481565b34801561079c575f80fd5b5061047b6107ab3660046134aa565b6118b6565b3480156107bb575f80fd5b50610364600d5481565b3480156107d0575f80fd5b506103b76107df366004613229565b6001600160a01b03165f9081526023602052604090205460ff1690565b348015610807575f80fd5b505f546001600160a01b0316610430565b348015610823575f80fd5b5061047b6108323660046134e9565b61194c565b348015610842575f80fd5b5061038b611995565b348015610856575f80fd5b506103b76108653660046131ff565b6119a4565b348015610875575f80fd5b506103b76108843660046131ff565b6119f1565b348015610894575f80fd5b5061047b6108a3366004613368565b6119fd565b3480156108b3575f80fd5b5061036460055481565b3480156108c8575f80fd5b50610364600a5481565b3480156108dd575f80fd5b506103646108ec366004613331565b6001600160a01b039182165f908152601f6020908152604080832093909416825291909152205490565b348015610921575f80fd5b5061047b610930366004613229565b611a56565b348015610940575f80fd5b5061047b61094f366004613229565b611aa1565b34801561095f575f80fd5b5061047b61096e366004613229565b611aea565b34801561097e575f80fd5b5061047b61098d366004613229565b611e06565b34801561099d575f80fd5b5061047b6109ac366004613229565b611e52565b3480156109bc575f80fd5b50610364600e5481565b3480156109d1575f80fd5b5061036460045481565b3480156109e6575f80fd5b506016546103b790610100900460ff1681565b606060178054610a0890613509565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613509565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b5f610a95338484611f39565b5060015b92915050565b5f546001600160a01b03163314610ad15760405162461bcd60e51b8152600401610ac890613541565b60405180910390fd5b6103218310610b385760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610ac8565b828114610b985760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610ac8565b5f805b84811015610bf557600354610bb49060ff16600a61366a565b848483818110610bc657610bc6613678565b90506020020135610bd7919061368c565b610be190836136a3565b915080610bed816136b6565b915050610b9b565b5080610c00336116f3565b1015610c4e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b84811015610cce57610cbc33878784818110610c6e57610c6e613678565b9050602002016020810190610c839190613229565b600354610c949060ff16600a61366a565b878786818110610ca657610ca6613678565b90506020020135610cb7919061368c565b61205c565b80610cc6816136b6565b915050610c50565b505050505050565b5f610ce284848461205c565b610d338433610d2e8560405180606001604052806028815260200161382a602891396001600160a01b038a165f908152601f60209081526040808320338452909152902054919061258f565b611f39565b5060019392505050565b5f546001600160a01b03163314610d665760405162461bcd60e51b8152600401610ac890613541565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136ce565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4291906136e5565b50505050565b5f546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ac890613541565b600d91909155600e55600f55565b5f546001600160a01b03163314610ea85760405162461bcd60e51b8152600401610ac890613541565b6016805461ff00191661010084151502179055610ec4306113b0565b601a54610ed9906001600160a01b03166113b0565b601654610100900460ff168015610ef05750600554155b15610eff574360055560048190555b5050565b5f600754821115610f695760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ac8565b5f610f726125c7565b9050610f7e83826125e8565b9392505050565b5f546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b0381165f9081526023602052604090205460ff166110155760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ac8565b5f5b602554811015610eff57816001600160a01b03166025828154811061103e5761103e613678565b5f918252602090912001546001600160a01b03160361111d576025805461106790600190613700565b8154811061107757611077613678565b5f91825260209091200154602580546001600160a01b0390921691839081106110a2576110a2613678565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806110f9576110f9613713565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80611127816136b6565b915050611017565b335f818152601f602090815260408083206001600160a01b03871684529091528120549091610a95918590610d2e9086612629565b5f546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610ac890613541565b6111ae816111a86103e86006546125e890919063ffffffff16565b90612687565b60095550565b335f8181526023602052604090205460ff16156112285760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ac8565b5f61123283612705565b505050506001600160a01b0384165f908152601d602052604090205491925061125d9190508261274d565b6001600160a01b0383165f908152601d6020526040902055600754611282908261274d565b6007556008546112929084612629565b600855505050565b5f546001600160a01b031633146112c35760405162461bcd60e51b8152600401610ac890613541565b6016805491151563010000000263ff00000019909216919091179055565b5f6006548311156113345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ac8565b81611352575f61134384612705565b50939550610a99945050505050565b5f61135c84612705565b50929550610a99945050505050565b5f546001600160a01b031633146113945760405162461bcd60e51b8152600401610ac890613541565b60168054911515620100000262ff000019909216919091179055565b5f546001600160a01b031633146113d95760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b0381165f908152601d602052604090205415611430576001600160a01b0381165f908152601d602052604090205461141790610f03565b6001600160a01b0382165f908152601e60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b5f546001600160a01b031633146114be5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602260205260409020805460ff19166001179055565b5f546001600160a01b0316331461150a5760405162461bcd60e51b8152600401610ac890613541565b5f5b82811015610e42578160205f86868581811061152a5761152a613678565b905060200201602081019061153f9190613229565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561156f816136b6565b905061150c565b5f546001600160a01b0316331461159f5760405162461bcd60e51b8152600401610ac890613541565b6107d182106116075760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610ac8565b6003545f90839061161c9060ff16600a61366a565b611626908461368c565b611630919061368c565b90508061163c336116f3565b101561168a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b838110156116ec576116da338686848181106116aa576116aa613678565b90506020020160208101906116bf9190613229565b6003546116d09060ff16600a61366a565b610cb7908761368c565b806116e4816136b6565b91505061168c565b5050505050565b6001600160a01b0381165f9081526023602052604081205460ff161561172e57506001600160a01b03165f908152601e602052604090205490565b6001600160a01b0382165f908152601d6020526040902054610a9990610f03565b5f546001600160a01b031633146117785760405162461bcd60e51b8152600401610ac890613541565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146117e95760405162461bcd60e51b8152600401610ac890613541565b5f5b8181101561185657600160215f85858581811061180a5761180a613678565b905060200201602081019061181f9190613229565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561184f816136b6565b90506117eb565b505050565b5f546001600160a01b031633146118845760405162461bcd60e51b8152600401610ac890613541565b6040516001600160a01b038216904780156108fc02915f818181858888f19350505050158015610eff573d5f803e3d5ffd5b5f546001600160a01b031633146118df5760405162461bcd60e51b8152600401610ac890613541565b5f5b8181101561185657600160245f85858581811061190057611900613678565b90506020020160208101906119159190613229565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055611945816136b6565b90506118e1565b5f546001600160a01b031633146119755760405162461bcd60e51b8152600401610ac890613541565b8082600654611984919061368c565b61198e9190613727565b6015555050565b606060188054610a0890613509565b5f610a953384610d2e8560405180606001604052806025815260200161385260259139335f908152601f602090815260408083206001600160a01b038d168452909152902054919061258f565b5f610a9533848461205c565b5f546001600160a01b03163314611a265760405162461bcd60e51b8152600401610ac890613541565b600a829055600b819055600c839055601283905560108290556011819055611a4e8282612629565b601355505050565b5f546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610ac890613541565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602160205260409020805460ff19169055565b5f546001600160a01b03163314611b135760405162461bcd60e51b8152600401610ac890613541565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b789190613746565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be79190613746565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c549190613746565b90506001600160a01b038116611dc657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc49190613746565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d339190613746565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611d7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da19190613746565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611de2565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b5f546001600160a01b03163314611e2f5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602160205260409020805460ff19166001179055565b5f546001600160a01b03163314611e7b5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b038116611ee05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac8565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f9b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac8565b6001600160a01b038216611ffc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac8565b6001600160a01b038381165f818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac8565b6001600160a01b0382166121225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac8565b5f81116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ac8565b6001600160a01b0382165f90815260208052604090205460ff16156121d75760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610ac8565b6001600160a01b0383165f90815260208052604090205460ff161561222b5760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610ac8565b5f546001600160a01b0384811691161480159061225557505f546001600160a01b03838116911614155b156122b157601654610100900460ff166122b15760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610ac8565b601a545f906001600160a01b03858116911614806122dc5750601a546001600160a01b038481169116145b801561232257506001600160a01b0384165f9081526021602052604090205460ff168061232057506001600160a01b0383165f9081526021602052604090205460ff165b155b1561232b575060015b5f60055411801561236c57506001600160a01b0383165f9081526022602052604090205460ff1615801561236c57505f546001600160a01b03858116911614155b801561238657504360045460055461238491906136a3565b115b156123fa57600954612397846116f3565b6123a190846136a3565b11156123fa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610ac8565b601354601455600c54601255601654610100900460ff16801561242a5750601a546001600160a01b038481169116145b1561244857600e54600d5461243e91612629565b601455600f546012555b5f60055411801561246757504360045460055461246591906136a3565b115b1561248e576001600160a01b0383165f9081526020805260409020805460ff191660011790555b5f6005541180156124ac57505f546001600160a01b03858116911614155b80156124c757506004546005546124c391906136a3565b4311155b80156124dc57506016546301000000900460ff165b156124e8576103b66014555b60165462010000900460ff161561252757601654610100900460ff16801561251d5750601a546001600160a01b038581169116145b15612527575f6014555b60165460ff161580156125415750601654610100900460ff165b801561255a5750601a546001600160a01b038481169116145b15612583575f612569306116f3565b9050601554811061258157506015546125818161278e565b505b610e4284848484612875565b5f81848411156125b25760405162461bcd60e51b8152600401610ac8919061319d565b505f6125be8486613700565b95945050505050565b5f805f6125d261299a565b90925090506125e182826125e8565b9250505090565b5f610f7e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b13565b5f8061263583856136a3565b905083811015610f7e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac8565b5f825f0361269657505f610a99565b5f6126a1838561368c565b9050826126ae8583613727565b14610f7e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac8565b5f805f805f805f805f6127178a612b3f565b9250925092505f805f6127338d868661272e6125c7565b612b7d565b919f909e50909c50959a5093985091965092945050505050565b5f610f7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061258f565b6016805460ff191660011790556013546010545f916127bd916002916127b79182908790612687565b906125e8565b90505f6127ca838361274d565b90506127d581612bc9565b60105447905f906127f4906127eb9060026125e8565b6013549061274d565b90505f61281560026127b7846127b76010548861268790919063ffffffff16565b90505f612831836127b76011548761268790919063ffffffff16565b905047801561285157601b546128519083906001600160a01b0316612d52565b8615612861576128618784612d85565b50506016805460ff19169055505050505050565b6012546014548261288a575f60128190556014555b6001600160a01b0386165f9081526023602052604090205460ff1680156128c957506001600160a01b0385165f9081526023602052604090205460ff16155b156128de576128d9868686612e4f565b612986565b6001600160a01b0386165f9081526023602052604090205460ff1615801561291d57506001600160a01b0385165f9081526023602052604090205460ff165b1561292d576128d9868686612f6e565b6001600160a01b0386165f9081526023602052604090205460ff16801561296b57506001600160a01b0385165f9081526023602052604090205460ff165b1561297b576128d9868686613011565b61298686868661307f565b82610cce5760129190915560145550505050565b6007546006545f918291825b602554811015612ae35782601d5f602584815481106129c7576129c7613678565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612a2f575081601e5f60258481548110612a0957612a09613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a4557600754600654945094505050509091565b612a89601d5f60258481548110612a5e57612a5e613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054849061274d565b9250612acf601e5f60258481548110612aa457612aa4613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054839061274d565b915080612adb816136b6565b9150506129a6565b50600654600754612af3916125e8565b821015612b0a576007546006549350935050509091565b90939092509050565b5f8183612b335760405162461bcd60e51b8152600401610ac8919061319d565b505f6125be8486613727565b5f805f80612b4c856130bf565b90505f612b58866130db565b90505f612b6f82612b69898661274d565b9061274d565b979296509094509092505050565b5f808080612b8b8886612687565b90505f612b988887612687565b90505f612ba58888612687565b90505f612bb682612b69868661274d565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612bfc57612bfc613678565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c779190613746565b81600181518110612c8a57612c8a613678565b6001600160a01b039283166020918202929092010152601954612cb09130911684611f39565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ce89085905f908690309042906004016137a3565b5f604051808303815f87803b158015612cff575f80fd5b505af1158015612d11573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d469291906137de565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611856573d5f803e3d5ffd5b601954612d9d9030906001600160a01b031684611f39565b6019546001600160a01b031663f305d7198230855f80612dc45f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e2a573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116ec91906137fe565b5f805f805f80612e5e87612705565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150612e8f908861274d565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612ebd908761274d565b6001600160a01b03808b165f908152601d602052604080822093909355908a1681522054612eeb9086612629565b6001600160a01b0389165f908152601d6020526040902055612f0c816130f7565b612f168483613179565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f5b91815260200190565b60405180910390a3505050505050505050565b5f805f805f80612f7d87612705565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612fae908761274d565b6001600160a01b03808b165f908152601d6020908152604080832094909455918b168152601e9091522054612fe39084612629565b6001600160a01b0389165f908152601e6020908152604080832093909355601d90522054612eeb9086612629565b5f805f805f8061302087612705565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150613051908861274d565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612fae908761274d565b5f805f805f8061308e87612705565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612ebd908761274d565b5f610a996103e86127b76012548561268790919063ffffffff16565b5f610a996103e86127b76014548561268790919063ffffffff16565b5f6131006125c7565b90505f61310d8383612687565b305f908152601d60205260409020549091506131299082612629565b305f908152601d602090815260408083209390935560239052205460ff161561185657305f908152601e60205260409020546131659084612629565b305f908152601e6020526040902055505050565b600754613186908361274d565b6007556008546131969082612629565b6008555050565b5f6020808352835180828501525f5b818110156131c8578581018301518582016040015282016131ac565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131fc575f80fd5b50565b5f8060408385031215613210575f80fd5b823561321b816131e8565b946020939093013593505050565b5f60208284031215613239575f80fd5b8135610f7e816131e8565b5f8083601f840112613254575f80fd5b50813567ffffffffffffffff81111561326b575f80fd5b6020830191508360208260051b8501011115613285575f80fd5b9250929050565b5f805f806040858703121561329f575f80fd5b843567ffffffffffffffff808211156132b6575f80fd5b6132c288838901613244565b909650945060208701359150808211156132da575f80fd5b506132e787828801613244565b95989497509550505050565b5f805f60608486031215613305575f80fd5b8335613310816131e8565b92506020840135613320816131e8565b929592945050506040919091013590565b5f8060408385031215613342575f80fd5b823561334d816131e8565b9150602083013561335d816131e8565b809150509250929050565b5f805f6060848603121561337a575f80fd5b505081359360208301359350604090920135919050565b80151581146131fc575f80fd5b5f80604083850312156133af575f80fd5b823561321b81613391565b5f602082840312156133ca575f80fd5b5035919050565b5f602082840312156133e1575f80fd5b8135610f7e81613391565b5f80604083850312156133fd575f80fd5b82359150602083013561335d81613391565b5f805f60408486031215613421575f80fd5b833567ffffffffffffffff811115613437575f80fd5b61344386828701613244565b909450925050602084013561345781613391565b809150509250925092565b5f805f60408486031215613474575f80fd5b833567ffffffffffffffff81111561348a575f80fd5b61349686828701613244565b909790965060209590950135949350505050565b5f80602083850312156134bb575f80fd5b823567ffffffffffffffff8111156134d1575f80fd5b6134dd85828601613244565b90969095509350505050565b5f80604083850312156134fa575f80fd5b50508035926020909101359150565b600181811c9082168061351d57607f821691505b60208210810361353b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135c457815f19048211156135aa576135aa613576565b808516156135b757918102915b93841c939080029061358f565b509250929050565b5f826135da57506001610a99565b816135e657505f610a99565b81600181146135fc576002811461360657613622565b6001915050610a99565b60ff84111561361757613617613576565b50506001821b610a99565b5060208310610133831016604e8410600b8410161715613645575081810a610a99565b61364f838361358a565b805f190482111561366257613662613576565b029392505050565b5f610f7e60ff8416836135cc565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a9957610a99613576565b80820180821115610a9957610a99613576565b5f600182016136c7576136c7613576565b5060010190565b5f602082840312156136de575f80fd5b5051919050565b5f602082840312156136f5575f80fd5b8151610f7e81613391565b81810381811115610a9957610a99613576565b634e487b7160e01b5f52603160045260245ffd5b5f8261374157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613756575f80fd5b8151610f7e816131e8565b5f8151808452602080850194508084015f5b838110156137985781516001600160a01b031687529582019590820190600101613773565b509495945050505050565b85815284602082015260a060408201525f6137c160a0830186613761565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6137f66040830184613761565b949350505050565b5f805f60608486031215613810575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aeb97e21412bb016a5cf5786f53fe4151c26da088483f51af27f3fbec60b1f5764736f6c63430008140033

Deployed Bytecode

0x608060405260043610610344575f3560e01c8063618d638e116101bd578063a457c2d7116100f2578063ea2f0b3711610092578063f2fde38b1161006d578063f2fde38b14610992578063f3b1e83b146109b1578063fabb0b4f146109c6578063ffb54a99146109db575f80fd5b8063ea2f0b3714610935578063eafb5a3c14610954578063f259c57b14610973575f80fd5b8063bf56b371116100cd578063bf56b371146108a8578063dc44b6a0146108bd578063dd62ed3e146108d2578063deaa59df14610916575f80fd5b8063a457c2d71461084b578063a9059cbb1461086a578063bd198ac214610889575f80fd5b806378109e541161015d57806388f820201161013857806388f82020146107c55780638da5cb5b146107fc5780638f4590d21461081857806395d89b4114610837575f80fd5b806378109e541461077c57806384530c461461079157806388790a68146107b0575f80fd5b806371b9189c1161019857806371b9189c1461071457806372fdf6ee14610733578063743942b6146107485780637598f8bc14610767575f80fd5b8063618d638e146106c257806370a08231146106e1578063715018a614610700575f80fd5b80632d83811911610293578063401aa5c0116102335780634b01547f1161020e5780634b01547f1461064657806352390c021461066557806359cca624146106845780635d54c0af146106a3575f80fd5b8063401aa5c0146105f35780634549b0391461060857806349bd5a5e14610627575f80fd5b8063395093511161026e57806339509351146105775780633af7f6f2146105965780633bd5d173146105b55780633ddf65ab146105d4575f80fd5b80632d83811914610518578063313ce567146105375780633685d41914610558575f80fd5b806318160ddd116102fe5780632691bc80116102d95780632691bc801461049c57806328a23cd1146104bb57806328b83ee6146104da5780632d4103d6146104f9575f80fd5b806318160ddd146104485780631e89d5451461045c57806323b872dd1461047d575f80fd5b80630445b6671461034f57806306fdde0314610377578063095ea7b3146103985780630f3a325f146103c757806313114a9d146103fd5780631694505e14610411575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b5061036460155481565b6040519081526020015b60405180910390f35b348015610382575f80fd5b5061038b6109f9565b60405161036e919061319d565b3480156103a3575f80fd5b506103b76103b23660046131ff565b610a89565b604051901515815260200161036e565b3480156103d2575f80fd5b506103b76103e1366004613229565b6001600160a01b03165f90815260208052604090205460ff1690565b348015610408575f80fd5b50600854610364565b34801561041c575f80fd5b50601954610430906001600160a01b031681565b6040516001600160a01b03909116815260200161036e565b348015610453575f80fd5b50600654610364565b348015610467575f80fd5b5061047b61047636600461328c565b610a9f565b005b348015610488575f80fd5b506103b76104973660046132f3565b610cd6565b3480156104a7575f80fd5b506016546103b79062010000900460ff1681565b3480156104c6575f80fd5b5061047b6104d5366004613331565b610d3d565b3480156104e5575f80fd5b5061047b6104f4366004613368565b610e48565b348015610504575f80fd5b5061047b61051336600461339e565b610e7f565b348015610523575f80fd5b506103646105323660046133ba565b610f03565b348015610542575f80fd5b5060035460405160ff909116815260200161036e565b348015610563575f80fd5b5061047b610572366004613229565b610f85565b348015610582575f80fd5b506103b76105913660046131ff565b61112f565b3480156105a1575f80fd5b5061047b6105b03660046133ba565b611164565b3480156105c0575f80fd5b5061047b6105cf3660046133ba565b6111b4565b3480156105df575f80fd5b5061047b6105ee3660046133d1565b61129a565b3480156105fe575f80fd5b50610364600c5481565b348015610613575f80fd5b506103646106223660046133ec565b6112e1565b348015610632575f80fd5b50601a54610430906001600160a01b031681565b348015610651575f80fd5b5061047b6106603660046133d1565b61136b565b348015610670575f80fd5b5061047b61067f366004613229565b6113b0565b34801561068f575f80fd5b5061047b61069e366004613229565b611495565b3480156106ae575f80fd5b5061047b6106bd36600461340f565b6114e1565b3480156106cd575f80fd5b5061047b6106dc366004613462565b611576565b3480156106ec575f80fd5b506103646106fb366004613229565b6116f3565b34801561070b575f80fd5b5061047b61174f565b34801561071f575f80fd5b5061047b61072e3660046134aa565b6117c0565b34801561073e575f80fd5b50610364600b5481565b348015610753575f80fd5b5061047b610762366004613229565b61185b565b348015610772575f80fd5b50610364600f5481565b348015610787575f80fd5b5061036460095481565b34801561079c575f80fd5b5061047b6107ab3660046134aa565b6118b6565b3480156107bb575f80fd5b50610364600d5481565b3480156107d0575f80fd5b506103b76107df366004613229565b6001600160a01b03165f9081526023602052604090205460ff1690565b348015610807575f80fd5b505f546001600160a01b0316610430565b348015610823575f80fd5b5061047b6108323660046134e9565b61194c565b348015610842575f80fd5b5061038b611995565b348015610856575f80fd5b506103b76108653660046131ff565b6119a4565b348015610875575f80fd5b506103b76108843660046131ff565b6119f1565b348015610894575f80fd5b5061047b6108a3366004613368565b6119fd565b3480156108b3575f80fd5b5061036460055481565b3480156108c8575f80fd5b50610364600a5481565b3480156108dd575f80fd5b506103646108ec366004613331565b6001600160a01b039182165f908152601f6020908152604080832093909416825291909152205490565b348015610921575f80fd5b5061047b610930366004613229565b611a56565b348015610940575f80fd5b5061047b61094f366004613229565b611aa1565b34801561095f575f80fd5b5061047b61096e366004613229565b611aea565b34801561097e575f80fd5b5061047b61098d366004613229565b611e06565b34801561099d575f80fd5b5061047b6109ac366004613229565b611e52565b3480156109bc575f80fd5b50610364600e5481565b3480156109d1575f80fd5b5061036460045481565b3480156109e6575f80fd5b506016546103b790610100900460ff1681565b606060178054610a0890613509565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613509565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b5f610a95338484611f39565b5060015b92915050565b5f546001600160a01b03163314610ad15760405162461bcd60e51b8152600401610ac890613541565b60405180910390fd5b6103218310610b385760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610ac8565b828114610b985760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610ac8565b5f805b84811015610bf557600354610bb49060ff16600a61366a565b848483818110610bc657610bc6613678565b90506020020135610bd7919061368c565b610be190836136a3565b915080610bed816136b6565b915050610b9b565b5080610c00336116f3565b1015610c4e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b84811015610cce57610cbc33878784818110610c6e57610c6e613678565b9050602002016020810190610c839190613229565b600354610c949060ff16600a61366a565b878786818110610ca657610ca6613678565b90506020020135610cb7919061368c565b61205c565b80610cc6816136b6565b915050610c50565b505050505050565b5f610ce284848461205c565b610d338433610d2e8560405180606001604052806028815260200161382a602891396001600160a01b038a165f908152601f60209081526040808320338452909152902054919061258f565b611f39565b5060019392505050565b5f546001600160a01b03163314610d665760405162461bcd60e51b8152600401610ac890613541565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136ce565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4291906136e5565b50505050565b5f546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ac890613541565b600d91909155600e55600f55565b5f546001600160a01b03163314610ea85760405162461bcd60e51b8152600401610ac890613541565b6016805461ff00191661010084151502179055610ec4306113b0565b601a54610ed9906001600160a01b03166113b0565b601654610100900460ff168015610ef05750600554155b15610eff574360055560048190555b5050565b5f600754821115610f695760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ac8565b5f610f726125c7565b9050610f7e83826125e8565b9392505050565b5f546001600160a01b03163314610fae5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b0381165f9081526023602052604090205460ff166110155760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ac8565b5f5b602554811015610eff57816001600160a01b03166025828154811061103e5761103e613678565b5f918252602090912001546001600160a01b03160361111d576025805461106790600190613700565b8154811061107757611077613678565b5f91825260209091200154602580546001600160a01b0390921691839081106110a2576110a2613678565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806110f9576110f9613713565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b80611127816136b6565b915050611017565b335f818152601f602090815260408083206001600160a01b03871684529091528120549091610a95918590610d2e9086612629565b5f546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610ac890613541565b6111ae816111a86103e86006546125e890919063ffffffff16565b90612687565b60095550565b335f8181526023602052604090205460ff16156112285760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ac8565b5f61123283612705565b505050506001600160a01b0384165f908152601d602052604090205491925061125d9190508261274d565b6001600160a01b0383165f908152601d6020526040902055600754611282908261274d565b6007556008546112929084612629565b600855505050565b5f546001600160a01b031633146112c35760405162461bcd60e51b8152600401610ac890613541565b6016805491151563010000000263ff00000019909216919091179055565b5f6006548311156113345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ac8565b81611352575f61134384612705565b50939550610a99945050505050565b5f61135c84612705565b50929550610a99945050505050565b5f546001600160a01b031633146113945760405162461bcd60e51b8152600401610ac890613541565b60168054911515620100000262ff000019909216919091179055565b5f546001600160a01b031633146113d95760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b0381165f908152601d602052604090205415611430576001600160a01b0381165f908152601d602052604090205461141790610f03565b6001600160a01b0382165f908152601e60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b5f546001600160a01b031633146114be5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602260205260409020805460ff19166001179055565b5f546001600160a01b0316331461150a5760405162461bcd60e51b8152600401610ac890613541565b5f5b82811015610e42578160205f86868581811061152a5761152a613678565b905060200201602081019061153f9190613229565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561156f816136b6565b905061150c565b5f546001600160a01b0316331461159f5760405162461bcd60e51b8152600401610ac890613541565b6107d182106116075760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610ac8565b6003545f90839061161c9060ff16600a61366a565b611626908461368c565b611630919061368c565b90508061163c336116f3565b101561168a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610ac8565b5f5b838110156116ec576116da338686848181106116aa576116aa613678565b90506020020160208101906116bf9190613229565b6003546116d09060ff16600a61366a565b610cb7908761368c565b806116e4816136b6565b91505061168c565b5050505050565b6001600160a01b0381165f9081526023602052604081205460ff161561172e57506001600160a01b03165f908152601e602052604090205490565b6001600160a01b0382165f908152601d6020526040902054610a9990610f03565b5f546001600160a01b031633146117785760405162461bcd60e51b8152600401610ac890613541565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146117e95760405162461bcd60e51b8152600401610ac890613541565b5f5b8181101561185657600160215f85858581811061180a5761180a613678565b905060200201602081019061181f9190613229565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905561184f816136b6565b90506117eb565b505050565b5f546001600160a01b031633146118845760405162461bcd60e51b8152600401610ac890613541565b6040516001600160a01b038216904780156108fc02915f818181858888f19350505050158015610eff573d5f803e3d5ffd5b5f546001600160a01b031633146118df5760405162461bcd60e51b8152600401610ac890613541565b5f5b8181101561185657600160245f85858581811061190057611900613678565b90506020020160208101906119159190613229565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055611945816136b6565b90506118e1565b5f546001600160a01b031633146119755760405162461bcd60e51b8152600401610ac890613541565b8082600654611984919061368c565b61198e9190613727565b6015555050565b606060188054610a0890613509565b5f610a953384610d2e8560405180606001604052806025815260200161385260259139335f908152601f602090815260408083206001600160a01b038d168452909152902054919061258f565b5f610a9533848461205c565b5f546001600160a01b03163314611a265760405162461bcd60e51b8152600401610ac890613541565b600a829055600b819055600c839055601283905560108290556011819055611a4e8282612629565b601355505050565b5f546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610ac890613541565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611aca5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602160205260409020805460ff19169055565b5f546001600160a01b03163314611b135760405162461bcd60e51b8152600401610ac890613541565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b789190613746565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be79190613746565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c549190613746565b90506001600160a01b038116611dc657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc49190613746565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d339190613746565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611d7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da19190613746565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611de2565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b5f546001600160a01b03163314611e2f5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b03165f908152602160205260409020805460ff19166001179055565b5f546001600160a01b03163314611e7b5760405162461bcd60e51b8152600401610ac890613541565b6001600160a01b038116611ee05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac8565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f9b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac8565b6001600160a01b038216611ffc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac8565b6001600160a01b038381165f818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac8565b6001600160a01b0382166121225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac8565b5f81116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ac8565b6001600160a01b0382165f90815260208052604090205460ff16156121d75760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610ac8565b6001600160a01b0383165f90815260208052604090205460ff161561222b5760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610ac8565b5f546001600160a01b0384811691161480159061225557505f546001600160a01b03838116911614155b156122b157601654610100900460ff166122b15760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610ac8565b601a545f906001600160a01b03858116911614806122dc5750601a546001600160a01b038481169116145b801561232257506001600160a01b0384165f9081526021602052604090205460ff168061232057506001600160a01b0383165f9081526021602052604090205460ff165b155b1561232b575060015b5f60055411801561236c57506001600160a01b0383165f9081526022602052604090205460ff1615801561236c57505f546001600160a01b03858116911614155b801561238657504360045460055461238491906136a3565b115b156123fa57600954612397846116f3565b6123a190846136a3565b11156123fa5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610ac8565b601354601455600c54601255601654610100900460ff16801561242a5750601a546001600160a01b038481169116145b1561244857600e54600d5461243e91612629565b601455600f546012555b5f60055411801561246757504360045460055461246591906136a3565b115b1561248e576001600160a01b0383165f9081526020805260409020805460ff191660011790555b5f6005541180156124ac57505f546001600160a01b03858116911614155b80156124c757506004546005546124c391906136a3565b4311155b80156124dc57506016546301000000900460ff165b156124e8576103b66014555b60165462010000900460ff161561252757601654610100900460ff16801561251d5750601a546001600160a01b038581169116145b15612527575f6014555b60165460ff161580156125415750601654610100900460ff165b801561255a5750601a546001600160a01b038481169116145b15612583575f612569306116f3565b9050601554811061258157506015546125818161278e565b505b610e4284848484612875565b5f81848411156125b25760405162461bcd60e51b8152600401610ac8919061319d565b505f6125be8486613700565b95945050505050565b5f805f6125d261299a565b90925090506125e182826125e8565b9250505090565b5f610f7e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b13565b5f8061263583856136a3565b905083811015610f7e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac8565b5f825f0361269657505f610a99565b5f6126a1838561368c565b9050826126ae8583613727565b14610f7e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac8565b5f805f805f805f805f6127178a612b3f565b9250925092505f805f6127338d868661272e6125c7565b612b7d565b919f909e50909c50959a5093985091965092945050505050565b5f610f7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061258f565b6016805460ff191660011790556013546010545f916127bd916002916127b79182908790612687565b906125e8565b90505f6127ca838361274d565b90506127d581612bc9565b60105447905f906127f4906127eb9060026125e8565b6013549061274d565b90505f61281560026127b7846127b76010548861268790919063ffffffff16565b90505f612831836127b76011548761268790919063ffffffff16565b905047801561285157601b546128519083906001600160a01b0316612d52565b8615612861576128618784612d85565b50506016805460ff19169055505050505050565b6012546014548261288a575f60128190556014555b6001600160a01b0386165f9081526023602052604090205460ff1680156128c957506001600160a01b0385165f9081526023602052604090205460ff16155b156128de576128d9868686612e4f565b612986565b6001600160a01b0386165f9081526023602052604090205460ff1615801561291d57506001600160a01b0385165f9081526023602052604090205460ff165b1561292d576128d9868686612f6e565b6001600160a01b0386165f9081526023602052604090205460ff16801561296b57506001600160a01b0385165f9081526023602052604090205460ff165b1561297b576128d9868686613011565b61298686868661307f565b82610cce5760129190915560145550505050565b6007546006545f918291825b602554811015612ae35782601d5f602584815481106129c7576129c7613678565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180612a2f575081601e5f60258481548110612a0957612a09613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a4557600754600654945094505050509091565b612a89601d5f60258481548110612a5e57612a5e613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054849061274d565b9250612acf601e5f60258481548110612aa457612aa4613678565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054839061274d565b915080612adb816136b6565b9150506129a6565b50600654600754612af3916125e8565b821015612b0a576007546006549350935050509091565b90939092509050565b5f8183612b335760405162461bcd60e51b8152600401610ac8919061319d565b505f6125be8486613727565b5f805f80612b4c856130bf565b90505f612b58866130db565b90505f612b6f82612b69898661274d565b9061274d565b979296509094509092505050565b5f808080612b8b8886612687565b90505f612b988887612687565b90505f612ba58888612687565b90505f612bb682612b69868661274d565b939b939a50919850919650505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612bfc57612bfc613678565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c779190613746565b81600181518110612c8a57612c8a613678565b6001600160a01b039283166020918202929092010152601954612cb09130911684611f39565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ce89085905f908690309042906004016137a3565b5f604051808303815f87803b158015612cff575f80fd5b505af1158015612d11573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612d469291906137de565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015611856573d5f803e3d5ffd5b601954612d9d9030906001600160a01b031684611f39565b6019546001600160a01b031663f305d7198230855f80612dc45f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612e2a573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906116ec91906137fe565b5f805f805f80612e5e87612705565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150612e8f908861274d565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612ebd908761274d565b6001600160a01b03808b165f908152601d602052604080822093909355908a1681522054612eeb9086612629565b6001600160a01b0389165f908152601d6020526040902055612f0c816130f7565b612f168483613179565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f5b91815260200190565b60405180910390a3505050505050505050565b5f805f805f80612f7d87612705565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612fae908761274d565b6001600160a01b03808b165f908152601d6020908152604080832094909455918b168152601e9091522054612fe39084612629565b6001600160a01b0389165f908152601e6020908152604080832093909355601d90522054612eeb9086612629565b5f805f805f8061302087612705565b6001600160a01b038f165f908152601e6020526040902054959b50939950919750955093509150613051908861274d565b6001600160a01b038a165f908152601e6020908152604080832093909355601d90522054612fae908761274d565b5f805f805f8061308e87612705565b6001600160a01b038f165f908152601d6020526040902054959b50939950919750955093509150612ebd908761274d565b5f610a996103e86127b76012548561268790919063ffffffff16565b5f610a996103e86127b76014548561268790919063ffffffff16565b5f6131006125c7565b90505f61310d8383612687565b305f908152601d60205260409020549091506131299082612629565b305f908152601d602090815260408083209390935560239052205460ff161561185657305f908152601e60205260409020546131659084612629565b305f908152601e6020526040902055505050565b600754613186908361274d565b6007556008546131969082612629565b6008555050565b5f6020808352835180828501525f5b818110156131c8578581018301518582016040015282016131ac565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131fc575f80fd5b50565b5f8060408385031215613210575f80fd5b823561321b816131e8565b946020939093013593505050565b5f60208284031215613239575f80fd5b8135610f7e816131e8565b5f8083601f840112613254575f80fd5b50813567ffffffffffffffff81111561326b575f80fd5b6020830191508360208260051b8501011115613285575f80fd5b9250929050565b5f805f806040858703121561329f575f80fd5b843567ffffffffffffffff808211156132b6575f80fd5b6132c288838901613244565b909650945060208701359150808211156132da575f80fd5b506132e787828801613244565b95989497509550505050565b5f805f60608486031215613305575f80fd5b8335613310816131e8565b92506020840135613320816131e8565b929592945050506040919091013590565b5f8060408385031215613342575f80fd5b823561334d816131e8565b9150602083013561335d816131e8565b809150509250929050565b5f805f6060848603121561337a575f80fd5b505081359360208301359350604090920135919050565b80151581146131fc575f80fd5b5f80604083850312156133af575f80fd5b823561321b81613391565b5f602082840312156133ca575f80fd5b5035919050565b5f602082840312156133e1575f80fd5b8135610f7e81613391565b5f80604083850312156133fd575f80fd5b82359150602083013561335d81613391565b5f805f60408486031215613421575f80fd5b833567ffffffffffffffff811115613437575f80fd5b61344386828701613244565b909450925050602084013561345781613391565b809150509250925092565b5f805f60408486031215613474575f80fd5b833567ffffffffffffffff81111561348a575f80fd5b61349686828701613244565b909790965060209590950135949350505050565b5f80602083850312156134bb575f80fd5b823567ffffffffffffffff8111156134d1575f80fd5b6134dd85828601613244565b90969095509350505050565b5f80604083850312156134fa575f80fd5b50508035926020909101359150565b600181811c9082168061351d57607f821691505b60208210810361353b57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135c457815f19048211156135aa576135aa613576565b808516156135b757918102915b93841c939080029061358f565b509250929050565b5f826135da57506001610a99565b816135e657505f610a99565b81600181146135fc576002811461360657613622565b6001915050610a99565b60ff84111561361757613617613576565b50506001821b610a99565b5060208310610133831016604e8410600b8410161715613645575081810a610a99565b61364f838361358a565b805f190482111561366257613662613576565b029392505050565b5f610f7e60ff8416836135cc565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a9957610a99613576565b80820180821115610a9957610a99613576565b5f600182016136c7576136c7613576565b5060010190565b5f602082840312156136de575f80fd5b5051919050565b5f602082840312156136f5575f80fd5b8151610f7e81613391565b81810381811115610a9957610a99613576565b634e487b7160e01b5f52603160045260245ffd5b5f8261374157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613756575f80fd5b8151610f7e816131e8565b5f8151808452602080850194508084015f5b838110156137985781516001600160a01b031687529582019590820190600101613773565b509495945050505050565b85815284602082015260a060408201525f6137c160a0830186613761565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6137f66040830184613761565b949350505050565b5f805f60608486031215613810575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aeb97e21412bb016a5cf5786f53fe4151c26da088483f51af27f3fbec60b1f5764736f6c63430008140033

Deployed Bytecode Sourcemap

14268:23639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15345:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15345:57:0;;;;;;;;30204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18300:161::-;;;;;;;;;;-1:-1:-1;18300:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18300:161:0;1205:187:1;31387:106:0;;;;;;;;;;-1:-1:-1;31387:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31467:18:0;31443:4;31467:18;;;:9;:18;;;;;;;;;31387:106;31629:87;;;;;;;;;;-1:-1:-1;31698:10:0;;31629:87;;15639:41;;;;;;;;;;-1:-1:-1;15639:41:0;;;;-1:-1:-1;;;;;15639:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;15639:41:0;1649:230:1;30481:95:0;;;;;;;;;;-1:-1:-1;30561:7:0;;30481:95;;35896:701;;;;;;;;;;-1:-1:-1;35896:701:0;;;;;:::i;:::-;;:::i;:::-;;17472:313;;;;;;;;;;-1:-1:-1;17472:313:0;;;;;:::i;:::-;;:::i;15475:34::-;;;;;;;;;;-1:-1:-1;15475:34:0;;;;;;;;;;;35237:171;;;;;;;;;;-1:-1:-1;35237:171:0;;;;;:::i;:::-;;:::i;37572:258::-;;;;;;;;;;-1:-1:-1;37572:258:0;;;;;:::i;:::-;;:::i;32980:337::-;;;;;;;;;;-1:-1:-1;32980:337:0;;;;;:::i;:::-;;:::i;30800:253::-;;;;;;;;;;-1:-1:-1;30800:253:0;;;;;:::i;:::-;;:::i;30390:83::-;;;;;;;;;;-1:-1:-1;30456:9:0;;30390:83;;30456:9;;;;4986:36:1;;4974:2;4959:18;30390:83:0;4844:184:1;32493:479:0;;;;;;;;;;-1:-1:-1;32493:479:0;;;;;:::i;:::-;;:::i;17793:218::-;;;;;;;;;;-1:-1:-1;17793:218:0;;;;;:::i;:::-;;:::i;35416:167::-;;;;;;;;;;-1:-1:-1;35416:167:0;;;;;:::i;:::-;;:::i;18473:377::-;;;;;;;;;;-1:-1:-1;18473:377:0;;;;;:::i;:::-;;:::i;33439:96::-;;;;;;;;;;-1:-1:-1;33439:96:0;;;;;:::i;:::-;;:::i;14874:36::-;;;;;;;;;;;;;;;;31724:436;;;;;;;;;;-1:-1:-1;31724:436:0;;;;;:::i;:::-;;:::i;15687:28::-;;;;;;;;;;-1:-1:-1;15687:28:0;;;;-1:-1:-1;;;;;15687:28:0;;;33329:102;;;;;;;;;;-1:-1:-1;33329:102:0;;;;;:::i;:::-;;:::i;32224:261::-;;;;;;;;;;-1:-1:-1;32224:261:0;;;;;:::i;:::-;;:::i;35591:111::-;;;;;;;;;;-1:-1:-1;35591:111:0;;;;;:::i;:::-;;:::i;34674:209::-;;;;;;;;;;-1:-1:-1;34674:209:0;;;;;:::i;:::-;;:::i;36605:512::-;;;;;;;;;;-1:-1:-1;36605:512:0;;;;;:::i;:::-;;:::i;30584:208::-;;;;;;;;;;-1:-1:-1;30584:208:0;;;;;:::i;:::-;;:::i;6029:148::-;;;;;;;;;;;;;:::i;34202:198::-;;;;;;;;;;-1:-1:-1;34202:198:0;;;;;:::i;:::-;;:::i;14828:36::-;;;;;;;;;;;;;;;;35094:135;;;;;;;;;;-1:-1:-1;35094:135:0;;;;;:::i;:::-;;:::i;15010:37::-;;;;;;;;;;;;;;;;14691:58;;;;;;;;;;;;;;;;34895:188;;;;;;;;;;-1:-1:-1;34895:188:0;;;;;:::i;:::-;;:::i;14919:36::-;;;;;;;;;;;;;;;;31501:120;;;;;;;;;;-1:-1:-1;31501:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31593:20:0;31569:4;31593:20;;;:11;:20;;;;;;;;;31501:120;5804:79;;;;;;;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;5869:6:0;5804:79;;35710:178;;;;;;;;;;-1:-1:-1;35710:178:0;;;;;:::i;:::-;;:::i;30295:87::-;;;;;;;;;;;;;:::i;18019:269::-;;;;;;;;;;-1:-1:-1;18019:269:0;;;;;:::i;:::-;;:::i;31061:167::-;;;;;;;;;;-1:-1:-1;31061:167:0;;;;;:::i;:::-;;:::i;37125:439::-;;;;;;;;;;-1:-1:-1;37125:439:0;;;;;:::i;:::-;;:::i;14452:29::-;;;;;;;;;;;;;;;;14782:35;;;;;;;;;;;;;;;;31236:143;;;;;;;;;;-1:-1:-1;31236:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31344:18:0;;;31317:7;31344:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31236:143;34534:128;;;;;;;;;;-1:-1:-1;34534:128:0;;;;;:::i;:::-;;:::i;34412:110::-;;;;;;;;;;-1:-1:-1;34412:110:0;;;;;:::i;:::-;;:::i;33547:523::-;;;;;;;;;;-1:-1:-1;33547:523:0;;;;;:::i;:::-;;:::i;34082:112::-;;;;;;;;;;-1:-1:-1;34082:112:0;;;;;:::i;:::-;;:::i;6185:244::-;;;;;;;;;;-1:-1:-1;6185:244:0;;;;;:::i;:::-;;:::i;14963:38::-;;;;;;;;;;;;;;;;14416:29;;;;;;;;;;;;;;;;15437:31;;;;;;;;;;-1:-1:-1;15437:31:0;;;;;;;;;;;30204:83;30241:13;30274:5;30267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30204:83;:::o;18300:161::-;18375:4;18392:39;192:10;18415:7;18424:6;18392:8;:39::i;:::-;-1:-1:-1;18449:4:0;18300:161;;;;;:::o;35896:701::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;;;;;;;;;36036:3:::1;36017:22:::0;::::1;36009:79;;;::::0;-1:-1:-1;;;36009:79:0;;9178:2:1;36009:79:0::1;::::0;::::1;9160:21:1::0;9217:2;9197:18;;;9190:30;9256:34;9236:18;;;9229:62;-1:-1:-1;;;9307:18:1;;;9300:43;9360:19;;36009:79:0::1;8976:409:1::0;36009:79:0::1;36130:33:::0;;::::1;36122:85;;;::::0;-1:-1:-1;;;36122:85:0;;9592:2:1;36122:85:0::1;::::0;::::1;9574:21:1::0;9631:2;9611:18;;;9604:30;9670:34;9650:18;;;9643:62;-1:-1:-1;;;9721:18:1;;;9714:38;9769:19;;36122:85:0::1;9390:404:1::0;36122:85:0::1;36220:12;36253:6:::0;36249:108:::1;36263:20:::0;;::::1;36249:108;;;36335:9;::::0;36331:13:::1;::::0;36335:9:::1;;36331:2;:13;:::i;:::-;36319:6;;36326:1;36319:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36311:34;::::0;:4;:34:::1;:::i;:::-;36304:41:::0;-1:-1:-1;36285:3:0;::::1;::::0;::::1;:::i;:::-;;;;36249:108;;;;36402:4;36377:21;36387:10;36377:9;:21::i;:::-;:29;;36369:69;;;::::0;-1:-1:-1;;;36369:69:0;;12091:2:1;36369:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36369:69:0::1;11889:351:1::0;36369:69:0::1;36455:6;36451:139;36465:20:::0;;::::1;36451:139;;;36506:62;36516:10;36527:9;;36537:1;36527:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36557:9;::::0;36553:13:::1;::::0;36557:9:::1;;36553:2;:13;:::i;:::-;36541:6;;36548:1;36541:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36506:9;:62::i;:::-;36487:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36451:139;;;;35996:601;35896:701:::0;;;;:::o;17472:313::-;17570:4;17587:36;17597:6;17605:9;17616:6;17587:9;:36::i;:::-;17634:121;17643:6;192:10;17665:89;17703:6;17665:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17665:19:0;;;;;;:11;:19;;;;;;;;192:10;17665:33;;;;;;;;;;:37;:89::i;:::-;17634:8;:121::i;:::-;-1:-1:-1;17773:4:0;17472:313;;;;;:::o;35237:171::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35332:30:::1;::::0;-1:-1:-1;;;35332:30:0;;35356:4:::1;35332:30;::::0;::::1;1822:51:1::0;35314:15:0::1;::::0;-1:-1:-1;;;;;35332:15:0;::::1;::::0;::::1;::::0;1795:18:1;;35332:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35373:27;::::0;-1:-1:-1;;;35373:27:0;;-1:-1:-1;;;;;12626:32:1;;;35373:27:0::1;::::0;::::1;12608:51:1::0;12675:18;;;12668:34;;;35314:48:0;;-1:-1:-1;35373:14:0;;::::1;::::0;::::1;::::0;12581:18:1;;35373:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35303:105;35237:171:::0;;:::o;37572:258::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37697:17:::1;:34:::0;;;;37742:17:::1;:34:::0;37787:18:::1;:35:::0;37572:258::o;32980:337::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;33067:11:::1;:21:::0;;-1:-1:-1;;33067:21:0::1;;::::0;::::1;;;;::::0;;33099:32:::1;33125:4;33099:17;:32::i;:::-;33160:13;::::0;33142:32:::1;::::0;-1:-1:-1;;;;;33160:13:0::1;33142:17;:32::i;:::-;33188:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33203:10:0::1;::::0;:15;33188:30:::1;33185:125;;;33247:12;33234:10;:25:::0;33274:10:::1;:24:::0;;;33185:125:::1;32980:337:::0;;:::o;30800:253::-;30866:7;30905;;30894;:18;;30886:73;;;;-1:-1:-1;;;30886:73:0;;13165:2:1;30886:73:0;;;13147:21:1;13204:2;13184:18;;;13177:30;13243:34;13223:18;;;13216:62;-1:-1:-1;;;13294:18:1;;;13287:40;13344:19;;30886:73:0;12963:406:1;30886:73:0;30970:19;30993:10;:8;:10::i;:::-;30970:33;-1:-1:-1;31021:24:0;:7;30970:33;31021:11;:24::i;:::-;31014:31;30800:253;-1:-1:-1;;;30800:253:0:o;32493:479::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32575:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32567:60;;;::::0;-1:-1:-1;;;32567:60:0;;13576:2:1;32567:60:0::1;::::0;::::1;13558:21:1::0;13615:2;13595:18;;;13588:30;13654:29;13634:18;;;13627:57;13701:18;;32567:60:0::1;13374:351:1::0;32567:60:0::1;32643:9;32638:327;32662:9;:16:::0;32658:20;::::1;32638:327;;;32720:7;-1:-1:-1::0;;;;;32704:23:0::1;:9;32714:1;32704:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32704:12:0::1;:23:::0;32700:254:::1;;32763:9;32773:16:::0;;:20:::1;::::0;32792:1:::1;::::0;32773:20:::1;:::i;:::-;32763:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32748:9:::1;:12:::0;;-1:-1:-1;;;;;32763:31:0;;::::1;::::0;32758:1;;32748:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32748:46:0::1;-1:-1:-1::0;;;;;32748:46:0;;::::1;;::::0;;32813:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32852:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32852:28:0::1;::::0;;32899:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32899:15:0;;;;;-1:-1:-1;;;;;;32899:15:0::1;::::0;;;;;32980:337;;:::o;32700:254::-:1;32680:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32638:327;;17793:218:::0;192:10;17881:4;17930:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17930:34:0;;;;;;;;;;17881:4;;17898:83;;17921:7;;17930:50;;17969:10;17930:38;:50::i;35416:167::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35529:46:::1;35551:23;35529:17;35541:4;35529:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35511:15;:64:::0;-1:-1:-1;35416:167:0:o;18473:377::-;192:10;18525:14;18574:19;;;:11;:19;;;;;;;;18573:20;18565:77;;;;-1:-1:-1;;;18565:77:0;;14197:2:1;18565:77:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:34;14255:18;;;14248:62;-1:-1:-1;;;14326:18:1;;;14319:42;14378:19;;18565:77:0;13995:408:1;18565:77:0;18654:15;18678:19;18689:7;18678:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18726:15:0;;;;;;:7;:15;;;;;;18653:44;;-1:-1:-1;18726:28:0;;:15;-1:-1:-1;18653:44:0;18726:19;:28::i;:::-;-1:-1:-1;;;;;18708:15:0;;;;;;:7;:15;;;;;:46;18775:7;;:20;;18787:7;18775:11;:20::i;:::-;18765:7;:30;18819:10;;:23;;18834:7;18819:14;:23::i;:::-;18806:10;:36;-1:-1:-1;;;18473:377:0:o;33439:96::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;33508:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33508:19:0;;::::1;::::0;;;::::1;::::0;;33439:96::o;31724:436::-;31814:7;31853;;31842;:18;;31834:62;;;;-1:-1:-1;;;31834:62:0;;14610:2:1;31834:62:0;;;14592:21:1;14649:2;14629:18;;;14622:30;14688:33;14668:18;;;14661:61;14739:18;;31834:62:0;14408:355:1;31834:62:0;31912:17;31907:246;;31947:15;31971:19;31982:7;31971:10;:19::i;:::-;-1:-1:-1;31946:44:0;;-1:-1:-1;32005:14:0;;-1:-1:-1;;;;;32005:14:0;31907:246;32054:23;32085:19;32096:7;32085:10;:19::i;:::-;-1:-1:-1;32052:52:0;;-1:-1:-1;32119:22:0;;-1:-1:-1;;;;;32119:22:0;33329:102;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;33401:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33401:22:0;;::::1;::::0;;;::::1;::::0;;33329:102::o;32224:261::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32301:16:0;::::1;32320:1;32301:16:::0;;;:7:::1;:16;::::0;;;;;:20;32298:108:::1;;-1:-1:-1::0;;;;;32377:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32357:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32338:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32298:108:::1;-1:-1:-1::0;;;;;32416:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32416:27:0::1;32439:4;32416:27:::0;;::::1;::::0;;;32454:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32454:23:0::1;::::0;;::::1;::::0;;32224:261::o;35591:111::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35662:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35662:32:0::1;35690:4;35662:32;::::0;;35591:111::o;34674:209::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;34774:9:::1;34769:107;34785:20:::0;;::::1;34769:107;;;34857:6;34831:9;:23;34841:9;;34851:1;34841:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34831:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34831:23:0;:32;;-1:-1:-1;;34831:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34807:3:::1;::::0;::::1;:::i;:::-;;;34769:107;;36605:512:::0;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36743:4:::1;36724:23:::0;::::1;36716:81;;;::::0;-1:-1:-1;;;36716:81:0;;14970:2:1;36716:81:0::1;::::0;::::1;14952:21:1::0;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;-1:-1:-1;;;15099:18:1;;;15092:44;15153:19;;36716:81:0::1;14768:410:1::0;36716:81:0::1;36860:9;::::0;36833:12:::1;::::0;36872:9;;36856:13:::1;::::0;36860:9:::1;;36856:2;:13;:::i;:::-;36848:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36833:55;;36934:4;36909:21;36919:10;36909:9;:21::i;:::-;:29;;36901:69;;;::::0;-1:-1:-1;;;36901:69:0;;12091:2:1;36901:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36901:69:0::1;11889:351:1::0;36901:69:0::1;36987:6;36983:127;36997:20:::0;;::::1;36983:127;;;37038:58;37048:10;37059:9;;37069:1;37059:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37085:9;::::0;37081:13:::1;::::0;37085:9:::1;;37081:2;:13;:::i;:::-;37073:21;::::0;:6;:21:::1;:::i;37038:58::-;37019:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36983:127;;;;36703:414;36605:512:::0;;;:::o;30584:208::-;-1:-1:-1;;;;;30674:20:0;;30650:7;30674:20;;;:11;:20;;;;;;;;30670:59;;;-1:-1:-1;;;;;;30713:16:0;;;;;:7;:16;;;;;;;30584:208::o;30670:59::-;-1:-1:-1;;;;;30767:16:0;;;;;;:7;:16;;;;;;30747:37;;:19;:37::i;6029:148::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;6136:1:::1;6120:6:::0;;6099:40:::1;::::0;-1:-1:-1;;;;;6120:6:0;;::::1;::::0;6099:40:::1;::::0;6136:1;;6099:40:::1;6167:1;6150:19:::0;;-1:-1:-1;;;;;;6150:19:0::1;::::0;;6029:148::o;34202:198::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;34289:9:::1;34284:109;34300:20:::0;;::::1;34284:109;;;34377:4;34342:18;:32;34361:9;;34371:1;34361:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34342:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34342:32:0;:39;;-1:-1:-1;;34342:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34322:3:::1;::::0;::::1;:::i;:::-;;;34284:109;;;;34202:198:::0;;:::o;35094:135::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35179:42:::1;::::0;-1:-1:-1;;;;;35179:19:0;::::1;::::0;35199:21:::1;35179:42:::0;::::1;;;::::0;::::1;::::0;;;35199:21;35179:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;34895:188:::0;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;34982:9:::1;34977:99;34993:20:::0;;::::1;34977:99;;;35060:4;35035:10;:24;35046:9;;35056:1;35046:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35035:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35035:24:0;:29;;-1:-1:-1;;35035:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35015:3:::1;::::0;::::1;:::i;:::-;;;34977:99;;35710:178:::0;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;35864:16:::1;35844;35834:7;;:26;;;;:::i;:::-;35833:47;;;;:::i;:::-;35817:13;:63:::0;-1:-1:-1;;35710:178:0:o;30295:87::-;30334:13;30367:7;30360:14;;;;;:::i;18019:269::-;18112:4;18129:129;192:10;18152:7;18161:96;18200:15;18161:96;;;;;;;;;;;;;;;;;192:10;18161:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18161:34:0;;;;;;;;;;;;:38;:96::i;31061:167::-;31139:4;31156:42;192:10;31180:9;31191:6;31156:9;:42::i;37125:439::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37259:16:::1;:33:::0;;;37303:16:::1;:33:::0;;;37347:17:::1;:34:::0;;;37394:13:::1;:30:::0;;;37435:12:::1;:29:::0;;;37475:12:::1;:29:::0;;;37526:30:::1;37278:14:::0;37322;37526:16:::1;:30::i;:::-;37515:8;:41:::0;-1:-1:-1;;;37125:439:0:o;34534:128::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;34611:15:::1;:43:::0;;-1:-1:-1;;;;;;34611:43:0::1;-1:-1:-1::0;;;;;34611:43:0;;;::::1;::::0;;;::::1;::::0;;34534:128::o;34412:110::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34479:27:0::1;34509:5;34479:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34479:35:0::1;::::0;;34412:110::o;33547:523::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;33620:29:::1;33671:9;33620:61;;33692:16;33729:10;-1:-1:-1::0;;;;;33729:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33711:47:0::1;;33767:4;33774:10;-1:-1:-1::0;;;;;33774:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33711:81;::::0;-1:-1:-1;;;;;;33711:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;33711:81:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;33711:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33692:100:::0;-1:-1:-1;;;;;;33807:22:0;::::1;33803:221;;33880:10;-1:-1:-1::0;;;;;33880:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33862:50:0::1;;33921:4;33928:10;-1:-1:-1::0;;;;;33928:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33862:84;::::0;-1:-1:-1;;;;;;33862:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15891:15:1;;;33862:84:0::1;::::0;::::1;15873:34:1::0;15943:15;;15923:18;;;15916:43;15808:18;;33862:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33846:13;:100:::0;;-1:-1:-1;;;;;;33846:100:0::1;-1:-1:-1::0;;;;;33846:100:0;;;::::1;::::0;;;::::1;::::0;;33803:221:::1;;;33988:13;:24:::0;;-1:-1:-1;;;;;;33988:24:0::1;-1:-1:-1::0;;;;;33988:24:0;::::1;;::::0;;33803:221:::1;-1:-1:-1::0;34034:15:0::1;:28:::0;;-1:-1:-1;;;;;;34034:28:0::1;-1:-1:-1::0;;;;;34034:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33547:523:0:o;34082:112::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34152:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34152:34:0::1;34182:4;34152:34;::::0;;34082:112::o;6185:244::-;5938:6;;-1:-1:-1;;;;;5938:6:0;192:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6274:22:0;::::1;6266:73;;;::::0;-1:-1:-1;;;6266:73:0;;16172:2:1;6266:73:0::1;::::0;::::1;16154:21:1::0;16211:2;16191:18;;;16184:30;16250:34;16230:18;;;16223:62;-1:-1:-1;;;16301:18:1;;;16294:36;16347:19;;6266:73:0::1;15970:402:1::0;6266:73:0::1;6376:6;::::0;;6355:38:::1;::::0;-1:-1:-1;;;;;6355:38:0;;::::1;::::0;6376:6;::::1;::::0;6355:38:::1;::::0;::::1;6404:6;:17:::0;;-1:-1:-1;;;;;;6404:17:0::1;-1:-1:-1::0;;;;;6404:17:0;;;::::1;::::0;;;::::1;::::0;;6185:244::o;18858:337::-;-1:-1:-1;;;;;18951:19:0;;18943:68;;;;-1:-1:-1;;;18943:68:0;;16579:2:1;18943:68:0;;;16561:21:1;16618:2;16598:18;;;16591:30;16657:34;16637:18;;;16630:62;-1:-1:-1;;;16708:18:1;;;16701:34;16752:19;;18943:68:0;16377:400:1;18943:68:0;-1:-1:-1;;;;;19030:21:0;;19022:68;;;;-1:-1:-1;;;19022:68:0;;16984:2:1;19022:68:0;;;16966:21:1;17023:2;17003:18;;;16996:30;17062:34;17042:18;;;17035:62;-1:-1:-1;;;17113:18:1;;;17106:32;17155:19;;19022:68:0;16782:398:1;19022:68:0;-1:-1:-1;;;;;19103:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19155:32;;160:25:1;;;19155:32:0;;133:18:1;19155:32:0;;;;;;;18858:337;;;:::o;19337:2270::-;-1:-1:-1;;;;;19459:18:0;;19451:68;;;;-1:-1:-1;;;19451:68:0;;17387:2:1;19451:68:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:34;17445:18;;;17438:62;-1:-1:-1;;;17516:18:1;;;17509:35;17561:19;;19451:68:0;17185:401:1;19451:68:0;-1:-1:-1;;;;;19538:16:0;;19530:64;;;;-1:-1:-1;;;19530:64:0;;17793:2:1;19530:64:0;;;17775:21:1;17832:2;17812:18;;;17805:30;17871:34;17851:18;;;17844:62;-1:-1:-1;;;17922:18:1;;;17915:33;17965:19;;19530:64:0;17591:399:1;19530:64:0;19622:1;19613:6;:10;19605:64;;;;-1:-1:-1;;;19605:64:0;;18197:2:1;19605:64:0;;;18179:21:1;18236:2;18216:18;;;18209:30;18275:34;18255:18;;;18248:62;-1:-1:-1;;;18326:18:1;;;18319:39;18375:19;;19605:64:0;17995:405:1;19605:64:0;-1:-1:-1;;;;;19689:13:0;;;;;;:9;:13;;;;;;;;19688:14;19680:37;;;;-1:-1:-1;;;19680:37:0;;18607:2:1;19680:37:0;;;18589:21:1;18646:2;18626:18;;;18619:30;-1:-1:-1;;;18665:18:1;;;18658:40;18715:18;;19680:37:0;18405:334:1;19680:37:0;-1:-1:-1;;;;;19737:15:0;;;;;;:9;:15;;;;;;;;19736:16;19728:39;;;;-1:-1:-1;;;19728:39:0;;18607:2:1;19728:39:0;;;18589:21:1;18646:2;18626:18;;;18619:30;-1:-1:-1;;;18665:18:1;;;18658:40;18715:18;;19728:39:0;18405:334:1;19728:39:0;5842:7;5869:6;-1:-1:-1;;;;;19782:14:0;;;5869:6;;19782:14;;;;:30;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;19800:12:0;;;5869:6;;19800:12;;19782:30;19778:84;;;19822:11;;;;;;;19814:48;;;;-1:-1:-1;;;19814:48:0;;18946:2:1;19814:48:0;;;18928:21:1;18985:2;18965:18;;;18958:30;19024:26;19004:18;;;18997:54;19068:18;;19814:48:0;18744:348:1;19814:48:0;19995:13;;19923:12;;-1:-1:-1;;;;;19989:19:0;;;19995:13;;19989:19;;:40;;-1:-1:-1;20016:13:0;;-1:-1:-1;;;;;20012:17:0;;;20016:13;;20012:17;19989:40;19988:99;;;;-1:-1:-1;;;;;;20036:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20064:22:0;;;;;;:18;:22;;;;;;;;20036:50;20034:53;19988:99;19983:148;;;-1:-1:-1;20115:4:0;19983:148;20157:1;20146:10;;:12;:59;;;;-1:-1:-1;;;;;;20164:22:0;;;;;;:18;:22;;;;;;;;20163:23;:41;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;20190:14:0;;;5869:6;;20190:14;;20163:41;20146:105;;;;;20238:12;20224:10;;20211;;:23;;;;:::i;:::-;20210:40;20146:105;20143:246;;;20302:15;;20287:13;20297:2;20287:9;:13::i;:::-;20279:21;;:6;:21;:::i;:::-;:38;;20271:106;;;;-1:-1:-1;;;20271:106:0;;19299:2:1;20271:106:0;;;19281:21:1;19338:2;19318:18;;;19311:30;19377:34;19357:18;;;19350:62;-1:-1:-1;;;19428:18:1;;;19421:32;19470:19;;20271:106:0;19097:398:1;20271:106:0;20418:8;;20402:15;:24;20451:17;;20437:13;:31;20484:11;;;;;;;:34;;;;-1:-1:-1;20505:13:0;;-1:-1:-1;;;;;20499:19:0;;;20505:13;;20499:19;20484:34;20481:177;;;20581:17;;20559;;:40;;:21;:40::i;:::-;20542:15;:57;20628:18;;20614:13;:32;20481:177;20711:1;20700:10;;:12;:56;;;;;20744:12;20730:10;;20717;;:23;;;;:::i;:::-;20716:40;20700:56;20697:109;;;-1:-1:-1;;;;;20776:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20776:18:0;20790:4;20776:18;;;20697:109;20861:1;20850:10;;:12;:30;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;20866:14:0;;;5869:6;;20866:14;;20850:30;:75;;;;;20914:10;;20901;;:23;;;;:::i;:::-;20884:12;:41;;20850:75;:91;;;;-1:-1:-1;20930:11:0;;;;;;;20850:91;20847:154;;;20977:3;20961:15;:19;20847:154;21032:14;;;;;;;21029:144;;;21066:11;;;;;;;:36;;;;-1:-1:-1;21089:13:0;;-1:-1:-1;;;;;21081:21:0;;;21089:13;;21081:21;21066:36;21063:99;;;21144:1;21128:15;:17;21063:99;21206:6;;;;21205:7;:22;;;;-1:-1:-1;21216:11:0;;;;;;;21205:22;:45;;;;-1:-1:-1;21237:13:0;;-1:-1:-1;;;;;21231:19:0;;;21237:13;;21231:19;21205:45;21201:350;;;21275:28;21306:24;21324:4;21306:9;:24::i;:::-;21275:55;;21384:13;;21362:20;:35;21359:169;;-1:-1:-1;21444:13:0;;21480:32;21444:13;21480:10;:32::i;:::-;21252:299;21201:350;21561:38;21576:4;21581:2;21584:6;21591:7;21561:14;:38::i;1505:192::-;1591:7;1627:12;1619:6;;;;1611:29;;;;-1:-1:-1;;;1611:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1651:9:0;1663:5;1667:1;1663;:5;:::i;:::-;1651:17;1505:192;-1:-1:-1;;;;;1505:192:0:o;29055:163::-;29096:7;29117:15;29134;29153:19;:17;:19::i;:::-;29116:56;;-1:-1:-1;29116:56:0;-1:-1:-1;29190:20:0;29116:56;;29190:11;:20::i;:::-;29183:27;;;;29055:163;:::o;1963:132::-;2021:7;2048:39;2052:1;2055;2048:39;;;;;;;;;;;;;;;;;:3;:39::i;1172:181::-;1230:7;;1262:5;1266:1;1262;:5;:::i;:::-;1250:17;;1291:1;1286;:6;;1278:46;;;;-1:-1:-1;;;1278:46:0;;19702:2:1;1278:46:0;;;19684:21:1;19741:2;19721:18;;;19714:30;19780:29;19760:18;;;19753:57;19827:18;;1278:46:0;19500:351:1;1705:250:0;1763:7;1787:1;1792;1787:6;1783:47;;-1:-1:-1;1817:1:0;1810:8;;1783:47;1842:9;1854:5;1858:1;1854;:5;:::i;:::-;1842:17;-1:-1:-1;1887:1:0;1878:5;1882:1;1842:17;1878:5;:::i;:::-;:10;1870:56;;;;-1:-1:-1;;;1870:56:0;;20058:2:1;1870:56:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:31;20228:19;;1870:56:0;19856:397:1;28290:419:0;28349:7;28358;28367;28376;28385;28394;28415:23;28440:12;28454:18;28476:20;28488:7;28476:11;:20::i;:::-;28414:82;;;;;;28508:15;28525:23;28550:12;28566:50;28578:7;28587:4;28593:10;28605;:8;:10::i;:::-;28566:11;:50::i;:::-;28507:109;;;;-1:-1:-1;28507:109:0;;-1:-1:-1;28667:15:0;;-1:-1:-1;28684:4:0;;-1:-1:-1;28690:10:0;;-1:-1:-1;28290:419:0;;-1:-1:-1;;;;;28290:419:0:o;1361:136::-;1419:7;1446:43;1450:1;1453;1446:43;;;;;;;;;;;;;;;;;:3;:43::i;25875:1028::-;16612:6;:13;;-1:-1:-1;;16612:13:0;16621:4;16612:13;;;26063:8:::1;::::0;26031:12:::1;::::0;16612:6;;25992:101:::1;::::0;26091:1:::1;::::0;25992:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25966:127:::0;-1:-1:-1;26106:20:0::1;26129:41;:20:::0;25966:127;26129:24:::1;:41::i;:::-;26106:64;;26191:30;26208:12;26191:16;:30::i;:::-;26323:12;::::0;26254:21:::1;::::0;26234:17:::1;::::0;26310:33:::1;::::0;26323:19:::1;::::0;26340:1:::1;26323:16;:19::i;:::-;26310:8;::::0;;:12:::1;:33::i;:::-;26288:55;;26356:26;26385:93;26476:1;26385:72;26445:11;26385:41;26413:12;;26385:9;:27;;:41;;;;:::i;:93::-;26356:122;;26499:26;26528:44;26560:11;26528:27;26542:12;;26528:9;:13;;:27;;;;:::i;:44::-;26499:73:::0;-1:-1:-1;26648:21:0::1;26683:22:::0;;26680:102:::1;;26754:15;::::0;26722:48:::1;::::0;26735:18;;-1:-1:-1;;;;;26754:15:0::1;26722:12;:48::i;:::-;26796:19:::0;;26792:104:::1;;26836:48;26849:15;26865:18;26836:12;:48::i;:::-;-1:-1:-1::0;;16648:6:0;:14;;-1:-1:-1;;16648:14:0;;;-1:-1:-1;;;;;;25875:1028:0:o;21615:943::-;21755:13;;21805:15;;21835:7;21831:88;;21874:1;21858:13;:17;;;21890:15;:17;21831:88;-1:-1:-1;;;;;21943:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21967:22:0;;;;;;:11;:22;;;;;;;;21966:23;21943:46;21939:467;;;22006:48;22028:6;22036:9;22047:6;22006:21;:48::i;:::-;21939:467;;;-1:-1:-1;;;;;22077:19:0;;;;;;:11;:19;;;;;;;;22076:20;:46;;;;-1:-1:-1;;;;;;22100:22:0;;;;;;:11;:22;;;;;;;;22076:46;22072:334;;;22139:46;22159:6;22167:9;22178:6;22139:19;:46::i;22072:334::-;-1:-1:-1;;;;;22207:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22230:22:0;;;;;;:11;:22;;;;;;;;22207:45;22203:203;;;22269:48;22291:6;22299:9;22310:6;22269:21;:48::i;22203:203::-;22350:44;22368:6;22376:9;22387:6;22350:17;:44::i;:::-;22430:7;22426:125;;22453:13;:38;;;;22506:15;:33;-1:-1:-1;;;;21615:943:0:o;29226:561::-;29323:7;;29359;;29276;;;;;29383:289;29407:9;:16;29403:20;;29383:289;;;29473:7;29449;:21;29457:9;29467:1;29457:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29457:12:0;29449:21;;;;;;;;;;;;;:31;;:66;;;29508:7;29484;:21;29492:9;29502:1;29492:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29492:12:0;29484:21;;;;;;;;;;;;;:31;29449:66;29445:97;;;29525:7;;29534;;29517:25;;;;;;;29226:561;;:::o;29445:97::-;29567:34;29579:7;:21;29587:9;29597:1;29587:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29587:12:0;29579:21;;;;;;;;;;;;;29567:7;;:11;:34::i;:::-;29557:44;;29626:34;29638:7;:21;29646:9;29656:1;29646:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29646:12:0;29638:21;;;;;;;;;;;;;29626:7;;:11;:34::i;:::-;29616:44;-1:-1:-1;29425:3:0;;;;:::i;:::-;;;;29383:289;;;-1:-1:-1;29708:7:0;;29696;;:20;;:11;:20::i;:::-;29686:7;:30;29682:61;;;29726:7;;29735;;29718:25;;;;;;29226:561;;:::o;29682:61::-;29762:7;;29771;;-1:-1:-1;29226:561:0;-1:-1:-1;29226:561:0:o;2103:278::-;2189:7;2224:12;2217:5;2209:28;;;;-1:-1:-1;;;2209:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2248:9:0;2260:5;2264:1;2260;:5;:::i;28717:330::-;28777:7;28786;28795;28815:12;28830:24;28846:7;28830:15;:24::i;:::-;28815:39;;28865:18;28886:30;28908:7;28886:21;:30::i;:::-;28865:51;-1:-1:-1;28927:23:0;28953:33;28865:51;28953:17;:7;28965:4;28953:11;:17::i;:::-;:21;;:33::i;:::-;28927:59;29022:4;;-1:-1:-1;29028:10:0;;-1:-1:-1;28717:330:0;;-1:-1:-1;;;28717:330:0:o;25049:429::-;25164:7;;;;25220:24;:7;25232:11;25220;:24::i;:::-;25202:42;-1:-1:-1;25255:12:0;25270:21;:4;25279:11;25270:8;:21::i;:::-;25255:36;-1:-1:-1;25302:18:0;25323:27;:10;25338:11;25323:14;:27::i;:::-;25302:48;-1:-1:-1;25361:23:0;25387:33;25302:48;25387:17;:7;25399:4;25387:11;:17::i;:33::-;25439:7;;;;-1:-1:-1;25465:4:0;;-1:-1:-1;25049:429:0;;-1:-1:-1;;;;;;;25049:429:0:o;27037:666::-;27187:16;;;27201:1;27187:16;;;;;;;;27163:21;;27187:16;;;;;;;;;;-1:-1:-1;27187:16:0;27163:40;;27232:4;27214;27219:1;27214:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27214:23:0;;;:7;;;;;;;;;;:23;;;;27258:15;;:22;;;-1:-1:-1;;;27258:22:0;;;;:15;;;;;:20;;:22;;;;;27214:7;;27258:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27248:4;27253:1;27248:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27248:32:0;;;:7;;;;;;;;;:32;27325:15;;27293:62;;27310:4;;27325:15;27343:11;27293:8;:62::i;:::-;27394:15;;:240;;-1:-1:-1;;;27394:240:0;;-1:-1:-1;;;;;27394:15:0;;;;:66;;:240;;27475:11;;27394:15;;27545:4;;27572;;27608:15;;27394:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27660:35;27677:11;27690:4;27660:35;;;;;;;:::i;:::-;;;;;;;;27092:611;27037:666;:::o;26915:111::-;26995:23;;-1:-1:-1;;;;;26995:15:0;;;:23;;;;;27011:6;;26995:23;;;;27011:6;26995:15;:23;;;;;;;;;;;;;;;;;;;27711:513;27891:15;;27859:62;;27876:4;;-1:-1:-1;;;;;27891:15:0;27909:11;27859:8;:62::i;:::-;27964:15;;-1:-1:-1;;;;;27964:15:0;:31;28003:9;28036:4;28056:11;27964:15;;28168:7;5842;5869:6;-1:-1:-1;;;;;5869:6:0;;5804:79;28168:7;27964:252;;;;;;-1:-1:-1;;;;;;27964:252:0;;;-1:-1:-1;;;;;22139:15:1;;;27964:252:0;;;22121:34:1;22171:18;;;22164:34;;;;22214:18;;;22207:34;;;;22257:18;;;22250:34;22321:15;;;22300:19;;;22293:44;28190:15:0;22353:19:1;;;22346:35;22055:19;;27964:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23670:566::-;23773:15;23790:23;23815:12;23829:23;23854:12;23868:18;23890:19;23901:7;23890:10;:19::i;:::-;-1:-1:-1;;;;;23938:15:0;;;;;;:7;:15;;;;;;23772:137;;-1:-1:-1;23772:137:0;;-1:-1:-1;23772:137:0;;-1:-1:-1;23772:137:0;-1:-1:-1;23772:137:0;-1:-1:-1;23772:137:0;-1:-1:-1;23938:28:0;;23958:7;23938:19;:28::i;:::-;-1:-1:-1;;;;;23920:15:0;;;;;;:7;:15;;;;;;;;:46;;;;23995:7;:15;;;;:28;;24015:7;23995:19;:28::i;:::-;-1:-1:-1;;;;;23977:15:0;;;;;;;:7;:15;;;;;;:46;;;;24055:18;;;;;;;:39;;24078:15;24055:22;:39::i;:::-;-1:-1:-1;;;;;24034:18:0;;;;;;:7;:18;;;;;:60;24108:26;24123:10;24108:14;:26::i;:::-;24145:23;24157:4;24163;24145:11;:23::i;:::-;24201:9;-1:-1:-1;;;;;24184:44:0;24193:6;-1:-1:-1;;;;;24184:44:0;;24212:15;24184:44;;;;160:25:1;;148:2;133:18;;14:177;24184:44:0;;;;;;;;23761:475;;;;;;23670:566;;;:::o;23076:586::-;23177:15;23194:23;23219:12;23233:23;23258:12;23272:18;23294:19;23305:7;23294:10;:19::i;:::-;-1:-1:-1;;;;;23342:15:0;;;;;;:7;:15;;;;;;23176:137;;-1:-1:-1;23176:137:0;;-1:-1:-1;23176:137:0;;-1:-1:-1;23176:137:0;-1:-1:-1;23176:137:0;-1:-1:-1;23176:137:0;-1:-1:-1;23342:28:0;;23176:137;23342:19;:28::i;:::-;-1:-1:-1;;;;;23324:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23402:18;;;;;:7;:18;;;;;:39;;23425:15;23402:22;:39::i;:::-;-1:-1:-1;;;;;23381:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23473:7;:18;;;;:39;;23496:15;23473:22;:39::i;24244:642::-;24347:15;24364:23;24389:12;24403:23;24428:12;24442:18;24464:19;24475:7;24464:10;:19::i;:::-;-1:-1:-1;;;;;24512:15:0;;;;;;:7;:15;;;;;;24346:137;;-1:-1:-1;24346:137:0;;-1:-1:-1;24346:137:0;;-1:-1:-1;24346:137:0;-1:-1:-1;24346:137:0;-1:-1:-1;24346:137:0;-1:-1:-1;24512:28:0;;24532:7;24512:19;:28::i;:::-;-1:-1:-1;;;;;24494:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24569:7;:15;;;;:28;;24589:7;24569:19;:28::i;22566:502::-;22665:15;22682:23;22707:12;22721:23;22746:12;22760:18;22782:19;22793:7;22782:10;:19::i;:::-;-1:-1:-1;;;;;22830:15:0;;;;;;:7;:15;;;;;;22664:137;;-1:-1:-1;22664:137:0;;-1:-1:-1;22664:137:0;;-1:-1:-1;22664:137:0;-1:-1:-1;22664:137:0;-1:-1:-1;22664:137:0;-1:-1:-1;22830:28:0;;22664:137;22830:19;:28::i;29799:160::-;29863:7;29890:61;29935:5;29890:26;29902:13;;29890:7;:11;;:26;;;;:::i;29971:168::-;30041:7;30068:63;30115:5;30068:28;30080:15;;30068:7;:11;;:28;;;;:::i;25490:355::-;25553:19;25576:10;:8;:10::i;:::-;25553:33;-1:-1:-1;25597:18:0;25618:27;:10;25553:33;25618:14;:27::i;:::-;25697:4;25681:22;;;;:7;:22;;;;;;25597:48;;-1:-1:-1;25681:38:0;;25597:48;25681:26;:38::i;:::-;25672:4;25656:22;;;;:7;:22;;;;;;;;:63;;;;25733:11;:26;;;;;;25730:107;;;25815:4;25799:22;;;;:7;:22;;;;;;:38;;25826:10;25799:26;:38::i;:::-;25790:4;25774:22;;;;:7;:22;;;;;:63;25542:303;;25490:355;:::o;24894:147::-;24972:7;;:17;;24984:4;24972:11;:17::i;:::-;24962:7;:27;25013:10;;:20;;25028:4;25013:14;:20::i;:::-;25000:10;:33;-1:-1:-1;;24894:147:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1884:367::-;1947:8;1957:6;2011:3;2004:4;1996:6;1992:17;1988:27;1978:55;;2029:1;2026;2019:12;1978:55;-1:-1:-1;2052:20:1;;2095:18;2084:30;;2081:50;;;2127:1;2124;2117:12;2081:50;2164:4;2156:6;2152:17;2140:29;;2224:3;2217:4;2207:6;2204:1;2200:14;2192:6;2188:27;2184:38;2181:47;2178:67;;;2241:1;2238;2231:12;2178:67;1884:367;;;;;:::o;2256:773::-;2378:6;2386;2394;2402;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;2511:9;2498:23;2540:18;2581:2;2573:6;2570:14;2567:34;;;2597:1;2594;2587:12;2567:34;2636:70;2698:7;2689:6;2678:9;2674:22;2636:70;:::i;:::-;2725:8;;-1:-1:-1;2610:96:1;-1:-1:-1;2813:2:1;2798:18;;2785:32;;-1:-1:-1;2829:16:1;;;2826:36;;;2858:1;2855;2848:12;2826:36;;2897:72;2961:7;2950:8;2939:9;2935:24;2897:72;:::i;:::-;2256:773;;;;-1:-1:-1;2988:8:1;-1:-1:-1;;;;2256:773:1:o;3034:456::-;3111:6;3119;3127;3180:2;3168:9;3159:7;3155:23;3151:32;3148:52;;;3196:1;3193;3186:12;3148:52;3235:9;3222:23;3254:31;3279:5;3254:31;:::i;:::-;3304:5;-1:-1:-1;3361:2:1;3346:18;;3333:32;3374:33;3333:32;3374:33;:::i;:::-;3034:456;;3426:7;;-1:-1:-1;;;3480:2:1;3465:18;;;;3452:32;;3034:456::o;3495:401::-;3576:6;3584;3637:2;3625:9;3616:7;3612:23;3608:32;3605:52;;;3653:1;3650;3643:12;3605:52;3692:9;3679:23;3711:31;3736:5;3711:31;:::i;:::-;3761:5;-1:-1:-1;3818:2:1;3803:18;;3790:32;3831:33;3790:32;3831:33;:::i;:::-;3883:7;3873:17;;;3495:401;;;;;:::o;3901:316::-;3978:6;3986;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;-1:-1:-1;;4086:23:1;;;4156:2;4141:18;;4128:32;;-1:-1:-1;4207:2:1;4192:18;;;4179:32;;3901:316;-1:-1:-1;3901:316:1:o;4222:118::-;4308:5;4301:13;4294:21;4287:5;4284:32;4274:60;;4330:1;4327;4320:12;4345:309;4410:6;4418;4471:2;4459:9;4450:7;4446:23;4442:32;4439:52;;;4487:1;4484;4477:12;4439:52;4526:9;4513:23;4545:28;4567:5;4545:28;:::i;4659:180::-;4718:6;4771:2;4759:9;4750:7;4746:23;4742:32;4739:52;;;4787:1;4784;4777:12;4739:52;-1:-1:-1;4810:23:1;;4659:180;-1:-1:-1;4659:180:1:o;5033:241::-;5089:6;5142:2;5130:9;5121:7;5117:23;5113:32;5110:52;;;5158:1;5155;5148:12;5110:52;5197:9;5184:23;5216:28;5238:5;5216:28;:::i;5279:309::-;5344:6;5352;5405:2;5393:9;5384:7;5380:23;5376:32;5373:52;;;5421:1;5418;5411:12;5373:52;5457:9;5444:23;5434:33;;5517:2;5506:9;5502:18;5489:32;5530:28;5552:5;5530:28;:::i;5801:566::-;5893:6;5901;5909;5962:2;5950:9;5941:7;5937:23;5933:32;5930:52;;;5978:1;5975;5968:12;5930:52;6018:9;6005:23;6051:18;6043:6;6040:30;6037:50;;;6083:1;6080;6073:12;6037:50;6122:70;6184:7;6175:6;6164:9;6160:22;6122:70;:::i;:::-;6211:8;;-1:-1:-1;6096:96:1;-1:-1:-1;;6296:2:1;6281:18;;6268:32;6309:28;6268:32;6309:28;:::i;:::-;6356:5;6346:15;;;5801:566;;;;;:::o;6372:505::-;6467:6;6475;6483;6536:2;6524:9;6515:7;6511:23;6507:32;6504:52;;;6552:1;6549;6542:12;6504:52;6592:9;6579:23;6625:18;6617:6;6614:30;6611:50;;;6657:1;6654;6647:12;6611:50;6696:70;6758:7;6749:6;6738:9;6734:22;6696:70;:::i;:::-;6785:8;;6670:96;;-1:-1:-1;6867:2:1;6852:18;;;;6839:32;;6372:505;-1:-1:-1;;;;6372:505:1:o;6882:437::-;6968:6;6976;7029:2;7017:9;7008:7;7004:23;7000:32;6997:52;;;7045:1;7042;7035:12;6997:52;7085:9;7072:23;7118:18;7110:6;7107:30;7104:50;;;7150:1;7147;7140:12;7104:50;7189:70;7251:7;7242:6;7231:9;7227:22;7189:70;:::i;:::-;7278:8;;7163:96;;-1:-1:-1;6882:437:1;-1:-1:-1;;;;6882:437:1:o;7584:248::-;7652:6;7660;7713:2;7701:9;7692:7;7688:23;7684:32;7681:52;;;7729:1;7726;7719:12;7681:52;-1:-1:-1;;7752:23:1;;;7822:2;7807:18;;;7794:32;;-1:-1:-1;7584:248:1:o;8230:380::-;8309:1;8305:12;;;;8352;;;8373:61;;8427:4;8419:6;8415:17;8405:27;;8373:61;8480:2;8472:6;8469:14;8449:18;8446:38;8443:161;;8526:10;8521:3;8517:20;8514:1;8507:31;8561:4;8558:1;8551:15;8589:4;8586:1;8579:15;8443:161;;8230:380;;;:::o;8615:356::-;8817:2;8799:21;;;8836:18;;;8829:30;8895:34;8890:2;8875:18;;8868:62;8962:2;8947:18;;8615:356::o;9799:127::-;9860:10;9855:3;9851:20;9848:1;9841:31;9891:4;9888:1;9881:15;9915:4;9912:1;9905:15;9931:422;10020:1;10063:5;10020:1;10077:270;10098:7;10088:8;10085:21;10077:270;;;10157:4;10153:1;10149:6;10145:17;10139:4;10136:27;10133:53;;;10166:18;;:::i;:::-;10216:7;10206:8;10202:22;10199:55;;;10236:16;;;;10199:55;10315:22;;;;10275:15;;;;10077:270;;;10081:3;9931:422;;;;;:::o;10358:806::-;10407:5;10437:8;10427:80;;-1:-1:-1;10478:1:1;10492:5;;10427:80;10526:4;10516:76;;-1:-1:-1;10563:1:1;10577:5;;10516:76;10608:4;10626:1;10621:59;;;;10694:1;10689:130;;;;10601:218;;10621:59;10651:1;10642:10;;10665:5;;;10689:130;10726:3;10716:8;10713:17;10710:43;;;10733:18;;:::i;:::-;-1:-1:-1;;10789:1:1;10775:16;;10804:5;;10601:218;;10903:2;10893:8;10890:16;10884:3;10878:4;10875:13;10871:36;10865:2;10855:8;10852:16;10847:2;10841:4;10838:12;10834:35;10831:77;10828:159;;;-1:-1:-1;10940:19:1;;;10972:5;;10828:159;11019:34;11044:8;11038:4;11019:34;:::i;:::-;11089:6;11085:1;11081:6;11077:19;11068:7;11065:32;11062:58;;;11100:18;;:::i;:::-;11138:20;;10358:806;-1:-1:-1;;;10358:806:1:o;11169:140::-;11227:5;11256:47;11297:4;11287:8;11283:19;11277:4;11256:47;:::i;11314:127::-;11375:10;11370:3;11366:20;11363:1;11356:31;11406:4;11403:1;11396:15;11430:4;11427:1;11420:15;11446:168;11519:9;;;11550;;11567:15;;;11561:22;;11547:37;11537:71;;11588:18;;:::i;11619:125::-;11684:9;;;11705:10;;;11702:36;;;11718:18;;:::i;11749:135::-;11788:3;11809:17;;;11806:43;;11829:18;;:::i;:::-;-1:-1:-1;11876:1:1;11865:13;;11749:135::o;12245:184::-;12315:6;12368:2;12356:9;12347:7;12343:23;12339:32;12336:52;;;12384:1;12381;12374:12;12336:52;-1:-1:-1;12407:16:1;;12245:184;-1:-1:-1;12245:184:1:o;12713:245::-;12780:6;12833:2;12821:9;12812:7;12808:23;12804:32;12801:52;;;12849:1;12846;12839:12;12801:52;12881:9;12875:16;12900:28;12922:5;12900:28;:::i;13730:128::-;13797:9;;;13818:11;;;13815:37;;;13832:18;;:::i;13863:127::-;13924:10;13919:3;13915:20;13912:1;13905:31;13955:4;13952:1;13945:15;13979:4;13976:1;13969:15;15183:217;15223:1;15249;15239:132;;15293:10;15288:3;15284:20;15281:1;15274:31;15328:4;15325:1;15318:15;15356:4;15353:1;15346:15;15239:132;-1:-1:-1;15385:9:1;;15183:217::o;15405:251::-;15475:6;15528:2;15516:9;15507:7;15503:23;15499:32;15496:52;;;15544:1;15541;15534:12;15496:52;15576:9;15570:16;15595:31;15620:5;15595:31;:::i;20390:461::-;20443:3;20481:5;20475:12;20508:6;20503:3;20496:19;20534:4;20563:2;20558:3;20554:12;20547:19;;20600:2;20593:5;20589:14;20621:1;20631:195;20645:6;20642:1;20639:13;20631:195;;;20710:13;;-1:-1:-1;;;;;20706:39:1;20694:52;;20766:12;;;;20801:15;;;;20742:1;20660:9;20631:195;;;-1:-1:-1;20842:3:1;;20390:461;-1:-1:-1;;;;;20390:461:1:o;20856:582::-;21155:6;21144:9;21137:25;21198:6;21193:2;21182:9;21178:18;21171:34;21241:3;21236:2;21225:9;21221:18;21214:31;21118:4;21262:57;21314:3;21303:9;21299:19;21291:6;21262:57;:::i;:::-;-1:-1:-1;;;;;21355:32:1;;;;21350:2;21335:18;;21328:60;-1:-1:-1;21419:3:1;21404:19;21397:35;21254:65;20856:582;-1:-1:-1;;;20856:582:1:o;21443:332::-;21650:6;21639:9;21632:25;21693:2;21688;21677:9;21673:18;21666:30;21613:4;21713:56;21765:2;21754:9;21750:18;21742:6;21713:56;:::i;:::-;21705:64;21443:332;-1:-1:-1;;;;21443:332:1:o;22392:306::-;22480:6;22488;22496;22549:2;22537:9;22528:7;22524:23;22520:32;22517:52;;;22565:1;22562;22555:12;22517:52;22594:9;22588:16;22578:26;;22644:2;22633:9;22629:18;22623:25;22613:35;;22688:2;22677:9;22673:18;22667:25;22657:35;;22392:306;;;;;:::o

Swarm Source

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