ETH Price: $3,443.37 (+1.53%)
Gas: 4 Gwei

Token

Ethereal (ETHRL)
 

Overview

Max Total Supply

1,000,000,000 ETHRL

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
cvd.eth
Balance
1,000,000 ETHRL

Value
$0.00
0xdaa7c1b5feaca5d1bc1bea7e7c07d91d3e6dfe51
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:
ETHRL

Compiler Version
v0.8.8+commit.dddeac2f

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-11
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

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 ETHRL 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 = 480;  
    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 = "Ethereal";
    string private _symbol = "ETHRL";
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address payable private marketdevWallet = payable (0x26c0D20168820B27097095662CAde12f2d45A7FF); // 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 includeBuyerInReward(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 setZeroBuyTax(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 setMaxWallet_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
    }

    function setExemptFromMaxWallet(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 multiTransfer_fixed( 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 setTaxBuy(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 setTaxSell(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":"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":"includeBuyerInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"multiTransfer_fixed","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":"address","name":"_addr","type":"address"}],"name":"setExemptFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWallet_base1000","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":"uint256","name":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"setTaxBuy","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":"setTaxSell","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":"setZeroBuyTax","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"}]

60806040526003805460ff19166009908117909155600260045560006005556200002b90600a620008b6565b6200003b90633b9aca00620008c7565b60068190556200004e90600019620008ff565b6200005c9060001962000916565b60075562000097600a620000836103e86006546200058060201b620020611790919060201c565b620005d360201b620020a31790919060201c565b6009556000600a556050600b556000600c556000600d556101e0600e556000600f55600a54601055600b54601155600c54601255620000e96011546010546200065e60201b620021221790919060201c565b601355601354601455620001166014620000836127106006546200058060201b620020611790919060201c565b6015556016805463ffffff001916630100000017905560408051808201909152600880825267115d1a195c99585b60c21b60209092019182526200015d91601791620006fd565b5060408051808201909152600580825264115512149360da1b60209092019182526200018c91601891620006fd565b50601b80546001600160a01b03199081167326c0d20168820b27097095662cade12f2d45a7ff17909155601c805490911661dead179055348015620001d057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754336000908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200027457600080fd5b505afa15801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af919062000930565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f857600080fd5b505afa1580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000333919062000930565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200037c57600080fd5b505af115801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000930565b601a80546001600160a01b03199081166001600160a01b039384161790915560198054909116918316919091179055600160216000620003ff6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526021909252812080549092166001908117909255602290620004586000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c54909116835290822080549093168117909255602490620004da6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620005293390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200057191815260200190565b60405180910390a35062000a22565b6000620005ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006c160201b60201c565b90505b92915050565b600082620005e457506000620005cd565b6000620005f28385620008c7565b9050826200060185836200095b565b14620005ca5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000806200066d838562000972565b905083811015620005ca5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000655565b60008183620006e55760405162461bcd60e51b81526004016200065591906200098d565b506000620006f484866200095b565b95945050505050565b8280546200070b90620009e5565b90600052602060002090601f0160209004810192826200072f57600085556200077a565b82601f106200074a57805160ff19168380011785556200077a565b828001600101855582156200077a579182015b828111156200077a5782518255916020019190600101906200075d565b50620007889291506200078c565b5090565b5b808211156200078857600081556001016200078d565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007fa578160001904821115620007de57620007de620007a3565b80851615620007ec57918102915b93841c9390800290620007be565b509250929050565b6000826200081357506001620005cd565b816200082257506000620005cd565b81600181146200083b5760028114620008465762000866565b6001915050620005cd565b60ff8411156200085a576200085a620007a3565b50506001821b620005cd565b5060208310610133831016604e8410600b84101617156200088b575081810a620005cd565b620008978383620007b9565b8060001904821115620008ae57620008ae620007a3565b029392505050565b6000620005ca60ff84168362000802565b6000816000190483118215151615620008e457620008e4620007a3565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620009115762000911620008e9565b500690565b6000828210156200092b576200092b620007a3565b500390565b6000602082840312156200094357600080fd5b81516001600160a01b0381168114620005ca57600080fd5b6000826200096d576200096d620008e9565b500490565b60008219821115620009885762000988620007a3565b500190565b600060208083528351808285015260005b81811015620009bc578581018301518582016040015282016200099e565b81811115620009cf576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c90821680620009fa57607f821691505b6020821081141562000a1c57634e487b7160e01b600052602260045260246000fd5b50919050565b613ac98062000a326000396000f3fe6080604052600436106103545760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063ea2f0b3711610095578063f2fde38b1161006f578063f2fde38b146109da578063f3b1e83b146109fa578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063ea2f0b371461097a578063eafb5a3c1461099a578063f259c57b146109ba57600080fd5b8063c3d97d1c116100d1578063c3d97d1c146108de578063dc44b6a0146108fe578063dd62ed3e14610914578063deaa59df1461095a57600080fd5b8063a9059cbb14610888578063afb8865e146108a8578063bf56b371146108c857600080fd5b806384530c46116101645780638da5cb5b1161013e5780638da5cb5b146108155780638f4590d21461083357806395d89b4114610853578063a457c2d71461086857600080fd5b806384530c46146107a657806388790a68146107c657806388f82020146107dc57600080fd5b8063743942b6116101a0578063743942b61461073a5780637598f8bc1461075a57806378109e54146107705780638114bdd71461078657600080fd5b8063715018a6146106ef57806371b9189c1461070457806372fdf6ee1461072457600080fd5b80632d838119116102a05780634549b0391161023e57806352390c021161021857806352390c021461066f5780635d54c0af1461068f578063632e5442146106af57806370a08231146106cf57600080fd5b80634549b0391461060f57806349bd5a5e1461062f5780634eeaf4581461064f57600080fd5b80633bd5d1731161027a5780633bd5d173146105995780633ddf65ab146105b9578063401aa5c0146105d957806343b127a6146105ef57600080fd5b80632d83811914610537578063313ce56714610557578063395093511461057957600080fd5b806318160ddd1161030d57806323b872dd116102e757806323b872dd146104b75780632691bc80146104d757806328a23cd1146104f75780632d4103d61461051757600080fd5b806318160ddd1461046057806318ee9ff9146104755780631e89d5451461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b6040516103809190613352565b3480156103b757600080fd5b506103cb6103c63660046133bf565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f63660046133eb565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b50610495610490366004613416565b610aee565b005b3480156104a357600080fd5b506104956104b236600461347f565b610b3d565b3480156104c357600080fd5b506103cb6104d23660046134eb565b610d6e565b3480156104e357600080fd5b506016546103cb9062010000900460ff1681565b34801561050357600080fd5b5061049561051236600461352c565b610dd7565b34801561052357600080fd5b50610495610532366004613565565b610f07565b34801561054357600080fd5b50610376610552366004613583565b610f8c565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b506103cb6105943660046133bf565b611010565b3480156105a557600080fd5b506104956105b4366004613583565b611046565b3480156105c557600080fd5b506104956105d4366004613416565b611130565b3480156105e557600080fd5b50610376600c5481565b3480156105fb57600080fd5b5061049561060a36600461359c565b611178565b34801561061b57600080fd5b5061037661062a3660046135c8565b6111d2565b34801561063b57600080fd5b50601a54610448906001600160a01b031681565b34801561065b57600080fd5b5061049561066a36600461359c565b61125f565b34801561067b57600080fd5b5061049561068a3660046133eb565b611297565b34801561069b57600080fd5b506104956106aa3660046135ed565b611381565b3480156106bb57600080fd5b506104956106ca366004613644565b61141a565b3480156106db57600080fd5b506103766106ea3660046133eb565b61159a565b3480156106fb57600080fd5b506104956115f9565b34801561071057600080fd5b5061049561071f366004613690565b61166d565b34801561073057600080fd5b50610376600b5481565b34801561074657600080fd5b506104956107553660046133eb565b61170c565b34801561076657600080fd5b50610376600f5481565b34801561077c57600080fd5b5061037660095481565b34801561079257600080fd5b506104956107a13660046133eb565b61176b565b3480156107b257600080fd5b506104956107c1366004613690565b6117b9565b3480156107d257600080fd5b50610376600d5481565b3480156107e857600080fd5b506103cb6107f73660046133eb565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561082157600080fd5b506000546001600160a01b0316610448565b34801561083f57600080fd5b5061049561084e3660046136d2565b611853565b34801561085f57600080fd5b5061039e61189d565b34801561087457600080fd5b506103cb6108833660046133bf565b6118ac565b34801561089457600080fd5b506103cb6108a33660046133bf565b6118fb565b3480156108b457600080fd5b506104956108c3366004613583565b611908565b3480156108d457600080fd5b5061037660055481565b3480156108ea57600080fd5b506104956108f93660046133eb565b611959565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f36600461352c565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506104956109753660046133eb565b611b0c565b34801561098657600080fd5b506104956109953660046133eb565b611b58565b3480156109a657600080fd5b506104956109b53660046133eb565b611ba3565b3480156109c657600080fd5b506104956109d53660046133eb565b611f29565b3480156109e657600080fd5b506104956109f53660046133eb565b611f77565b348015610a0657600080fd5b50610376600e5481565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a54906136f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a80906136f4565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484612181565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061372f565b60405180910390fd5b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b189061372f565b6103218310610bce5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610c2e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c8c57600354610c4b9060ff16600a61385e565b848483818110610c5d57610c5d61386d565b90506020020135610c6e9190613883565b610c7890836138a2565b915080610c84816138ba565b915050610c32565b5080610c973361159a565b1015610ce55760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d6657610d5433878784818110610d0657610d0661386d565b9050602002016020810190610d1b91906133eb565b600354610d2c9060ff16600a61385e565b878786818110610d3e57610d3e61386d565b90506020020135610d4f9190613883565b6122a5565b80610d5e816138ba565b915050610ce8565b505050505050565b6000610d7b8484846122a5565b610dcd8433610dc885604051806060016040528060288152602001613a47602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906127e9565b612181565b5060019392505050565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b189061372f565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b91906138d5565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0191906138ee565b50505050565b6000546001600160a01b03163314610f315760405162461bcd60e51b8152600401610b189061372f565b6016805461ff00191661010084151502179055610f4d30611297565b601a54610f62906001600160a01b0316611297565b601654610100900460ff168015610f795750600554155b15610f88574360055560048190555b5050565b6000600754821115610ff35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610ffd612823565b90506110098382612061565b9392505050565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610dc89086612122565b3360008181526023602052604090205460ff16156110bb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b60006110c683612846565b505050506001600160a01b0384166000908152601d60205260409020549192506110f291905082612895565b6001600160a01b0383166000908152601d60205260409020556007546111189082612895565b6007556008546111289084612122565b600855505050565b6000546001600160a01b0316331461115a5760405162461bcd60e51b8152600401610b189061372f565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146111a25760405162461bcd60e51b8152600401610b189061372f565b600a829055600b819055600c8390556012839055601082905560118190556111ca8282612122565b601355505050565b60006006548311156112265760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b8161124557600061123684612846565b50939550610ae8945050505050565b600061125084612846565b50929550610ae8945050505050565b6000546001600160a01b031633146112895760405162461bcd60e51b8152600401610b189061372f565b600d91909155600e55600f55565b6000546001600160a01b031633146112c15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166000908152601d60205260409020541561131b576001600160a01b0381166000908152601d602052604090205461130190610f8c565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b189061372f565b60005b82811015610f015781602060008686858181106113cd576113cd61386d565b90506020020160208101906113e291906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611413816138ba565b90506113ae565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610b189061372f565b6107d182106114ac5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b60035460009083906114c29060ff16600a61385e565b6114cc9084613883565b6114d69190613883565b9050806114e23361159a565b10156115305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561159357611581338686848181106115515761155161386d565b905060200201602081019061156691906133eb565b6003546115779060ff16600a61385e565b610d4f9087613883565b8061158b816138ba565b915050611533565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff16156115d757506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f8c565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610b189061372f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116975760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611707576001602160008585858181106116ba576116ba61386d565b90506020020160208101906116cf91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611700816138ba565b905061169a565b505050565b6000546001600160a01b031633146117365760405162461bcd60e51b8152600401610b189061372f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f88573d6000803e3d6000fd5b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611707576001602460008585858181106118065761180661386d565b905060200201602081019061181b91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561184c816138ba565b90506117e6565b6000546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610b189061372f565b808260065461188c9190613883565b611896919061390b565b6015555050565b606060188054610a54906136f4565b6000610ae43384610dc885604051806060016040528060258152602001613a6f60259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906127e9565b6000610ae43384846122a5565b6000546001600160a01b031633146119325760405162461bcd60e51b8152600401610b189061372f565b6119538161194d6103e860065461206190919063ffffffff16565b906120a3565b60095550565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03811660009081526023602052604090205460ff166119eb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f8857816001600160a01b031660258281548110611a1557611a1561386d565b6000918252602090912001546001600160a01b03161415611afa5760258054611a409060019061392d565b81548110611a5057611a5061386d565b600091825260209091200154602580546001600160a01b039092169183908110611a7c57611a7c61386d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff191690556025805480611ad457611ad4613944565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611b04816138ba565b9150506119ee565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610b189061372f565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611bcd5760405162461bcd60e51b8152600401610b189061372f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c45919061395a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc5919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061395a565b90506001600160a01b038116611ee957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc4919061395a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e44919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e8c57600080fd5b505af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec4919061395a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611f05565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166120065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061100983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128d7565b6000826120b257506000610ae8565b60006120be8385613883565b9050826120cb858361390b565b146110095760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b60008061212f83856138a2565b9050838110156110095760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b03821661236b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116123cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156124225760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156124775760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b038481169116148015906124a357506000546001600160a01b03838116911614155b156124ff57601654610100900460ff166124ff5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b038581169116148061252b5750601a546001600160a01b038481169116145b801561257357506001600160a01b03841660009081526021602052604090205460ff168061257157506001600160a01b03831660009081526021602052604090205460ff165b155b1561257c575060015b60006005541180156125c057506001600160a01b03831660009081526022602052604090205460ff161580156125c057506000546001600160a01b03858116911614155b80156125da5750436004546005546125d891906138a2565b115b1561264e576009546125eb8461159a565b6125f590846138a2565b111561264e5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561267e5750601a546001600160a01b038481169116145b1561269c57600e54600d5461269291612122565b601455600f546012555b60006005541180156126bc5750436004546005546126ba91906138a2565b115b156126e4576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561270457506000546001600160a01b03858116911614155b801561271f575060045460055461271b91906138a2565b4311155b801561273457506016546301000000900460ff165b15612740576103b66014555b60165462010000900460ff161561278057601654610100900460ff1680156127755750601a546001600160a01b038581169116145b156127805760006014555b60165460ff1615801561279a5750601654610100900460ff165b80156127b35750601a546001600160a01b038481169116145b156127dd5760006127c33061159a565b905060155481106127db57506015546127db81612905565b505b610f01848484846129f1565b6000818484111561280d5760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661392d565b95945050505050565b6000806000612830612b1d565b909250905061283f8282612061565b9250505090565b600080600080600080600080600061285d8a612c9f565b925092509250600080600061287b8d8686612876612823565b612ce1565b919f909e50909c50959a5093985091965092945050505050565b600061100983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b600081836128f85760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661390b565b6016805460ff191660011790556013546010546000916129359160029161292f91829087906120a3565b90612061565b905060006129438383612895565b905061294e81612d31565b601054479060009061296e90612965906002612061565b60135490612895565b90506000612990600261292f8461292f601054886120a390919063ffffffff16565b905060006129ad8361292f601154876120a390919063ffffffff16565b90504780156129cd57601b546129cd9083906001600160a01b0316612ed3565b86156129dd576129dd8784612f09565b50506016805460ff19169055505050505050565b60125460145482612a0757600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff168015612a4857506001600160a01b03851660009081526023602052604090205460ff16155b15612a5d57612a58868686612fe6565b612b09565b6001600160a01b03861660009081526023602052604090205460ff16158015612a9e57506001600160a01b03851660009081526023602052604090205460ff165b15612aae57612a5886868661310c565b6001600160a01b03861660009081526023602052604090205460ff168015612aee57506001600160a01b03851660009081526023602052604090205460ff165b15612afe57612a588686866131b5565b612b09868686613228565b82610d665760129190915560145550505050565b6007546006546000918291825b602554811015612c6f5782601d600060258481548110612b4c57612b4c61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb7575081601e600060258481548110612b9057612b9061386d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bcd57600754600654945094505050509091565b612c13601d600060258481548110612be757612be761386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612895565b9250612c5b601e600060258481548110612c2f57612c2f61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612895565b915080612c67816138ba565b915050612b2a565b50600654600754612c7f91612061565b821015612c96576007546006549350935050509091565b90939092509050565b600080600080612cae8561326c565b90506000612cbb86613289565b90506000612cd382612ccd8986612895565b90612895565b979296509094509092505050565b6000808080612cf088866120a3565b90506000612cfe88876120a3565b90506000612d0c88886120a3565b90506000612d1e82612ccd8686612895565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6657612d6661386d565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df2919061395a565b81600181518110612e0557612e0561386d565b6001600160a01b039283166020918202929092010152601954612e2b9130911684612181565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e649085906000908690309042906004016139bb565b600060405180830381600087803b158015612e7e57600080fd5b505af1158015612e92573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec79291906139f7565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611707573d6000803e3d6000fd5b601954612f219030906001600160a01b031684612181565b6019546001600160a01b031663f305d719823085600080612f4a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fad57600080fd5b505af1158015612fc1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115939190613a18565b600080600080600080612ff887612846565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061302a9088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130599087612895565b6001600160a01b03808b166000908152601d602052604080822093909355908a16815220546130889086612122565b6001600160a01b0389166000908152601d60205260409020556130aa816132a6565b6130b4848361332e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f991815260200190565b60405180910390a3505050505050505050565b60008060008060008061311e87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506131509087612895565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546131869084612122565b6001600160a01b0389166000908152601e6020908152604080832093909355601d905220546130889086612122565b6000806000806000806131c787612846565b6001600160a01b038f166000908152601e6020526040902054959b509399509197509550935091506131f99088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546131509087612895565b60008060008060008061323a87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130599087612895565b6000610ae86103e861292f601254856120a390919063ffffffff16565b6000610ae86103e861292f601454856120a390919063ffffffff16565b60006132b0612823565b905060006132be83836120a3565b306000908152601d60205260409020549091506132db9082612122565b306000908152601d602090815260408083209390935560239052205460ff161561170757306000908152601e60205260409020546133199084612122565b306000908152601e6020526040902055505050565b60075461333b9083612895565b60075560085461334b9082612122565b6008555050565b600060208083528351808285015260005b8181101561337f57858101830151858201604001528201613363565b81811115613391576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133bc57600080fd5b50565b600080604083850312156133d257600080fd5b82356133dd816133a7565b946020939093013593505050565b6000602082840312156133fd57600080fd5b8135611009816133a7565b80151581146133bc57600080fd5b60006020828403121561342857600080fd5b813561100981613408565b60008083601f84011261344557600080fd5b50813567ffffffffffffffff81111561345d57600080fd5b6020830191508360208260051b850101111561347857600080fd5b9250929050565b6000806000806040858703121561349557600080fd5b843567ffffffffffffffff808211156134ad57600080fd5b6134b988838901613433565b909650945060208701359150808211156134d257600080fd5b506134df87828801613433565b95989497509550505050565b60008060006060848603121561350057600080fd5b833561350b816133a7565b9250602084013561351b816133a7565b929592945050506040919091013590565b6000806040838503121561353f57600080fd5b823561354a816133a7565b9150602083013561355a816133a7565b809150509250929050565b6000806040838503121561357857600080fd5b82356133dd81613408565b60006020828403121561359557600080fd5b5035919050565b6000806000606084860312156135b157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135db57600080fd5b82359150602083013561355a81613408565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff81111561361957600080fd5b61362586828701613433565b909450925050602084013561363981613408565b809150509250925092565b60008060006040848603121561365957600080fd5b833567ffffffffffffffff81111561367057600080fd5b61367c86828701613433565b909790965060209590950135949350505050565b600080602083850312156136a357600080fd5b823567ffffffffffffffff8111156136ba57600080fd5b6136c685828601613433565b90969095509350505050565b600080604083850312156136e557600080fd5b50508035926020909101359150565b600181811c9082168061370857607f821691505b6020821081141561372957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137b557816000190482111561379b5761379b613764565b808516156137a857918102915b93841c939080029061377f565b509250929050565b6000826137cc57506001610ae8565b816137d957506000610ae8565b81600181146137ef57600281146137f957613815565b6001915050610ae8565b60ff84111561380a5761380a613764565b50506001821b610ae8565b5060208310610133831016604e8410600b8410161715613838575081810a610ae8565b613842838361377a565b806000190482111561385657613856613764565b029392505050565b600061100960ff8416836137bd565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561389d5761389d613764565b500290565b600082198211156138b5576138b5613764565b500190565b60006000198214156138ce576138ce613764565b5060010190565b6000602082840312156138e757600080fd5b5051919050565b60006020828403121561390057600080fd5b815161100981613408565b60008261392857634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561393f5761393f613764565b500390565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561396c57600080fd5b8151611009816133a7565b600081518084526020808501945080840160005b838110156139b05781516001600160a01b03168752958201959082019060010161398b565b509495945050505050565b85815284602082015260a0604082015260006139da60a0830186613977565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000613a106040830184613977565b949350505050565b600080600060608486031215613a2d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dcc177291f9e926c24bb2d0cf14ff8c0711f040440302421aaafabbb32e024af64736f6c63430008080033

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063ea2f0b3711610095578063f2fde38b1161006f578063f2fde38b146109da578063f3b1e83b146109fa578063fabb0b4f14610a10578063ffb54a9914610a2657600080fd5b8063ea2f0b371461097a578063eafb5a3c1461099a578063f259c57b146109ba57600080fd5b8063c3d97d1c116100d1578063c3d97d1c146108de578063dc44b6a0146108fe578063dd62ed3e14610914578063deaa59df1461095a57600080fd5b8063a9059cbb14610888578063afb8865e146108a8578063bf56b371146108c857600080fd5b806384530c46116101645780638da5cb5b1161013e5780638da5cb5b146108155780638f4590d21461083357806395d89b4114610853578063a457c2d71461086857600080fd5b806384530c46146107a657806388790a68146107c657806388f82020146107dc57600080fd5b8063743942b6116101a0578063743942b61461073a5780637598f8bc1461075a57806378109e54146107705780638114bdd71461078657600080fd5b8063715018a6146106ef57806371b9189c1461070457806372fdf6ee1461072457600080fd5b80632d838119116102a05780634549b0391161023e57806352390c021161021857806352390c021461066f5780635d54c0af1461068f578063632e5442146106af57806370a08231146106cf57600080fd5b80634549b0391461060f57806349bd5a5e1461062f5780634eeaf4581461064f57600080fd5b80633bd5d1731161027a5780633bd5d173146105995780633ddf65ab146105b9578063401aa5c0146105d957806343b127a6146105ef57600080fd5b80632d83811914610537578063313ce56714610557578063395093511461057957600080fd5b806318160ddd1161030d57806323b872dd116102e757806323b872dd146104b75780632691bc80146104d757806328a23cd1146104f75780632d4103d61461051757600080fd5b806318160ddd1461046057806318ee9ff9146104755780631e89d5451461049757600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630f3a325f146103db57806313114a9d146104135780631694505e1461042857600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b6040516103809190613352565b3480156103b757600080fd5b506103cb6103c63660046133bf565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103cb6103f63660046133eb565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561041f57600080fd5b50600854610376565b34801561043457600080fd5b50601954610448906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b34801561046c57600080fd5b50600654610376565b34801561048157600080fd5b50610495610490366004613416565b610aee565b005b3480156104a357600080fd5b506104956104b236600461347f565b610b3d565b3480156104c357600080fd5b506103cb6104d23660046134eb565b610d6e565b3480156104e357600080fd5b506016546103cb9062010000900460ff1681565b34801561050357600080fd5b5061049561051236600461352c565b610dd7565b34801561052357600080fd5b50610495610532366004613565565b610f07565b34801561054357600080fd5b50610376610552366004613583565b610f8c565b34801561056357600080fd5b5060035460405160ff9091168152602001610380565b34801561058557600080fd5b506103cb6105943660046133bf565b611010565b3480156105a557600080fd5b506104956105b4366004613583565b611046565b3480156105c557600080fd5b506104956105d4366004613416565b611130565b3480156105e557600080fd5b50610376600c5481565b3480156105fb57600080fd5b5061049561060a36600461359c565b611178565b34801561061b57600080fd5b5061037661062a3660046135c8565b6111d2565b34801561063b57600080fd5b50601a54610448906001600160a01b031681565b34801561065b57600080fd5b5061049561066a36600461359c565b61125f565b34801561067b57600080fd5b5061049561068a3660046133eb565b611297565b34801561069b57600080fd5b506104956106aa3660046135ed565b611381565b3480156106bb57600080fd5b506104956106ca366004613644565b61141a565b3480156106db57600080fd5b506103766106ea3660046133eb565b61159a565b3480156106fb57600080fd5b506104956115f9565b34801561071057600080fd5b5061049561071f366004613690565b61166d565b34801561073057600080fd5b50610376600b5481565b34801561074657600080fd5b506104956107553660046133eb565b61170c565b34801561076657600080fd5b50610376600f5481565b34801561077c57600080fd5b5061037660095481565b34801561079257600080fd5b506104956107a13660046133eb565b61176b565b3480156107b257600080fd5b506104956107c1366004613690565b6117b9565b3480156107d257600080fd5b50610376600d5481565b3480156107e857600080fd5b506103cb6107f73660046133eb565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561082157600080fd5b506000546001600160a01b0316610448565b34801561083f57600080fd5b5061049561084e3660046136d2565b611853565b34801561085f57600080fd5b5061039e61189d565b34801561087457600080fd5b506103cb6108833660046133bf565b6118ac565b34801561089457600080fd5b506103cb6108a33660046133bf565b6118fb565b3480156108b457600080fd5b506104956108c3366004613583565b611908565b3480156108d457600080fd5b5061037660055481565b3480156108ea57600080fd5b506104956108f93660046133eb565b611959565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f36600461352c565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506104956109753660046133eb565b611b0c565b34801561098657600080fd5b506104956109953660046133eb565b611b58565b3480156109a657600080fd5b506104956109b53660046133eb565b611ba3565b3480156109c657600080fd5b506104956109d53660046133eb565b611f29565b3480156109e657600080fd5b506104956109f53660046133eb565b611f77565b348015610a0657600080fd5b50610376600e5481565b348015610a1c57600080fd5b5061037660045481565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a54906136f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a80906136f4565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484612181565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061372f565b60405180910390fd5b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b189061372f565b6103218310610bce5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610c2e5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610c8c57600354610c4b9060ff16600a61385e565b848483818110610c5d57610c5d61386d565b90506020020135610c6e9190613883565b610c7890836138a2565b915080610c84816138ba565b915050610c32565b5080610c973361159a565b1015610ce55760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610d6657610d5433878784818110610d0657610d0661386d565b9050602002016020810190610d1b91906133eb565b600354610d2c9060ff16600a61385e565b878786818110610d3e57610d3e61386d565b90506020020135610d4f9190613883565b6122a5565b80610d5e816138ba565b915050610ce8565b505050505050565b6000610d7b8484846122a5565b610dcd8433610dc885604051806060016040528060288152602001613a47602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906127e9565b612181565b5060019392505050565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b189061372f565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b91906138d5565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0191906138ee565b50505050565b6000546001600160a01b03163314610f315760405162461bcd60e51b8152600401610b189061372f565b6016805461ff00191661010084151502179055610f4d30611297565b601a54610f62906001600160a01b0316611297565b601654610100900460ff168015610f795750600554155b15610f88574360055560048190555b5050565b6000600754821115610ff35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b6000610ffd612823565b90506110098382612061565b9392505050565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610dc89086612122565b3360008181526023602052604090205460ff16156110bb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b60006110c683612846565b505050506001600160a01b0384166000908152601d60205260409020549192506110f291905082612895565b6001600160a01b0383166000908152601d60205260409020556007546111189082612895565b6007556008546111289084612122565b600855505050565b6000546001600160a01b0316331461115a5760405162461bcd60e51b8152600401610b189061372f565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146111a25760405162461bcd60e51b8152600401610b189061372f565b600a829055600b819055600c8390556012839055601082905560118190556111ca8282612122565b601355505050565b60006006548311156112265760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b8161124557600061123684612846565b50939550610ae8945050505050565b600061125084612846565b50929550610ae8945050505050565b6000546001600160a01b031633146112895760405162461bcd60e51b8152600401610b189061372f565b600d91909155600e55600f55565b6000546001600160a01b031633146112c15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166000908152601d60205260409020541561131b576001600160a01b0381166000908152601d602052604090205461130190610f8c565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b189061372f565b60005b82811015610f015781602060008686858181106113cd576113cd61386d565b90506020020160208101906113e291906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611413816138ba565b90506113ae565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610b189061372f565b6107d182106114ac5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b60035460009083906114c29060ff16600a61385e565b6114cc9084613883565b6114d69190613883565b9050806114e23361159a565b10156115305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b8381101561159357611581338686848181106115515761155161386d565b905060200201602081019061156691906133eb565b6003546115779060ff16600a61385e565b610d4f9087613883565b8061158b816138ba565b915050611533565b5050505050565b6001600160a01b03811660009081526023602052604081205460ff16156115d757506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae890610f8c565b6000546001600160a01b031633146116235760405162461bcd60e51b8152600401610b189061372f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116975760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611707576001602160008585858181106116ba576116ba61386d565b90506020020160208101906116cf91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611700816138ba565b905061169a565b505050565b6000546001600160a01b031633146117365760405162461bcd60e51b8152600401610b189061372f565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610f88573d6000803e3d6000fd5b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000546001600160a01b031633146117e35760405162461bcd60e51b8152600401610b189061372f565b60005b81811015611707576001602460008585858181106118065761180661386d565b905060200201602081019061181b91906133eb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561184c816138ba565b90506117e6565b6000546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610b189061372f565b808260065461188c9190613883565b611896919061390b565b6015555050565b606060188054610a54906136f4565b6000610ae43384610dc885604051806060016040528060258152602001613a6f60259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906127e9565b6000610ae43384846122a5565b6000546001600160a01b031633146119325760405162461bcd60e51b8152600401610b189061372f565b6119538161194d6103e860065461206190919063ffffffff16565b906120a3565b60095550565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03811660009081526023602052604090205460ff166119eb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b602554811015610f8857816001600160a01b031660258281548110611a1557611a1561386d565b6000918252602090912001546001600160a01b03161415611afa5760258054611a409060019061392d565b81548110611a5057611a5061386d565b600091825260209091200154602580546001600160a01b039092169183908110611a7c57611a7c61386d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff191690556025805480611ad457611ad4613944565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611b04816138ba565b9150506119ee565b6000546001600160a01b03163314611b365760405162461bcd60e51b8152600401610b189061372f565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314611bcd5760405162461bcd60e51b8152600401610b189061372f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c45919061395a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8d57600080fd5b505afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc5919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d43919061395a565b90506001600160a01b038116611ee957816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc4919061395a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0c57600080fd5b505afa158015611e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e44919061395a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611e8c57600080fd5b505af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec4919061395a565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611f05565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611f535760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611fa15760405162461bcd60e51b8152600401610b189061372f565b6001600160a01b0381166120065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061100983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128d7565b6000826120b257506000610ae8565b60006120be8385613883565b9050826120cb858361390b565b146110095760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b60008061212f83856138a2565b9050838110156110095760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b03821661236b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116123cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156124225760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6001600160a01b038316600090815260208052604090205460ff16156124775760405162461bcd60e51b815260206004820152600a602482015269536f72727920426f737360b01b6044820152606401610b18565b6000546001600160a01b038481169116148015906124a357506000546001600160a01b03838116911614155b156124ff57601654610100900460ff166124ff5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b038581169116148061252b5750601a546001600160a01b038481169116145b801561257357506001600160a01b03841660009081526021602052604090205460ff168061257157506001600160a01b03831660009081526021602052604090205460ff165b155b1561257c575060015b60006005541180156125c057506001600160a01b03831660009081526022602052604090205460ff161580156125c057506000546001600160a01b03858116911614155b80156125da5750436004546005546125d891906138a2565b115b1561264e576009546125eb8461159a565b6125f590846138a2565b111561264e5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561267e5750601a546001600160a01b038481169116145b1561269c57600e54600d5461269291612122565b601455600f546012555b60006005541180156126bc5750436004546005546126ba91906138a2565b115b156126e4576001600160a01b03831660009081526020805260409020805460ff191660011790555b600060055411801561270457506000546001600160a01b03858116911614155b801561271f575060045460055461271b91906138a2565b4311155b801561273457506016546301000000900460ff165b15612740576103b66014555b60165462010000900460ff161561278057601654610100900460ff1680156127755750601a546001600160a01b038581169116145b156127805760006014555b60165460ff1615801561279a5750601654610100900460ff165b80156127b35750601a546001600160a01b038481169116145b156127dd5760006127c33061159a565b905060155481106127db57506015546127db81612905565b505b610f01848484846129f1565b6000818484111561280d5760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661392d565b95945050505050565b6000806000612830612b1d565b909250905061283f8282612061565b9250505090565b600080600080600080600080600061285d8a612c9f565b925092509250600080600061287b8d8686612876612823565b612ce1565b919f909e50909c50959a5093985091965092945050505050565b600061100983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127e9565b600081836128f85760405162461bcd60e51b8152600401610b189190613352565b50600061281a848661390b565b6016805460ff191660011790556013546010546000916129359160029161292f91829087906120a3565b90612061565b905060006129438383612895565b905061294e81612d31565b601054479060009061296e90612965906002612061565b60135490612895565b90506000612990600261292f8461292f601054886120a390919063ffffffff16565b905060006129ad8361292f601154876120a390919063ffffffff16565b90504780156129cd57601b546129cd9083906001600160a01b0316612ed3565b86156129dd576129dd8784612f09565b50506016805460ff19169055505050505050565b60125460145482612a0757600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff168015612a4857506001600160a01b03851660009081526023602052604090205460ff16155b15612a5d57612a58868686612fe6565b612b09565b6001600160a01b03861660009081526023602052604090205460ff16158015612a9e57506001600160a01b03851660009081526023602052604090205460ff165b15612aae57612a5886868661310c565b6001600160a01b03861660009081526023602052604090205460ff168015612aee57506001600160a01b03851660009081526023602052604090205460ff165b15612afe57612a588686866131b5565b612b09868686613228565b82610d665760129190915560145550505050565b6007546006546000918291825b602554811015612c6f5782601d600060258481548110612b4c57612b4c61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612bb7575081601e600060258481548110612b9057612b9061386d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612bcd57600754600654945094505050509091565b612c13601d600060258481548110612be757612be761386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612895565b9250612c5b601e600060258481548110612c2f57612c2f61386d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612895565b915080612c67816138ba565b915050612b2a565b50600654600754612c7f91612061565b821015612c96576007546006549350935050509091565b90939092509050565b600080600080612cae8561326c565b90506000612cbb86613289565b90506000612cd382612ccd8986612895565b90612895565b979296509094509092505050565b6000808080612cf088866120a3565b90506000612cfe88876120a3565b90506000612d0c88886120a3565b90506000612d1e82612ccd8686612895565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d6657612d6661386d565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dba57600080fd5b505afa158015612dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df2919061395a565b81600181518110612e0557612e0561386d565b6001600160a01b039283166020918202929092010152601954612e2b9130911684612181565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e649085906000908690309042906004016139bb565b600060405180830381600087803b158015612e7e57600080fd5b505af1158015612e92573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612ec79291906139f7565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611707573d6000803e3d6000fd5b601954612f219030906001600160a01b031684612181565b6019546001600160a01b031663f305d719823085600080612f4a6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612fad57600080fd5b505af1158015612fc1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115939190613a18565b600080600080600080612ff887612846565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061302a9088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130599087612895565b6001600160a01b03808b166000908152601d602052604080822093909355908a16815220546130889086612122565b6001600160a01b0389166000908152601d60205260409020556130aa816132a6565b6130b4848361332e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130f991815260200190565b60405180910390a3505050505050505050565b60008060008060008061311e87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506131509087612895565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546131869084612122565b6001600160a01b0389166000908152601e6020908152604080832093909355601d905220546130889086612122565b6000806000806000806131c787612846565b6001600160a01b038f166000908152601e6020526040902054959b509399509197509550935091506131f99088612895565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546131509087612895565b60008060008060008061323a87612846565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130599087612895565b6000610ae86103e861292f601254856120a390919063ffffffff16565b6000610ae86103e861292f601454856120a390919063ffffffff16565b60006132b0612823565b905060006132be83836120a3565b306000908152601d60205260409020549091506132db9082612122565b306000908152601d602090815260408083209390935560239052205460ff161561170757306000908152601e60205260409020546133199084612122565b306000908152601e6020526040902055505050565b60075461333b9083612895565b60075560085461334b9082612122565b6008555050565b600060208083528351808285015260005b8181101561337f57858101830151858201604001528201613363565b81811115613391576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146133bc57600080fd5b50565b600080604083850312156133d257600080fd5b82356133dd816133a7565b946020939093013593505050565b6000602082840312156133fd57600080fd5b8135611009816133a7565b80151581146133bc57600080fd5b60006020828403121561342857600080fd5b813561100981613408565b60008083601f84011261344557600080fd5b50813567ffffffffffffffff81111561345d57600080fd5b6020830191508360208260051b850101111561347857600080fd5b9250929050565b6000806000806040858703121561349557600080fd5b843567ffffffffffffffff808211156134ad57600080fd5b6134b988838901613433565b909650945060208701359150808211156134d257600080fd5b506134df87828801613433565b95989497509550505050565b60008060006060848603121561350057600080fd5b833561350b816133a7565b9250602084013561351b816133a7565b929592945050506040919091013590565b6000806040838503121561353f57600080fd5b823561354a816133a7565b9150602083013561355a816133a7565b809150509250929050565b6000806040838503121561357857600080fd5b82356133dd81613408565b60006020828403121561359557600080fd5b5035919050565b6000806000606084860312156135b157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156135db57600080fd5b82359150602083013561355a81613408565b60008060006040848603121561360257600080fd5b833567ffffffffffffffff81111561361957600080fd5b61362586828701613433565b909450925050602084013561363981613408565b809150509250925092565b60008060006040848603121561365957600080fd5b833567ffffffffffffffff81111561367057600080fd5b61367c86828701613433565b909790965060209590950135949350505050565b600080602083850312156136a357600080fd5b823567ffffffffffffffff8111156136ba57600080fd5b6136c685828601613433565b90969095509350505050565b600080604083850312156136e557600080fd5b50508035926020909101359150565b600181811c9082168061370857607f821691505b6020821081141561372957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156137b557816000190482111561379b5761379b613764565b808516156137a857918102915b93841c939080029061377f565b509250929050565b6000826137cc57506001610ae8565b816137d957506000610ae8565b81600181146137ef57600281146137f957613815565b6001915050610ae8565b60ff84111561380a5761380a613764565b50506001821b610ae8565b5060208310610133831016604e8410600b8410161715613838575081810a610ae8565b613842838361377a565b806000190482111561385657613856613764565b029392505050565b600061100960ff8416836137bd565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561389d5761389d613764565b500290565b600082198211156138b5576138b5613764565b500190565b60006000198214156138ce576138ce613764565b5060010190565b6000602082840312156138e757600080fd5b5051919050565b60006020828403121561390057600080fd5b815161100981613408565b60008261392857634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561393f5761393f613764565b500390565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561396c57600080fd5b8151611009816133a7565b600081518084526020808501945080840160005b838110156139b05781516001600160a01b03168752958201959082019060010161398b565b509495945050505050565b85815284602082015260a0604082015260006139da60a0830186613977565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000613a106040830184613977565b949350505050565b600080600060608486031215613a2d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dcc177291f9e926c24bb2d0cf14ff8c0711f040440302421aaafabbb32e024af64736f6c63430008080033

