ETH Price: $3,307.00 (+2.06%)
Gas: 4 Gwei

Token

BagelBank ($BAGEL)
 

Overview

Max Total Supply

500,000,000,000,000,000 $BAGEL

Holders

239 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,818,227,017,549.173465946 $BAGEL

Value
$0.00
0x68fcf2f38c7bbedba64611ca7b05ffaa42ed58ae
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

$BAGEL is a deflationary token designed to become more scarce over time. Watch your amount of $BAGEL grow in real time as all $BAGEL holders will be automatically rewarded a 5% fee from every on chain transaction that happens on the BagelBank ecosystem.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-25
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
    
library SafeMath {
  
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

   
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

library Address {
  
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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

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

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

}

contract Token is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address constant dead = 0x000000000000000000000000000000000000dEaD;
    address constant zero = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping(address => bool) public isExcludedFromMaxTxn;
    mapping(address => bool) public isExcludedFromMaxHoldLimit;
    
    mapping (address => bool) public AutomaticMarketPair;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    string public constant _name ="BagelBank";
    string public constant _symbol = "$BAGEL";
    uint8 private constant _decimals = 9;

    uint256 public _tTotal = 500_000_000_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public numTokensSellToAddToLiquidity = _tTotal.mul(5).div(1e4); //0.05% 
    bool public swapByLimit = false;

    uint256 public maxbageltransaction = _tTotal.mul(5).div(1000);      // 0.5% for max transaction
    uint256 public maxbagelbalance = _tTotal.mul(10).div(1000);         // 1% for max bag

    uint256 private _taxFee = 0;                           
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _LiquidityFee = 0;
    uint256 private _previousLiquidityFee = _LiquidityFee;    

    uint256 private _DevFee = 0;
    uint256 private _previousDevFee = _DevFee;

    address public liquidityReciever;
    address public developmentWallet = address(0xd3048Db210D398A9be9810162F75E8423DFB20B3);

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setDevFee;     
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setDevFee;     
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    IUniswapV2Router public pcsV2Router;
    address public pcsV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;    
    bool public iswalletLimit = true;
    bool public isTxLimit = true;
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor ()  {       
        
        _rOwned[msg.sender] = _rTotal;

        liquidityReciever = msg.sender;

        buyFee.setTaxFee = 20;
        buyFee.setLiquidityFee = 20;
        buyFee.setDevFee = 5;
        
        sellFee.setTaxFee = 20;
        sellFee.setLiquidityFee = 20;
        sellFee.setDevFee = 5;
                
        IUniswapV2Router _pcsV2Router = IUniswapV2Router(router);
            
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        pcsV2Router = _pcsV2Router;

        _allowances[address(this)][address(pcsV2Router)] = MAX;

        AutomaticMarketPair[pcsV2Pair] = true;

        //exclude owner and this contract from fee
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(_pcsV2Router)] = true;
        _isExcludedFromFee[address(dead)] = true;

        //exclude owner and this contract from txn limit
        isExcludedFromMaxTxn[msg.sender] = true;
        isExcludedFromMaxTxn[address(this)] = true;
        isExcludedFromMaxTxn[address(_pcsV2Router)] = true;

        // exclude addresses from max tx
        isExcludedFromMaxHoldLimit[msg.sender] = true;
        isExcludedFromMaxHoldLimit[address(this)] = true;
        isExcludedFromMaxHoldLimit[address(_pcsV2Router)] = true;
        isExcludedFromMaxHoldLimit[pcsV2Pair] = true;

        emit Transfer(address(0), msg.sender, _tTotal);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

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

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

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

    //to recieve ETH from pcsV2Router when swaping
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);

    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**3
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_LiquidityFee + _DevFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _LiquidityFee == 0 && _DevFee == 0) return; 
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _LiquidityFee;
        _previousDevFee = _DevFee;
        
        _taxFee = 0;
        _LiquidityFee = 0;
        _DevFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _LiquidityFee = _previousLiquidityFee;
        _DevFee = _previousDevFee;
    }

    function setBuy() private {
        _taxFee = buyFee.setTaxFee;
        _LiquidityFee = buyFee.setLiquidityFee;
        _DevFee = buyFee.setDevFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _LiquidityFee = sellFee.setLiquidityFee;
        _DevFee = sellFee.setDevFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _checkMaxWalletAmount(address to, uint256 amount) private view {
        if (  !isExcludedFromMaxHoldLimit[to] && iswalletLimit) {
            require(
                balanceOf(to).add(amount) <= maxbagelbalance,
                "ERC20: amount exceed max holding limit"
            );
        }
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!isExcludedFromMaxTxn[from] && !isExcludedFromMaxTxn[to] && isTxLimit ) {
            require(amount <= maxbageltransaction, "ERC20: max txn limit exceeds");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            overMinTokenBalance &&
            AutomaticMarketPair[to] &&
            swapAndLiquifyEnabled
        ) {
            
            swapAndUpdate(contractTokenBalance);
            
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndUpdate(uint _contractBalance) private lockTheSwap {

        if(_contractBalance == 0) return;
        if(swapByLimit) _contractBalance = numTokensSellToAddToLiquidity;
        uint liquidityShare = buyFee.setLiquidityFee.add(sellFee.setLiquidityFee);
        uint DevShare = buyFee.setDevFee.add(sellFee.setDevFee);
        uint totalShares = liquidityShare.add(DevShare);
        if(totalShares == 0) return;
        uint tokensForLP = _contractBalance.mul(liquidityShare).div(totalShares).div(2);
        uint tokensForSwap = _contractBalance.sub(tokensForLP);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokensForSwap);
        uint256 totalETHFee = totalShares.sub(liquidityShare.div(2));
        uint256 amountReceived = address(this).balance.sub(initialBalance);
        uint256 amountETHLiquidity = amountReceived.mul(liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHDev = amountReceived.sub(amountETHLiquidity);
        if(amountETHDev > 0) payable(developmentWallet).transfer(amountETHDev);
        if(amountETHLiquidity > 0 && tokensForLP > 0) addLiquidity(tokensForLP, amountETHLiquidity);
    }


    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] = pcsV2Router.WETH();

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

        // make the swap
        pcsV2Router.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(pcsV2Router), tokenAmount);

        // add the liquidity
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityReciever,
            block.timestamp
        );
    }
   
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
            removeAllFee();

            if (takeFee){
                if (AutomaticMarketPair[sender]) {
                    setBuy();
                }
                if (AutomaticMarketPair[recipient]) {
                    setSell();
                }
            } 
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _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);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _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);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _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);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _tokenTransferNoFee(address sender, address recipient, uint256 amount) private {
        uint256 currentRate =  _getRate();  
        uint256 rAmount = amount.mul(currentRate);   

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

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded from reward");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "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 excludeFromFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

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

    function setSwapByLimit(bool _enabled) external onlyOwner {
        swapByLimit = _enabled;
    }

    function setLiquidityWallet(address newWallet) external onlyOwner {
        liquidityReciever = newWallet;
    }

    function setDevWallet(address newWallet) external onlyOwner {
        developmentWallet = newWallet;
    }
    
    function setMaxWalletEnabled(bool _enabled) external onlyOwner {
        iswalletLimit = _enabled;
    }

    function setMaxTxEnabled(bool _enabled) external onlyOwner {
        isTxLimit = _enabled;
    }

    function setMaxBagelLimit(uint _value) external onlyOwner {
        maxbagelbalance = _value;
    }

    function setMaxTxLimit(uint _value) external onlyOwner {
        maxbageltransaction = _value;
    }

    function excludeFromMaxTransaction(address _user,bool _status) external onlyOwner {
        isExcludedFromMaxTxn[_user] = _status;
    }

    function excludeFromMaxBag(address _user,bool _status) external onlyOwner {
        isExcludedFromMaxHoldLimit[_user] = _status;
    }

    function setNumTokensSellToAddToLiquidity(uint _value) public onlyOwner {
        numTokensSellToAddToLiquidity = _value;
    }

    function setBuyFee(uint _newtax, uint _newLiquidity, uint _newDev) public onlyOwner {
        buyFee.setTaxFee = _newtax;
        buyFee.setLiquidityFee = _newLiquidity;
        buyFee.setDevFee = _newDev;
    }

    function setSellFee(uint _newtax, uint _newLiquidity, uint _newDev) public onlyOwner {      
        sellFee.setTaxFee = _newtax;
        sellFee.setLiquidityFee = _newLiquidity;
        sellFee.setDevFee = _newDev;
    }

    function addNewRouterAddress(address newAddress) public onlyOwner {
        IUniswapV2Router _pcsV2Router = IUniswapV2Router(newAddress);
            // Create a uniswap pair for this new token
        address _np = IUniswapV2Factory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());
        _allowances[address(this)][address(_pcsV2Router)] = MAX;
        AutomaticMarketPair[_np] = true;    
    }

    function setRouterAddress(address newAddress) public onlyOwner {
        IUniswapV2Router _pcsV2Router = IUniswapV2Router(newAddress);
        pcsV2Router = _pcsV2Router;
        _allowances[address(this)][address(pcsV2Router)] = MAX;
    }

    function setMarketPair(address _pair, bool _status) public onlyOwner {
        AutomaticMarketPair[_pair] = _status;
    }

    function recoverFunds() public onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function recoverBEP20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }

}

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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"","type":"address"}],"name":"AutomaticMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addNewRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setDevFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxBag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxHoldLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iswalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxbagelbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxbageltransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverBEP20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setDevFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newDev","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBagelLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxTxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtax","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newDev","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapByLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapByLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1781556200003890600990620006ec565b6200004c906706f05b59d3b20000620006fd565b600c8190556200005f906000196200072d565b6200006d9060001962000744565b600d55620000a8612710620000946005600c54620004bc60201b62001bf81790919060201c565b6200055360201b62001c7a1790919060201c565b600e55600f805460ff19169055600c54620000da906103e89062000094906005620004bc602090811b62001bf817901c565b601055620001016103e862000094600a600c54620004bc60201b62001bf81790919060201c565b601155600060128190556013819055601481905560158190556016819055601755601980546001600160a01b03191673d3048db210d398a9be9810162f75e8423dfb20b3179055602180546201010160a81b62ffffff60a81b199091161790553480156200016e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360008181526001602090815260409182902093909355601880546001600160a01b0319169092179091556014601a819055601b8190556005601c819055601d829055601e91909155601f55600a54815163c45a015560e01b815291516001600160a01b0390911692839263c45a015592600480830193928290030181865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b91906200075a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df91906200075a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035391906200075a565b602180546001600160a01b039283166001600160a01b0319918216178255602080548585169216821781553060008181526003835260408082208583528452808220600019905585548716825260068452808220805460ff19908116600190811790925533808552600787528385208054831684179055858552838520805483168417905587855283852080548316841790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548316841790558085526004875283852080548316841790558585528385208054831684179055878552838520805483168417905580855260058752838520805483168417905594845282842080548216831790559583528183208054871682179055955490961681528581208054909416909417909255600c54935193845290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620007ec565b600082600003620004d0575060006200054d565b6000620004de8385620006fd565b905082620004ed858362000785565b146200054a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200054a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200059d60201b60201c565b60008183620005c15760405162461bcd60e51b81526004016200054191906200079c565b506000620005d0848662000785565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000630578160001904821115620006145762000614620005d9565b808516156200062257918102915b93841c9390800290620005f4565b509250929050565b60008262000649575060016200054d565b8162000658575060006200054d565b81600181146200067157600281146200067c576200069c565b60019150506200054d565b60ff841115620006905762000690620005d9565b50506001821b6200054d565b5060208310610133831016604e8410600b8410161715620006c1575081810a6200054d565b620006cd8383620005ef565b8060001904821115620006e457620006e4620005d9565b029392505050565b60006200054a60ff84168362000638565b80820281158282048414176200054d576200054d620005d9565b634e487b7160e01b600052601260045260246000fd5b6000826200073f576200073f62000717565b500690565b818103818111156200054d576200054d620005d9565b6000602082840312156200076d57600080fd5b81516001600160a01b03811681146200054a57600080fd5b60008262000797576200079762000717565b500490565b600060208083528351808285015260005b81811015620007cb57858101830151858201604001528201620007ad565b506000604082860101526040601f19601f8301168501019250505092915050565b61327680620007fc6000396000f3fe6080604052600436106103b05760003560e01c806370a08231116101e7578063c16dd4a41161010d578063ea2f0b37116100a0578063f2fde38b1161006f578063f2fde38b14610bc4578063f387f3a014610be4578063f887ea4014610c14578063fa0b2da114610c3457600080fd5b8063ea2f0b3714610b4e578063ed8d109714610b6e578063efa0880614610b84578063f0f165af14610ba457600080fd5b8063d28d8852116100dc578063d28d885214610a92578063dd62ed3e14610ac7578063e11c3e8314610b0d578063e43888a314610b2e57600080fd5b8063c16dd4a414610a1c578063c49b9a8014610a3c578063c875278414610a5c578063d12a768814610a7c57600080fd5b806399b102b511610185578063af465a2711610154578063af465a271461099f578063b09f1266146109b5578063b79550be146109e7578063c04a5414146109fc57600080fd5b806399b102b51461090f578063a457c2d71461093f578063a614ff751461095f578063a9059cbb1461097f57600080fd5b806388f82020116101c157806388f82020146108695780638da5cb5b146108a257806395d89b41146108c057806398e944c8146108ef57600080fd5b806370a0823114610814578063715018a6146108345780637571336a1461084957600080fd5b8063313ce567116102d75780634a74bb021161026a578063541958ff11610239578063541958ff1461079357806355cda0d7146107b3578063585a71ed146107d457806364f5a5bb146107f457600080fd5b80634a74bb02146106f9578063521432901461071a57806352390c021461073a5780635342acb41461075a57600080fd5b806341cb87fc116102a657806341cb87fc1461067a578063437823ec1461069a5780634549b039146106ba57806347062402146106da57600080fd5b8063313ce567146105fe5780633685d4191461061a578063395093511461063a5780633bd5d1731461065a57600080fd5b80631d865c301161034f578063296f0a0c1161031e578063296f0a0c1461054c5780632b14ca561461056c5780632d6abf87146105a65780632d838119146105de57600080fd5b80631d865c30146104cc5780631f53ac02146104ec57806323b872dd1461050c57806325519cf21461052c57600080fd5b8063095ea7b31161038b578063095ea7b31461045657806310808a8f1461047657806313114a9d1461049857806318160ddd146104b757600080fd5b80629cb0e9146103bc5780630634f4381461040157806306fdde031461041b57600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103ec6103d7366004612e27565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040d57600080fd5b50600f546103ec9060ff1681565b34801561042757600080fd5b50604080518082019091526009815268426167656c42616e6b60b81b60208201525b6040516103f89190612e44565b34801561046257600080fd5b506103ec610471366004612e92565b610c4a565b34801561048257600080fd5b50610496610491366004612ecc565b610c61565b005b3480156104a457600080fd5b50600b545b6040519081526020016103f8565b3480156104c357600080fd5b50600c546104a9565b3480156104d857600080fd5b506104966104e7366004612ee9565b610ca7565b3480156104f857600080fd5b50610496610507366004612e27565b610cdf565b34801561051857600080fd5b506103ec610527366004612f15565b610d2b565b34801561053857600080fd5b50610496610547366004612ee9565b610d94565b34801561055857600080fd5b50610496610567366004612e27565b610dcc565b34801561057857600080fd5b50601d54601e54601f5461058b92919083565b604080519384526020840192909252908201526060016103f8565b3480156105b257600080fd5b506020546105c6906001600160a01b031681565b6040516001600160a01b0390911681526020016103f8565b3480156105ea57600080fd5b506104a96105f9366004612f56565b610e18565b34801561060a57600080fd5b50604051600981526020016103f8565b34801561062657600080fd5b50610496610635366004612e27565b610e89565b34801561064657600080fd5b506103ec610655366004612e92565b611032565b34801561066657600080fd5b50610496610675366004612f56565b611068565b34801561068657600080fd5b50610496610695366004612e27565b611152565b3480156106a657600080fd5b506104966106b5366004612e27565b6111b9565b3480156106c657600080fd5b506104a96106d5366004612f6f565b611207565b3480156106e657600080fd5b50601a54601b54601c5461058b92919083565b34801561070557600080fd5b506021546103ec90600160a81b900460ff1681565b34801561072657600080fd5b506021546105c6906001600160a01b031681565b34801561074657600080fd5b50610496610755366004612e27565b611294565b34801561076657600080fd5b506103ec610775366004612e27565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561079f57600080fd5b506104966107ae366004612ecc565b6113f7565b3480156107bf57600080fd5b506021546103ec90600160b81b900460ff1681565b3480156107e057600080fd5b506104966107ef366004612f9f565b61143f565b34801561080057600080fd5b5061049661080f366004612f56565b611494565b34801561082057600080fd5b506104a961082f366004612e27565b6114c3565b34801561084057600080fd5b50610496611522565b34801561085557600080fd5b50610496610864366004612f9f565b611596565b34801561087557600080fd5b506103ec610884366004612e27565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166105c6565b3480156108cc57600080fd5b5060408051808201909152600681526509109051d15360d21b6020820152610449565b3480156108fb57600080fd5b506018546105c6906001600160a01b031681565b34801561091b57600080fd5b506103ec61092a366004612e27565b60046020526000908152604090205460ff1681565b34801561094b57600080fd5b506103ec61095a366004612e92565b6115eb565b34801561096b57600080fd5b5061049661097a366004612ecc565b61163a565b34801561098b57600080fd5b506103ec61099a366004612e92565b611682565b3480156109ab57600080fd5b506104a9600c5481565b3480156109c157600080fd5b506104496040518060400160405280600681526020016509109051d15360d21b81525081565b3480156109f357600080fd5b5061049661168f565b348015610a0857600080fd5b506019546105c6906001600160a01b031681565b348015610a2857600080fd5b50610496610a37366004612f9f565b611711565b348015610a4857600080fd5b50610496610a57366004612ecc565b611766565b348015610a6857600080fd5b50610496610a77366004612e27565b6117e8565b348015610a8857600080fd5b506104a9600e5481565b348015610a9e57600080fd5b5061044960405180604001604052806009815260200168426167656c42616e6b60b81b81525081565b348015610ad357600080fd5b506104a9610ae2366004612fcd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b1957600080fd5b506021546103ec90600160b01b900460ff1681565b348015610b3a57600080fd5b50610496610b49366004612f56565b6119a4565b348015610b5a57600080fd5b50610496610b69366004612e27565b6119d3565b348015610b7a57600080fd5b506104a960105481565b348015610b9057600080fd5b50610496610b9f366004612e92565b611a1e565b348015610bb057600080fd5b50610496610bbf366004612f56565b611adf565b348015610bd057600080fd5b50610496610bdf366004612e27565b611b0e565b348015610bf057600080fd5b506103ec610bff366004612e27565b60066020526000908152604090205460ff1681565b348015610c2057600080fd5b50600a546105c6906001600160a01b031681565b348015610c4057600080fd5b506104a960115481565b6000610c57338484611cbc565b5060015b92915050565b6000546001600160a01b03163314610c945760405162461bcd60e51b8152600401610c8b90612ffb565b60405180910390fd5b600f805460ff1916911515919091179055565b6000546001600160a01b03163314610cd15760405162461bcd60e51b8152600401610c8b90612ffb565b601d92909255601e55601f55565b6000546001600160a01b03163314610d095760405162461bcd60e51b8152600401610c8b90612ffb565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d38848484611dc9565b610d8a8433610d85856040518060600160405280602881526020016131f4602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612061565b611cbc565b5060019392505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610c8b90612ffb565b601a92909255601b55601c55565b6000546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c8b90612ffb565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000600d54821115610e6c5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610c8b565b6000610e7661209b565b9050610e828382611c7a565b9392505050565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03811660009081526008602052604090205460ff16610f0e5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610c8b565b60005b60095481101561102e57816001600160a01b031660098281548110610f3857610f38613030565b6000918252602090912001546001600160a01b03160361101c5760098054610f629060019061305c565b81548110610f7257610f72613030565b600091825260209091200154600980546001600160a01b039092169183908110610f9e57610f9e613030565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600890925220805460ff191690556009805480610ff657610ff661306f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102681613085565b915050610f11565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c57918590610d8590866120be565b3360008181526008602052604090205460ff16156110dd5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c8b565b60006110e88361211d565b505050506001600160a01b0384166000908152600160205260409020549192506111149190508261216c565b6001600160a01b038316600090815260016020526040902055600d5461113a908261216c565b600d55600b5461114a90846120be565b600b55505050565b6000546001600160a01b0316331461117c5760405162461bcd60e51b8152600401610c8b90612ffb565b602080546001600160a01b039092166001600160a01b03199092168217815530600090815260038252604080822093825292909152206000199055565b6000546001600160a01b031633146111e35760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600c5483111561125b5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610c8b565b8161127a57600061126b8461211d565b50939550610c5b945050505050565b60006112858461211d565b50929550610c5b945050505050565b6000546001600160a01b031633146112be5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03811660009081526008602052604090205460ff16156113375760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610c8b565b6001600160a01b03811660009081526001602052604090205415611391576001600160a01b03811660009081526001602052604090205461137790610e18565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610c8b90612ffb565b60218054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146114695760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114be5760405162461bcd60e51b8152600401610c8b90612ffb565b601055565b6001600160a01b03811660009081526008602052604081205460ff161561150057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c5b90610e18565b6000546001600160a01b0316331461154c5760405162461bcd60e51b8152600401610c8b90612ffb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000610c573384610d858560405180606001604052806025815260200161321c602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612061565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610c8b90612ffb565b60218054911515600160b01b0260ff60b01b19909216919091179055565b6000610c57338484611dc9565b6000546001600160a01b031633146116b95760405162461bcd60e51b8152600401610c8b90612ffb565b604051600090339047908381818185875af1925050503d80600081146116fb576040519150601f19603f3d011682016040523d82523d6000602084013e611700565b606091505b505090508061170e57600080fd5b50565b6000546001600160a01b0316331461173b5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610c8b90612ffb565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117dd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118125760405162461bcd60e51b8152600401610c8b90612ffb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b919061309e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec919061309e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061309e565b3060009081526003602090815260408083206001600160a01b03968716845282528083206000199055949092168152600690915291909120805460ff191660011790555050565b6000546001600160a01b031633146119ce5760405162461bcd60e51b8152600401610c8b90612ffb565b601155565b6000546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611a485760405162461bcd60e51b8152600401610c8b90612ffb565b816001600160a01b031663a9059cbb611a696000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada91906130bb565b505050565b6000546001600160a01b03163314611b095760405162461bcd60e51b8152600401610c8b90612ffb565b600e55565b6000546001600160a01b03163314611b385760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b038116611b9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611c0a57506000610c5b565b6000611c1683856130d8565b905082611c2385836130ef565b14610e825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8b565b6000610e8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121ae565b6001600160a01b038316611d125760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610c8b565b6001600160a01b038216611d685760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610c8b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e295760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610c8b565b6001600160a01b038216611e7f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610c8b565b60008111611ee15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8b565b6001600160a01b03831660009081526004602052604090205460ff16158015611f2357506001600160a01b03821660009081526004602052604090205460ff16155b8015611f385750602154600160b81b900460ff165b15611f8f57601054811115611f8f5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a206d61782074786e206c696d69742065786365656473000000006044820152606401610c8b565b6000611f9a306114c3565b600e5460215491925082101590600160a01b900460ff16158015611fbb5750805b8015611fdf57506001600160a01b03841660009081526006602052604090205460ff165b8015611ff45750602154600160a81b900460ff165b1561200257612002826121dc565b6001600160a01b03851660009081526007602052604090205460019060ff168061204457506001600160a01b03851660009081526007602052604090205460ff165b1561204d575060005b61205986868684612346565b505050505050565b600081848411156120855760405162461bcd60e51b8152600401610c8b9190612e44565b506000612092848661305c565b95945050505050565b60008060006120a861253a565b90925090506120b78282611c7a565b9250505090565b6000806120cb8385613111565b905083811015610e825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8b565b60008060008060008060008060006121348a6126bc565b92509250925060008060006121528d868661214d61209b565b6126fe565b919f909e50909c50959a5093985091965092945050505050565b6000610e8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612061565b600081836121cf5760405162461bcd60e51b8152600401610c8b9190612e44565b50600061209284866130ef565b6021805460ff60a01b1916600160a01b179055801561233657600f5460ff16156122055750600e545b601e54601b5460009161221891906120be565b601f54601c5491925060009161222d916120be565b9050600061223b83836120be565b90508060000361224d57505050612336565b6000612266600261226084818989611bf8565b90611c7a565b90506000612274868361216c565b9050476122808261274e565b6000612297612290886002611c7a565b869061216c565b905060006122a5478461216c565b905060006122ba60026122608581868e611bf8565b905060006122c8838361216c565b9050801561230c576019546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561230a573d6000803e3d6000fd5b505b60008211801561231c5750600087115b1561232b5761232b87836128e2565b505050505050505050505b506021805460ff60a01b19169055565b61234e612996565b80156123c4576001600160a01b03841660009081526006602052604090205460ff161561238c5761238c601a54601255601b54601455601c54601655565b6001600160a01b03831660009081526006602052604090205460ff16156123c4576123c4601d54601255601e54601455601f54601655565b6001600160a01b03841660009081526008602052604090205460ff16801561240557506001600160a01b03831660009081526008602052604090205460ff16155b1561241a576124158484846129db565b612518565b6001600160a01b03841660009081526008602052604090205460ff1615801561245b57506001600160a01b03831660009081526008602052604090205460ff165b1561246b57612415848484612b08565b6001600160a01b03841660009081526008602052604090205460ff161580156124ad57506001600160a01b03831660009081526008602052604090205460ff16155b156124bd57612415848484612bb8565b6001600160a01b03841660009081526008602052604090205460ff1680156124fd57506001600160a01b03831660009081526008602052604090205460ff165b1561250d57612415848484612c03565b612518848484612bb8565b8061253457612534601354601255601554601455601754601655565b50505050565b600d54600c546000918291825b60095481101561268c5782600160006009848154811061256957612569613030565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125d457508160026000600984815481106125ad576125ad613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125ea57600d54600c54945094505050509091565b612630600160006009848154811061260457612604613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061216c565b9250612678600260006009848154811061264c5761264c613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061216c565b91508061268481613085565b915050612547565b50600c54600d5461269c91611c7a565b8210156126b357600d54600c549350935050509091565b90939092509050565b6000806000806126cb85612c7d565b905060006126d886612c9a565b905060006126f0826126ea898661216c565b9061216c565b979296509094509092505050565b600080808061270d8886611bf8565b9050600061271b8887611bf8565b905060006127298888611bf8565b9050600061273b826126ea868661216c565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061278357612783613030565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156127db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ff919061309e565b8160018151811061281257612812613030565b6001600160a01b039283166020918202929092018101919091525461283a9130911684611cbc565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612873908590600090869030904290600401613168565b600060405180830381600087803b15801561288d57600080fd5b505af11580156128a1573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128d69291906131a4565b60405180910390a15050565b6020546128fa9030906001600160a01b031684611cbc565b60205460185460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561296a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061298f91906131c5565b5050505050565b6012541580156129a65750601454155b80156129b25750601654155b156129b957565b6012805460135560148054601555601680546017556000928390559082905555565b6000806000806000806129ed8761211d565b955095509550955095509550612a038884612cbc565b6001600160a01b038916600090815260026020526040902054612a26908861216c565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a55908761216c565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612a8490866120be565b6001600160a01b038916600090815260016020526040902055612aa681612d66565b612ab08483612dee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612af591815260200190565b60405180910390a3505050505050505050565b600080600080600080612b1a8761211d565b955095509550955095509550612b308884612cbc565b6001600160a01b038916600090815260016020526040902054612b53908761216c565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612b8990846120be565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612a8490866120be565b600080600080600080612bca8761211d565b955095509550955095509550612be08884612cbc565b6001600160a01b038916600090815260016020526040902054612a55908761216c565b600080600080600080612c158761211d565b955095509550955095509550612c2b8884612cbc565b6001600160a01b038916600090815260026020526040902054612c4e908861216c565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b53908761216c565b6000610c5b6103e861226060125485611bf890919063ffffffff16565b6000610c5b6103e8612260601654601454612cb59190613111565b8590611bf8565b6001600160a01b03821660009081526005602052604090205460ff16158015612cee5750602154600160b01b900460ff165b1561102e57601154612d0982612d03856114c3565b906120be565b111561102e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a20616d6f756e7420657863656564206d617820686f6c64696e67604482015265081b1a5b5a5d60d21b6064820152608401610c8b565b6000612d7061209b565b90506000612d7e8383611bf8565b30600090815260016020526040902054909150612d9b90826120be565b3060009081526001602090815260408083209390935560089052205460ff1615611ada5730600090815260026020526040902054612dd990846120be565b30600090815260026020526040902055505050565b600d54612dfb908361216c565b600d55600b54612e0b90826120be565b600b555050565b6001600160a01b038116811461170e57600080fd5b600060208284031215612e3957600080fd5b8135610e8281612e12565b600060208083528351808285015260005b81811015612e7157858101830151858201604001528201612e55565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ea557600080fd5b8235612eb081612e12565b946020939093013593505050565b801515811461170e57600080fd5b600060208284031215612ede57600080fd5b8135610e8281612ebe565b600080600060608486031215612efe57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f2a57600080fd5b8335612f3581612e12565b92506020840135612f4581612e12565b929592945050506040919091013590565b600060208284031215612f6857600080fd5b5035919050565b60008060408385031215612f8257600080fd5b823591506020830135612f9481612ebe565b809150509250929050565b60008060408385031215612fb257600080fd5b8235612fbd81612e12565b91506020830135612f9481612ebe565b60008060408385031215612fe057600080fd5b8235612feb81612e12565b91506020830135612f9481612e12565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5b57610c5b613046565b634e487b7160e01b600052603160045260246000fd5b60006001820161309757613097613046565b5060010190565b6000602082840312156130b057600080fd5b8151610e8281612e12565b6000602082840312156130cd57600080fd5b8151610e8281612ebe565b8082028115828204841417610c5b57610c5b613046565b60008261310c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b613046565b600081518084526020808501945080840160005b8381101561315d5781516001600160a01b031687529582019590820190600101613138565b509495945050505050565b85815284602082015260a06040820152600061318760a0830186613124565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006131bd6040830184613124565b949350505050565b6000806000606084860312156131da57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ecc19fdc43ec35a634881505c8f3afdc19ef68dab78274c8cba2bc0732f1b8464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103b05760003560e01c806370a08231116101e7578063c16dd4a41161010d578063ea2f0b37116100a0578063f2fde38b1161006f578063f2fde38b14610bc4578063f387f3a014610be4578063f887ea4014610c14578063fa0b2da114610c3457600080fd5b8063ea2f0b3714610b4e578063ed8d109714610b6e578063efa0880614610b84578063f0f165af14610ba457600080fd5b8063d28d8852116100dc578063d28d885214610a92578063dd62ed3e14610ac7578063e11c3e8314610b0d578063e43888a314610b2e57600080fd5b8063c16dd4a414610a1c578063c49b9a8014610a3c578063c875278414610a5c578063d12a768814610a7c57600080fd5b806399b102b511610185578063af465a2711610154578063af465a271461099f578063b09f1266146109b5578063b79550be146109e7578063c04a5414146109fc57600080fd5b806399b102b51461090f578063a457c2d71461093f578063a614ff751461095f578063a9059cbb1461097f57600080fd5b806388f82020116101c157806388f82020146108695780638da5cb5b146108a257806395d89b41146108c057806398e944c8146108ef57600080fd5b806370a0823114610814578063715018a6146108345780637571336a1461084957600080fd5b8063313ce567116102d75780634a74bb021161026a578063541958ff11610239578063541958ff1461079357806355cda0d7146107b3578063585a71ed146107d457806364f5a5bb146107f457600080fd5b80634a74bb02146106f9578063521432901461071a57806352390c021461073a5780635342acb41461075a57600080fd5b806341cb87fc116102a657806341cb87fc1461067a578063437823ec1461069a5780634549b039146106ba57806347062402146106da57600080fd5b8063313ce567146105fe5780633685d4191461061a578063395093511461063a5780633bd5d1731461065a57600080fd5b80631d865c301161034f578063296f0a0c1161031e578063296f0a0c1461054c5780632b14ca561461056c5780632d6abf87146105a65780632d838119146105de57600080fd5b80631d865c30146104cc5780631f53ac02146104ec57806323b872dd1461050c57806325519cf21461052c57600080fd5b8063095ea7b31161038b578063095ea7b31461045657806310808a8f1461047657806313114a9d1461049857806318160ddd146104b757600080fd5b80629cb0e9146103bc5780630634f4381461040157806306fdde031461041b57600080fd5b366103b757005b600080fd5b3480156103c857600080fd5b506103ec6103d7366004612e27565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561040d57600080fd5b50600f546103ec9060ff1681565b34801561042757600080fd5b50604080518082019091526009815268426167656c42616e6b60b81b60208201525b6040516103f89190612e44565b34801561046257600080fd5b506103ec610471366004612e92565b610c4a565b34801561048257600080fd5b50610496610491366004612ecc565b610c61565b005b3480156104a457600080fd5b50600b545b6040519081526020016103f8565b3480156104c357600080fd5b50600c546104a9565b3480156104d857600080fd5b506104966104e7366004612ee9565b610ca7565b3480156104f857600080fd5b50610496610507366004612e27565b610cdf565b34801561051857600080fd5b506103ec610527366004612f15565b610d2b565b34801561053857600080fd5b50610496610547366004612ee9565b610d94565b34801561055857600080fd5b50610496610567366004612e27565b610dcc565b34801561057857600080fd5b50601d54601e54601f5461058b92919083565b604080519384526020840192909252908201526060016103f8565b3480156105b257600080fd5b506020546105c6906001600160a01b031681565b6040516001600160a01b0390911681526020016103f8565b3480156105ea57600080fd5b506104a96105f9366004612f56565b610e18565b34801561060a57600080fd5b50604051600981526020016103f8565b34801561062657600080fd5b50610496610635366004612e27565b610e89565b34801561064657600080fd5b506103ec610655366004612e92565b611032565b34801561066657600080fd5b50610496610675366004612f56565b611068565b34801561068657600080fd5b50610496610695366004612e27565b611152565b3480156106a657600080fd5b506104966106b5366004612e27565b6111b9565b3480156106c657600080fd5b506104a96106d5366004612f6f565b611207565b3480156106e657600080fd5b50601a54601b54601c5461058b92919083565b34801561070557600080fd5b506021546103ec90600160a81b900460ff1681565b34801561072657600080fd5b506021546105c6906001600160a01b031681565b34801561074657600080fd5b50610496610755366004612e27565b611294565b34801561076657600080fd5b506103ec610775366004612e27565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561079f57600080fd5b506104966107ae366004612ecc565b6113f7565b3480156107bf57600080fd5b506021546103ec90600160b81b900460ff1681565b3480156107e057600080fd5b506104966107ef366004612f9f565b61143f565b34801561080057600080fd5b5061049661080f366004612f56565b611494565b34801561082057600080fd5b506104a961082f366004612e27565b6114c3565b34801561084057600080fd5b50610496611522565b34801561085557600080fd5b50610496610864366004612f9f565b611596565b34801561087557600080fd5b506103ec610884366004612e27565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ae57600080fd5b506000546001600160a01b03166105c6565b3480156108cc57600080fd5b5060408051808201909152600681526509109051d15360d21b6020820152610449565b3480156108fb57600080fd5b506018546105c6906001600160a01b031681565b34801561091b57600080fd5b506103ec61092a366004612e27565b60046020526000908152604090205460ff1681565b34801561094b57600080fd5b506103ec61095a366004612e92565b6115eb565b34801561096b57600080fd5b5061049661097a366004612ecc565b61163a565b34801561098b57600080fd5b506103ec61099a366004612e92565b611682565b3480156109ab57600080fd5b506104a9600c5481565b3480156109c157600080fd5b506104496040518060400160405280600681526020016509109051d15360d21b81525081565b3480156109f357600080fd5b5061049661168f565b348015610a0857600080fd5b506019546105c6906001600160a01b031681565b348015610a2857600080fd5b50610496610a37366004612f9f565b611711565b348015610a4857600080fd5b50610496610a57366004612ecc565b611766565b348015610a6857600080fd5b50610496610a77366004612e27565b6117e8565b348015610a8857600080fd5b506104a9600e5481565b348015610a9e57600080fd5b5061044960405180604001604052806009815260200168426167656c42616e6b60b81b81525081565b348015610ad357600080fd5b506104a9610ae2366004612fcd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b1957600080fd5b506021546103ec90600160b01b900460ff1681565b348015610b3a57600080fd5b50610496610b49366004612f56565b6119a4565b348015610b5a57600080fd5b50610496610b69366004612e27565b6119d3565b348015610b7a57600080fd5b506104a960105481565b348015610b9057600080fd5b50610496610b9f366004612e92565b611a1e565b348015610bb057600080fd5b50610496610bbf366004612f56565b611adf565b348015610bd057600080fd5b50610496610bdf366004612e27565b611b0e565b348015610bf057600080fd5b506103ec610bff366004612e27565b60066020526000908152604090205460ff1681565b348015610c2057600080fd5b50600a546105c6906001600160a01b031681565b348015610c4057600080fd5b506104a960115481565b6000610c57338484611cbc565b5060015b92915050565b6000546001600160a01b03163314610c945760405162461bcd60e51b8152600401610c8b90612ffb565b60405180910390fd5b600f805460ff1916911515919091179055565b6000546001600160a01b03163314610cd15760405162461bcd60e51b8152600401610c8b90612ffb565b601d92909255601e55601f55565b6000546001600160a01b03163314610d095760405162461bcd60e51b8152600401610c8b90612ffb565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d38848484611dc9565b610d8a8433610d85856040518060600160405280602881526020016131f4602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612061565b611cbc565b5060019392505050565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610c8b90612ffb565b601a92909255601b55601c55565b6000546001600160a01b03163314610df65760405162461bcd60e51b8152600401610c8b90612ffb565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000600d54821115610e6c5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610c8b565b6000610e7661209b565b9050610e828382611c7a565b9392505050565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03811660009081526008602052604090205460ff16610f0e5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610c8b565b60005b60095481101561102e57816001600160a01b031660098281548110610f3857610f38613030565b6000918252602090912001546001600160a01b03160361101c5760098054610f629060019061305c565b81548110610f7257610f72613030565b600091825260209091200154600980546001600160a01b039092169183908110610f9e57610f9e613030565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600890925220805460ff191690556009805480610ff657610ff661306f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061102681613085565b915050610f11565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c57918590610d8590866120be565b3360008181526008602052604090205460ff16156110dd5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c8b565b60006110e88361211d565b505050506001600160a01b0384166000908152600160205260409020549192506111149190508261216c565b6001600160a01b038316600090815260016020526040902055600d5461113a908261216c565b600d55600b5461114a90846120be565b600b55505050565b6000546001600160a01b0316331461117c5760405162461bcd60e51b8152600401610c8b90612ffb565b602080546001600160a01b039092166001600160a01b03199092168217815530600090815260038252604080822093825292909152206000199055565b6000546001600160a01b031633146111e35760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600c5483111561125b5760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610c8b565b8161127a57600061126b8461211d565b50939550610c5b945050505050565b60006112858461211d565b50929550610c5b945050505050565b6000546001600160a01b031633146112be5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03811660009081526008602052604090205460ff16156113375760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610c8b565b6001600160a01b03811660009081526001602052604090205415611391576001600160a01b03811660009081526001602052604090205461137790610e18565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146114215760405162461bcd60e51b8152600401610c8b90612ffb565b60218054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146114695760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114be5760405162461bcd60e51b8152600401610c8b90612ffb565b601055565b6001600160a01b03811660009081526008602052604081205460ff161561150057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c5b90610e18565b6000546001600160a01b0316331461154c5760405162461bcd60e51b8152600401610c8b90612ffb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000610c573384610d858560405180606001604052806025815260200161321c602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612061565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610c8b90612ffb565b60218054911515600160b01b0260ff60b01b19909216919091179055565b6000610c57338484611dc9565b6000546001600160a01b031633146116b95760405162461bcd60e51b8152600401610c8b90612ffb565b604051600090339047908381818185875af1925050503d80600081146116fb576040519150601f19603f3d011682016040523d82523d6000602084013e611700565b606091505b505090508061170e57600080fd5b50565b6000546001600160a01b0316331461173b5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610c8b90612ffb565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117dd90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118125760405162461bcd60e51b8152600401610c8b90612ffb565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b919061309e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec919061309e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d919061309e565b3060009081526003602090815260408083206001600160a01b03968716845282528083206000199055949092168152600690915291909120805460ff191660011790555050565b6000546001600160a01b031633146119ce5760405162461bcd60e51b8152600401610c8b90612ffb565b601155565b6000546001600160a01b031633146119fd5760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611a485760405162461bcd60e51b8152600401610c8b90612ffb565b816001600160a01b031663a9059cbb611a696000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada91906130bb565b505050565b6000546001600160a01b03163314611b095760405162461bcd60e51b8152600401610c8b90612ffb565b600e55565b6000546001600160a01b03163314611b385760405162461bcd60e51b8152600401610c8b90612ffb565b6001600160a01b038116611b9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c8b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611c0a57506000610c5b565b6000611c1683856130d8565b905082611c2385836130ef565b14610e825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c8b565b6000610e8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121ae565b6001600160a01b038316611d125760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610c8b565b6001600160a01b038216611d685760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610c8b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e295760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610c8b565b6001600160a01b038216611e7f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610c8b565b60008111611ee15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c8b565b6001600160a01b03831660009081526004602052604090205460ff16158015611f2357506001600160a01b03821660009081526004602052604090205460ff16155b8015611f385750602154600160b81b900460ff165b15611f8f57601054811115611f8f5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a206d61782074786e206c696d69742065786365656473000000006044820152606401610c8b565b6000611f9a306114c3565b600e5460215491925082101590600160a01b900460ff16158015611fbb5750805b8015611fdf57506001600160a01b03841660009081526006602052604090205460ff165b8015611ff45750602154600160a81b900460ff165b1561200257612002826121dc565b6001600160a01b03851660009081526007602052604090205460019060ff168061204457506001600160a01b03851660009081526007602052604090205460ff165b1561204d575060005b61205986868684612346565b505050505050565b600081848411156120855760405162461bcd60e51b8152600401610c8b9190612e44565b506000612092848661305c565b95945050505050565b60008060006120a861253a565b90925090506120b78282611c7a565b9250505090565b6000806120cb8385613111565b905083811015610e825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c8b565b60008060008060008060008060006121348a6126bc565b92509250925060008060006121528d868661214d61209b565b6126fe565b919f909e50909c50959a5093985091965092945050505050565b6000610e8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612061565b600081836121cf5760405162461bcd60e51b8152600401610c8b9190612e44565b50600061209284866130ef565b6021805460ff60a01b1916600160a01b179055801561233657600f5460ff16156122055750600e545b601e54601b5460009161221891906120be565b601f54601c5491925060009161222d916120be565b9050600061223b83836120be565b90508060000361224d57505050612336565b6000612266600261226084818989611bf8565b90611c7a565b90506000612274868361216c565b9050476122808261274e565b6000612297612290886002611c7a565b869061216c565b905060006122a5478461216c565b905060006122ba60026122608581868e611bf8565b905060006122c8838361216c565b9050801561230c576019546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561230a573d6000803e3d6000fd5b505b60008211801561231c5750600087115b1561232b5761232b87836128e2565b505050505050505050505b506021805460ff60a01b19169055565b61234e612996565b80156123c4576001600160a01b03841660009081526006602052604090205460ff161561238c5761238c601a54601255601b54601455601c54601655565b6001600160a01b03831660009081526006602052604090205460ff16156123c4576123c4601d54601255601e54601455601f54601655565b6001600160a01b03841660009081526008602052604090205460ff16801561240557506001600160a01b03831660009081526008602052604090205460ff16155b1561241a576124158484846129db565b612518565b6001600160a01b03841660009081526008602052604090205460ff1615801561245b57506001600160a01b03831660009081526008602052604090205460ff165b1561246b57612415848484612b08565b6001600160a01b03841660009081526008602052604090205460ff161580156124ad57506001600160a01b03831660009081526008602052604090205460ff16155b156124bd57612415848484612bb8565b6001600160a01b03841660009081526008602052604090205460ff1680156124fd57506001600160a01b03831660009081526008602052604090205460ff165b1561250d57612415848484612c03565b612518848484612bb8565b8061253457612534601354601255601554601455601754601655565b50505050565b600d54600c546000918291825b60095481101561268c5782600160006009848154811061256957612569613030565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125d457508160026000600984815481106125ad576125ad613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125ea57600d54600c54945094505050509091565b612630600160006009848154811061260457612604613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061216c565b9250612678600260006009848154811061264c5761264c613030565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061216c565b91508061268481613085565b915050612547565b50600c54600d5461269c91611c7a565b8210156126b357600d54600c549350935050509091565b90939092509050565b6000806000806126cb85612c7d565b905060006126d886612c9a565b905060006126f0826126ea898661216c565b9061216c565b979296509094509092505050565b600080808061270d8886611bf8565b9050600061271b8887611bf8565b905060006127298888611bf8565b9050600061273b826126ea868661216c565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061278357612783613030565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156127db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ff919061309e565b8160018151811061281257612812613030565b6001600160a01b039283166020918202929092018101919091525461283a9130911684611cbc565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612873908590600090869030904290600401613168565b600060405180830381600087803b15801561288d57600080fd5b505af11580156128a1573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128d69291906131a4565b60405180910390a15050565b6020546128fa9030906001600160a01b031684611cbc565b60205460185460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561296a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061298f91906131c5565b5050505050565b6012541580156129a65750601454155b80156129b25750601654155b156129b957565b6012805460135560148054601555601680546017556000928390559082905555565b6000806000806000806129ed8761211d565b955095509550955095509550612a038884612cbc565b6001600160a01b038916600090815260026020526040902054612a26908861216c565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a55908761216c565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612a8490866120be565b6001600160a01b038916600090815260016020526040902055612aa681612d66565b612ab08483612dee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612af591815260200190565b60405180910390a3505050505050505050565b600080600080600080612b1a8761211d565b955095509550955095509550612b308884612cbc565b6001600160a01b038916600090815260016020526040902054612b53908761216c565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612b8990846120be565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612a8490866120be565b600080600080600080612bca8761211d565b955095509550955095509550612be08884612cbc565b6001600160a01b038916600090815260016020526040902054612a55908761216c565b600080600080600080612c158761211d565b955095509550955095509550612c2b8884612cbc565b6001600160a01b038916600090815260026020526040902054612c4e908861216c565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b53908761216c565b6000610c5b6103e861226060125485611bf890919063ffffffff16565b6000610c5b6103e8612260601654601454612cb59190613111565b8590611bf8565b6001600160a01b03821660009081526005602052604090205460ff16158015612cee5750602154600160b01b900460ff165b1561102e57601154612d0982612d03856114c3565b906120be565b111561102e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a20616d6f756e7420657863656564206d617820686f6c64696e67604482015265081b1a5b5a5d60d21b6064820152608401610c8b565b6000612d7061209b565b90506000612d7e8383611bf8565b30600090815260016020526040902054909150612d9b90826120be565b3060009081526001602090815260408083209390935560089052205460ff1615611ada5730600090815260026020526040902054612dd990846120be565b30600090815260026020526040902055505050565b600d54612dfb908361216c565b600d55600b54612e0b90826120be565b600b555050565b6001600160a01b038116811461170e57600080fd5b600060208284031215612e3957600080fd5b8135610e8281612e12565b600060208083528351808285015260005b81811015612e7157858101830151858201604001528201612e55565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ea557600080fd5b8235612eb081612e12565b946020939093013593505050565b801515811461170e57600080fd5b600060208284031215612ede57600080fd5b8135610e8281612ebe565b600080600060608486031215612efe57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f2a57600080fd5b8335612f3581612e12565b92506020840135612f4581612e12565b929592945050506040919091013590565b600060208284031215612f6857600080fd5b5035919050565b60008060408385031215612f8257600080fd5b823591506020830135612f9481612ebe565b809150509250929050565b60008060408385031215612fb257600080fd5b8235612fbd81612e12565b91506020830135612f9481612ebe565b60008060408385031215612fe057600080fd5b8235612feb81612e12565b91506020830135612f9481612e12565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5b57610c5b613046565b634e487b7160e01b600052603160045260246000fd5b60006001820161309757613097613046565b5060010190565b6000602082840312156130b057600080fd5b8151610e8281612e12565b6000602082840312156130cd57600080fd5b8151610e8281612ebe565b8082028115828204841417610c5b57610c5b613046565b60008261310c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5b57610c5b613046565b600081518084526020808501945080840160005b8381101561315d5781516001600160a01b031687529582019590820190600101613138565b509495945050505050565b85815284602082015260a06040820152600061318760a0830186613124565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006131bd6040830184613124565b949350505050565b6000806000606084860312156131da57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ecc19fdc43ec35a634881505c8f3afdc19ef68dab78274c8cba2bc0732f1b8464736f6c63430008120033

Deployed Bytecode Sourcemap

10821:24557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11440:58;;;;;;;;;;-1:-1:-1;11440:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;11440:58:0;;;;;;;;12246:31;;;;;;;;;;-1:-1:-1;12246:31:0;;;;;;;;15514:83;;;;;;;;;;-1:-1:-1;15584:5:0;;;;;;;;;;;;-1:-1:-1;;;15584:5:0;;;;15514:83;;;;;;;:::i;16426:161::-;;;;;;;;;;-1:-1:-1;16426:161:0;;;;;:::i;:::-;;:::i;32556:99::-;;;;;;;;;;-1:-1:-1;32556:99:0;;;;;:::i;:::-;;:::i;:::-;;17547:87;;;;;;;;;;-1:-1:-1;17616:10:0;;17547:87;;;1982:25:1;;;1970:2;1955:18;17547:87:0;1836:177:1;15791:95:0;;;;;;;;;;-1:-1:-1;15871:7:0;;15791:95;;33994:225;;;;;;;;;;-1:-1:-1;33994:225:0;;;;;:::i;:::-;;:::i;32785:108::-;;;;;;;;;;-1:-1:-1;32785:108:0;;;;;:::i;:::-;;:::i;16595:313::-;;;;;;;;;;-1:-1:-1;16595:313:0;;;;;:::i;:::-;;:::i;33771:215::-;;;;;;;;;;-1:-1:-1;33771:215:0;;;;;:::i;:::-;;:::i;32663:114::-;;;;;;;;;;-1:-1:-1;32663:114:0;;;;;:::i;:::-;;:::i;13191:22::-;;;;;;;;;;-1:-1:-1;13191:22:0;;;;;;;;;;;;;;;;3002:25:1;;;3058:2;3043:18;;3036:34;;;;3086:18;;;3079:34;2990:2;2975:18;13191:22:0;2800:319:1;13222:35:0;;;;;;;;;;-1:-1:-1;13222:35:0;;;;-1:-1:-1;;;;;13222:35:0;;;;;;-1:-1:-1;;;;;3313:32:1;;;3295:51;;3283:2;3268:18;13222:35:0;3124:228:1;18468:241:0;;;;;;;;;;-1:-1:-1;18468:241:0;;;;;:::i;:::-;;:::i;15700:83::-;;;;;;;;;;-1:-1:-1;15700:83:0;;12021:1;3684:36:1;;3672:2;3657:18;15700:83:0;3542:184:1;31646:468:0;;;;;;;;;;-1:-1:-1;31646:468:0;;;;;:::i;:::-;;:::i;16916:218::-;;;;;;;;;;-1:-1:-1;16916:218:0;;;;;:::i;:::-;;:::i;17642:377::-;;;;;;;;;;-1:-1:-1;17642:377:0;;;;;:::i;:::-;;:::i;34676:244::-;;;;;;;;;;-1:-1:-1;34676:244:0;;;;;:::i;:::-;;:::i;32126:115::-;;;;;;;;;;-1:-1:-1;32126:115:0;;;;;:::i;:::-;;:::i;18027:433::-;;;;;;;;;;-1:-1:-1;18027:433:0;;;;;:::i;:::-;;:::i;13164:20::-;;;;;;;;;;-1:-1:-1;13164:20:0;;;;;;;;;;;;13325:40;;;;;;;;;;-1:-1:-1;13325:40:0;;;;-1:-1:-1;;;13325:40:0;;;;;;13264:24;;;;;;;;;;-1:-1:-1;13264:24:0;;;;-1:-1:-1;;;;;13264:24:0;;;31293:345;;;;;;;;;;-1:-1:-1;31293:345:0;;;;;:::i;:::-;;:::i;22470:123::-;;;;;;;;;;-1:-1:-1;22470:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;22558:27:0;22534:4;22558:27;;;:18;:27;;;;;;;;;22470:123;33019:98;;;;;;;;;;-1:-1:-1;33019:98:0;;;;;:::i;:::-;;:::i;13415:28::-;;;;;;;;;;-1:-1:-1;13415:28:0;;;;-1:-1:-1;;;13415:28:0;;;;;;33490:136;;;;;;;;;;-1:-1:-1;33490:136:0;;;;;:::i;:::-;;:::i;33234:102::-;;;;;;;;;;-1:-1:-1;33234:102:0;;;;;:::i;:::-;;:::i;15894:198::-;;;;;;;;;;-1:-1:-1;15894:198:0;;;;;:::i;:::-;;:::i;9466:148::-;;;;;;;;;;;;;:::i;33344:138::-;;;;;;;;;;-1:-1:-1;33344:138:0;;;;;:::i;:::-;;:::i;17419:120::-;;;;;;;;;;-1:-1:-1;17419:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17511:20:0;17487:4;17511:20;;;:11;:20;;;;;;;;;17419:120;9252:79;;;;;;;;;;-1:-1:-1;9290:7:0;9317:6;-1:-1:-1;;;;;9317:6:0;9252:79;;15605:87;;;;;;;;;;-1:-1:-1;15677:7:0;;;;;;;;;;;;-1:-1:-1;;;15677:7:0;;;;15605:87;;12781:32;;;;;;;;;;-1:-1:-1;12781:32:0;;;;-1:-1:-1;;;;;12781:32:0;;;11381:52;;;;;;;;;;-1:-1:-1;11381:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17142:269;;;;;;;;;;-1:-1:-1;17142:269:0;;;;;:::i;:::-;;:::i;32905:106::-;;;;;;;;;;-1:-1:-1;32905:106:0;;;;;:::i;:::-;;:::i;16100:167::-;;;;;;;;;;-1:-1:-1;16100:167:0;;;;;:::i;:::-;;:::i;12031:64::-;;;;;;;;;;;;;;;;11938:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11938:41:0;;;;;35060:153;;;;;;;;;;;;;:::i;12820:86::-;;;;;;;;;;-1:-1:-1;12820:86:0;;;;-1:-1:-1;;;;;12820:86:0;;;34928:124;;;;;;;;;;-1:-1:-1;34928:124:0;;;;;:::i;:::-;;:::i;32375:173::-;;;;;;;;;;-1:-1:-1;32375:173:0;;;;;:::i;:::-;;:::i;34227:441::-;;;;;;;;;;-1:-1:-1;34227:441:0;;;;;:::i;:::-;;:::i;12160:70::-;;;;;;;;;;;;;;;;11890:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11890:41:0;;;;;16275:143;;;;;;;;;;-1:-1:-1;16275:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;16383:18:0;;;16356:7;16383:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16275:143;13376:32;;;;;;;;;;-1:-1:-1;13376:32:0;;;;-1:-1:-1;;;13376:32:0;;;;;;33125:101;;;;;;;;;;-1:-1:-1;33125:101:0;;;;;:::i;:::-;;:::i;32253:114::-;;;;;;;;;;-1:-1:-1;32253:114:0;;;;;:::i;:::-;;:::i;12286:61::-;;;;;;;;;;;;;;;;35221:152;;;;;;;;;;-1:-1:-1;35221:152:0;;;;;:::i;:::-;;:::i;33634:129::-;;;;;;;;;;-1:-1:-1;33634:129:0;;;;;:::i;:::-;;:::i;9622:244::-;;;;;;;;;;-1:-1:-1;9622:244:0;;;;;:::i;:::-;;:::i;11511:52::-;;;;;;;;;;-1:-1:-1;11511:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11721:66;;;;;;;;;;-1:-1:-1;11721:66:0;;;;-1:-1:-1;;;;;11721:66:0;;;12387:58;;;;;;;;;;;;;;;;16426:161;16501:4;16518:39;2371:10;16541:7;16550:6;16518:8;:39::i;:::-;-1:-1:-1;16575:4:0;16426:161;;;;;:::o;32556:99::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;;;;;;;;;32625:11:::1;:22:::0;;-1:-1:-1;;32625:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32556:99::o;33994:225::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;34096:7:::1;:27:::0;;;;34134:23;:39;34184:17;:27;33994:225::o;32785:108::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;32856:17:::1;:29:::0;;-1:-1:-1;;;;;;32856:29:0::1;-1:-1:-1::0;;;;;32856:29:0;;;::::1;::::0;;;::::1;::::0;;32785:108::o;16595:313::-;16693:4;16710:36;16720:6;16728:9;16739:6;16710:9;:36::i;:::-;16757:121;16766:6;2371:10;16788:89;16826:6;16788:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16788:19:0;;;;;;:11;:19;;;;;;;;2371:10;16788:33;;;;;;;;;;:37;:89::i;:::-;16757:8;:121::i;:::-;-1:-1:-1;16896:4:0;16595:313;;;;;:::o;33771:215::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;33866:6:::1;:26:::0;;;;33903:22;:38;33952:16;:26;33771:215::o;32663:114::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;32740:17:::1;:29:::0;;-1:-1:-1;;;;;;32740:29:0::1;-1:-1:-1::0;;;;;32740:29:0;;;::::1;::::0;;;::::1;::::0;;32663:114::o;18468:241::-;18534:7;18573;;18562;:18;;18554:61;;;;-1:-1:-1;;;18554:61:0;;5596:2:1;18554:61:0;;;5578:21:1;5635:2;5615:18;;;5608:30;5674:32;5654:18;;;5647:60;5724:18;;18554:61:0;5394:354:1;18554:61:0;18626:19;18649:10;:8;:10::i;:::-;18626:33;-1:-1:-1;18677:24:0;:7;18626:33;18677:11;:24::i;:::-;18670:31;18468:241;-1:-1:-1;;;18468:241:0:o;31646:468::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31728:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31720:49;;;::::0;-1:-1:-1;;;31720:49:0;;5955:2:1;31720:49:0::1;::::0;::::1;5937:21:1::0;5994:2;5974:18;;;5967:30;-1:-1:-1;;;6013:18:1;;;6006:46;6069:18;;31720:49:0::1;5753:340:1::0;31720:49:0::1;31785:9;31780:327;31804:9;:16:::0;31800:20;::::1;31780:327;;;31862:7;-1:-1:-1::0;;;;;31846:23:0::1;:9;31856:1;31846:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31846:12:0::1;:23:::0;31842:254:::1;;31905:9;31915:16:::0;;:20:::1;::::0;31934:1:::1;::::0;31915:20:::1;:::i;:::-;31905:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31890:9:::1;:12:::0;;-1:-1:-1;;;;;31905:31:0;;::::1;::::0;31900:1;;31890:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31890:46:0::1;-1:-1:-1::0;;;;;31890:46:0;;::::1;;::::0;;31955:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31994:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31994:28:0::1;::::0;;32041:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32041:15:0;;;;;-1:-1:-1;;;;;;32041:15:0::1;::::0;;;;;31780:327:::1;31646:468:::0;:::o;31842:254::-:1;31822:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31780:327;;;;31646:468:::0;:::o;16916:218::-;2371:10;17004:4;17053:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17053:34:0;;;;;;;;;;17004:4;;17021:83;;17044:7;;17053:50;;17092:10;17053:38;:50::i;17642:377::-;2371:10;17694:14;17743:19;;;:11;:19;;;;;;;;17742:20;17734:77;;;;-1:-1:-1;;;17734:77:0;;6969:2:1;17734:77:0;;;6951:21:1;7008:2;6988:18;;;6981:30;7047:34;7027:18;;;7020:62;-1:-1:-1;;;7098:18:1;;;7091:42;7150:19;;17734:77:0;6767:408:1;17734:77:0;17823:15;17847:19;17858:7;17847:10;:19::i;:::-;-1:-1:-1;;;;;;;;;17895:15:0;;;;;;:7;:15;;;;;;17822:44;;-1:-1:-1;17895:28:0;;:15;-1:-1:-1;17822:44:0;17895:19;:28::i;:::-;-1:-1:-1;;;;;17877:15:0;;;;;;:7;:15;;;;;:46;17944:7;;:20;;17956:7;17944:11;:20::i;:::-;17934:7;:30;17988:10;;:23;;18003:7;17988:14;:23::i;:::-;17975:10;:36;-1:-1:-1;;;17642:377:0:o;34676:244::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;34821:11:::1;:26:::0;;-1:-1:-1;;;;;34821:26:0;;::::1;-1:-1:-1::0;;;;;;34821:26:0;;::::1;::::0;::::1;::::0;;34878:4:::1;34750:29;34858:26:::0;;;:11:::1;:26:::0;;;;;;:48;;;;;;;;-1:-1:-1;;34858:54:0;;34676:244::o;32126:115::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32199:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32199:34:0::1;32229:4;32199:34;::::0;;32126:115::o;18027:433::-;18117:7;18156;;18145;:18;;18137:59;;;;-1:-1:-1;;;18137:59:0;;7382:2:1;18137:59:0;;;7364:21:1;7421:2;7401:18;;;7394:30;7460;7440:18;;;7433:58;7508:18;;18137:59:0;7180:352:1;18137:59:0;18212:17;18207:246;;18247:15;18271:19;18282:7;18271:10;:19::i;:::-;-1:-1:-1;18246:44:0;;-1:-1:-1;18305:14:0;;-1:-1:-1;;;;;18305:14:0;18207:246;18354:23;18385:19;18396:7;18385:10;:19::i;:::-;-1:-1:-1;18352:52:0;;-1:-1:-1;18419:22:0;;-1:-1:-1;;;;;18419:22:0;31293:345;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31376:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31375:21;31367:73;;;::::0;-1:-1:-1;;;31367:73:0;;7739:2:1;31367:73:0::1;::::0;::::1;7721:21:1::0;7778:2;7758:18;;;7751:30;7817:34;7797:18;;;7790:62;-1:-1:-1;;;7868:18:1;;;7861:37;7915:19;;31367:73:0::1;7537:403:1::0;31367:73:0::1;-1:-1:-1::0;;;;;31454:16:0;::::1;31473:1;31454:16:::0;;;:7:::1;:16;::::0;;;;;:20;31451:108:::1;;-1:-1:-1::0;;;;;31530:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31510:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31491:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31451:108:::1;-1:-1:-1::0;;;;;31569:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31569:27:0::1;31592:4;31569:27:::0;;::::1;::::0;;;31607:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31607:23:0::1;::::0;;::::1;::::0;;31293:345::o;33019:98::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;33089:9:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;33089:20:0::1;-1:-1:-1::0;;;;33089:20:0;;::::1;::::0;;;::::1;::::0;;33019:98::o;33490:136::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33575:33:0;;;::::1;;::::0;;;:26:::1;:33;::::0;;;;:43;;-1:-1:-1;;33575:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33490:136::o;33234:102::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;33300:19:::1;:28:::0;33234:102::o;15894:198::-;-1:-1:-1;;;;;15984:20:0;;15960:7;15984:20;;;:11;:20;;;;;;;;15980:49;;;-1:-1:-1;;;;;;16013:16:0;;;;;:7;:16;;;;;;;15894:198::o;15980:49::-;-1:-1:-1;;;;;16067:16:0;;;;;;:7;:16;;;;;;16047:37;;:19;:37::i;9466:148::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;9573:1:::1;9557:6:::0;;9536:40:::1;::::0;-1:-1:-1;;;;;9557:6:0;;::::1;::::0;9536:40:::1;::::0;9573:1;;9536:40:::1;9604:1;9587:19:::0;;-1:-1:-1;;;;;;9587:19:0::1;::::0;;9466:148::o;33344:138::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33437:27:0;;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:37;;-1:-1:-1;;33437:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33344:138::o;17142:269::-;17235:4;17252:129;2371:10;17275:7;17284:96;17323:15;17284:96;;;;;;;;;;;;;;;;;2371:10;17284:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17284:34:0;;;;;;;;;;;;:38;:96::i;32905:106::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;32979:13:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;32979:24:0::1;-1:-1:-1::0;;;;32979:24:0;;::::1;::::0;;;::::1;::::0;;32905:106::o;16100:167::-;16178:4;16195:42;2371:10;16219:9;16230:6;16195:9;:42::i;35060:153::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;35125:58:::1;::::0;35113:7:::1;::::0;35133:10:::1;::::0;35157:21:::1;::::0;35113:7;35125:58;35113:7;35125:58;35157:21;35133:10;35125:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35112:71;;;35202:2;35194:11;;;::::0;::::1;;35101:112;35060:153::o:0;34928:124::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35008:26:0;;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:36;;-1:-1:-1;;35008:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34928:124::o;32375:173::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;32454:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32454:32:0::1;-1:-1:-1::0;;;;32454:32:0;;::::1;;::::0;;32502:38:::1;::::0;::::1;::::0;::::1;::::0;32478:8;567:14:1;560:22;542:41;;530:2;515:18;;402:187;32502:38:0::1;;;;;;;;32375:173:::0;:::o;34227:441::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;34304:29:::1;34353:10;34304:60;;34432:11;34464:12;-1:-1:-1::0;;;;;34464:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34446:66:0::1;;34521:4;34528:12;-1:-1:-1::0;;;;;34528:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34446:102;::::0;-1:-1:-1;;;;;;34446:102:0::1;::::0;;;;;;-1:-1:-1;;;;;8641:15:1;;;34446:102:0::1;::::0;::::1;8623:34:1::0;8693:15;;8673:18;;;8666:43;8558:18;;34446:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34579:4;11840:1;34559:26:::0;;;:11:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;34559:49:0;;::::1;::::0;;;;;;;-1:-1:-1;;34559:55:0;;34625:24;;;::::1;::::0;;:19:::1;:24:::0;;;;;;;:31;;-1:-1:-1;;34625:31:0::1;34652:4;34625:31;::::0;;-1:-1:-1;;34227:441:0:o;33125:101::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;33194:15:::1;:24:::0;33125:101::o;32253:114::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32324:27:0::1;32354:5;32324:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32324:35:0::1;::::0;;32253:114::o;35221:152::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;35321:12:::1;-1:-1:-1::0;;;;;35314:29:0::1;;35344:7;9290::::0;9317:6;-1:-1:-1;;;;;9317:6:0;;9252:79;35344:7:::1;35314:51;::::0;-1:-1:-1;;;;;;35314:51:0::1;::::0;;;;;;-1:-1:-1;;;;;8912:32:1;;;35314:51:0::1;::::0;::::1;8894::1::0;8961:18;;;8954:34;;;8867:18;;35314:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35221:152:::0;;:::o;33634:129::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;33717:29:::1;:38:::0;33634:129::o;9622:244::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9711:22:0;::::1;9703:73;;;::::0;-1:-1:-1;;;9703:73:0;;9451:2:1;9703:73:0::1;::::0;::::1;9433:21:1::0;9490:2;9470:18;;;9463:30;9529:34;9509:18;;;9502:62;-1:-1:-1;;;9580:18:1;;;9573:36;9626:19;;9703:73:0::1;9249:402:1::0;9703:73:0::1;9813:6;::::0;;9792:38:::1;::::0;-1:-1:-1;;;;;9792:38:0;;::::1;::::0;9813:6;::::1;::::0;9792:38:::1;::::0;::::1;9841:6;:17:::0;;-1:-1:-1;;;;;;9841:17:0::1;-1:-1:-1::0;;;;;9841:17:0;;;::::1;::::0;;;::::1;::::0;;9622:244::o;1320:256::-;1378:7;1408:1;1413;1408:6;1404:47;;-1:-1:-1;1438:1:0;1431:8;;1404:47;1463:9;1475:5;1479:1;1475;:5;:::i;:::-;1463:17;-1:-1:-1;1508:1:0;1499:5;1503:1;1463:17;1499:5;:::i;:::-;:10;1491:56;;;;-1:-1:-1;;;1491:56:0;;10253:2:1;1491:56:0;;;10235:21:1;10292:2;10272:18;;;10265:30;10331:34;10311:18;;;10304:62;-1:-1:-1;;;10382:18:1;;;10375:31;10423:19;;1491:56:0;10051:397:1;1584:132:0;1642:7;1669:39;1673:1;1676;1669:39;;;;;;;;;;;;;;;;;:3;:39::i;22926:329::-;-1:-1:-1;;;;;23019:19:0;;23011:64;;;;-1:-1:-1;;;23011:64:0;;10655:2:1;23011:64:0;;;10637:21:1;;;10674:18;;;10667:30;10733:34;10713:18;;;10706:62;10785:18;;23011:64:0;10453:356:1;23011:64:0;-1:-1:-1;;;;;23094:21:0;;23086:64;;;;-1:-1:-1;;;23086:64:0;;11016:2:1;23086:64:0;;;10998:21:1;11055:2;11035:18;;;11028:30;11094:32;11074:18;;;11067:60;11144:18;;23086:64:0;10814:354:1;23086:64:0;-1:-1:-1;;;;;23163:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23215:32;;1982:25:1;;;23215:32:0;;1955:18:1;23215:32:0;;;;;;;22926:329;;;:::o;23263:1291::-;-1:-1:-1;;;;;23385:18:0;;23377:64;;;;-1:-1:-1;;;23377:64:0;;11375:2:1;23377:64:0;;;11357:21:1;11414:2;11394:18;;;11387:30;11453:34;11433:18;;;11426:62;-1:-1:-1;;;11504:18:1;;;11497:31;11545:19;;23377:64:0;11173:397:1;23377:64:0;-1:-1:-1;;;;;23460:16:0;;23452:60;;;;-1:-1:-1;;;23452:60:0;;11777:2:1;23452:60:0;;;11759:21:1;11816:2;11796:18;;;11789:30;11855:33;11835:18;;;11828:61;11906:18;;23452:60:0;11575:355:1;23452:60:0;23540:1;23531:6;:10;23523:64;;;;-1:-1:-1;;;23523:64:0;;12137:2:1;23523:64:0;;;12119:21:1;12176:2;12156:18;;;12149:30;12215:34;12195:18;;;12188:62;-1:-1:-1;;;12266:18:1;;;12259:39;12315:19;;23523:64:0;11935:405:1;23523:64:0;-1:-1:-1;;;;;23605:26:0;;;;;;:20;:26;;;;;;;;23604:27;:56;;;;-1:-1:-1;;;;;;23636:24:0;;;;;;:20;:24;;;;;;;;23635:25;23604:56;:69;;;;-1:-1:-1;23664:9:0;;-1:-1:-1;;;23664:9:0;;;;23604:69;23600:173;;;23709:19;;23699:6;:29;;23691:70;;;;-1:-1:-1;;;23691:70:0;;12547:2:1;23691:70:0;;;12529:21:1;12586:2;12566:18;;;12559:30;12625;12605:18;;;12598:58;12673:18;;23691:70:0;12345:352:1;23691:70:0;23785:28;23816:24;23834:4;23816:9;:24::i;:::-;23912:29;;23971:16;;23785:55;;-1:-1:-1;23888:53:0;;;;-1:-1:-1;;;23971:16:0;;;;23970:17;:53;;;;;24004:19;23970:53;:93;;;;-1:-1:-1;;;;;;24040:23:0;;;;;;:19;:23;;;;;;;;23970:93;:131;;;;-1:-1:-1;24080:21:0;;-1:-1:-1;;;24080:21:0;;;;23970:131;23952:251;;;24142:35;24156:20;24142:13;:35::i;:::-;-1:-1:-1;;;;;24403:24:0;;24276:12;24403:24;;;:18;:24;;;;;;24291:4;;24403:24;;;:50;;-1:-1:-1;;;;;;24431:22:0;;;;;;:18;:22;;;;;;;;24403:50;24400:96;;;-1:-1:-1;24479:5:0;24400:96;24508:38;24523:4;24528:2;24531:6;24538:7;24508:14;:38::i;:::-;23366:1188;;;23263:1291;;;:::o;1120:192::-;1206:7;1242:12;1234:6;;;;1226:29;;;;-1:-1:-1;;;1226:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1266:9:0;1278:5;1282:1;1278;:5;:::i;:::-;1266:17;1120:192;-1:-1:-1;;;;;1120:192:0:o;20163:163::-;20204:7;20225:15;20242;20261:19;:17;:19::i;:::-;20224:56;;-1:-1:-1;20224:56:0;-1:-1:-1;20298:20:0;20224:56;;20298:11;:20::i;:::-;20291:27;;;;20163:163;:::o;787:181::-;845:7;;877:5;881:1;877;:5;:::i;:::-;865:17;;906:1;901;:6;;893:46;;;;-1:-1:-1;;;893:46:0;;13034:2:1;893:46:0;;;13016:21:1;13073:2;13053:18;;;13046:30;13112:29;13092:18;;;13085:57;13159:18;;893:46:0;12832:351:1;18961:419:0;19020:7;19029;19038;19047;19056;19065;19086:23;19111:12;19125:18;19147:20;19159:7;19147:11;:20::i;:::-;19085:82;;;;;;19179:15;19196:23;19221:12;19237:50;19249:7;19258:4;19264:10;19276;:8;:10::i;:::-;19237:11;:50::i;:::-;19178:109;;;;-1:-1:-1;19178:109:0;;-1:-1:-1;19338:15:0;;-1:-1:-1;19355:4:0;;-1:-1:-1;19361:10:0;;-1:-1:-1;18961:419:0;;-1:-1:-1;;;;;18961:419:0:o;976:136::-;1034:7;1061:43;1065:1;1068;1061:43;;;;;;;;;;;;;;;;;:3;:43::i;1724:191::-;1810:7;1845:12;1838:5;1830:28;;;;-1:-1:-1;;;1830:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1869:9:0;1881:5;1885:1;1881;:5;:::i;24562:1195::-;13872:16;:23;;-1:-1:-1;;;;13872:23:0;-1:-1:-1;;;13872:23:0;;;24641:33;;24667:7:::1;24641:33;24687:11;::::0;::::1;;24684:64;;;-1:-1:-1::0;24719:29:0::1;::::0;24684:64:::1;24808:23:::0;;24781:22;;24759:19:::1;::::0;24781:51:::1;::::0;:22;:26:::1;:51::i;:::-;24880:17:::0;;24859:16;;24759:73;;-1:-1:-1;24843:13:0::1;::::0;24859:39:::1;::::0;:20:::1;:39::i;:::-;24843:55:::0;-1:-1:-1;24909:16:0::1;24928:28;:14:::0;24843:55;24928:18:::1;:28::i;:::-;24909:47;;24970:11;24985:1;24970:16:::0;24967:28:::1;;24988:7;;;;;24967:28;25005:16;25024:60;25082:1;25024:53;25065:11:::0;25024:53;:16;25045:14;25024:20:::1;:36::i;:::-;:40:::0;::::1;:53::i;:60::-;25005:79:::0;-1:-1:-1;25095:18:0::1;25116:33;:16:::0;25005:79;25116:20:::1;:33::i;:::-;25095:54:::0;-1:-1:-1;25185:21:0::1;25217:31;25095:54:::0;25217:16:::1;:31::i;:::-;25259:19;25281:38;25297:21;:14:::0;25316:1:::1;25297:18;:21::i;:::-;25281:11:::0;;:15:::1;:38::i;:::-;25259:60:::0;-1:-1:-1;25330:22:0::1;25355:41;:21;25381:14:::0;25355:25:::1;:41::i;:::-;25330:66:::0;-1:-1:-1;25407:26:0::1;25436:58;25492:1;25436:51;25475:11:::0;25436:51;25330:66;25455:14;25436:18:::1;:34::i;:58::-;25407:87:::0;-1:-1:-1;25505:20:0::1;25528:38;:14:::0;25407:87;25528:18:::1;:38::i;:::-;25505:61:::0;-1:-1:-1;25580:16:0;;25577:70:::1;;25606:17;::::0;25598:49:::1;::::0;-1:-1:-1;;;;;25606:17:0;;::::1;::::0;25598:49;::::1;;;::::0;25634:12;;25606:17:::1;25598:49:::0;25606:17;25598:49;25634:12;25606:17;25598:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25577:70;25682:1;25661:18;:22;:41;;;;;25701:1;25687:11;:15;25661:41;25658:91;;;25704:45;25717:11;25730:18;25704:12;:45::i;:::-;24628:1129;;;;;;;;;;13906:1;-1:-1:-1::0;13918:16:0;:24;;-1:-1:-1;;;;13918:24:0;;;24562:1195::o;27028:1075::-;27149:14;:12;:14::i;:::-;27184:7;27180:236;;;-1:-1:-1;;;;;27215:27:0;;;;;;:19;:27;;;;;;;;27211:84;;;27267:8;22179:6;:16;22169:7;:26;22222:22;;22206:13;:38;22265:16;;22255:7;:26;22132:157;27267:8;-1:-1:-1;;;;;27317:30:0;;;;;;:19;:30;;;;;;;;27313:88;;;27372:9;22349:7;:17;22339:7;:27;22393:23;;22377:13;:39;22437:17;;22427:7;:27;22301:161;27372:9;-1:-1:-1;;;;;27441:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27465:22:0;;;;;;:11;:22;;;;;;;;27464:23;27441:46;27437:597;;;27504:48;27526:6;27534:9;27545:6;27504:21;:48::i;:::-;27437:597;;;-1:-1:-1;;;;;27575:19:0;;;;;;:11;:19;;;;;;;;27574:20;:46;;;;-1:-1:-1;;;;;;27598:22:0;;;;;;:11;:22;;;;;;;;27574:46;27570:464;;;27637:46;27657:6;27665:9;27676:6;27637:19;:46::i;27570:464::-;-1:-1:-1;;;;;27706:19:0;;;;;;:11;:19;;;;;;;;27705:20;:47;;;;-1:-1:-1;;;;;;27730:22:0;;;;;;:11;:22;;;;;;;;27729:23;27705:47;27701:333;;;27769:44;27787:6;27795:9;27806:6;27769:17;:44::i;27701:333::-;-1:-1:-1;;;;;27835:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27858:22:0;;;;;;:11;:22;;;;;;;;27835:45;27831:203;;;27897:48;27919:6;27927:9;27938:6;27897:21;:48::i;27831:203::-;27978:44;27996:6;28004:9;28015:6;27978:17;:44::i;:::-;28058:7;28054:41;;28080:15;22017;;22007:7;:25;22059:21;;22043:13;:37;22101:15;;22091:7;:25;21963:161;28080:15;27028:1075;;;;:::o;20334:561::-;20431:7;;20467;;20384;;;;;20491:289;20515:9;:16;20511:20;;20491:289;;;20581:7;20557;:21;20565:9;20575:1;20565:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20565:12:0;20557:21;;;;;;;;;;;;;:31;;:66;;;20616:7;20592;:21;20600:9;20610:1;20600:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20600:12:0;20592:21;;;;;;;;;;;;;:31;20557:66;20553:97;;;20633:7;;20642;;20625:25;;;;;;;20334:561;;:::o;20553:97::-;20675:34;20687:7;:21;20695:9;20705:1;20695:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20695:12:0;20687:21;;;;;;;;;;;;;20675:7;;:11;:34::i;:::-;20665:44;;20734:34;20746:7;:21;20754:9;20764:1;20754:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20754:12:0;20746:21;;;;;;;;;;;;;20734:7;;:11;:34::i;:::-;20724:44;-1:-1:-1;20533:3:0;;;;:::i;:::-;;;;20491:289;;;-1:-1:-1;20816:7:0;;20804;;:20;;:11;:20::i;:::-;20794:7;:30;20790:61;;;20834:7;;20843;;20826:25;;;;;;20334:561;;:::o;20790:61::-;20870:7;;20879;;-1:-1:-1;20334:561:0;-1:-1:-1;20334:561:0:o;19388:330::-;19448:7;19457;19466;19486:12;19501:24;19517:7;19501:15;:24::i;:::-;19486:39;;19536:18;19557:30;19579:7;19557:21;:30::i;:::-;19536:51;-1:-1:-1;19598:23:0;19624:33;19536:51;19624:17;:7;19636:4;19624:11;:17::i;:::-;:21;;:33::i;:::-;19598:59;19693:4;;-1:-1:-1;19699:10:0;;-1:-1:-1;19388:330:0;;-1:-1:-1;;;19388:330:0:o;19726:429::-;19841:7;;;;19897:24;:7;19909:11;19897;:24::i;:::-;19879:42;-1:-1:-1;19932:12:0;19947:21;:4;19956:11;19947:8;:21::i;:::-;19932:36;-1:-1:-1;19979:18:0;20000:27;:10;20015:11;20000:14;:27::i;:::-;19979:48;-1:-1:-1;20038:23:0;20064:33;19979:48;20064:17;:7;20076:4;20064:11;:17::i;:33::-;20116:7;;;;-1:-1:-1;20142:4:0;;-1:-1:-1;19726:429:0;;-1:-1:-1;;;;;;;19726:429:0:o;25767:654::-;25917:16;;;25931:1;25917:16;;;;;;;;25893:21;;25917:16;;;;;;;;;;-1:-1:-1;25917:16:0;25893:40;;25962:4;25944;25949:1;25944:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25944:23:0;;;:7;;;;;;;;;;:23;;;;25988:11;;:18;;;-1:-1:-1;;;25988:18:0;;;;:11;;;;;:16;;:18;;;;;25944:7;;25988:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25978:4;25983:1;25978:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25978:28:0;;;:7;;;;;;;;;;:28;;;;26051:11;26019:58;;26036:4;;26051:11;26065;26019:8;:58::i;:::-;26116:11;;:236;;-1:-1:-1;;;26116:236:0;;-1:-1:-1;;;;;26116:11:0;;;;:62;;:236;;26193:11;;26116;;26263:4;;26290;;26326:15;;26116:236;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26378:35;26395:11;26408:4;26378:35;;;;;;;:::i;:::-;;;;;;;;25822:599;25767:654;:::o;26429:515::-;26609:11;;26577:58;;26594:4;;-1:-1:-1;;;;;26609:11:0;26623;26577:8;:58::i;:::-;26678:11;;26878:17;;26678:258;;-1:-1:-1;;;26678:258:0;;26746:4;26678:258;;;15051:34:1;15101:18;;;15094:34;;;26678:11:0;15144:18:1;;;15137:34;;;15187:18;;;15180:34;-1:-1:-1;;;;;26878:17:0;;;15230:19:1;;;15223:44;26910:15:0;15283:19:1;;;15276:35;26678:11:0;;;:27;;26713:9;;14985:19:1;;26678:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26429:515;;:::o;21626:325::-;21672:7;;:12;:34;;;;-1:-1:-1;21688:13:0;;:18;21672:34;:50;;;;-1:-1:-1;21710:7:0;;:12;21672:50;21669:62;;;21626:325::o;21669:62::-;21770:7;;;21752:15;:25;21812:13;;;21788:21;:37;21854:7;;;21836:15;:25;-1:-1:-1;21882:11:0;;;;21904:17;;;;21932:11;21626:325::o;29335:626::-;29438:15;29455:23;29480:12;29494:23;29519:12;29533:18;29555:19;29566:7;29555:10;:19::i;:::-;29437:137;;;;;;;;;;;;29585:49;29607:9;29618:15;29585:21;:49::i;:::-;-1:-1:-1;;;;;29663:15:0;;;;;;:7;:15;;;;;;:28;;29683:7;29663:19;:28::i;:::-;-1:-1:-1;;;;;29645:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29720:7;:15;;;;:28;;29740:7;29720:19;:28::i;:::-;-1:-1:-1;;;;;29702:15:0;;;;;;;:7;:15;;;;;;:46;;;;29780:18;;;;;;;:39;;29803:15;29780:22;:39::i;:::-;-1:-1:-1;;;;;29759:18:0;;;;;;:7;:18;;;;;:60;29833:26;29848:10;29833:14;:26::i;:::-;29870:23;29882:4;29888;29870:11;:23::i;:::-;29926:9;-1:-1:-1;;;;;29909:44:0;29918:6;-1:-1:-1;;;;;29909:44:0;;29937:15;29909:44;;;;1982:25:1;;1970:2;1955:18;;1836:177;29909:44:0;;;;;;;;29426:535;;;;;;29335:626;;;:::o;28681:646::-;28782:15;28799:23;28824:12;28838:23;28863:12;28877:18;28899:19;28910:7;28899:10;:19::i;:::-;28781:137;;;;;;;;;;;;28929:49;28951:9;28962:15;28929:21;:49::i;:::-;-1:-1:-1;;;;;29007:15:0;;;;;;:7;:15;;;;;;:28;;29027:7;29007:19;:28::i;:::-;-1:-1:-1;;;;;28989:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29067:18;;;;;:7;:18;;;;;:39;;29090:15;29067:22;:39::i;:::-;-1:-1:-1;;;;;29046:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29138:7;:18;;;;:39;;29161:15;29138:22;:39::i;28111:562::-;28210:15;28227:23;28252:12;28266:23;28291:12;28305:18;28327:19;28338:7;28327:10;:19::i;:::-;28209:137;;;;;;;;;;;;28357:49;28379:9;28390:15;28357:21;:49::i;:::-;-1:-1:-1;;;;;28435:15:0;;;;;;:7;:15;;;;;;:28;;28455:7;28435:19;:28::i;29969:702::-;30072:15;30089:23;30114:12;30128:23;30153:12;30167:18;30189:19;30200:7;30189:10;:19::i;:::-;30071:137;;;;;;;;;;;;30219:49;30241:9;30252:15;30219:21;:49::i;:::-;-1:-1:-1;;;;;30297:15:0;;;;;;:7;:15;;;;;;:28;;30317:7;30297:19;:28::i;:::-;-1:-1:-1;;;;;30279:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30354:7;:15;;;;:28;;30374:7;30354:19;:28::i;21276:154::-;21340:7;21367:55;21406:5;21367:20;21379:7;;21367;:11;;:20;;;;:::i;21438:176::-;21508:7;21535:71;21590:5;21535:36;21563:7;;21547:13;;:23;;;;:::i;:::-;21535:7;;:11;:36::i;22601:317::-;-1:-1:-1;;;;;22691:30:0;;;;;;:26;:30;;;;;;;;22690:31;:48;;;;-1:-1:-1;22725:13:0;;-1:-1:-1;;;22725:13:0;;;;22690:48;22684:227;;;22810:15;;22781:25;22799:6;22781:13;22791:2;22781:9;:13::i;:::-;:17;;:25::i;:::-;:44;;22755:144;;;;-1:-1:-1;;;22755:144:0;;15835:2:1;22755:144:0;;;15817:21:1;15874:2;15854:18;;;15847:30;15913:34;15893:18;;;15886:62;-1:-1:-1;;;15964:18:1;;;15957:36;16010:19;;22755:144:0;15633:402:1;20907:357:0;20970:19;20993:10;:8;:10::i;:::-;20970:33;-1:-1:-1;21014:18:0;21035:27;:10;20970:33;21035:14;:27::i;:::-;21114:4;21098:22;;;;:7;:22;;;;;;21014:48;;-1:-1:-1;21098:38:0;;21014:48;21098:26;:38::i;:::-;21089:4;21073:22;;;;:7;:22;;;;;;;;:63;;;;21150:11;:26;;;;;;21147:107;;;21232:4;21216:22;;;;:7;:22;;;;;;:38;;21243:10;21216:26;:38::i;:::-;21207:4;21191:22;;;;:7;:22;;;;;:63;20959:305;;20907:357;:::o;18806:147::-;18884:7;;:17;;18896:4;18884:11;:17::i;:::-;18874:7;:27;18925:10;;:20;;18940:4;18925:14;:20::i;:::-;18912:10;:33;-1:-1:-1;;18806:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:548::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;878:3;1063:1;1058:2;1049:6;1038:9;1034:22;1030:31;1023:42;1133:2;1126;1122:7;1117:2;1109:6;1105:15;1101:29;1090:9;1086:45;1082:54;1074:62;;;;594:548;;;;:::o;1147:315::-;1215:6;1223;1276:2;1264:9;1255:7;1251:23;1247:32;1244:52;;;1292:1;1289;1282:12;1244:52;1331:9;1318:23;1350:31;1375:5;1350:31;:::i;:::-;1400:5;1452:2;1437:18;;;;1424:32;;-1:-1:-1;;;1147:315:1:o;1467:118::-;1553:5;1546:13;1539:21;1532:5;1529:32;1519:60;;1575:1;1572;1565:12;1590:241;1646:6;1699:2;1687:9;1678:7;1674:23;1670:32;1667:52;;;1715:1;1712;1705:12;1667:52;1754:9;1741:23;1773:28;1795:5;1773:28;:::i;2018:316::-;2095:6;2103;2111;2164:2;2152:9;2143:7;2139:23;2135:32;2132:52;;;2180:1;2177;2170:12;2132:52;-1:-1:-1;;2203:23:1;;;2273:2;2258:18;;2245:32;;-1:-1:-1;2324:2:1;2309:18;;;2296:32;;2018:316;-1:-1:-1;2018:316:1:o;2339:456::-;2416:6;2424;2432;2485:2;2473:9;2464:7;2460:23;2456:32;2453:52;;;2501:1;2498;2491:12;2453:52;2540:9;2527:23;2559:31;2584:5;2559:31;:::i;:::-;2609:5;-1:-1:-1;2666:2:1;2651:18;;2638:32;2679:33;2638:32;2679:33;:::i;:::-;2339:456;;2731:7;;-1:-1:-1;;;2785:2:1;2770:18;;;;2757:32;;2339:456::o;3357:180::-;3416:6;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;-1:-1:-1;3508:23:1;;3357:180;-1:-1:-1;3357:180:1:o;3731:309::-;3796:6;3804;3857:2;3845:9;3836:7;3832:23;3828:32;3825:52;;;3873:1;3870;3863:12;3825:52;3909:9;3896:23;3886:33;;3969:2;3958:9;3954:18;3941:32;3982:28;4004:5;3982:28;:::i;:::-;4029:5;4019:15;;;3731:309;;;;;:::o;4253:382::-;4318:6;4326;4379:2;4367:9;4358:7;4354:23;4350:32;4347:52;;;4395:1;4392;4385:12;4347:52;4434:9;4421:23;4453:31;4478:5;4453:31;:::i;:::-;4503:5;-1:-1:-1;4560:2:1;4545:18;;4532:32;4573:30;4532:32;4573:30;:::i;4640:388::-;4708:6;4716;4769:2;4757:9;4748:7;4744:23;4740:32;4737:52;;;4785:1;4782;4775:12;4737:52;4824:9;4811:23;4843:31;4868:5;4843:31;:::i;:::-;4893:5;-1:-1:-1;4950:2:1;4935:18;;4922:32;4963:33;4922:32;4963:33;:::i;5033:356::-;5235:2;5217:21;;;5254:18;;;5247:30;5313:34;5308:2;5293:18;;5286:62;5380:2;5365:18;;5033:356::o;6098:127::-;6159:10;6154:3;6150:20;6147:1;6140:31;6190:4;6187:1;6180:15;6214:4;6211:1;6204:15;6230:127;6291:10;6286:3;6282:20;6279:1;6272:31;6322:4;6319:1;6312:15;6346:4;6343:1;6336:15;6362:128;6429:9;;;6450:11;;;6447:37;;;6464:18;;:::i;6495:127::-;6556:10;6551:3;6547:20;6544:1;6537:31;6587:4;6584:1;6577:15;6611:4;6608:1;6601:15;6627:135;6666:3;6687:17;;;6684:43;;6707:18;;:::i;:::-;-1:-1:-1;6754:1:1;6743:13;;6627:135::o;8155:251::-;8225:6;8278:2;8266:9;8257:7;8253:23;8249:32;8246:52;;;8294:1;8291;8284:12;8246:52;8326:9;8320:16;8345:31;8370:5;8345:31;:::i;8999:245::-;9066:6;9119:2;9107:9;9098:7;9094:23;9090:32;9087:52;;;9135:1;9132;9125:12;9087:52;9167:9;9161:16;9186:28;9208:5;9186:28;:::i;9656:168::-;9729:9;;;9760;;9777:15;;;9771:22;;9757:37;9747:71;;9798:18;;:::i;9829:217::-;9869:1;9895;9885:132;;9939:10;9934:3;9930:20;9927:1;9920:31;9974:4;9971:1;9964:15;10002:4;9999:1;9992:15;9885:132;-1:-1:-1;10031:9:1;;9829:217::o;12702:125::-;12767:9;;;12788:10;;;12785:36;;;12801:18;;:::i;13320:461::-;13373:3;13411:5;13405:12;13438:6;13433:3;13426:19;13464:4;13493:2;13488:3;13484:12;13477:19;;13530:2;13523:5;13519:14;13551:1;13561:195;13575:6;13572:1;13569:13;13561:195;;;13640:13;;-1:-1:-1;;;;;13636:39:1;13624:52;;13696:12;;;;13731:15;;;;13672:1;13590:9;13561:195;;;-1:-1:-1;13772:3:1;;13320:461;-1:-1:-1;;;;;13320:461:1:o;13786:582::-;14085:6;14074:9;14067:25;14128:6;14123:2;14112:9;14108:18;14101:34;14171:3;14166:2;14155:9;14151:18;14144:31;14048:4;14192:57;14244:3;14233:9;14229:19;14221:6;14192:57;:::i;:::-;-1:-1:-1;;;;;14285:32:1;;;;14280:2;14265:18;;14258:60;-1:-1:-1;14349:3:1;14334:19;14327:35;14184:65;13786:582;-1:-1:-1;;;13786:582:1:o;14373:332::-;14580:6;14569:9;14562:25;14623:2;14618;14607:9;14603:18;14596:30;14543:4;14643:56;14695:2;14684:9;14680:18;14672:6;14643:56;:::i;:::-;14635:64;14373:332;-1:-1:-1;;;;14373:332:1:o;15322:306::-;15410:6;15418;15426;15479:2;15467:9;15458:7;15454:23;15450:32;15447:52;;;15495:1;15492;15485:12;15447:52;15524:9;15518:16;15508:26;;15574:2;15563:9;15559:18;15553:25;15543:35;;15618:2;15607:9;15603:18;15597:25;15587:35;;15322:306;;;;;:::o

Swarm Source

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