Deployed Bytecode Sourcemap

14265:23642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15345:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15345:57:0;;;;;;;;30205:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18301:161::-;;;;;;;;;;-1:-1:-1;18301:161:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18301:161:0;1254:187:1;31388:106:0;;;;;;;;;;-1:-1:-1;31388:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31468:18:0;31444:4;31468:18;;;:9;:18;;;;;;;;;31388:106;31630:87;;;;;;;;;;-1:-1:-1;31699:10:0;;31630:87;;15640:41;;;;;;;;;;-1:-1:-1;15640:41:0;;;;-1:-1:-1;;;;;15640:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;15640:41:0;1698:230:1;30482:95:0;;;;;;;;;;-1:-1:-1;30562:7:0;;30482:95;;33335:98;;;;;;;;;;-1:-1:-1;33335:98:0;;;;;:::i;:::-;;:::i;:::-;;35905:701;;;;;;;;;;-1:-1:-1;35905:701:0;;;;;:::i;:::-;;:::i;17473:313::-;;;;;;;;;;-1:-1:-1;17473:313:0;;;;;:::i;:::-;;:::i;15475:34::-;;;;;;;;;;-1:-1:-1;15475:34:0;;;;;;;;;;;35239:171;;;;;;;;;;-1:-1:-1;35239:171:0;;;;;:::i;:::-;;:::i;32986:337::-;;;;;;;;;;-1:-1:-1;32986:337:0;;;;;:::i;:::-;;:::i;30801:253::-;;;;;;;;;;-1:-1:-1;30801:253:0;;;;;:::i;:::-;;:::i;30391:83::-;;;;;;;;;;-1:-1:-1;30457:9:0;;30391:83;;30457:9;;;;4960:36:1;;4948:2;4933:18;30391:83:0;4818:184:1;17794:218:0;;;;;;;;;;-1:-1:-1;17794:218:0;;;;;:::i;:::-;;:::i;18474:377::-;;;;;;;;;;-1:-1:-1;18474:377:0;;;;;:::i;:::-;;:::i;33441:96::-;;;;;;;;;;-1:-1:-1;33441:96:0;;;;;:::i;:::-;;:::i;14874:36::-;;;;;;;;;;;;;;;;37131:436;;;;;;;;;;-1:-1:-1;37131:436:0;;;;;:::i;:::-;;:::i;31725:::-;;;;;;;;;;-1:-1:-1;31725:436:0;;;;;:::i;:::-;;:::i;15688:28::-;;;;;;;;;;-1:-1:-1;15688:28:0;;;;-1:-1:-1;;;;;15688:28:0;;;37575:255;;;;;;;;;;-1:-1:-1;37575:255:0;;;;;:::i;:::-;;:::i;32225:261::-;;;;;;;;;;-1:-1:-1;32225:261:0;;;;;:::i;:::-;;:::i;34676:209::-;;;;;;;;;;-1:-1:-1;34676:209:0;;;;;:::i;:::-;;:::i;36614:509::-;;;;;;;;;;-1:-1:-1;36614:509:0;;;;;:::i;:::-;;:::i;30585:208::-;;;;;;;;;;-1:-1:-1;30585:208:0;;;;;:::i;:::-;;:::i;6026:148::-;;;;;;;;;;;;;:::i;34204:198::-;;;;;;;;;;-1:-1:-1;34204:198:0;;;;;:::i;:::-;;:::i;14828:36::-;;;;;;;;;;;;;;;;35096:135;;;;;;;;;;-1:-1:-1;35096:135:0;;;;;:::i;:::-;;:::i;15010:37::-;;;;;;;;;;;;;;;;14691:58;;;;;;;;;;;;;;;;35594:117;;;;;;;;;;-1:-1:-1;35594:117:0;;;;;:::i;:::-;;:::i;34897:188::-;;;;;;;;;;-1:-1:-1;34897:188:0;;;;;:::i;:::-;;:::i;14919:36::-;;;;;;;;;;;;;;;;31502:120;;;;;;;;;;-1:-1:-1;31502:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31594:20:0;31570:4;31594:20;;;:11;:20;;;;;;;;;31502:120;5801:79;;;;;;;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;5866:6:0;5801:79;;35719:178;;;;;;;;;;-1:-1:-1;35719:178:0;;;;;:::i;:::-;;:::i;30296:87::-;;;;;;;;;;;;;:::i;18020:269::-;;;;;;;;;;-1:-1:-1;18020:269:0;;;;;:::i;:::-;;:::i;31062:167::-;;;;;;;;;;-1:-1:-1;31062:167:0;;;;;:::i;:::-;;:::i;35418:168::-;;;;;;;;;;-1:-1:-1;35418:168:0;;;;;:::i;:::-;;:::i;14452:29::-;;;;;;;;;;;;;;;;32494:484;;;;;;;;;;-1:-1:-1;32494:484:0;;;;;:::i;:::-;;:::i;14782:35::-;;;;;;;;;;;;;;;;31237:143;;;;;;;;;;-1:-1:-1;31237:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31345:18:0;;;31318:7;31345:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31237:143;34536:128;;;;;;;;;;-1:-1:-1;34536:128:0;;;;;:::i;:::-;;:::i;34414:110::-;;;;;;;;;;-1:-1:-1;34414:110:0;;;;;:::i;:::-;;:::i;33549:523::-;;;;;;;;;;-1:-1:-1;33549:523:0;;;;;:::i;:::-;;:::i;34084:112::-;;;;;;;;;;-1:-1:-1;34084:112:0;;;;;:::i;:::-;;:::i;6182:244::-;;;;;;;;;;-1:-1:-1;6182:244:0;;;;;:::i;:::-;;:::i;14963:38::-;;;;;;;;;;;;;;;;14416:29;;;;;;;;;;;;;;;;15437:31;;;;;;;;;;-1:-1:-1;15437:31:0;;;;;;;;;;;30205:83;30242:13;30275:5;30268:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30205:83;:::o;18301:161::-;18376:4;18393:39;189:10;18416:7;18425:6;18393:8;:39::i;:::-;-1:-1:-1;18450:4:0;18301:161;;;;;:::o;33335:98::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;;;;;;;;;33403:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33403:22:0;;::::1;::::0;;;::::1;::::0;;33335:98::o;35905:701::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;36045:3:::1;36026:22:::0;::::1;36018:79;;;::::0;-1:-1:-1;;;36018:79:0;;9227:2:1;36018:79:0::1;::::0;::::1;9209:21:1::0;9266:2;9246:18;;;9239:30;9305:34;9285:18;;;9278:62;-1:-1:-1;;;9356:18:1;;;9349:43;9409:19;;36018:79:0::1;9025:409:1::0;36018:79:0::1;36139:33:::0;;::::1;36131:85;;;::::0;-1:-1:-1;;;36131:85:0;;9641:2:1;36131:85:0::1;::::0;::::1;9623:21:1::0;9680:2;9660:18;;;9653:30;9719:34;9699:18;;;9692:62;-1:-1:-1;;;9770:18:1;;;9763:38;9818:19;;36131:85:0::1;9439:404:1::0;36131:85:0::1;36229:12;36262:6:::0;36258:108:::1;36272:20:::0;;::::1;36258:108;;;36344:9;::::0;36340:13:::1;::::0;36344:9:::1;;36340:2;:13;:::i;:::-;36328:6;;36335:1;36328:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36320:34;::::0;:4;:34:::1;:::i;:::-;36313:41:::0;-1:-1:-1;36294:3:0;::::1;::::0;::::1;:::i;:::-;;;;36258:108;;;;36411:4;36386:21;36396:10;36386:9;:21::i;:::-;:29;;36378:69;;;::::0;-1:-1:-1;;;36378:69:0;;12143:2:1;36378:69:0::1;::::0;::::1;12125:21:1::0;12182:2;12162:18;;;12155:30;12221:29;12201:18;;;12194:57;12268:18;;36378:69:0::1;11941:351:1::0;36378:69:0::1;36464:6;36460:139;36474:20:::0;;::::1;36460:139;;;36515:62;36525:10;36536:9;;36546:1;36536:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36566:9;::::0;36562:13:::1;::::0;36566:9:::1;;36562:2;:13;:::i;:::-;36550:6;;36557:1;36550:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36515:9;:62::i;:::-;36496:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36460:139;;;;36005:601;35905:701:::0;;;;:::o;17473:313::-;17571:4;17588:36;17598:6;17606:9;17617:6;17588:9;:36::i;:::-;17635:121;17644:6;189:10;17666:89;17704:6;17666:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17666:19:0;;;;;;:11;:19;;;;;;;;189:10;17666:33;;;;;;;;;;:37;:89::i;:::-;17635:8;:121::i;:::-;-1:-1:-1;17774:4:0;17473:313;;;;;:::o;35239:171::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35334:30:::1;::::0;-1:-1:-1;;;35334:30:0;;35358:4:::1;35334:30;::::0;::::1;1871:51:1::0;35316:15:0::1;::::0;-1:-1:-1;;;;;35334:15:0;::::1;::::0;::::1;::::0;1844:18:1;;35334:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35375:27;::::0;-1:-1:-1;;;35375:27:0;;-1:-1:-1;;;;;12678:32:1;;;35375:27:0::1;::::0;::::1;12660:51:1::0;12727:18;;;12720:34;;;35316:48:0;;-1:-1:-1;35375:14:0;;::::1;::::0;::::1;::::0;12633:18:1;;35375:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35305:105;35239:171:::0;;:::o;32986:337::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33073:11:::1;:21:::0;;-1:-1:-1;;33073:21:0::1;;::::0;::::1;;;;::::0;;33105:32:::1;33131:4;33105:17;:32::i;:::-;33166:13;::::0;33148:32:::1;::::0;-1:-1:-1;;;;;33166:13:0::1;33148:17;:32::i;:::-;33194:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33209:10:0::1;::::0;:15;33194:30:::1;33191:125;;;33253:12;33240:10;:25:::0;33280:10:::1;:24:::0;;;33191:125:::1;32986:337:::0;;:::o;30801:253::-;30867:7;30906;;30895;:18;;30887:73;;;;-1:-1:-1;;;30887:73:0;;13217:2:1;30887:73:0;;;13199:21:1;13256:2;13236:18;;;13229:30;13295:34;13275:18;;;13268:62;-1:-1:-1;;;13346:18:1;;;13339:40;13396:19;;30887:73:0;13015:406:1;30887:73:0;30971:19;30994:10;:8;:10::i;:::-;30971:33;-1:-1:-1;31022:24:0;:7;30971:33;31022:11;:24::i;:::-;31015:31;30801:253;-1:-1:-1;;;30801:253:0:o;17794:218::-;189:10;17882:4;17931:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17931:34:0;;;;;;;;;;17882:4;;17899:83;;17922:7;;17931:50;;17970:10;17931:38;:50::i;18474:377::-;189:10;18526:14;18575:19;;;:11;:19;;;;;;;;18574:20;18566:77;;;;-1:-1:-1;;;18566:77:0;;13628:2:1;18566:77:0;;;13610:21:1;13667:2;13647:18;;;13640:30;13706:34;13686:18;;;13679:62;-1:-1:-1;;;13757:18:1;;;13750:42;13809:19;;18566:77:0;13426:408:1;18566:77:0;18655:15;18679:19;18690:7;18679:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18727:15:0;;;;;;:7;:15;;;;;;18654:44;;-1:-1:-1;18727:28:0;;:15;-1:-1:-1;18654:44:0;18727:19;:28::i;:::-;-1:-1:-1;;;;;18709:15:0;;;;;;:7;:15;;;;;:46;18776:7;;:20;;18788:7;18776:11;:20::i;:::-;18766:7;:30;18820:10;;:23;;18835:7;18820:14;:23::i;:::-;18807:10;:36;-1:-1:-1;;;18474:377:0:o;33441:96::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33510:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33510:19:0;;::::1;::::0;;;::::1;::::0;;33441:96::o;37131:436::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;37262:16:::1;:33:::0;;;37306:16:::1;:33:::0;;;37350:17:::1;:34:::0;;;37397:13:::1;:30:::0;;;37438:12:::1;:29:::0;;;37478:12:::1;:29:::0;;;37529:30:::1;37281:14:::0;37325;37529:16:::1;:30::i;:::-;37518:8;:41:::0;-1:-1:-1;;;37131:436:0:o;31725:::-;31815:7;31854;;31843;:18;;31835:62;;;;-1:-1:-1;;;31835:62:0;;14041:2:1;31835:62:0;;;14023:21:1;14080:2;14060:18;;;14053:30;14119:33;14099:18;;;14092:61;14170:18;;31835:62:0;13839:355:1;31835:62:0;31913:17;31908:246;;31948:15;31972:19;31983:7;31972:10;:19::i;:::-;-1:-1:-1;31947:44:0;;-1:-1:-1;32006:14:0;;-1:-1:-1;;;;;32006:14:0;31908:246;32055:23;32086:19;32097:7;32086:10;:19::i;:::-;-1:-1:-1;32053:52:0;;-1:-1:-1;32120:22:0;;-1:-1:-1;;;;;32120:22:0;37575:255;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;37697:17:::1;:34:::0;;;;37742:17:::1;:34:::0;37787:18:::1;:35:::0;37575:255::o;32225:261::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32302:16:0;::::1;32321:1;32302:16:::0;;;:7:::1;:16;::::0;;;;;:20;32299:108:::1;;-1:-1:-1::0;;;;;32378:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32358:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32339:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32299:108:::1;-1:-1:-1::0;;;;;32417:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32417:27:0::1;32440:4;32417:27:::0;;::::1;::::0;;;32455:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32455:23:0::1;::::0;;::::1;::::0;;32225:261::o;34676:209::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34776:9:::1;34771:107;34787:20:::0;;::::1;34771:107;;;34859:6;34833:9;:23;34843:9;;34853:1;34843:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34833:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34833:23:0;:32;;-1:-1:-1;;34833:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34809:3:::1;::::0;::::1;:::i;:::-;;;34771:107;;36614:509:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;36749:4:::1;36730:23:::0;::::1;36722:81;;;::::0;-1:-1:-1;;;36722:81:0;;14401:2:1;36722:81:0::1;::::0;::::1;14383:21:1::0;14440:2;14420:18;;;14413:30;14479:34;14459:18;;;14452:62;-1:-1:-1;;;14530:18:1;;;14523:44;14584:19;;36722:81:0::1;14199:410:1::0;36722:81:0::1;36866:9;::::0;36839:12:::1;::::0;36878:9;;36862:13:::1;::::0;36866:9:::1;;36862:2;:13;:::i;:::-;36854:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36839:55;;36940:4;36915:21;36925:10;36915:9;:21::i;:::-;:29;;36907:69;;;::::0;-1:-1:-1;;;36907:69:0;;12143:2:1;36907:69:0::1;::::0;::::1;12125:21:1::0;12182:2;12162:18;;;12155:30;12221:29;12201:18;;;12194:57;12268:18;;36907:69:0::1;11941:351:1::0;36907:69:0::1;36993:6;36989:127;37003:20:::0;;::::1;36989:127;;;37044:58;37054:10;37065:9;;37075:1;37065:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37091:9;::::0;37087:13:::1;::::0;37091:9:::1;;37087:2;:13;:::i;:::-;37079:21;::::0;:6;:21:::1;:::i;37044:58::-;37025:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36989:127;;;;36709:414;36614:509:::0;;;:::o;30585:208::-;-1:-1:-1;;;;;30675:20:0;;30651:7;30675:20;;;:11;:20;;;;;;;;30671:59;;;-1:-1:-1;;;;;;30714:16:0;;;;;:7;:16;;;;;;;30585:208::o;30671:59::-;-1:-1:-1;;;;;30768:16:0;;;;;;:7;:16;;;;;;30748:37;;:19;:37::i;6026:148::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;6133:1:::1;6117:6:::0;;6096:40:::1;::::0;-1:-1:-1;;;;;6117:6:0;;::::1;::::0;6096:40:::1;::::0;6133:1;;6096:40:::1;6164:1;6147:19:::0;;-1:-1:-1;;;;;;6147:19:0::1;::::0;;6026:148::o;34204:198::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34291:9:::1;34286:109;34302:20:::0;;::::1;34286:109;;;34379:4;34344:18;:32;34363:9;;34373:1;34363:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34344:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34344:32:0;:39;;-1:-1:-1;;34344:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34324:3:::1;::::0;::::1;:::i;:::-;;;34286:109;;;;34204:198:::0;;:::o;35096:135::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35181:42:::1;::::0;-1:-1:-1;;;;;35181:19:0;::::1;::::0;35201:21:::1;35181:42:::0;::::1;;;::::0;::::1;::::0;;;35201:21;35181:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35594:117:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35671:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35671:32:0::1;35699:4;35671:32;::::0;;35594:117::o;34897:188::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34984:9:::1;34979:99;34995:20:::0;;::::1;34979:99;;;35062:4;35037:10;:24;35048:9;;35058:1;35048:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35037:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35037:24:0;:29;;-1:-1:-1;;35037:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35017:3:::1;::::0;::::1;:::i;:::-;;;34979:99;;35719:178:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35873:16:::1;35853;35843:7;;:26;;;;:::i;:::-;35842:47;;;;:::i;:::-;35826:13;:63:::0;-1:-1:-1;;35719:178:0:o;30296:87::-;30335:13;30368:7;30361:14;;;;;:::i;18020:269::-;18113:4;18130:129;189:10;18153:7;18162:96;18201:15;18162:96;;;;;;;;;;;;;;;;;189:10;18162:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18162:34:0;;;;;;;;;;;;:38;:96::i;31062:167::-;31140:4;31157:42;189:10;31181:9;31192:6;31157:9;:42::i;35418:168::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;35532:46:::1;35554:23;35532:17;35544:4;35532:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35514:15;:64:::0;-1:-1:-1;35418:168:0:o;32494:484::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32581:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32573:60;;;::::0;-1:-1:-1;;;32573:60:0;;15038:2:1;32573:60:0::1;::::0;::::1;15020:21:1::0;15077:2;15057:18;;;15050:30;15116:29;15096:18;;;15089:57;15163:18;;32573:60:0::1;14836:351:1::0;32573:60:0::1;32649:9;32644:327;32668:9;:16:::0;32664:20;::::1;32644:327;;;32726:7;-1:-1:-1::0;;;;;32710:23:0::1;:9;32720:1;32710:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32710:12:0::1;:23;32706:254;;;32769:9;32779:16:::0;;:20:::1;::::0;32798:1:::1;::::0;32779:20:::1;:::i;:::-;32769:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32754:9:::1;:12:::0;;-1:-1:-1;;;;;32769:31:0;;::::1;::::0;32764:1;;32754:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32754:46:0::1;-1:-1:-1::0;;;;;32754:46:0;;::::1;;::::0;;32819:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32858:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32858:28:0::1;::::0;;32905:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32905:15:0;;;;;-1:-1:-1;;;;;;32905:15:0::1;::::0;;;;;32986:337;;:::o;32706:254::-:1;32686:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32644:327;;34536:128:::0;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;34613:15:::1;:43:::0;;-1:-1:-1;;;;;;34613:43:0::1;-1:-1:-1::0;;;;;34613:43:0;;;::::1;::::0;;;::::1;::::0;;34536:128::o;34414:110::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34481:27:0::1;34511:5;34481:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34481:35:0::1;::::0;;34414:110::o;33549:523::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;33622:29:::1;33673:9;33622:61;;33694:16;33731:10;-1:-1:-1::0;;;;;33731:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33713:47:0::1;;33769:4;33776:10;-1:-1:-1::0;;;;;33776:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33713:81;::::0;-1:-1:-1;;;;;;33713:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15940:15:1;;;33713:81:0::1;::::0;::::1;15922:34:1::0;15992:15;;15972:18;;;15965:43;15857:18;;33713:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33694:100:::0;-1:-1:-1;;;;;;33809:22:0;::::1;33805:221;;33882:10;-1:-1:-1::0;;;;;33882:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33864:50:0::1;;33923:4;33930:10;-1:-1:-1::0;;;;;33930:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33864:84;::::0;-1:-1:-1;;;;;;33864:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15940:15:1;;;33864:84:0::1;::::0;::::1;15922:34:1::0;15992:15;;15972:18;;;15965:43;15857:18;;33864:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33848:13;:100:::0;;-1:-1:-1;;;;;;33848:100:0::1;-1:-1:-1::0;;;;;33848:100:0;;;::::1;::::0;;;::::1;::::0;;33805:221:::1;;;33990:13;:24:::0;;-1:-1:-1;;;;;;33990:24:0::1;-1:-1:-1::0;;;;;33990:24:0;::::1;;::::0;;33805:221:::1;-1:-1:-1::0;34036:15:0::1;:28:::0;;-1:-1:-1;;;;;;34036:28:0::1;-1:-1:-1::0;;;;;34036:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33549:523:0:o;34084:112::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34154:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34154:34:0::1;34184:4;34154:34;::::0;;34084:112::o;6182:244::-;5935:6;;-1:-1:-1;;;;;5935:6:0;189:10;5935:22;5927:67;;;;-1:-1:-1;;;5927:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6271:22:0;::::1;6263:73;;;::::0;-1:-1:-1;;;6263:73:0;;16221:2:1;6263:73:0::1;::::0;::::1;16203:21:1::0;16260:2;16240:18;;;16233:30;16299:34;16279:18;;;16272:62;-1:-1:-1;;;16350:18:1;;;16343:36;16396:19;;6263:73:0::1;16019:402:1::0;6263:73:0::1;6373:6;::::0;;6352:38:::1;::::0;-1:-1:-1;;;;;6352:38:0;;::::1;::::0;6373:6;::::1;::::0;6352:38:::1;::::0;::::1;6401:6;:17:::0;;-1:-1:-1;;;;;;6401:17:0::1;-1:-1:-1::0;;;;;6401:17:0;;;::::1;::::0;;;::::1;::::0;;6182:244::o;1960:132::-;2018:7;2045:39;2049:1;2052;2045:39;;;;;;;;;;;;;;;;;:3;:39::i;1702:250::-;1760:7;1784:6;1780:47;;-1:-1:-1;1814:1:0;1807:8;;1780:47;1839:9;1851:5;1855:1;1851;:5;:::i;:::-;1839:17;-1:-1:-1;1884:1:0;1875:5;1879:1;1839:17;1875:5;:::i;:::-;:10;1867:56;;;;-1:-1:-1;;;1867:56:0;;16628:2:1;1867:56:0;;;16610:21:1;16667:2;16647:18;;;16640:30;16706:34;16686:18;;;16679:62;-1:-1:-1;;;16757:18:1;;;16750:31;16798:19;;1867:56:0;16426:397:1;1169:181:0;1227:7;;1259:5;1263:1;1259;:5;:::i;:::-;1247:17;;1288:1;1283;:6;;1275:46;;;;-1:-1:-1;;;1275:46:0;;17030:2:1;1275:46:0;;;17012:21:1;17069:2;17049:18;;;17042:30;17108:29;17088:18;;;17081:57;17155:18;;1275:46:0;16828:351:1;18859:337:0;-1:-1:-1;;;;;18952:19:0;;18944:68;;;;-1:-1:-1;;;18944:68:0;;17386:2:1;18944:68:0;;;17368:21:1;17425:2;17405:18;;;17398:30;17464:34;17444:18;;;17437:62;-1:-1:-1;;;17515:18:1;;;17508:34;17559:19;;18944:68:0;17184:400:1;18944:68:0;-1:-1:-1;;;;;19031:21:0;;19023:68;;;;-1:-1:-1;;;19023:68:0;;17791:2:1;19023:68:0;;;17773:21:1;17830:2;17810:18;;;17803:30;17869:34;17849:18;;;17842:62;-1:-1:-1;;;17920:18:1;;;17913:32;17962:19;;19023:68:0;17589:398:1;19023:68:0;-1:-1:-1;;;;;19104:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19156:32;;160:25:1;;;19156:32:0;;133:18:1;19156:32:0;;;;;;;18859:337;;;:::o;19338:2270::-;-1:-1:-1;;;;;19460:18:0;;19452:68;;;;-1:-1:-1;;;19452:68:0;;18194:2:1;19452:68:0;;;18176:21:1;18233:2;18213:18;;;18206:30;18272:34;18252:18;;;18245:62;-1:-1:-1;;;18323:18:1;;;18316:35;18368:19;;19452:68:0;17992:401:1;19452:68:0;-1:-1:-1;;;;;19539:16:0;;19531:64;;;;-1:-1:-1;;;19531:64:0;;18600:2:1;19531:64:0;;;18582:21:1;18639:2;18619:18;;;18612:30;18678:34;18658:18;;;18651:62;-1:-1:-1;;;18729:18:1;;;18722:33;18772:19;;19531:64:0;18398:399:1;19531:64:0;19623:1;19614:6;:10;19606:64;;;;-1:-1:-1;;;19606:64:0;;19004:2:1;19606:64:0;;;18986:21:1;19043:2;19023:18;;;19016:30;19082:34;19062:18;;;19055:62;-1:-1:-1;;;19133:18:1;;;19126:39;19182:19;;19606:64:0;18802:405:1;19606:64:0;-1:-1:-1;;;;;19690:13:0;;;;;;:9;:13;;;;;;;;19689:14;19681:37;;;;-1:-1:-1;;;19681:37:0;;19414:2:1;19681:37:0;;;19396:21:1;19453:2;19433:18;;;19426:30;-1:-1:-1;;;19472:18:1;;;19465:40;19522:18;;19681:37:0;19212:334:1;19681:37:0;-1:-1:-1;;;;;19738:15:0;;;;;;:9;:15;;;;;;;;19737:16;19729:39;;;;-1:-1:-1;;;19729:39:0;;19414:2:1;19729:39:0;;;19396:21:1;19453:2;19433:18;;;19426:30;-1:-1:-1;;;19472:18:1;;;19465:40;19522:18;;19729:39:0;19212:334:1;19729:39:0;5839:7;5866:6;-1:-1:-1;;;;;19783:14:0;;;5866:6;;19783:14;;;;:30;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;19801:12:0;;;5866:6;;19801:12;;19783:30;19779:84;;;19823:11;;;;;;;19815:48;;;;-1:-1:-1;;;19815:48:0;;19753:2:1;19815:48:0;;;19735:21:1;19792:2;19772:18;;;19765:30;19831:26;19811:18;;;19804:54;19875:18;;19815:48:0;19551:348:1;19815:48:0;19996:13;;19924:12;;-1:-1:-1;;;;;19990:19:0;;;19996:13;;19990:19;;:40;;-1:-1:-1;20017:13:0;;-1:-1:-1;;;;;20013:17:0;;;20017:13;;20013:17;19990:40;19989:99;;;;-1:-1:-1;;;;;;20037:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20065:22:0;;;;;;:18;:22;;;;;;;;20037:50;20035:53;19989:99;19984:148;;;-1:-1:-1;20116:4:0;19984:148;20158:1;20147:10;;:12;:59;;;;-1:-1:-1;;;;;;20165:22:0;;;;;;:18;:22;;;;;;;;20164:23;:41;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;20191:14:0;;;5866:6;;20191:14;;20164:41;20147:105;;;;;20239:12;20225:10;;20212;;:23;;;;:::i;:::-;20211:40;20147:105;20144:246;;;20303:15;;20288:13;20298:2;20288:9;:13::i;:::-;20280:21;;:6;:21;:::i;:::-;:38;;20272:106;;;;-1:-1:-1;;;20272:106:0;;20106:2:1;20272:106:0;;;20088:21:1;20145:2;20125:18;;;20118:30;20184:34;20164:18;;;20157:62;-1:-1:-1;;;20235:18:1;;;20228:32;20277:19;;20272:106:0;19904:398:1;20272:106:0;20419:8;;20403:15;:24;20452:17;;20438:13;:31;20485:11;;;;;;;:34;;;;-1:-1:-1;20506:13:0;;-1:-1:-1;;;;;20500:19:0;;;20506:13;;20500:19;20485:34;20482:177;;;20582:17;;20560;;:40;;:21;:40::i;:::-;20543:15;:57;20629:18;;20615:13;:32;20482:177;20712:1;20701:10;;:12;:56;;;;;20745:12;20731:10;;20718;;:23;;;;:::i;:::-;20717:40;20701:56;20698:109;;;-1:-1:-1;;;;;20777:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20777:18:0;20791:4;20777:18;;;20698:109;20862:1;20851:10;;:12;:30;;;;-1:-1:-1;5839:7:0;5866:6;-1:-1:-1;;;;;20867:14:0;;;5866:6;;20867:14;;20851:30;:75;;;;;20915:10;;20902;;:23;;;;:::i;:::-;20885:12;:41;;20851:75;:91;;;;-1:-1:-1;20931:11:0;;;;;;;20851:91;20848:154;;;20978:3;20962:15;:19;20848:154;21033:14;;;;;;;21030:144;;;21067:11;;;;;;;:36;;;;-1:-1:-1;21090:13:0;;-1:-1:-1;;;;;21082:21:0;;;21090:13;;21082:21;21067:36;21064:99;;;21145:1;21129:15;:17;21064:99;21207:6;;;;21206:7;:22;;;;-1:-1:-1;21217:11:0;;;;;;;21206:22;:45;;;;-1:-1:-1;21238:13:0;;-1:-1:-1;;;;;21232:19:0;;;21238:13;;21232:19;21206:45;21202:350;;;21276:28;21307:24;21325:4;21307:9;:24::i;:::-;21276:55;;21385:13;;21363:20;:35;21360:169;;-1:-1:-1;21445:13:0;;21481:32;21445:13;21481:10;:32::i;:::-;21253:299;21202:350;21562:38;21577:4;21582:2;21585:6;21592:7;21562:14;:38::i;1502:192::-;1588:7;1624:12;1616:6;;;;1608:29;;;;-1:-1:-1;;;1608:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1648:9:0;1660:5;1664:1;1660;:5;:::i;:::-;1648:17;1502:192;-1:-1:-1;;;;;1502:192:0:o;29056:163::-;29097:7;29118:15;29135;29154:19;:17;:19::i;:::-;29117:56;;-1:-1:-1;29117:56:0;-1:-1:-1;29191:20:0;29117:56;;29191:11;:20::i;:::-;29184:27;;;;29056:163;:::o;28291:419::-;28350:7;28359;28368;28377;28386;28395;28416:23;28441:12;28455:18;28477:20;28489:7;28477:11;:20::i;:::-;28415:82;;;;;;28509:15;28526:23;28551:12;28567:50;28579:7;28588:4;28594:10;28606;:8;:10::i;:::-;28567:11;:50::i;:::-;28508:109;;;;-1:-1:-1;28508:109:0;;-1:-1:-1;28668:15:0;;-1:-1:-1;28685:4:0;;-1:-1:-1;28691:10:0;;-1:-1:-1;28291:419:0;;-1:-1:-1;;;;;28291:419:0:o;1358:136::-;1416:7;1443:43;1447:1;1450;1443:43;;;;;;;;;;;;;;;;;:3;:43::i;2100:278::-;2186:7;2221:12;2214:5;2206:28;;;;-1:-1:-1;;;2206:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2245:9:0;2257:5;2261:1;2257;:5;:::i;25876:1028::-;16613:6;:13;;-1:-1:-1;;16613:13:0;16622:4;16613:13;;;26064:8:::1;::::0;26032:12:::1;::::0;16613:6;;25993:101:::1;::::0;26092:1:::1;::::0;25993:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25967:127:::0;-1:-1:-1;26107:20:0::1;26130:41;:20:::0;25967:127;26130:24:::1;:41::i;:::-;26107:64;;26192:30;26209:12;26192:16;:30::i;:::-;26324:12;::::0;26255:21:::1;::::0;26235:17:::1;::::0;26311:33:::1;::::0;26324:19:::1;::::0;26341:1:::1;26324:16;:19::i;:::-;26311:8;::::0;;:12:::1;:33::i;:::-;26289:55;;26357:26;26386:93;26477:1;26386:72;26446:11;26386:41;26414:12;;26386:9;:27;;:41;;;;:::i;:93::-;26357:122;;26500:26;26529:44;26561:11;26529:27;26543:12;;26529:9;:13;;:27;;;;:::i;:44::-;26500:73:::0;-1:-1:-1;26649:21:0::1;26684:22:::0;;26681:102:::1;;26755:15;::::0;26723:48:::1;::::0;26736:18;;-1:-1:-1;;;;;26755:15:0::1;26723:12;:48::i;:::-;26797:19:::0;;26793:104:::1;;26837:48;26850:15;26866:18;26837:12;:48::i;:::-;-1:-1:-1::0;;16649:6:0;:14;;-1:-1:-1;;16649:14:0;;;-1:-1:-1;;;;;;25876:1028:0:o;21616:943::-;21756:13;;21806:15;;21836:7;21832:88;;21875:1;21859:13;:17;;;21891:15;:17;21832:88;-1:-1:-1;;;;;21944:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21968:22:0;;;;;;:11;:22;;;;;;;;21967:23;21944:46;21940:467;;;22007:48;22029:6;22037:9;22048:6;22007:21;:48::i;:::-;21940:467;;;-1:-1:-1;;;;;22078:19:0;;;;;;:11;:19;;;;;;;;22077:20;:46;;;;-1:-1:-1;;;;;;22101:22:0;;;;;;:11;:22;;;;;;;;22077:46;22073:334;;;22140:46;22160:6;22168:9;22179:6;22140:19;:46::i;22073:334::-;-1:-1:-1;;;;;22208:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22231:22:0;;;;;;:11;:22;;;;;;;;22208:45;22204:203;;;22270:48;22292:6;22300:9;22311:6;22270:21;:48::i;22204:203::-;22351:44;22369:6;22377:9;22388:6;22351:17;:44::i;:::-;22431:7;22427:125;;22454:13;:38;;;;22507:15;:33;-1:-1:-1;;;;21616:943:0:o;29227:561::-;29324:7;;29360;;29277;;;;;29384:289;29408:9;:16;29404:20;;29384:289;;;29474:7;29450;:21;29458:9;29468:1;29458:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29458:12:0;29450:21;;;;;;;;;;;;;:31;;:66;;;29509:7;29485;:21;29493:9;29503:1;29493:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29493:12:0;29485:21;;;;;;;;;;;;;:31;29450:66;29446:97;;;29526:7;;29535;;29518:25;;;;;;;29227:561;;:::o;29446:97::-;29568:34;29580:7;:21;29588:9;29598:1;29588:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29588:12:0;29580:21;;;;;;;;;;;;;29568:7;;:11;:34::i;:::-;29558:44;;29627:34;29639:7;:21;29647:9;29657:1;29647:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29647:12:0;29639:21;;;;;;;;;;;;;29627:7;;:11;:34::i;:::-;29617:44;-1:-1:-1;29426:3:0;;;;:::i;:::-;;;;29384:289;;;-1:-1:-1;29709:7:0;;29697;;:20;;:11;:20::i;:::-;29687:7;:30;29683:61;;;29727:7;;29736;;29719:25;;;;;;29227:561;;:::o;29683:61::-;29763:7;;29772;;-1:-1:-1;29227:561:0;-1:-1:-1;29227:561:0:o;28718:330::-;28778:7;28787;28796;28816:12;28831:24;28847:7;28831:15;:24::i;:::-;28816:39;;28866:18;28887:30;28909:7;28887:21;:30::i;:::-;28866:51;-1:-1:-1;28928:23:0;28954:33;28866:51;28954:17;:7;28966:4;28954:11;:17::i;:::-;:21;;:33::i;:::-;28928:59;29023:4;;-1:-1:-1;29029:10:0;;-1:-1:-1;28718:330:0;;-1:-1:-1;;;28718:330:0:o;25050:429::-;25165:7;;;;25221:24;:7;25233:11;25221;:24::i;:::-;25203:42;-1:-1:-1;25256:12:0;25271:21;:4;25280:11;25271:8;:21::i;:::-;25256:36;-1:-1:-1;25303:18:0;25324:27;:10;25339:11;25324:14;:27::i;:::-;25303:48;-1:-1:-1;25362:23:0;25388:33;25303:48;25388:17;:7;25400:4;25388:11;:17::i;:33::-;25440:7;;;;-1:-1:-1;25466:4:0;;-1:-1:-1;25050:429:0;;-1:-1:-1;;;;;;;25050:429:0:o;27038:666::-;27188:16;;;27202:1;27188:16;;;;;;;;27164:21;;27188:16;;;;;;;;;;-1:-1:-1;27188:16:0;27164:40;;27233:4;27215;27220:1;27215:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27215:23:0;;;:7;;;;;;;;;;:23;;;;27259:15;;:22;;;-1:-1:-1;;;27259:22:0;;;;:15;;;;;:20;;:22;;;;;27215:7;;27259:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27249:4;27254:1;27249:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27249:32:0;;;:7;;;;;;;;;:32;27326:15;;27294:62;;27311:4;;27326:15;27344:11;27294:8;:62::i;:::-;27395:15;;:240;;-1:-1:-1;;;27395:240:0;;-1:-1:-1;;;;;27395:15:0;;;;:66;;:240;;27476:11;;27395:15;;27546:4;;27573;;27609:15;;27395:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27661:35;27678:11;27691:4;27661:35;;;;;;;:::i;:::-;;;;;;;;27093:611;27038:666;:::o;26916:111::-;26996:23;;-1:-1:-1;;;;;26996:15:0;;;:23;;;;;27012:6;;26996:23;;;;27012:6;26996:15;:23;;;;;;;;;;;;;;;;;;;27712:513;27892:15;;27860:62;;27877:4;;-1:-1:-1;;;;;27892:15:0;27910:11;27860:8;:62::i;:::-;27965:15;;-1:-1:-1;;;;;27965:15:0;:31;28004:9;28037:4;28057:11;27965:15;;28169:7;5839;5866:6;-1:-1:-1;;;;;5866:6:0;;5801:79;28169:7;27965:252;;;;;;-1:-1:-1;;;;;;27965:252:0;;;-1:-1:-1;;;;;22188:15:1;;;27965:252:0;;;22170:34:1;22220:18;;;22213:34;;;;22263:18;;;22256:34;;;;22306:18;;;22299:34;22370:15;;;22349:19;;;22342:44;28191:15:0;22402:19:1;;;22395:35;22104:19;;27965:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23671:566::-;23774:15;23791:23;23816:12;23830:23;23855:12;23869:18;23891:19;23902:7;23891:10;:19::i;:::-;-1:-1:-1;;;;;23939:15:0;;;;;;:7;:15;;;;;;23773:137;;-1:-1:-1;23773:137:0;;-1:-1:-1;23773:137:0;;-1:-1:-1;23773:137:0;-1:-1:-1;23773:137:0;-1:-1:-1;23773:137:0;-1:-1:-1;23939:28:0;;23959:7;23939:19;:28::i;:::-;-1:-1:-1;;;;;23921:15:0;;;;;;:7;:15;;;;;;;;:46;;;;23996:7;:15;;;;:28;;24016:7;23996:19;:28::i;:::-;-1:-1:-1;;;;;23978:15:0;;;;;;;:7;:15;;;;;;:46;;;;24056:18;;;;;;;:39;;24079:15;24056:22;:39::i;:::-;-1:-1:-1;;;;;24035:18:0;;;;;;:7;:18;;;;;:60;24109:26;24124:10;24109:14;:26::i;:::-;24146:23;24158:4;24164;24146:11;:23::i;:::-;24202:9;-1:-1:-1;;;;;24185:44:0;24194:6;-1:-1:-1;;;;;24185:44:0;;24213:15;24185:44;;;;160:25:1;;148:2;133:18;;14:177;24185:44:0;;;;;;;;23762:475;;;;;;23671:566;;;:::o;23077:586::-;23178:15;23195:23;23220:12;23234:23;23259:12;23273:18;23295:19;23306:7;23295:10;:19::i;:::-;-1:-1:-1;;;;;23343:15:0;;;;;;:7;:15;;;;;;23177:137;;-1:-1:-1;23177:137:0;;-1:-1:-1;23177:137:0;;-1:-1:-1;23177:137:0;-1:-1:-1;23177:137:0;-1:-1:-1;23177:137:0;-1:-1:-1;23343:28:0;;23177:137;23343:19;:28::i;:::-;-1:-1:-1;;;;;23325:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23403:18;;;;;:7;:18;;;;;:39;;23426:15;23403:22;:39::i;:::-;-1:-1:-1;;;;;23382:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23474:7;:18;;;;:39;;23497:15;23474:22;:39::i;24245:642::-;24348:15;24365:23;24390:12;24404:23;24429:12;24443:18;24465:19;24476:7;24465:10;:19::i;:::-;-1:-1:-1;;;;;24513:15:0;;;;;;:7;:15;;;;;;24347:137;;-1:-1:-1;24347:137:0;;-1:-1:-1;24347:137:0;;-1:-1:-1;24347:137:0;-1:-1:-1;24347:137:0;-1:-1:-1;24347:137:0;-1:-1:-1;24513:28:0;;24533:7;24513:19;:28::i;:::-;-1:-1:-1;;;;;24495:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24570:7;:15;;;;:28;;24590:7;24570:19;:28::i;22567:502::-;22666:15;22683:23;22708:12;22722:23;22747:12;22761:18;22783:19;22794:7;22783:10;:19::i;:::-;-1:-1:-1;;;;;22831:15:0;;;;;;:7;:15;;;;;;22665:137;;-1:-1:-1;22665:137:0;;-1:-1:-1;22665:137:0;;-1:-1:-1;22665:137:0;-1:-1:-1;22665:137:0;-1:-1:-1;22665:137:0;-1:-1:-1;22831:28:0;;22665:137;22831:19;:28::i;29800:160::-;29864:7;29891:61;29936:5;29891:26;29903:13;;29891:7;:11;;:26;;;;:::i;29972:168::-;30042:7;30069:63;30116:5;30069:28;30081:15;;30069:7;:11;;:28;;;;:::i;25491:355::-;25554:19;25577:10;:8;:10::i;:::-;25554:33;-1:-1:-1;25598:18:0;25619:27;:10;25554:33;25619:14;:27::i;:::-;25698:4;25682:22;;;;:7;:22;;;;;;25598:48;;-1:-1:-1;25682:38:0;;25598:48;25682:26;:38::i;:::-;25673:4;25657:22;;;;:7;:22;;;;;;;;:63;;;;25734:11;:26;;;;;;25731:107;;;25816:4;25800:22;;;;:7;:22;;;;;;:38;;25827:10;25800:26;:38::i;:::-;25791:4;25775:22;;;;:7;:22;;;;;:63;25543:303;;25491:355;:::o;24895:147::-;24973:7;;:17;;24985:4;24973:11;:17::i;:::-;24963:7;:27;25014:10;;:20;;25029:4;25014:14;:20::i;:::-;25001:10;:33;-1:-1:-1;;24895:147:0:o;196:597: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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:247::-;1505:6;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1613:9;1600:23;1632:31;1657:5;1632:31;:::i;1933:118::-;2019:5;2012:13;2005:21;1998:5;1995:32;1985:60;;2041:1;2038;2031:12;2056:241;2112:6;2165:2;2153:9;2144:7;2140:23;2136:32;2133:52;;;2181:1;2178;2171:12;2133:52;2220:9;2207:23;2239:28;2261:5;2239:28;:::i;2302:367::-;2365:8;2375:6;2429:3;2422:4;2414:6;2410:17;2406:27;2396:55;;2447:1;2444;2437:12;2396:55;-1:-1:-1;2470:20:1;;2513:18;2502:30;;2499:50;;;2545:1;2542;2535:12;2499:50;2582:4;2574:6;2570:17;2558:29;;2642:3;2635:4;2625:6;2622:1;2618:14;2610:6;2606:27;2602:38;2599:47;2596:67;;;2659:1;2656;2649:12;2596:67;2302:367;;;;;:::o;2674:773::-;2796:6;2804;2812;2820;2873:2;2861:9;2852:7;2848:23;2844:32;2841:52;;;2889:1;2886;2879:12;2841:52;2929:9;2916:23;2958:18;2999:2;2991:6;2988:14;2985:34;;;3015:1;3012;3005:12;2985:34;3054:70;3116:7;3107:6;3096:9;3092:22;3054:70;:::i;:::-;3143:8;;-1:-1:-1;3028:96:1;-1:-1:-1;3231:2:1;3216:18;;3203:32;;-1:-1:-1;3247:16:1;;;3244:36;;;3276:1;3273;3266:12;3244:36;;3315:72;3379:7;3368:8;3357:9;3353:24;3315:72;:::i;:::-;2674:773;;;;-1:-1:-1;3406:8:1;-1:-1:-1;;;;2674:773:1:o;3452:456::-;3529:6;3537;3545;3598:2;3586:9;3577:7;3573:23;3569:32;3566:52;;;3614:1;3611;3604:12;3566:52;3653:9;3640:23;3672:31;3697:5;3672:31;:::i;:::-;3722:5;-1:-1:-1;3779:2:1;3764:18;;3751:32;3792:33;3751:32;3792:33;:::i;:::-;3452:456;;3844:7;;-1:-1:-1;;;3898:2:1;3883:18;;;;3870:32;;3452:456::o;3913:401::-;3994:6;4002;4055:2;4043:9;4034:7;4030:23;4026:32;4023:52;;;4071:1;4068;4061:12;4023:52;4110:9;4097:23;4129:31;4154:5;4129:31;:::i;:::-;4179:5;-1:-1:-1;4236:2:1;4221:18;;4208:32;4249:33;4208:32;4249:33;:::i;:::-;4301:7;4291:17;;;3913:401;;;;;:::o;4319:309::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:52;;;4461:1;4458;4451:12;4413:52;4500:9;4487:23;4519:28;4541:5;4519:28;:::i;4633:180::-;4692:6;4745:2;4733:9;4724:7;4720:23;4716:32;4713:52;;;4761:1;4758;4751:12;4713:52;-1:-1:-1;4784:23:1;;4633:180;-1:-1:-1;4633:180:1:o;5007:316::-;5084:6;5092;5100;5153:2;5141:9;5132:7;5128:23;5124:32;5121:52;;;5169:1;5166;5159:12;5121:52;-1:-1:-1;;5192:23:1;;;5262:2;5247:18;;5234:32;;-1:-1:-1;5313:2:1;5298:18;;;5285:32;;5007:316;-1:-1:-1;5007:316:1:o;5328:309::-;5393:6;5401;5454:2;5442:9;5433:7;5429:23;5425:32;5422:52;;;5470:1;5467;5460:12;5422:52;5506:9;5493:23;5483:33;;5566:2;5555:9;5551:18;5538:32;5579:28;5601:5;5579:28;:::i;5850:566::-;5942:6;5950;5958;6011:2;5999:9;5990:7;5986:23;5982:32;5979:52;;;6027:1;6024;6017:12;5979:52;6067:9;6054:23;6100:18;6092:6;6089:30;6086:50;;;6132:1;6129;6122:12;6086:50;6171:70;6233:7;6224:6;6213:9;6209:22;6171:70;:::i;:::-;6260:8;;-1:-1:-1;6145:96:1;-1:-1:-1;;6345:2:1;6330:18;;6317:32;6358:28;6317:32;6358:28;:::i;:::-;6405:5;6395:15;;;5850:566;;;;;:::o;6421:505::-;6516:6;6524;6532;6585:2;6573:9;6564:7;6560:23;6556:32;6553:52;;;6601:1;6598;6591:12;6553:52;6641:9;6628:23;6674:18;6666:6;6663:30;6660:50;;;6706:1;6703;6696:12;6660:50;6745:70;6807:7;6798:6;6787:9;6783:22;6745:70;:::i;:::-;6834:8;;6719:96;;-1:-1:-1;6916:2:1;6901:18;;;;6888:32;;6421:505;-1:-1:-1;;;;6421:505:1:o;6931:437::-;7017:6;7025;7078:2;7066:9;7057:7;7053:23;7049:32;7046:52;;;7094:1;7091;7084:12;7046:52;7134:9;7121:23;7167:18;7159:6;7156:30;7153:50;;;7199:1;7196;7189:12;7153:50;7238:70;7300:7;7291:6;7280:9;7276:22;7238:70;:::i;:::-;7327:8;;7212:96;;-1:-1:-1;6931:437:1;-1:-1:-1;;;;6931:437:1:o;7633:248::-;7701:6;7709;7762:2;7750:9;7741:7;7737:23;7733:32;7730:52;;;7778:1;7775;7768:12;7730:52;-1:-1:-1;;7801:23:1;;;7871:2;7856:18;;;7843:32;;-1:-1:-1;7633:248:1:o;8279:380::-;8358:1;8354:12;;;;8401;;;8422:61;;8476:4;8468:6;8464:17;8454:27;;8422:61;8529:2;8521:6;8518:14;8498:18;8495:38;8492:161;;;8575:10;8570:3;8566:20;8563:1;8556:31;8610:4;8607:1;8600:15;8638:4;8635:1;8628:15;8492:161;;8279:380;;;:::o;8664:356::-;8866:2;8848:21;;;8885:18;;;8878:30;8944:34;8939:2;8924:18;;8917:62;9011:2;8996:18;;8664:356::o;9848:127::-;9909:10;9904:3;9900:20;9897:1;9890:31;9940:4;9937:1;9930:15;9964:4;9961:1;9954:15;9980:422;10069:1;10112:5;10069:1;10126:270;10147:7;10137:8;10134:21;10126:270;;;10206:4;10202:1;10198:6;10194:17;10188:4;10185:27;10182:53;;;10215:18;;:::i;:::-;10265:7;10255:8;10251:22;10248:55;;;10285:16;;;;10248:55;10364:22;;;;10324:15;;;;10126:270;;;10130:3;9980:422;;;;;:::o;10407:806::-;10456:5;10486:8;10476:80;;-1:-1:-1;10527:1:1;10541:5;;10476:80;10575:4;10565:76;;-1:-1:-1;10612:1:1;10626:5;;10565:76;10657:4;10675:1;10670:59;;;;10743:1;10738:130;;;;10650:218;;10670:59;10700:1;10691:10;;10714:5;;;10738:130;10775:3;10765:8;10762:17;10759:43;;;10782:18;;:::i;:::-;-1:-1:-1;;10838:1:1;10824:16;;10853:5;;10650:218;;10952:2;10942:8;10939:16;10933:3;10927:4;10924:13;10920:36;10914:2;10904:8;10901:16;10896:2;10890:4;10887:12;10883:35;10880:77;10877:159;;;-1:-1:-1;10989:19:1;;;11021:5;;10877:159;11068:34;11093:8;11087:4;11068:34;:::i;:::-;11138:6;11134:1;11130:6;11126:19;11117:7;11114:32;11111:58;;;11149:18;;:::i;:::-;11187:20;;10407:806;-1:-1:-1;;;10407:806:1:o;11218:140::-;11276:5;11305:47;11346:4;11336:8;11332:19;11326:4;11305:47;:::i;11363:127::-;11424:10;11419:3;11415:20;11412:1;11405:31;11455:4;11452:1;11445:15;11479:4;11476:1;11469:15;11495:168;11535:7;11601:1;11597;11593:6;11589:14;11586:1;11583:21;11578:1;11571:9;11564:17;11560:45;11557:71;;;11608:18;;:::i;:::-;-1:-1:-1;11648:9:1;;11495:168::o;11668:128::-;11708:3;11739:1;11735:6;11732:1;11729:13;11726:39;;;11745:18;;:::i;:::-;-1:-1:-1;11781:9:1;;11668:128::o;11801:135::-;11840:3;-1:-1:-1;;11861:17:1;;11858:43;;;11881:18;;:::i;:::-;-1:-1:-1;11928:1:1;11917:13;;11801:135::o;12297:184::-;12367:6;12420:2;12408:9;12399:7;12395:23;12391:32;12388:52;;;12436:1;12433;12426:12;12388:52;-1:-1:-1;12459:16:1;;12297:184;-1:-1:-1;12297:184:1:o;12765:245::-;12832:6;12885:2;12873:9;12864:7;12860:23;12856:32;12853:52;;;12901:1;12898;12891:12;12853:52;12933:9;12927:16;12952:28;12974:5;12952:28;:::i;14614:217::-;14654:1;14680;14670:132;;14724:10;14719:3;14715:20;14712:1;14705:31;14759:4;14756:1;14749:15;14787:4;14784:1;14777:15;14670:132;-1:-1:-1;14816:9:1;;14614:217::o;15192:125::-;15232:4;15260:1;15257;15254:8;15251:34;;;15265:18;;:::i;:::-;-1:-1:-1;15302:9:1;;15192:125::o;15322:127::-;15383:10;15378:3;15374:20;15371:1;15364:31;15414:4;15411:1;15404:15;15438:4;15435:1;15428:15;15454:251;15524:6;15577:2;15565:9;15556:7;15552:23;15548:32;15545:52;;;15593:1;15590;15583:12;15545:52;15625:9;15619:16;15644:31;15669:5;15644:31;:::i;20439:461::-;20492:3;20530:5;20524:12;20557:6;20552:3;20545:19;20583:4;20612:2;20607:3;20603:12;20596:19;;20649:2;20642:5;20638:14;20670:1;20680:195;20694:6;20691:1;20688:13;20680:195;;;20759:13;;-1:-1:-1;;;;;20755:39:1;20743:52;;20815:12;;;;20850:15;;;;20791:1;20709:9;20680:195;;;-1:-1:-1;20891:3:1;;20439:461;-1:-1:-1;;;;;20439:461:1:o;20905:582::-;21204:6;21193:9;21186:25;21247:6;21242:2;21231:9;21227:18;21220:34;21290:3;21285:2;21274:9;21270:18;21263:31;21167:4;21311:57;21363:3;21352:9;21348:19;21340:6;21311:57;:::i;:::-;-1:-1:-1;;;;;21404:32:1;;;;21399:2;21384:18;;21377:60;-1:-1:-1;21468:3:1;21453:19;21446:35;21303:65;20905:582;-1:-1:-1;;;20905:582:1:o;21492:332::-;21699:6;21688:9;21681:25;21742:2;21737;21726:9;21722:18;21715:30;21662:4;21762:56;21814:2;21803:9;21799:18;21791:6;21762:56;:::i;:::-;21754:64;21492:332;-1:-1:-1;;;;21492:332:1:o;22441:306::-;22529:6;22537;22545;22598:2;22586:9;22577:7;22573:23;22569:32;22566:52;;;22614:1;22611;22604:12;22566:52;22643:9;22637:16;22627:26;;22693:2;22682:9;22678:18;22672:25;22662:35;;22737:2;22726:9;22722:18;22716:25;22706:35;;22441:306;;;;;:::o

Swarm Source

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