ETH Price: $2,497.83 (+12.29%)
Gas: 2.31 Gwei
 

Overview

Max Total Supply

10,000,000,000,000 PISCES

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
222,035,230.202946137 PISCES

Value
$0.00
0xcfb193c1a424733ad72af448e2a98695d0e001cc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Pisces

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

*/

/*

Pisces (PISCES)

Telegram: https://t.me/piscesportal
Twitter: https://twitter.com/Pisceserc20

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    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 Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

contract Pisces is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Pisces';
    string private constant _symbol = 'PISCES';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 200 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 200 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0
    });
    uint256 internal totalFee = 3000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = true;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal marketing_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal default_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal reflectionsWallet = 0x2D061cf219F065B37cb3d57B1c47B315cB8eba1F;
    address internal burnWallet = 0x1eD739DdF970163Db66C1F3c5f957BA6dd703D5d;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;

    bool currentEvent;
    bool public reflections = true;
    bool public burn = true;
    uint256 public reflectionsAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public burnAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public reflectionsPercent = 100;
    uint256 public burnPercent = 100;
    uint256 public reflectionsTime;
    uint256 public lastReflectionsTime;
    uint256 public burnTime;
    uint256 public lastBurnTime;
    uint256 public reflectionsInterval = 30 minutes;
    uint256 public burnInterval = 25 minutes;
    uint256 public totalBurn;
    uint256 public totalReflection;
    uint256 public totalBurnEvents;
    uint256 public totalReflectionEvents;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 taxes;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTaxes;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTaxes;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router; pair = _pair;
        _rOwned[owner] = _rTotal;
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
        _isExcluded[address(pair)] = true;
        _isExcluded[address(this)] = true;
        _isExcluded[address(DEAD)] = true;
        _isExcluded[address(0x0)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[reflectionsWallet] = true;
        isFeeExempt[burnWallet] = true;
        isFeeExempt[address(DEAD)] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    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(msg.sender, 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(msg.sender, spender, amount); return true;}
    function totalFeeReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

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

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

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

    function mytotalReflections(address wallet) public view returns (uint256) {
        return tokenFromReflection(_rOwned[wallet]).sub(_tOwned[wallet]);
    }

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        checkIntervals(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || swapping || currentEvent), recipient == pair, sender == pair, false);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !currentEvent){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi, bool isReflections) private {
        _rTotal -=rRfi;
        if(!isReflections){totFeesPaid.rfi +=tRfi;}
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi, isReflections);
        _takeTaxes(s.rTaxes, s.tTaxes);
        if(s.tTransferAmount > uint256(0)){emit Transfer(sender, recipient, s.tTransferAmount);}
        if(s.tTaxes > uint256(0)){emit Transfer(sender, address(this), s.tTaxes);}
    }

    function checkIntervals(address sender, address recipient) internal {
        if(reflectionsTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && reflections && balanceOf(reflectionsWallet) > uint256(0) && !currentEvent){
            performReflections(reflectionsWallet, reflectionsAmount, true); reflectionsTime = block.timestamp.add(reflectionsInterval);}
        if(burnTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && burn && balanceOf(burnWallet) > uint256(0) && !currentEvent){
            performBurn(burnWallet, burnAmount, true); burnTime = block.timestamp.add(burnInterval);}
    }

    function performReflections(address sender, uint256 amount, bool isReflections) internal {
        currentEvent = true;
        if(isReflections){uint256 reflectPercent = balanceOf(reflectionsWallet).mul(reflectionsPercent).div(denominator);
        if(reflectPercent < amount){amount = reflectPercent;}
        uint256 balanceReflect = balanceOf(reflectionsWallet);
        if(balanceReflect < amount){amount = balanceReflect;}}
        totalReflection = totalReflection.add(amount);
        lastReflectionsTime = block.timestamp;
        totalReflectionEvents = totalReflectionEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(0x0), amount, false, false, false, true);
        currentEvent = false;
    }

    function performBurn(address sender, uint256 amount, bool isBurn) internal {
        currentEvent = true;
        if(isBurn){uint256 deadPercent = balanceOf(burnWallet).mul(burnPercent).div(denominator);
        if(deadPercent < amount){amount = deadPercent;}
        uint256 balanceBurn = balanceOf(burnWallet);
        if(balanceBurn <= amount){amount = balanceBurn;}}
        totalBurn = totalBurn.add(amount);
        lastBurnTime = block.timestamp;
        totalBurnEvents = totalBurnEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(DEAD), amount, false, false, false, false);
        currentEvent = false;
    }

    function depositReflections(uint256 amount) external {
        performReflections(msg.sender, amount, false);
    }

    function depositBurn(uint256 amount) external {
        performBurn(msg.sender, amount, false);
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !currentEvent;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 eAmount = address(this).balance;
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

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

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setBaseTimes() external onlyOwner {
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
    }

    function setPairAddress(address pairAddress) external onlyOwner {
        pair = pairAddress; _isExcluded[address(pairAddress)] = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _default) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; default_receiver = _default;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_default] = true;
    }

    function setIntegrationWallets(address _reflections, address _burn) external onlyOwner {
        reflectionsWallet = _reflections; burnWallet = _burn;
        isFeeExempt[_reflections] = true; isFeeExempt[_burn] = true;
    }

    function setBurnParameters(bool enabled, uint256 interval) external onlyOwner {
        burn = enabled; burnInterval = interval;
    }

    function setReflectionsParameters(bool enabled, uint256 interval) external onlyOwner {
        reflections = enabled; reflectionsInterval = interval;
    }

    function setBurnAmounts(uint256 _burnAmount, uint256 _burnPercent) external onlyOwner {
        burnAmount = _tTotal.mul(_burnAmount).div(100000); burnPercent = _burnPercent;
    }

    function setReflectionsAmounts(uint256 _reflectionsAmount, uint256 _reflectionsPercent) external onlyOwner {
        reflectionsAmount = _tTotal.mul(_reflectionsAmount).div(100000); reflectionsPercent = _reflectionsPercent;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

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

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

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

    function includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not 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 _takeTaxes(uint256 rTaxes, uint256 tTaxes) private {
        totFeesPaid.taxes +=tTaxes;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTaxes;
        }
        _rOwned[address(this)] +=rTaxes;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTaxes) = _getRValues(to_return, tAmount, takeFee, _getRate(), isReflections);
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory s) {
        if(!takeFee && !isReflections || isFeeless(isSale, isPurchase) && !isReflections) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale && !isReflections){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isReflections){
            s.tRfi = tAmount;
            s.tTransferAmount = tAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate, bool isReflections) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rTaxes) {
        rAmount = tAmount*currentRate;
        if(!takeFee && !isReflections){
            return(rAmount, rAmount, 0,0);}
        if(isReflections){
            rRfi = s.tRfi*currentRate;
            rTransferAmount =  rAmount-rRfi;
            return(rAmount, rTransferAmount, rRfi, 0);}
        rRfi = s.tRfi*currentRate;
        rTaxes = s.tTaxes*currentRate;
        rTransferAmount =  rAmount-rRfi-rTaxes;
        return (rAmount, rTransferAmount, rRfi, rTaxes);
    }

    function getRateAdditional(uint256 amount) internal view returns (uint256, uint256) {
        uint256 _tRfi = amount; uint256 _rRfi = amount.mul(_getRate());
        return(_rRfi, _tRfi);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/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-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTime","outputs":[{"internalType":"uint256","name":"","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":"amount","type":"uint256"}],"name":"depositBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","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":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastReflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setBaseTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_burnPercent","type":"uint256"}],"name":"setBurnAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBurnParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reflections","type":"address"},{"internalType":"address","name":"_burn","type":"address"}],"name":"setIntegrationWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_default","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionsAmount","type":"uint256"},{"internalType":"uint256","name":"_reflectionsPercent","type":"uint256"}],"name":"setReflectionsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setReflectionsParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","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":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionEvents","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200069a565b62000024906509184e72a000620006ab565b60018190556200003790600019620006db565b6200004590600019620006f2565b60025561271060015460c86200005c9190620006ab565b62000068919062000708565b60035561271060015460c86200007f9190620006ab565b6200008b919062000708565b600455604080516060810182526000808252606460208301819052919092018290526005829055600655600755610bb86008556117706009819055600a55612710600b55600c805461ff001916610100179055600154620186a090620000f4906103e8620006ab565b62000100919062000708565b600d55620186a0600154600a620001189190620006ab565b62000124919062000708565b600e55600f805460ff191660019081179091556011819055601280546001600160a01b031990811661dead179091556013805482167346403620990b95c23c2a71fb512fbf879db0b6c7908117909155601480548316821790556015805483169091179055601680548216732d061cf219f065b37cb3d57b1c47b315cb8eba1f17905560178054909116731ed739ddf970163db66c1f3c5f957ba6dd703d5d179055601f805461010160a81b61ffff60a81b1990911617905554620186a090620001f190612710620006ab565b620001fd919062000708565b602055620186a0600154612710620002169190620006ab565b62000222919062000708565b602155606460225560646023556107086028556105dc6029553480156200024857600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d691906200071f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a91906200071f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200071f565b601e80546001600160a01b038086166001600160a01b031992831617909255601f8054838516921691909117905560025460008054909216825260186020526040909120556028549091506200041690429062000570565b6024556029546200042990429062000570565b602655601f546001600160a01b039081166000908152601b602090815260408083208054600160ff199182168117909255308086528386208054831684179055601280548816875284872080548416851790557f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea8054841685179055338752601c8652848720805484168517905590865283862080548316841790556013548716865283862080548316841790556014548716865283862080548316841790556015548716865283862080548316841790556016548716865283862080548316841790556017548716865283862080548316841790555486168552828520805490911682179055835490549151918252909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000767565b60006200057e828462000751565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005de578160001904821115620005c257620005c262000587565b80851615620005d057918102915b93841c9390800290620005a2565b509250929050565b600082620005f75750600162000581565b81620006065750600062000581565b81600181146200061f57600281146200062a576200064a565b600191505062000581565b60ff8411156200063e576200063e62000587565b50506001821b62000581565b5060208310610133831016604e8410600b84101617156200066f575081810a62000581565b6200067b83836200059d565b806000190482111562000692576200069262000587565b029392505050565b60006200057e60ff841683620005e6565b808202811582820484141762000581576200058162000587565b634e487b7160e01b600052601260045260246000fd5b600082620006ed57620006ed620006c5565b500690565b8181038181111562000581576200058162000587565b6000826200071a576200071a620006c5565b500490565b6000602082840312156200073257600080fd5b81516001600160a01b03811681146200074a57600080fd5b9392505050565b8082018082111562000581576200058162000587565b61346980620007776000396000f3fe60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a9a578063f09f694e14610ab0578063f2fde38b14610ad0578063f887ea4014610af057600080fd5b8063e480034514610a2f578063e55a68b314610a4f578063e94dd17c14610a65578063e960e68e14610a8557600080fd5b8063d1571e47116100dc578063d1571e4714610992578063dd62ed3e146109b3578063dfa5f4ea146109f9578063e306744914610a1957600080fd5b8063a9059cbb1461093c578063b2118a8d1461095c578063ca221c081461097c57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ae578063a22d4832146108c4578063a457c2d7146108e4578063a8aa1b311461090457600080fd5b80638ebfc7961461081f5780639213c3581461083f57806395b186411461085f57806395d89b411461087f57600080fd5b806384836778116101b657806384836778146107a957806384b81093146107c9578063884870c7146107df5780638cf2e94a146107ff57600080fd5b80637934f4f2146107445780637d1db4a51461075a5780637d459db31461077057600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d957806370a08231146106ee57806378109e541461070e578063783b5a0a1461072457600080fd5b806344df8e70146106625780634549b03914610683578063486a7e6b146106a357806354b822cf146106b957600080fd5b8063395093511161029b57806339509351146105e65780633c9f861d146106065780633f4218e01461061c578063404ca34a1461064c57600080fd5b80633052ea0814610594578063313ce567146105b457806337f0d4c8146105d057600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105105780632cbf5360146105255780632d838119146105455780632f54bf6e1461056557600080fd5b806322849720146104a557806323b872dd146104bb57806327334a08146104db578063293230b8146104fb57600080fd5b8063095ea7b311610375578063095ea7b31461042a5780630e7daf6d1461045a57806311403aec1461047057806318160ddd1461049057600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f77565b610b10565b005b3480156103fe57600080fd5b5060408051808201909152600681526550697363657360d01b60208201525b6040516103c79190612f94565b34801561043657600080fd5b5061044a610445366004612fe2565b610ccf565b60405190151581526020016103c7565b34801561046657600080fd5b506103bd60225481565b34801561047c57600080fd5b506103f061048b36600461300e565b610ce6565b34801561049c57600080fd5b506001546103bd565b3480156104b157600080fd5b506103bd602b5481565b3480156104c757600080fd5b5061044a6104d6366004613027565b610cf5565b3480156104e757600080fd5b506103f06104f6366004612f77565b610d5e565b34801561050757600080fd5b506103f0610eb1565b34801561051c57600080fd5b506103bd610eea565b34801561053157600080fd5b506103f0610540366004613068565b610f26565b34801561055157600080fd5b506103bd61056036600461300e565b610f7b565b34801561057157600080fd5b5061044a610580366004612f77565b6000546001600160a01b0391821691161490565b3480156105a057600080fd5b506103f06105af36600461300e565b610fff565b3480156105c057600080fd5b50604051600981526020016103c7565b3480156105dc57600080fd5b506103bd602d5481565b3480156105f257600080fd5b5061044a610601366004612fe2565b611076565b34801561061257600080fd5b506103bd602a5481565b34801561062857600080fd5b5061044a610637366004612f77565b601c6020526000908152604090205460ff1681565b34801561065857600080fd5b506103bd60205481565b34801561066e57600080fd5b50601f5461044a90600160b01b900460ff1681565b34801561068f57600080fd5b506103bd61069e366004613098565b6110ad565b3480156106af57600080fd5b506103bd60215481565b3480156106c557600080fd5b506103f06106d436600461300e565b611141565b3480156106e557600080fd5b506103f061114d565b3480156106fa57600080fd5b506103bd610709366004612f77565b61119b565b34801561071a57600080fd5b506103bd60045481565b34801561073057600080fd5b506103f061073f3660046130c8565b6111fa565b34801561075057600080fd5b506103bd60255481565b34801561076657600080fd5b506103bd60035481565b34801561077c57600080fd5b5061044a61078b366004612f77565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b557600080fd5b506103f06107c43660046130f6565b61124c565b3480156107d557600080fd5b506103bd60285481565b3480156107eb57600080fd5b506103f06107fa366004613068565b6112cb565b34801561080b57600080fd5b506103bd61081a366004612f77565b6113db565b34801561082b57600080fd5b506103f061083a366004613139565b61140d565b34801561084b57600080fd5b506103f061085a366004613167565b611462565b34801561086b57600080fd5b506103f061087a366004613068565b611508565b34801561088b57600080fd5b5060408051808201909152600681526550495343455360d01b602082015261041d565b3480156108ba57600080fd5b506103bd602c5481565b3480156108d057600080fd5b506103f06108df366004612f77565b611557565b3480156108f057600080fd5b5061044a6108ff366004612fe2565b6115bb565b34801561091057600080fd5b50601f54610924906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094857600080fd5b5061044a610957366004612fe2565b61160a565b34801561096857600080fd5b506103f0610977366004613027565b611617565b34801561098857600080fd5b506103bd60245481565b34801561099e57600080fd5b50601f5461044a90600160a81b900460ff1681565b3480156109bf57600080fd5b506103bd6109ce3660046131b2565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103f0610a143660046131d0565b611743565b348015610a2557600080fd5b506103bd60275481565b348015610a3b57600080fd5b506103f0610a4a3660046131d0565b61178f565b348015610a5b57600080fd5b506103bd60295481565b348015610a7157600080fd5b506103f0610a803660046131ee565b6117db565b348015610a9157600080fd5b50602e546103bd565b348015610aa657600080fd5b506103bd60265481565b348015610abc57600080fd5b506103f0610acb3660046131b2565b611841565b348015610adc57600080fd5b506103f0610aeb366004612f77565b6118ca565b348015610afc57600080fd5b50601e54610924906001600160a01b031681565b6000546001600160a01b03163314610b435760405162461bcd60e51b8152600401610b3a9061321a565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610bab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b3a565b60005b601d54811015610ccb57816001600160a01b0316601d8281548110610bd557610bd561323a565b6000918252602090912001546001600160a01b031603610cb957601d8054610bff90600190613266565b81548110610c0f57610c0f61323a565b600091825260209091200154601d80546001600160a01b039092169183908110610c3b57610c3b61323a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9357610c93613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc38161328f565b915050610bae565b5050565b6000610cdc338484611948565b5060015b92915050565b610cf233826000611a6c565b50565b6000610d02848484611b43565b610d548433610d4f856040518060600160405280602881526020016133e7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c18565b611948565b5060019392505050565b6000546001600160a01b03163314610d885760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b0381166000908152601b602052604090205460ff1615610df15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b3a565b6001600160a01b03811660009081526018602052604090205415610e4b576001600160a01b038116600090815260186020526040902054610e3190610f7b565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610b3a9061321a565b600f805460ff19166001179055565b6000610f21610ef9600061119b565b601254610f1b90610f12906001600160a01b031661119b565b60015490611c44565b90611c44565b905090565b6000546001600160a01b03163314610f505760405162461bcd60e51b8152600401610b3a9061321a565b610f72620186a0610f6c84600154611c5090919063ffffffff16565b90611c5c565b60215560235550565b6000600254821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b3a565b6000610fec611c68565b9050610ff881846132a8565b9392505050565b6000546001600160a01b031633146110295760405162461bcd60e51b8152600401610b3a9061321a565b60155447906001600160a01b03166108fc6110496064610f6c8587611c50565b6040518115909202916000818181858888f19350505050158015611071573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cdc918590610d4f9086906132ca565b60006001548311156111015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b3a565b816111225760006111188460016000806000611c8b565b519150610ce09050565b60006111348460016000806000611c8b565b602001519150610ce09050565b610cf233826000611d09565b6000546001600160a01b031633146111775760405162461bcd60e51b8152600401610b3a9061321a565b602854611185904290611dd1565b602455602954611196904290611dd1565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d857506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610ce090610f7b565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610b3a9061321a565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112aa5750600b5460095411155b80156112ba5750600b54600a5411155b6112c357600080fd5b505050505050565b6000546001600160a01b031633146112f55760405162461bcd60e51b8152600401610b3a9061321a565b6000611312600b54610f6c85600154611c5090919063ffffffff16565b90506000611331600b54610f6c85600154611c5090919063ffffffff16565b90506000611351620186a0610f6c60018054611c5090919063ffffffff16565b90508083101580156113635750808210155b6113cd5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b3a565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610ce09190610f1b90610f7b565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610b3a9061321a565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610b3a9061321a565b61154e620186a0610f6c84600154611c5090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610b3a9061321a565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cdc3384610d4f8560405180606001604052806025815260200161340f60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c18565b6000610cdc338484611b43565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610b3a9061321a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac91906132dd565b90506001600160a01b03841663a9059cbb846116cd6064610f6c8688611c50565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c91906132f6565b5050505050565b6000546001600160a01b0316331461176d5760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610b3a9061321a565b601183905560015461182090620186a090610f6c9085611c50565b600d5560015461183990620186a090610f6c9084611c50565b600e55505050565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610b3a9061321a565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b8152600401610b3a9061321a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3a565b6001600160a01b038216611a0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3a565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aee576000611ab7600b54610f6c602254611ab1601660009054906101000a90046001600160a01b031661119b565b90611c50565b905082811015611ac5578092505b601654600090611add906001600160a01b031661119b565b905083811015611aeb578093505b50505b602b54611afb9083611dd1565b602b5542602555602d54611b10906001611dd1565b602d55611b1e833084611948565b611b318360008460008060006001611ddd565b5050601f805460ff60a01b1916905550565b611b4e838383612012565b611b58838361214a565b611b638383836121e3565b611b6e8284836122f2565b611b78838361237e565b611b838383836123f3565b611b8d8383612418565b6001600160a01b0383166000908152601c60205260409020546110719084908490849060ff1680611bd657506001600160a01b0386166000908152601c602052604090205460ff165b80611be35750600c5460ff165b80611bf75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddd565b60008184841115611c3c5760405162461bcd60e51b8152600401610b3a9190612f94565b505050900390565b6000610ff88284613266565b6000610ff88284613313565b6000610ff882846132a8565b6000806000611c756125bd565b9092509050611c8481836132a8565b9250505090565b611ccb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd88686868686612740565b9050611cee818787611ce8611c68565b86612968565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d84576000611d4e600b54610f6c602354611ab1601760009054906101000a90046001600160a01b031661119b565b905082811015611d5c578092505b601754600090611d74906001600160a01b031661119b565b9050838111611d81578093505b50505b602a54611d919083611dd1565b602a5542602755602c54611da6906001611dd1565b602c55611db4833084611948565b601254611b319084906001600160a01b0316846000808080611ddd565b6000610ff882846132ca565b6000611dec8686868686611c8b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4e576001600160a01b038816600090815260196020526040902054611e34908790613266565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eb15760808101516001600160a01b038816600090815260196020526040902054611e9791906132ca565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed69190613266565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0d91906132ca565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3e919084612a0d565b611f5081606001518260c00151612a49565b608081015115611fac57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa391815260200190565b60405180910390a35b60c08101511561200857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fff91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120765760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b3a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b3a565b6120e18361119b565b8111156110715760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610ccb57600f5460ff16610ccb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222557506001600160a01b0383166000908152601c602052604090205460ff16155b801561223a57506001600160a01b0382163014155b801561225457506012546001600160a01b03838116911614155b801561226e5750601f546001600160a01b03838116911614155b801561228857506013546001600160a01b03838116911614155b15611071576004548161229a8461119b565b6122a491906132ca565b11156110715760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b3a565b6003548111158061231b57506001600160a01b0382166000908152601c602052604090205460ff165b8061233e57506001600160a01b0383166000908152601c602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b3a565b601f546001600160a01b0382811691161480156123b457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c35750600c5460ff16155b80156123d95750601f54600160a01b900460ff16155b15610ccb576010546123ec906001611dd1565b6010555050565b6123fe838383612ac8565b156110715761240e600d54612b8e565b6000601055505050565b426024541115801561242d5750600c5460ff16155b80156124465750601f546001600160a01b038281169116145b801561246b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124805750601f54600160a81b900460ff165b80156124a1575060165460009061249f906001600160a01b031661119b565b115b80156124b75750601f54600160a01b900460ff16155b156124e9576016546020546124d7916001600160a01b0316906001611a6c565b6028546124e5904290611dd1565b6024555b42602654111580156124fe5750600c5460ff16155b80156125175750601f546001600160a01b038281169116145b801561253c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125515750601f54600160b01b900460ff165b80156125725750601754600090612570906001600160a01b031661119b565b115b80156125885750601f54600160a01b900460ff16155b15610ccb576017546021546125a8916001600160a01b0316906001611d09565b6029546125b6904290611dd1565b6026555050565b6002546001546000918291825b601d5481101561270f578260186000601d84815481106125ec576125ec61323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265757508160196000601d84815481106126305761263061323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57600254600154945094505050509091565b60186000601d83815481106126845761268461323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b39084613266565b925060196000601d83815481106126cc576126cc61323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126fb9083613266565b9150806127078161328f565b9150506125ca565b5060015460025461272091906132a8565b821015612737576002546001549350935050509091565b90939092509050565b6127806040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278c575081155b806127a6575061279c8484612d1d565b80156127a6575081155b156127b75760808101869052611d00565b831580156127c3575082155b80156127cd575081155b156128455760006127ef600b54610f6c600a548a611c5090919063ffffffff16565b9050600a546005600001541161281f57600b5460055461280f9089613313565b61281991906132a8565b60a08301525b60a082015161282f908290611c44565b60c083015261283e8188613266565b6080830152505b838015612850575081155b156128c8576000612872600b54610f6c6009548a611c5090919063ffffffff16565b9050600954600560000154116128a257600b546005546128929089613313565b61289c91906132a8565b60a08301525b60a08201516128b2908290611c44565b60c08301526128c18188613266565b6080830152505b8280156128d3575081155b1561294b5760006128f5600b54610f6c6008548a611c5090919063ffffffff16565b90506008546005600001541161292557600b546005546129159089613313565b61291f91906132a8565b60a08301525b60a0820151612935908290611c44565b60c08301526129448188613266565b6080830152505b8115611d005760a081018690526080810186905295945050505050565b60008080806129778689613313565b935086158015612985575084155b1561299857508291506000905080612a01565b84156129c557858960a001516129ae9190613313565b91506129ba8285613266565b925060009050612a01565b858960a001516129d59190613313565b9150858960c001516129e79190613313565b9050806129f48386613266565b6129fe9190613266565b92505b95509550955095915050565b8260026000828254612a1f9190613266565b909155508190506110715781602e6000016000828254612a3f91906132ca565b9091555050505050565b80602e6001016000828254612a5e91906132ca565b9091555050306000908152601b602052604090205460ff1615612aa0573060009081526019602052604081208054839290612a9a9084906132ca565b90915550505b3060009081526018602052604081208054849290612abf9084906132ca565b90915550505050565b600080600e5483101590506000600d54612ae13061119b565b600c54911115915060ff16158015612b005750600c54610100900460ff165b8015612b095750815b8015612b2e57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3c5750600f5460ff165b8015612b555750601f546001600160a01b038681169116145b8015612b65575060115460105410155b8015612b6e5750805b8015612b845750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb591600291611ab19190611dd1565b9050600854600003612be757600654600754612be491600291611ab191600191612bde91611dd1565b90611dd1565b90505b6007546000908290612bf99085613313565b612c0391906132a8565b90506000612c118285613266565b905047612c1d82612d63565b6000612c298247613266565b600754909150600090612c3c9087613266565b612c4690836132a8565b600754909150600090612c599083613313565b90508015612c6b57612c6b8682612eb5565b600654600090612c8090611ab1856002611c50565b90508015612cc4576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc2573d6000803e3d6000fd5b505b478015612d07576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d05573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2c5750600954155b80612d3f5750818015612d3f5750600854155b80610ff8575082158015612d51575081155b8015610ff8575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d9861323a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e15919061332a565b81600181518110612e2857612e2861323a565b6001600160a01b039283166020918202929092010152601e54612e4e9130911684611948565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e87908590600090869030904290600401613347565b600060405180830381600087803b158015612ea157600080fd5b505af11580156112c3573d6000803e3d6000fd5b601e54612ecd9030906001600160a01b031684611948565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173c91906133b8565b6001600160a01b0381168114610cf257600080fd5b600060208284031215612f8957600080fd5b8135610ff881612f62565b600060208083528351808285015260005b81811015612fc157858101830151858201604001528201612fa5565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff557600080fd5b823561300081612f62565b946020939093013593505050565b60006020828403121561302057600080fd5b5035919050565b60008060006060848603121561303c57600080fd5b833561304781612f62565b9250602084013561305781612f62565b929592945050506040919091013590565b6000806040838503121561307b57600080fd5b50508035926020909101359150565b8015158114610cf257600080fd5b600080604083850312156130ab57600080fd5b8235915060208301356130bd8161308a565b809150509250929050565b600080604083850312156130db57600080fd5b82356130e68161308a565b915060208301356130bd81612f62565b60008060008060008060c0878903121561310f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314c57600080fd5b823561315781612f62565b915060208301356130bd8161308a565b60008060006060848603121561317c57600080fd5b833561318781612f62565b9250602084013561319781612f62565b915060408401356131a781612f62565b809150509250925092565b600080604083850312156131c557600080fd5b82356130e681612f62565b600080604083850312156131e357600080fd5b82356130008161308a565b60008060006060848603121561320357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ce057610ce0613250565b634e487b7160e01b600052603160045260246000fd5b6000600182016132a1576132a1613250565b5060010190565b6000826132c557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce057610ce0613250565b6000602082840312156132ef57600080fd5b5051919050565b60006020828403121561330857600080fd5b8151610ff88161308a565b8082028115828204841417610ce057610ce0613250565b60006020828403121561333c57600080fd5b8151610ff881612f62565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133975784516001600160a01b031683529383019391830191600101613372565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a333b0febcb20c09115ad73dbe2d4290f7f7733719e724c558047f83869ce8c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a9a578063f09f694e14610ab0578063f2fde38b14610ad0578063f887ea4014610af057600080fd5b8063e480034514610a2f578063e55a68b314610a4f578063e94dd17c14610a65578063e960e68e14610a8557600080fd5b8063d1571e47116100dc578063d1571e4714610992578063dd62ed3e146109b3578063dfa5f4ea146109f9578063e306744914610a1957600080fd5b8063a9059cbb1461093c578063b2118a8d1461095c578063ca221c081461097c57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ae578063a22d4832146108c4578063a457c2d7146108e4578063a8aa1b311461090457600080fd5b80638ebfc7961461081f5780639213c3581461083f57806395b186411461085f57806395d89b411461087f57600080fd5b806384836778116101b657806384836778146107a957806384b81093146107c9578063884870c7146107df5780638cf2e94a146107ff57600080fd5b80637934f4f2146107445780637d1db4a51461075a5780637d459db31461077057600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d957806370a08231146106ee57806378109e541461070e578063783b5a0a1461072457600080fd5b806344df8e70146106625780634549b03914610683578063486a7e6b146106a357806354b822cf146106b957600080fd5b8063395093511161029b57806339509351146105e65780633c9f861d146106065780633f4218e01461061c578063404ca34a1461064c57600080fd5b80633052ea0814610594578063313ce567146105b457806337f0d4c8146105d057600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105105780632cbf5360146105255780632d838119146105455780632f54bf6e1461056557600080fd5b806322849720146104a557806323b872dd146104bb57806327334a08146104db578063293230b8146104fb57600080fd5b8063095ea7b311610375578063095ea7b31461042a5780630e7daf6d1461045a57806311403aec1461047057806318160ddd1461049057600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f77565b610b10565b005b3480156103fe57600080fd5b5060408051808201909152600681526550697363657360d01b60208201525b6040516103c79190612f94565b34801561043657600080fd5b5061044a610445366004612fe2565b610ccf565b60405190151581526020016103c7565b34801561046657600080fd5b506103bd60225481565b34801561047c57600080fd5b506103f061048b36600461300e565b610ce6565b34801561049c57600080fd5b506001546103bd565b3480156104b157600080fd5b506103bd602b5481565b3480156104c757600080fd5b5061044a6104d6366004613027565b610cf5565b3480156104e757600080fd5b506103f06104f6366004612f77565b610d5e565b34801561050757600080fd5b506103f0610eb1565b34801561051c57600080fd5b506103bd610eea565b34801561053157600080fd5b506103f0610540366004613068565b610f26565b34801561055157600080fd5b506103bd61056036600461300e565b610f7b565b34801561057157600080fd5b5061044a610580366004612f77565b6000546001600160a01b0391821691161490565b3480156105a057600080fd5b506103f06105af36600461300e565b610fff565b3480156105c057600080fd5b50604051600981526020016103c7565b3480156105dc57600080fd5b506103bd602d5481565b3480156105f257600080fd5b5061044a610601366004612fe2565b611076565b34801561061257600080fd5b506103bd602a5481565b34801561062857600080fd5b5061044a610637366004612f77565b601c6020526000908152604090205460ff1681565b34801561065857600080fd5b506103bd60205481565b34801561066e57600080fd5b50601f5461044a90600160b01b900460ff1681565b34801561068f57600080fd5b506103bd61069e366004613098565b6110ad565b3480156106af57600080fd5b506103bd60215481565b3480156106c557600080fd5b506103f06106d436600461300e565b611141565b3480156106e557600080fd5b506103f061114d565b3480156106fa57600080fd5b506103bd610709366004612f77565b61119b565b34801561071a57600080fd5b506103bd60045481565b34801561073057600080fd5b506103f061073f3660046130c8565b6111fa565b34801561075057600080fd5b506103bd60255481565b34801561076657600080fd5b506103bd60035481565b34801561077c57600080fd5b5061044a61078b366004612f77565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b557600080fd5b506103f06107c43660046130f6565b61124c565b3480156107d557600080fd5b506103bd60285481565b3480156107eb57600080fd5b506103f06107fa366004613068565b6112cb565b34801561080b57600080fd5b506103bd61081a366004612f77565b6113db565b34801561082b57600080fd5b506103f061083a366004613139565b61140d565b34801561084b57600080fd5b506103f061085a366004613167565b611462565b34801561086b57600080fd5b506103f061087a366004613068565b611508565b34801561088b57600080fd5b5060408051808201909152600681526550495343455360d01b602082015261041d565b3480156108ba57600080fd5b506103bd602c5481565b3480156108d057600080fd5b506103f06108df366004612f77565b611557565b3480156108f057600080fd5b5061044a6108ff366004612fe2565b6115bb565b34801561091057600080fd5b50601f54610924906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094857600080fd5b5061044a610957366004612fe2565b61160a565b34801561096857600080fd5b506103f0610977366004613027565b611617565b34801561098857600080fd5b506103bd60245481565b34801561099e57600080fd5b50601f5461044a90600160a81b900460ff1681565b3480156109bf57600080fd5b506103bd6109ce3660046131b2565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103f0610a143660046131d0565b611743565b348015610a2557600080fd5b506103bd60275481565b348015610a3b57600080fd5b506103f0610a4a3660046131d0565b61178f565b348015610a5b57600080fd5b506103bd60295481565b348015610a7157600080fd5b506103f0610a803660046131ee565b6117db565b348015610a9157600080fd5b50602e546103bd565b348015610aa657600080fd5b506103bd60265481565b348015610abc57600080fd5b506103f0610acb3660046131b2565b611841565b348015610adc57600080fd5b506103f0610aeb366004612f77565b6118ca565b348015610afc57600080fd5b50601e54610924906001600160a01b031681565b6000546001600160a01b03163314610b435760405162461bcd60e51b8152600401610b3a9061321a565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610bab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b3a565b60005b601d54811015610ccb57816001600160a01b0316601d8281548110610bd557610bd561323a565b6000918252602090912001546001600160a01b031603610cb957601d8054610bff90600190613266565b81548110610c0f57610c0f61323a565b600091825260209091200154601d80546001600160a01b039092169183908110610c3b57610c3b61323a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9357610c93613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc38161328f565b915050610bae565b5050565b6000610cdc338484611948565b5060015b92915050565b610cf233826000611a6c565b50565b6000610d02848484611b43565b610d548433610d4f856040518060600160405280602881526020016133e7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c18565b611948565b5060019392505050565b6000546001600160a01b03163314610d885760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b0381166000908152601b602052604090205460ff1615610df15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b3a565b6001600160a01b03811660009081526018602052604090205415610e4b576001600160a01b038116600090815260186020526040902054610e3190610f7b565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610b3a9061321a565b600f805460ff19166001179055565b6000610f21610ef9600061119b565b601254610f1b90610f12906001600160a01b031661119b565b60015490611c44565b90611c44565b905090565b6000546001600160a01b03163314610f505760405162461bcd60e51b8152600401610b3a9061321a565b610f72620186a0610f6c84600154611c5090919063ffffffff16565b90611c5c565b60215560235550565b6000600254821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b3a565b6000610fec611c68565b9050610ff881846132a8565b9392505050565b6000546001600160a01b031633146110295760405162461bcd60e51b8152600401610b3a9061321a565b60155447906001600160a01b03166108fc6110496064610f6c8587611c50565b6040518115909202916000818181858888f19350505050158015611071573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cdc918590610d4f9086906132ca565b60006001548311156111015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b3a565b816111225760006111188460016000806000611c8b565b519150610ce09050565b60006111348460016000806000611c8b565b602001519150610ce09050565b610cf233826000611d09565b6000546001600160a01b031633146111775760405162461bcd60e51b8152600401610b3a9061321a565b602854611185904290611dd1565b602455602954611196904290611dd1565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d857506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610ce090610f7b565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610b3a9061321a565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112aa5750600b5460095411155b80156112ba5750600b54600a5411155b6112c357600080fd5b505050505050565b6000546001600160a01b031633146112f55760405162461bcd60e51b8152600401610b3a9061321a565b6000611312600b54610f6c85600154611c5090919063ffffffff16565b90506000611331600b54610f6c85600154611c5090919063ffffffff16565b90506000611351620186a0610f6c60018054611c5090919063ffffffff16565b90508083101580156113635750808210155b6113cd5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b3a565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610ce09190610f1b90610f7b565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610b3a9061321a565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610b3a9061321a565b61154e620186a0610f6c84600154611c5090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610b3a9061321a565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cdc3384610d4f8560405180606001604052806025815260200161340f60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c18565b6000610cdc338484611b43565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610b3a9061321a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac91906132dd565b90506001600160a01b03841663a9059cbb846116cd6064610f6c8688611c50565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c91906132f6565b5050505050565b6000546001600160a01b0316331461176d5760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610b3a9061321a565b601183905560015461182090620186a090610f6c9085611c50565b600d5560015461183990620186a090610f6c9084611c50565b600e55505050565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610b3a9061321a565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b8152600401610b3a9061321a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3a565b6001600160a01b038216611a0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3a565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aee576000611ab7600b54610f6c602254611ab1601660009054906101000a90046001600160a01b031661119b565b90611c50565b905082811015611ac5578092505b601654600090611add906001600160a01b031661119b565b905083811015611aeb578093505b50505b602b54611afb9083611dd1565b602b5542602555602d54611b10906001611dd1565b602d55611b1e833084611948565b611b318360008460008060006001611ddd565b5050601f805460ff60a01b1916905550565b611b4e838383612012565b611b58838361214a565b611b638383836121e3565b611b6e8284836122f2565b611b78838361237e565b611b838383836123f3565b611b8d8383612418565b6001600160a01b0383166000908152601c60205260409020546110719084908490849060ff1680611bd657506001600160a01b0386166000908152601c602052604090205460ff165b80611be35750600c5460ff165b80611bf75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddd565b60008184841115611c3c5760405162461bcd60e51b8152600401610b3a9190612f94565b505050900390565b6000610ff88284613266565b6000610ff88284613313565b6000610ff882846132a8565b6000806000611c756125bd565b9092509050611c8481836132a8565b9250505090565b611ccb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd88686868686612740565b9050611cee818787611ce8611c68565b86612968565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d84576000611d4e600b54610f6c602354611ab1601760009054906101000a90046001600160a01b031661119b565b905082811015611d5c578092505b601754600090611d74906001600160a01b031661119b565b9050838111611d81578093505b50505b602a54611d919083611dd1565b602a5542602755602c54611da6906001611dd1565b602c55611db4833084611948565b601254611b319084906001600160a01b0316846000808080611ddd565b6000610ff882846132ca565b6000611dec8686868686611c8b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4e576001600160a01b038816600090815260196020526040902054611e34908790613266565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eb15760808101516001600160a01b038816600090815260196020526040902054611e9791906132ca565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed69190613266565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0d91906132ca565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3e919084612a0d565b611f5081606001518260c00151612a49565b608081015115611fac57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa391815260200190565b60405180910390a35b60c08101511561200857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fff91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120765760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b3a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b3a565b6120e18361119b565b8111156110715760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610ccb57600f5460ff16610ccb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222557506001600160a01b0383166000908152601c602052604090205460ff16155b801561223a57506001600160a01b0382163014155b801561225457506012546001600160a01b03838116911614155b801561226e5750601f546001600160a01b03838116911614155b801561228857506013546001600160a01b03838116911614155b15611071576004548161229a8461119b565b6122a491906132ca565b11156110715760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b3a565b6003548111158061231b57506001600160a01b0382166000908152601c602052604090205460ff165b8061233e57506001600160a01b0383166000908152601c602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b3a565b601f546001600160a01b0382811691161480156123b457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c35750600c5460ff16155b80156123d95750601f54600160a01b900460ff16155b15610ccb576010546123ec906001611dd1565b6010555050565b6123fe838383612ac8565b156110715761240e600d54612b8e565b6000601055505050565b426024541115801561242d5750600c5460ff16155b80156124465750601f546001600160a01b038281169116145b801561246b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124805750601f54600160a81b900460ff165b80156124a1575060165460009061249f906001600160a01b031661119b565b115b80156124b75750601f54600160a01b900460ff16155b156124e9576016546020546124d7916001600160a01b0316906001611a6c565b6028546124e5904290611dd1565b6024555b42602654111580156124fe5750600c5460ff16155b80156125175750601f546001600160a01b038281169116145b801561253c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125515750601f54600160b01b900460ff165b80156125725750601754600090612570906001600160a01b031661119b565b115b80156125885750601f54600160a01b900460ff16155b15610ccb576017546021546125a8916001600160a01b0316906001611d09565b6029546125b6904290611dd1565b6026555050565b6002546001546000918291825b601d5481101561270f578260186000601d84815481106125ec576125ec61323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265757508160196000601d84815481106126305761263061323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57600254600154945094505050509091565b60186000601d83815481106126845761268461323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b39084613266565b925060196000601d83815481106126cc576126cc61323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126fb9083613266565b9150806127078161328f565b9150506125ca565b5060015460025461272091906132a8565b821015612737576002546001549350935050509091565b90939092509050565b6127806040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278c575081155b806127a6575061279c8484612d1d565b80156127a6575081155b156127b75760808101869052611d00565b831580156127c3575082155b80156127cd575081155b156128455760006127ef600b54610f6c600a548a611c5090919063ffffffff16565b9050600a546005600001541161281f57600b5460055461280f9089613313565b61281991906132a8565b60a08301525b60a082015161282f908290611c44565b60c083015261283e8188613266565b6080830152505b838015612850575081155b156128c8576000612872600b54610f6c6009548a611c5090919063ffffffff16565b9050600954600560000154116128a257600b546005546128929089613313565b61289c91906132a8565b60a08301525b60a08201516128b2908290611c44565b60c08301526128c18188613266565b6080830152505b8280156128d3575081155b1561294b5760006128f5600b54610f6c6008548a611c5090919063ffffffff16565b90506008546005600001541161292557600b546005546129159089613313565b61291f91906132a8565b60a08301525b60a0820151612935908290611c44565b60c08301526129448188613266565b6080830152505b8115611d005760a081018690526080810186905295945050505050565b60008080806129778689613313565b935086158015612985575084155b1561299857508291506000905080612a01565b84156129c557858960a001516129ae9190613313565b91506129ba8285613266565b925060009050612a01565b858960a001516129d59190613313565b9150858960c001516129e79190613313565b9050806129f48386613266565b6129fe9190613266565b92505b95509550955095915050565b8260026000828254612a1f9190613266565b909155508190506110715781602e6000016000828254612a3f91906132ca565b9091555050505050565b80602e6001016000828254612a5e91906132ca565b9091555050306000908152601b602052604090205460ff1615612aa0573060009081526019602052604081208054839290612a9a9084906132ca565b90915550505b3060009081526018602052604081208054849290612abf9084906132ca565b90915550505050565b600080600e5483101590506000600d54612ae13061119b565b600c54911115915060ff16158015612b005750600c54610100900460ff165b8015612b095750815b8015612b2e57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3c5750600f5460ff165b8015612b555750601f546001600160a01b038681169116145b8015612b65575060115460105410155b8015612b6e5750805b8015612b845750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb591600291611ab19190611dd1565b9050600854600003612be757600654600754612be491600291611ab191600191612bde91611dd1565b90611dd1565b90505b6007546000908290612bf99085613313565b612c0391906132a8565b90506000612c118285613266565b905047612c1d82612d63565b6000612c298247613266565b600754909150600090612c3c9087613266565b612c4690836132a8565b600754909150600090612c599083613313565b90508015612c6b57612c6b8682612eb5565b600654600090612c8090611ab1856002611c50565b90508015612cc4576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc2573d6000803e3d6000fd5b505b478015612d07576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d05573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2c5750600954155b80612d3f5750818015612d3f5750600854155b80610ff8575082158015612d51575081155b8015610ff8575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d9861323a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e15919061332a565b81600181518110612e2857612e2861323a565b6001600160a01b039283166020918202929092010152601e54612e4e9130911684611948565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e87908590600090869030904290600401613347565b600060405180830381600087803b158015612ea157600080fd5b505af11580156112c3573d6000803e3d6000fd5b601e54612ecd9030906001600160a01b031684611948565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173c91906133b8565b6001600160a01b0381168114610cf257600080fd5b600060208284031215612f8957600080fd5b8135610ff881612f62565b600060208083528351808285015260005b81811015612fc157858101830151858201604001528201612fa5565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff557600080fd5b823561300081612f62565b946020939093013593505050565b60006020828403121561302057600080fd5b5035919050565b60008060006060848603121561303c57600080fd5b833561304781612f62565b9250602084013561305781612f62565b929592945050506040919091013590565b6000806040838503121561307b57600080fd5b50508035926020909101359150565b8015158114610cf257600080fd5b600080604083850312156130ab57600080fd5b8235915060208301356130bd8161308a565b809150509250929050565b600080604083850312156130db57600080fd5b82356130e68161308a565b915060208301356130bd81612f62565b60008060008060008060c0878903121561310f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314c57600080fd5b823561315781612f62565b915060208301356130bd8161308a565b60008060006060848603121561317c57600080fd5b833561318781612f62565b9250602084013561319781612f62565b915060408401356131a781612f62565b809150509250925092565b600080604083850312156131c557600080fd5b82356130e681612f62565b600080604083850312156131e357600080fd5b82356130008161308a565b60008060006060848603121561320357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ce057610ce0613250565b634e487b7160e01b600052603160045260246000fd5b6000600182016132a1576132a1613250565b5060010190565b6000826132c557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce057610ce0613250565b6000602082840312156132ef57600080fd5b5051919050565b60006020828403121561330857600080fd5b8151610ff88161308a565b8082028115828204841417610ce057610ce0613250565b60006020828403121561333c57600080fd5b8151610ff881612f62565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133975784516001600160a01b031683529383019391830191600101613372565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a333b0febcb20c09115ad73dbe2d4290f7f7733719e724c558047f83869ce8c64736f6c63430008130033

Deployed Bytecode Sourcemap

7463:23963:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9751:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9751:32:0;;;;;;;;27034:464;;;;;;;;;;-1:-1:-1;27034:464:0;;;;;:::i;:::-;;:::i;:::-;;11692:67;;;;;;;;;;-1:-1:-1;11752:5:0;;;;;;;;;;;;-1:-1:-1;;;11752:5:0;;;;11692:67;;;;;;;:::i;12458:134::-;;;;;;;;;;-1:-1:-1;12458:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12458:134:0;1457:187:1;9705:39:0;;;;;;;;;;;;;;;;19367:117;;;;;;;;;;-1:-1:-1;19367:117:0;;;;;:::i;:::-;;:::i;11915:79::-;;;;;;;;;;-1:-1:-1;11985:7:0;;11915:79;;10064:30;;;;;;;;;;;;;;;;12872:309;;;;;;;;;;-1:-1:-1;12872:309:0;;;;;:::i;:::-;;:::i;26691:335::-;;;;;;;;;;-1:-1:-1;26691:335:0;;;;;:::i;:::-;;:::i;22152:83::-;;;;;;;;;;;;;:::i;25787:143::-;;;;;;;;;;;;;:::i;24034:182::-;;;;;;;;;;-1:-1:-1;24034:182:0;;;;;:::i;:::-;;:::i;26435:248::-;;;;;;;;;;-1:-1:-1;26435:248:0;;;;;:::i;:::-;;:::i;6168:87::-;;;;;;;;;;-1:-1:-1;6168:87:0;;;;;:::i;:::-;6223:4;6248:5;-1:-1:-1;;;;;6237:16:0;;;6248:5;;6237:16;;6168:87;24463:182;;;;;;;;;;-1:-1:-1;24463:182:0;;;;;:::i;:::-;;:::i;11842:67::-;;;;;;;;;;-1:-1:-1;11842:67:0;;7701:1;2690:36:1;;2678:2;2663:18;11842:67:0;2548:184:1;10138:36:0;;;;;;;;;;;;;;;;13189:209;;;;;;;;;;-1:-1:-1;13189:209:0;;;;;:::i;:::-;;:::i;10033:24::-;;;;;;;;;;;;;;;;9340:44;;;;;;;;;;-1:-1:-1;9340:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9572:63;;;;;;;;;;;;;;;;9542:23;;;;;;;;;;-1:-1:-1;9542:23:0;;;;-1:-1:-1;;;9542:23:0;;;;;;25938:489;;;;;;;;;;-1:-1:-1;25938:489:0;;;;;:::i;:::-;;:::i;9642:56::-;;;;;;;;;;;;;;;;19492:103;;;;;;;;;;-1:-1:-1;19492:103:0;;;;;:::i;:::-;;:::i;22243:175::-;;;;;;;;;;;;;:::i;12000:173::-;;;;;;;;;;-1:-1:-1;12000:173:0;;;;;:::i;:::-;;:::i;7943:58::-;;;;;;;;;;;;;;;;22577:124;;;;;;;;;;-1:-1:-1;22577:124:0;;;;;:::i;:::-;;:::i;9827:34::-;;;;;;;;;;;;;;;;7881:55;;;;;;;;;;;;;;;;12690:108;;;;;;;;;;-1:-1:-1;12690:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12776:20:0;12762:4;12776:20;;;:11;:20;;;;;;;;;12690:108;22709:442;;;;;;;;;;-1:-1:-1;22709:442:0;;;;;:::i;:::-;;:::i;9932:47::-;;;;;;;;;;;;;;;;25080:445;;;;;;;;;;-1:-1:-1;25080:445:0;;;;;:::i;:::-;;:::i;13679:157::-;;;;;;;;;;-1:-1:-1;13679:157:0;;;;;:::i;:::-;;:::i;24653:117::-;;;;;;;;;;-1:-1:-1;24653:117:0;;;;;:::i;:::-;;:::i;23159:322::-;;;;;;;;;;-1:-1:-1;23159:322:0;;;;;:::i;:::-;;:::i;24224:231::-;;;;;;;;;;-1:-1:-1;24224:231:0;;;;;:::i;:::-;;:::i;11765:71::-;;;;;;;;;;-1:-1:-1;11827:7:0;;;;;;;;;;;;-1:-1:-1;;;11827:7:0;;;;11765:71;;10101:30;;;;;;;;;;;;;;;;22426:143;;;;;;;;;;-1:-1:-1;22426:143:0;;;;;:::i;:::-;;:::i;13406:265::-;;;;;;;;;;-1:-1:-1;13406:265:0;;;;;:::i;:::-;;:::i;9453:19::-;;;;;;;;;;-1:-1:-1;9453:19:0;;;;-1:-1:-1;;;;;9453:19:0;;;;;;-1:-1:-1;;;;;5174:32:1;;;5156:51;;5144:2;5129:18;9453:19:0;5010:203:1;12179:140:0;;;;;;;;;;-1:-1:-1;12179:140:0;;;;;:::i;:::-;;:::i;25533:246::-;;;;;;;;;;-1:-1:-1;25533:246:0;;;;;:::i;:::-;;:::i;9790:30::-;;;;;;;;;;;;;;;;9505;;;;;;;;;;-1:-1:-1;9505:30:0;;;;-1:-1:-1;;;9505:30:0;;;;;;12325:127;;;;;;;;;;-1:-1:-1;12325:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12423:18:0;;;12406:7;12423:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12325:127;23869:157;;;;;;;;;;-1:-1:-1;23869:157:0;;;;;:::i;:::-;;:::i;9898:27::-;;;;;;;;;;;;;;;;23725:136;;;;;;;;;;-1:-1:-1;23725:136:0;;;;;:::i;:::-;;:::i;9986:40::-;;;;;;;;;;;;;;;;24778:294;;;;;;;;;;-1:-1:-1;24778:294:0;;;;;:::i;:::-;;:::i;12598:86::-;;;;;;;;;;-1:-1:-1;12667:11:0;:15;12598:86;;9868:23;;;;;;;;;;;;;;;;23489:228;;;;;;;;;;-1:-1:-1;23489:228:0;;;;;:::i;:::-;;:::i;6261:111::-;;;;;;;;;;-1:-1:-1;6261:111:0;;;;;:::i;:::-;;:::i;9425:21::-;;;;;;;;;;-1:-1:-1;9425:21:0;;;;-1:-1:-1;;;;;9425:21:0;;;27034:464;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27118:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27110:56;;;::::0;-1:-1:-1;;;27110:56:0;;7265:2:1;27110:56:0::1;::::0;::::1;7247:21:1::0;7304:2;7284:18;;;7277:30;7343:25;7323:18;;;7316:53;7386:18;;27110:56:0::1;7063:347:1::0;27110:56:0::1;27182:9;27177:314;27201:9;:16:::0;27197:20;::::1;27177:314;;;27259:7;-1:-1:-1::0;;;;;27243:23:0::1;:9;27253:1;27243:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27243:12:0::1;:23:::0;27239:241:::1;;27302:9;27312:16:::0;;:20:::1;::::0;27331:1:::1;::::0;27312:20:::1;:::i;:::-;27302:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27287:9:::1;:12:::0;;-1:-1:-1;;;;;27302:31:0;;::::1;::::0;27297:1;;27287:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27287:46:0::1;-1:-1:-1::0;;;;;27287:46:0;;::::1;;::::0;;27352:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27391:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27391:28:0::1;::::0;;27438:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27438:15:0;;;;;-1:-1:-1;;;;;;27438:15:0::1;::::0;;;;;27177:314:::1;27034:464:::0;:::o;27239:241::-:1;27219:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27177:314;;;;27034:464:::0;:::o;12458:134::-;12533:4;12540:37;12549:10;12561:7;12570:6;12540:8;:37::i;:::-;-1:-1:-1;12586:4:0;12458:134;;;;;:::o;19367:117::-;19431:45;19450:10;19462:6;19470:5;19431:18;:45::i;:::-;19367:117;:::o;12872:309::-;12970:4;12987:36;12997:6;13005:9;13016:6;12987:9;:36::i;:::-;13034:117;13043:6;13051:10;13063:87;13099:6;13063:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13063:19:0;;;;;;:11;:19;;;;;;;;13083:10;13063:31;;;;;;;;;:87;:35;:87::i;:::-;13034:8;:117::i;:::-;-1:-1:-1;13169:4:0;12872:309;;;;;:::o;26691:335::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26776:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26775:21;26767:61;;;::::0;-1:-1:-1;;;26767:61:0;;8286:2:1;26767:61:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;8364:29;8344:18;;;8337:57;8411:18;;26767:61:0::1;8084:351:1::0;26767:61:0::1;-1:-1:-1::0;;;;;26842:16:0;::::1;26861:1;26842:16:::0;;;:7:::1;:16;::::0;;;;;:20;26839:108:::1;;-1:-1:-1::0;;;;;26918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26898:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26879:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26839:108:::1;-1:-1:-1::0;;;;;26957:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26957:27:0::1;26980:4;26957:27:::0;;::::1;::::0;;;26995:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26995:23:0::1;::::0;;::::1;::::0;;26691:335::o;22152:83::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22206:14:::1;:21:::0;;-1:-1:-1;;22206:21:0::1;22223:4;22206:21;::::0;;22152:83::o;25787:143::-;25840:7;25867:55;25900:21;25918:1;25900:9;:21::i;:::-;25889:4;;25867:28;;25879:15;;-1:-1:-1;;;;;25889:4:0;25879:9;:15::i;:::-;25867:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;25860:62;;25787:143;:::o;24034:182::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24144:36:::1;24173:6;24144:24;24156:11;24144:7;;:11;;:24;;;;:::i;:::-;:28:::0;::::1;:36::i;:::-;24131:10;:49:::0;24182:11:::1;:26:::0;-1:-1:-1;24034:182:0:o;26435:248::-;26501:7;26540;;26529;:18;;26521:73;;;;-1:-1:-1;;;26521:73:0;;8642:2:1;26521:73:0;;;8624:21:1;8681:2;8661:18;;;8654:30;8720:34;8700:18;;;8693:62;-1:-1:-1;;;8771:18:1;;;8764:40;8821:19;;26521:73:0;8440:406:1;26521:73:0;26605:19;26628:10;:8;:10::i;:::-;26605:33;-1:-1:-1;26656:19:0;26605:33;26656:7;:19;:::i;:::-;26649:26;26435:248;-1:-1:-1;;;26435:248:0:o;24463:182::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24583:16:::1;::::0;24543:21:::1;::::0;-1:-1:-1;;;;;24583:16:0::1;24575:62;24610:26;24632:3;24610:17;24543:21:::0;24624:2;24610:13:::1;:17::i;:26::-;24575:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24512:133;24463:182:::0;:::o;13189:209::-;13303:10;13277:4;13324:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13324:32:0;;;;;;;;;;13277:4;;13294:74;;13315:7;;13324:43;;13357:10;;13324:43;:::i;25938:489::-;26028:7;26067;;26056;:18;;26048:62;;;;-1:-1:-1;;;26048:62:0;;9405:2:1;26048:62:0;;;9387:21:1;9444:2;9424:18;;;9417:30;9483:33;9463:18;;;9456:61;9534:18;;26048:62:0;9203:355:1;26048:62:0;26126:17;26121:299;;26160:28;26191:46;26202:7;26211:4;26217:5;26224;26231;26191:10;:46::i;:::-;26259:9;;-1:-1:-1;26252:16:0;;-1:-1:-1;26252:16:0;26121:299;26301:28;26332:46;26343:7;26352:4;26358:5;26365;26372;26332:10;:46::i;:::-;26400:17;;;;-1:-1:-1;26393:24:0;;-1:-1:-1;26393:24:0;19492:103;19549:38;19561:10;19573:6;19581:5;19549:11;:38::i;22243:175::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22335:19:::1;::::0;22315:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;:::-;22297:15;:58:::0;22397:12:::1;::::0;22377:33:::1;::::0;:15:::1;::::0;:19:::1;:33::i;:::-;22366:8;:44:::0;22243:175::o;12000:173::-;-1:-1:-1;;;;;12080:20:0;;12066:7;12080:20;;;:11;:20;;;;;;;;12076:49;;;-1:-1:-1;;;;;;12109:16:0;;;;;:7;:16;;;;;;;12000:173::o;12076:49::-;-1:-1:-1;;;;;12154:16:0;;;;;;:7;:16;;;;;;12134:37;;:19;:37::i;22577:124::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22661:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22661:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22577:124::o;22709:442::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22868:8:::1;:15:::0;;;22885:7:::1;:15:::0;;;22902:11:::1;:20:::0;;;22933:8:::1;:27:::0;;;22971:18;:31;;;23013:18;:31;;;23075:11:::1;::::0;23063:23;::::1;::::0;::::1;::::0;:49:::1;;;23101:11;;23090:7;;:22;;23063:49;:79;;;;;23131:11;;23116;;:26;;23063:79;23055:88;;;::::0;::::1;;22709:442:::0;;;;;;:::o;25080:445::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;25164:13:::1;25180:43;25210:11;;25180:17;25192:4;25180:7;;:11;;:17;;;;:::i;:43::-;25164:59;;25234:17;25254:46;25287:11;;25254:20;25266:7;25254;;:11;;:20;;;;:::i;:46::-;25234:66;;25302:13;25318:26;25337:6;25318:14;25330:1;25318:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25302:42;;25372:5;25363;:14;;:36;;;;;25394:5;25381:9;:18;;25363:36;25355:102;;;::::0;-1:-1:-1;;;25355:102:0;;9765:2:1;25355:102:0::1;::::0;::::1;9747:21:1::0;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:51;9955:19;;25355:102:0::1;9563:417:1::0;25355:102:0::1;-1:-1:-1::0;25468:12:0::1;:20:::0;;;;25490:15:::1;:27:::0;-1:-1:-1;;25080:445:0:o;13679:157::-;-1:-1:-1;;;;;13812:15:0;;13744:7;13812:15;;;:7;:15;;;;;;;;;13791:7;:15;;;;;;13771:57;;13812:15;13771:36;;:19;:36::i;24653:117::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24734:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24734:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24653:117::o;23159:322::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23277:18:::1;:31:::0;;-1:-1:-1;;;;;23277:31:0;;::::1;-1:-1:-1::0;;;;;;23277:31:0;;::::1;::::0;::::1;::::0;;;23310:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23343:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23277:18:::1;23381:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;23381:30:0;;::::1;23277:31:::0;23381:30;;::::1;::::0;;;23413:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23445:21;;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23159:322::o;24224:231::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24362:43:::1;24398:6;24362:31;24374:18;24362:7;;:11;;:31;;;;:::i;:43::-;24342:17;:63:::0;24407:18:::1;:40:::0;-1:-1:-1;24224:231:0:o;22426:143::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22501:4:::1;:18:::0;;-1:-1:-1;;;;;22501:18:0;;::::1;-1:-1:-1::0;;;;;;22501:18:0;;::::1;::::0;::::1;::::0;;:4:::1;22521:33:::0;;;:11:::1;:33;::::0;;;;:40;;-1:-1:-1;;22521:40:0::1;22501:18:::0;22521:40:::1;::::0;;22426:143::o;13406:265::-;13499:4;13516:125;13525:10;13537:7;13546:94;13583:15;13546:94;;;;;;;;;;;;;;;;;13558:10;13546:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13546:32:0;;;;;;;;;;;:94;:36;:94::i;12179:140::-;12257:4;12264:40;12274:10;12286:9;12297:6;12264:9;:40::i;25533:246::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;25655:39:::1;::::0;-1:-1:-1;;;25655:39:0;;25688:4:::1;25655:39;::::0;::::1;5156:51:1::0;25640:12:0::1;::::0;-1:-1:-1;;;;;25655:24:0;::::1;::::0;::::1;::::0;5129:18:1;;25655:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25640:54:::0;-1:-1:-1;;;;;;25705:23:0;::::1;;25729:9:::0;25740:30:::1;25766:3;25740:21;25640:54:::0;25749:11;25740:8:::1;:21::i;:30::-;25705:66;::::0;-1:-1:-1;;;;;;25705:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10366:32:1;;;25705:66:0::1;::::0;::::1;10348:51:1::0;10415:18;;;10408:34;10321:18;;25705:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25629:150;25533:246:::0;;;:::o;23869:157::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23965:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;23965:21:0::1;-1:-1:-1::0;;;;23965:21:0;;::::1;::::0;;;::::1;::::0;;;23988:19:::1;:30:::0;23869:157::o;23725:136::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23814:4:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;23814:14:0::1;-1:-1:-1::0;;;;23814:14:0;;::::1;::::0;;;::::1;::::0;;;23830:12:::1;:23:::0;23725:136::o;24778:294::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24906:10:::1;:24:::0;;;24948:7:::1;::::0;:48:::1;::::0;24988:6:::1;::::0;24948:27:::1;::::0;24960:14;24948:11:::1;:27::i;:48::-;24932:13;:64:::0;25016:7:::1;::::0;:48:::1;::::0;25056:6:::1;::::0;25016:27:::1;::::0;25028:14;25016:11:::1;:27::i;:48::-;24998:15;:66:::0;-1:-1:-1;;;24778:294:0:o;23489:228::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23587:17:::1;:32:::0;;-1:-1:-1;;;;;23587:32:0;;::::1;-1:-1:-1::0;;;;;;23587:32:0;;::::1;::::0;::::1;::::0;;;23621:10:::1;:18:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23587:17:::1;23650:25:::0;;;:11:::1;:25;::::0;;;;;:32;;-1:-1:-1;;23650:32:0;;::::1;23587::::0;23650;;::::1;::::0;;;23684:18;;;;;:25;;;;::::1;::::0;;::::1;::::0;;23489:228::o;6261:111::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;6327:5:::1;:11:::0;;-1:-1:-1;;;;;;6327:11:0::1;-1:-1:-1::0;;;;;6327:11:0;::::1;::::0;;::::1;::::0;;;6345:25:::1;::::0;5156:51:1;;;6345:25:0::1;::::0;5144:2:1;5129:18;6345:25:0::1;;;;;;;6261:111:::0;:::o;13844:335::-;-1:-1:-1;;;;;13937:19:0;;13929:68;;;;-1:-1:-1;;;13929:68:0;;11121:2:1;13929:68:0;;;11103:21:1;11160:2;11140:18;;;11133:30;11199:34;11179:18;;;11172:62;-1:-1:-1;;;11250:18:1;;;11243:34;11294:19;;13929:68:0;10919:400:1;13929:68:0;-1:-1:-1;;;;;14016:21:0;;14008:68;;;;-1:-1:-1;;;14008:68:0;;11526:2:1;14008:68:0;;;11508:21:1;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;-1:-1:-1;;;11655:18:1;;;11648:32;11697:19;;14008:68:0;11324:398:1;14008:68:0;-1:-1:-1;;;;;14087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14139:32;;160:25:1;;;14139:32:0;;133:18:1;14139:32:0;;;;;;;13844:335;;;:::o;17879:780::-;17979:12;:19;;-1:-1:-1;;;;17979:19:0;-1:-1:-1;;;17979:19:0;;;18009:304;;;;18027:22;18052:69;18109:11;;18052:52;18085:18;;18052:28;18062:17;;;;;;;;;-1:-1:-1;;;;;18062:17:0;18052:9;:28::i;:::-;:32;;:52::i;:69::-;18027:94;;18152:6;18135:14;:23;18132:53;;;18169:14;18160:23;;18132:53;18230:17;;18195:22;;18220:28;;-1:-1:-1;;;;;18230:17:0;18220:9;:28::i;:::-;18195:53;;18279:6;18262:14;:23;18259:53;;;18296:14;18287:23;;18259:53;18026:287;;18009:304;18341:15;;:27;;18361:6;18341:19;:27::i;:::-;18323:15;:45;18401:15;18379:19;:37;18451:21;;:37;;18485:1;18451:25;:37::i;:::-;18427:21;:61;18499:39;18508:6;18524:4;18531:6;18499:8;:39::i;:::-;18549:71;18564:6;18580:3;18586:6;18594:5;18601;18608;18615:4;18549:14;:71::i;:::-;-1:-1:-1;;18631:12:0;:20;;-1:-1:-1;;;;18631:20:0;;;-1:-1:-1;17879:780:0:o;14187:594::-;14276:37;14287:6;14295:9;14306:6;14276:10;:37::i;:::-;14324:38;14344:6;14352:9;14324:19;:38::i;:::-;14373:41;14388:6;14396:9;14407:6;14373:14;:41::i;:::-;14426:39;14439:9;14450:6;14458;14426:12;:39::i;:::-;14476:35;14493:6;14501:9;14476:16;:35::i;:::-;14522;14531:6;14539:9;14550:6;14522:8;:35::i;:::-;14568:33;14583:6;14591:9;14568:14;:33::i;:::-;-1:-1:-1;;;;;14656:19:0;;;;;;:11;:19;;;;;;14612:161;;14627:6;;14635:9;;14646:6;;14656:19;;;:45;;-1:-1:-1;;;;;;14679:22:0;;;;;;:11;:22;;;;;;;;14656:45;:57;;;-1:-1:-1;14705:8:0;;;;14656:57;:73;;;-1:-1:-1;14717:12:0;;-1:-1:-1;;;14717:12:0;;;;14656:73;14745:4;;14654:76;;;-1:-1:-1;;;;;14745:4:0;;;14732:17;;;;;;14751:14;;;14745:4;14612:14;:161::i;1512:162::-;1598:7;1644:12;1636:6;;;;1628:29;;;;-1:-1:-1;;;1628:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1666:5:0;;;1512:162::o;299:82::-;357:7;374:5;378:1;374;:5;:::i;387:82::-;445:7;462:5;466:1;462;:5;:::i;475:82::-;533:7;550:5;554:1;550;:5;:::i;30726:158::-;30767:7;30788:15;30805;30824:19;:17;:19::i;:::-;30787:56;;-1:-1:-1;30787:56:0;-1:-1:-1;30861:15:0;30787:56;;30861:15;:::i;:::-;30854:22;;;;30726:158;:::o;27770:444::-;27893:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27893:36:0;27954:64;27966:7;27975;27984:6;27992:10;28004:13;27954:11;:64::i;:::-;27942:76;;28112:67;28124:9;28135:7;28144;28153:10;:8;:10::i;:::-;28165:13;28112:11;:67::i;:::-;28092:16;;;28029:150;28076:14;;;28029:150;28049:25;;;28029:150;;;27770:444;;;;;;;;:::o;18667:692::-;18753:12;:19;;-1:-1:-1;;;;18753:19:0;-1:-1:-1;;;18753:19:0;;;18783:259;;;;18794:19;18816:55;18859:11;;18816:38;18842:11;;18816:21;18826:10;;;;;;;;;-1:-1:-1;;;;;18826:10:0;18816:9;:21::i;:55::-;18794:77;;18899:6;18885:11;:20;18882:47;;;18916:11;18907:20;;18882:47;18971:10;;18939:19;;18961:21;;-1:-1:-1;;;;;18971:10:0;18961:9;:21::i;:::-;18939:43;;19011:6;18996:11;:21;18993:48;;19028:11;19019:20;;18993:48;18793:249;;18783:259;19064:9;;:21;;19078:6;19064:13;:21::i;:::-;19052:9;:33;19111:15;19096:12;:30;19155:15;;:31;;19183:1;19155:19;:31::i;:::-;19137:15;:49;19197:39;19206:6;19222:4;19229:6;19197:8;:39::i;:::-;19278:4;;19247:73;;19262:6;;-1:-1:-1;;;;;19278:4:0;19285:6;19278:4;;;;19247:14;:73::i;211:82::-;269:7;286:5;290:1;286;:5;:::i;16336:863::-;16495:28;16526:63;16537:7;16546;16555:6;16563:10;16575:13;16526:10;:63::i;:::-;-1:-1:-1;;;;;16603:19:0;;;;;;:11;:19;;;;;;16495:94;;-1:-1:-1;16603:19:0;;16600:83;;;-1:-1:-1;;;;;16658:15:0;;;;;;:7;:15;;;;;;:23;;16674:7;;16658:23;:::i;:::-;-1:-1:-1;;;;;16640:15:0;;;;;;:7;:15;;;;;:41;16600:83;-1:-1:-1;;;;;16696:22:0;;;;;;:11;:22;;;;;;;;16693:101;;;16775:17;;;;-1:-1:-1;;;;;16756:18:0;;;;;;:7;:18;;;;;;:36;;16775:17;16756:36;:::i;:::-;-1:-1:-1;;;;;16735:18:0;;;;;;:7;:18;;;;;:57;16693:101;16838:9;;-1:-1:-1;;;;;16822:15:0;;16838:9;16822:15;;;:7;:15;;;;;;:25;;16838:9;16822:25;:::i;:::-;-1:-1:-1;;;;;16804:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16898:17;;;16879:18;;;;;;;;;;:36;;16898:17;16879:36;:::i;:::-;-1:-1:-1;;;;;16858:18:0;;;;;;:7;:18;;;;;;;:57;;;;16938:6;;;16946;;;;16926:42;;16938:6;16954:13;16926:11;:42::i;:::-;16979:30;16990:1;:8;;;17000:1;:8;;;16979:10;:30::i;:::-;17023:17;;;;:30;17020:88;;17077:9;-1:-1:-1;;;;;17060:46:0;17069:6;-1:-1:-1;;;;;17060:46:0;;17088:1;:17;;;17060:46;;;;160:25:1;;148:2;133:18;;14:177;17060:46:0;;;;;;;;17020:88;17121:8;;;;:21;17118:74;;17174:4;-1:-1:-1;;;;;17149:41:0;17158:6;-1:-1:-1;;;;;17149:41:0;;17181:1;:8;;;17149:41;;;;160:25:1;;148:2;133:18;;14:177;17149:41:0;;;;;;;;17118:74;16484:715;16336:863;;;;;;;:::o;14789:355::-;-1:-1:-1;;;;;14893:20:0;;14885:70;;;;-1:-1:-1;;;14885:70:0;;12102:2:1;14885:70:0;;;12084:21:1;12141:2;12121:18;;;12114:30;12180:34;12160:18;;;12153:62;-1:-1:-1;;;12231:18:1;;;12224:35;12276:19;;14885:70:0;11900:401:1;14885:70:0;-1:-1:-1;;;;;14974:23:0;;14966:71;;;;-1:-1:-1;;;14966:71:0;;12508:2:1;14966:71:0;;;12490:21:1;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:33;12680:19;;14966:71:0;12306:399:1;14966:71:0;15066:17;15076:6;15066:9;:17::i;:::-;15056:6;:27;;15048:88;;;;-1:-1:-1;;;15048:88:0;;12912:2:1;15048:88:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:47;13098:19;;15048:88:0;12710:413:1;15152:206:0;-1:-1:-1;;;;;15245:19:0;;;;;;:11;:19;;;;;;;;15244:20;:47;;;;-1:-1:-1;;;;;;15269:22:0;;;;;;:11;:22;;;;;;;;15268:23;15244:47;15241:110;;;15301:14;;;;15293:56;;;;-1:-1:-1;;;15293:56:0;;13330:2:1;15293:56:0;;;13312:21:1;13369:2;13349:18;;;13342:30;13408:31;13388:18;;;13381:59;13457:18;;15293:56:0;13128:353:1;15370:384:0;-1:-1:-1;;;;;15474:22:0;;;;;;:11;:22;;;;;;;;15473:23;:47;;;;-1:-1:-1;;;;;;15501:19:0;;;;;;:11;:19;;;;;;;;15500:20;15473:47;:77;;;;-1:-1:-1;;;;;;15524:26:0;;15545:4;15524:26;;15473:77;:107;;;;-1:-1:-1;15575:4:0;;-1:-1:-1;;;;;15554:26:0;;;15575:4;;15554:26;;15473:107;:128;;;;-1:-1:-1;15597:4:0;;-1:-1:-1;;;;;15584:17:0;;;15597:4;;15584:17;;15473:128;:163;;;;-1:-1:-1;15618:18:0;;-1:-1:-1;;;;;15605:31:0;;;15618:18;;15605:31;;15473:163;15470:277;;;15695:15;;15684:6;15661:20;15671:9;15661;:20::i;:::-;:29;;;;:::i;:::-;15660:50;;15652:93;;;;-1:-1:-1;;;15652:93:0;;13688:2:1;15652:93:0;;;13670:21:1;13727:2;13707:18;;;13700:30;13766:32;13746:18;;;13739:60;13816:18;;15652:93:0;13486:354:1;15964:193:0;16073:12;;16063:6;:22;;:45;;;-1:-1:-1;;;;;;16089:19:0;;;;;;:11;:19;;;;;;;;16063:45;:64;;;-1:-1:-1;;;;;;16112:15:0;;;;;;:11;:15;;;;;;;;16063:64;16055:94;;;;-1:-1:-1;;;16055:94:0;;14047:2:1;16055:94:0;;;14029:21:1;14086:2;14066:18;;;14059:30;-1:-1:-1;;;14105:18:1;;;14098:47;14162:18;;16055:94:0;13845:341:1;15762:194:0;15859:4;;-1:-1:-1;;;;;15846:17:0;;;15859:4;;15846:17;:41;;;;-1:-1:-1;;;;;;15868:19:0;;;;;;:11;:19;;;;;;;;15867:20;15846:41;:54;;;;-1:-1:-1;15892:8:0;;;;15891:9;15846:54;:71;;;;-1:-1:-1;15905:12:0;;-1:-1:-1;;;15905:12:0;;;;15904:13;15846:71;15843:106;;;15931:9;;:16;;15945:1;15931:13;:16::i;:::-;15919:9;:28;15762:194;;:::o;20042:188::-;20134:41;20149:6;20157:9;20168:6;20134:14;:41::i;:::-;20131:92;;;20177:29;20192:13;;20177:14;:29::i;:::-;20220:1;20208:9;:13;20042:188;;;:::o;17207:664::-;17308:15;17289;;:34;;:47;;;;-1:-1:-1;17328:8:0;;;;17327:9;17289:47;:68;;;;-1:-1:-1;17353:4:0;;-1:-1:-1;;;;;17340:17:0;;;17353:4;;17340:17;17289:68;:92;;;;-1:-1:-1;;;;;;17362:19:0;;;;;;:11;:19;;;;;;;;17361:20;17289:92;:107;;;;-1:-1:-1;17385:11:0;;-1:-1:-1;;;17385:11:0;;;;17289:107;:152;;;;-1:-1:-1;17410:17:0;;17439:1;;17400:28;;-1:-1:-1;;;;;17410:17:0;17400:9;:28::i;:::-;:41;17289:152;:169;;;;-1:-1:-1;17446:12:0;;-1:-1:-1;;;17446:12:0;;;;17445:13;17289:169;17286:312;;;17493:17;;17512;;17474:62;;-1:-1:-1;;;;;17493:17:0;;;17474:18;:62::i;:::-;17576:19;;17556:40;;:15;;:19;:40::i;:::-;17538:15;:58;17286:312;17623:15;17611:8;;:27;;:40;;;;-1:-1:-1;17643:8:0;;;;17642:9;17611:40;:61;;;;-1:-1:-1;17668:4:0;;-1:-1:-1;;;;;17655:17:0;;;17668:4;;17655:17;17611:61;:85;;;;-1:-1:-1;;;;;;17677:19:0;;;;;;:11;:19;;;;;;;;17676:20;17611:85;:93;;;;-1:-1:-1;17700:4:0;;-1:-1:-1;;;17700:4:0;;;;17611:93;:131;;;;-1:-1:-1;17718:10:0;;17740:1;;17708:21;;-1:-1:-1;;;;;17718:10:0;17708:9;:21::i;:::-;:34;17611:131;:148;;;;-1:-1:-1;17747:12:0;;-1:-1:-1;;;17747:12:0;;;;17746:13;17611:148;17608:256;;;17787:10;;17799;;17775:41;;-1:-1:-1;;;;;17787:10:0;;;17775:11;:41::i;:::-;17849:12;;17829:33;;:15;;:19;:33::i;:::-;17818:8;:44;17207:664;;:::o;30892:531::-;30989:7;;31025;;30942;;;;;31043:270;31067:9;:16;31063:20;;31043:270;;;31133:7;31109;:21;31117:9;31127:1;31117:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31117:12:0;31109:21;;;;;;;;;;;;;:31;;:66;;;31168:7;31144;:21;31152:9;31162:1;31152:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31152:12:0;31144:21;;;;;;;;;;;;;:31;31109:66;31105:97;;;31185:7;;31194;;31177:25;;;;;;;30892:531;;:::o;31105:97::-;31235:7;:21;31243:9;31253:1;31243:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31243:12:0;31235:21;;;;;;;;;;;;;31227:29;;:7;:29;:::i;:::-;31217:39;;31289:7;:21;31297:9;31307:1;31297:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31297:12:0;31289:21;;;;;;;;;;;;;31281:29;;:7;:29;:::i;:::-;31271:39;-1:-1:-1;31085:3:0;;;;:::i;:::-;;;;31043:270;;;;31345:7;;31337;;:15;;;;:::i;:::-;31327:7;:25;31323:56;;;31362:7;;31371;;31354:25;;;;;;30892:531;;:::o;31323:56::-;31398:7;;31407;;-1:-1:-1;30892:531:0;-1:-1:-1;30892:531:0:o;28440:1361::-;28564:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28564:28:0;28609:7;28608:8;:26;;;;;28621:13;28620:14;28608:26;:77;;;;28638:29;28648:6;28656:10;28638:9;:29::i;:::-;:47;;;;;28672:13;28671:14;28638:47;28605:146;;;28700:17;;;:27;;;28740:8;;28605:146;28765:6;28764:7;:22;;;;;28776:10;28775:11;28764:22;:40;;;;;28791:13;28790:14;28764:40;28761:311;;;28820:17;28840:41;28869:11;;28840:24;28852:11;;28840:7;:11;;:24;;;;:::i;:41::-;28820:61;;28915:11;;28899:8;:12;;;:27;28896:75;;28958:11;;28945:8;:12;28937:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28928:6;;;:41;28896:75;29010:6;;;;28996:21;;:9;;:13;:21::i;:::-;28985:8;;;:32;29052:17;29060:9;29052:7;:17;:::i;:::-;29032;;;:37;-1:-1:-1;28761:311:0;29085:6;:24;;;;;29096:13;29095:14;29085:24;29082:287;;;29125:17;29145:37;29170:11;;29145:20;29157:7;;29145;:11;;:20;;;;:::i;:37::-;29125:57;;29216:7;;29200:8;:12;;;:23;29197:71;;29255:11;;29242:8;:12;29234:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29225:6;;;:41;29197:71;29307:6;;;;29293:21;;:9;;:13;:21::i;:::-;29282:8;;;:32;29349:17;29357:9;29349:7;:17;:::i;:::-;29329;;;:37;-1:-1:-1;29082:287:0;29382:10;:28;;;;;29397:13;29396:14;29382:28;29379:293;;;29426:17;29446:38;29472:11;;29446:21;29458:8;;29446:7;:11;;:21;;;;:::i;:38::-;29426:58;;29518:8;;29502;:12;;;:24;29499:72;;29558:11;;29545:8;:12;29537:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29528:6;;;:41;29499:72;29610:6;;;;29596:21;;:9;;:13;:21::i;:::-;29585:8;;;:32;29652:17;29660:9;29652:7;:17;:::i;:::-;29632;;;:37;-1:-1:-1;29379:293:0;29685:13;29682:93;;;29714:6;;;:16;;;29745:17;;;:27;;;28440:1361;;;;;;;:::o;29809:705::-;29954:15;;;;30047:19;30055:11;30047:7;:19;:::i;:::-;30037:29;;30081:7;30080:8;:26;;;;;30093:13;30092:14;30080:26;30077:76;;;-1:-1:-1;30129:7:0;;-1:-1:-1;30147:1:0;;-1:-1:-1;30147:1:0;30122:29;;30077:76;30166:13;30163:161;;;30209:11;30202:1;:6;;;:18;;;;:::i;:::-;30195:25;-1:-1:-1;30254:12:0;30195:25;30254:7;:12;:::i;:::-;30235:31;-1:-1:-1;30320:1:0;;-1:-1:-1;30281:41:0;;30163:161;30348:11;30341:1;:6;;;:18;;;;:::i;:::-;30334:25;;30388:11;30379:1;:8;;;:20;;;;:::i;:::-;30370:29;-1:-1:-1;30370:29:0;30429:12;30437:4;30429:7;:12;:::i;:::-;:19;;;;:::i;:::-;30410:38;;29809:705;;;;;;;;;;;:::o;16165:163::-;16263:4;16253:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;16282:13:0;;-1:-1:-1;16278:43:0;;16315:4;16297:11;:15;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16165:163:0;;;:::o;27506:256::-;27597:6;27577:11;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;27639:4:0;27619:26;;;;:11;:26;;;;;;;;27616:97;;;27687:4;27671:22;;;;:7;:22;;;;;:30;;27695:6;;27671:22;:30;;27695:6;;27671:30;:::i;:::-;;;;-1:-1:-1;;27616:97:0;27739:4;27723:22;;;;:7;:22;;;;;:31;;27748:6;;27723:22;:31;;27748:6;;27723:31;:::i;:::-;;;;-1:-1:-1;;;;27506:256:0:o;19604:430::-;19702:4;19719:13;19745:15;;19735:6;:25;;19719:41;;19771:19;19821:13;;19793:24;19811:4;19793:9;:24::i;:::-;19853:8;;19793:41;-1:-1:-1;19793:41:0;;-1:-1:-1;19853:8:0;;19852:9;:24;;;;-1:-1:-1;19865:11:0;;;;;;;19852:24;:36;;;;;19880:8;19852:36;:60;;;;-1:-1:-1;;;;;;19893:19:0;;;;;;:11;:19;;;;;;;;19892:20;19852:60;:78;;;;-1:-1:-1;19916:14:0;;;;19852:78;:112;;;;-1:-1:-1;19960:4:0;;-1:-1:-1;;;;;19947:17:0;;;19960:4;;19947:17;19852:112;:139;;;;;19981:10;;19968:9;;:23;;19852:139;:157;;;;;19995:14;19852:157;:174;;;;-1:-1:-1;20014:12:0;;-1:-1:-1;;;20014:12:0;;;;20013:13;19852:174;19845:181;19604:430;-1:-1:-1;;;;;;19604:430:0:o;20238:1113::-;12826:8;:15;;-1:-1:-1;;12826:15:0;12837:4;12826:15;;;;;;20332:8:::1;::::0;12826;;20331:24:::1;::::0;20353:1:::1;::::0;20331:17:::1;::::0;20332:8;20331:14:::1;:17::i;:24::-;20308:47;;20369:8;;20381:1;20369:13:::0;20366:91:::1;;20422:18:::0;;20399;;:56:::1;::::0;20453:1:::1;::::0;20399:49:::1;::::0;20446:1:::1;::::0;20399:42:::1;::::0;:22:::1;:42::i;:::-;:46:::0;::::1;:49::i;:56::-;20384:71;;20366:91;20511:18:::0;;20467:32:::1;::::0;20532:12;;20502:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20467:77:::0;-1:-1:-1;20555:14:0::1;20572:33;20467:77:::0;20572:6;:33:::1;:::i;:::-;20555:50:::0;-1:-1:-1;20641:21:0::1;20673:24;20555:50:::0;20673:16:::1;:24::i;:::-;20708:20;20731:38;20755:14:::0;20731:21:::1;:38;:::i;:::-;20832:18:::0;;20708:61;;-1:-1:-1;20780:19:0::1;::::0;20817:33:::1;::::0;:12;:33:::1;:::i;:::-;20801:50;::::0;:12;:50:::1;:::i;:::-;20908:18:::0;;20780:71;;-1:-1:-1;20862:29:0::1;::::0;20894:32:::1;::::0;20780:71;20894:32:::1;:::i;:::-;20862:64:::0;-1:-1:-1;20940:25:0;;20937:108:::1;;20981:61;20994:24;21020:21;20981:12;:61::i;:::-;21104:18:::0;;21055:23:::1;::::0;21081:42:::1;::::0;:18:::1;:11:::0;21097:1:::1;21081:15;:18::i;:42::-;21055:68:::0;-1:-1:-1;21137:19:0;;21134:80:::1;;21166:18;::::0;21158:53:::1;::::0;-1:-1:-1;;;;;21166:18:0;;::::1;::::0;21158:53;::::1;;;::::0;21195:15;;21166:18:::1;21158:53:::0;21166:18;21158:53;21195:15;21166:18;21158:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21134:80;21242:21;21277:20:::0;;21274:70:::1;;21307:16;::::0;21299:43:::1;::::0;-1:-1:-1;;;;;21307:16:0;;::::1;::::0;21299:43;::::1;;;::::0;21334:7;;21307:16:::1;21299:43:::0;21307:16;21299:43;21334:7;21307:16;21299:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21274:70;-1:-1:-1::0;;12846:8:0;:16;;-1:-1:-1;;12846:16:0;;;-1:-1:-1;;;;;;;;20238:1113:0:o;28222:210::-;28294:4;28319:6;:22;;;;-1:-1:-1;28329:7:0;;:12;28319:22;28318:57;;;;28347:10;:27;;;;-1:-1:-1;28361:8:0;;:13;28347:27;28318:105;;;;28381:6;28380:7;:22;;;;;28392:10;28391:11;28380:22;:42;;;;-1:-1:-1;;28406:11:0;;:16;;28222:210;-1:-1:-1;;28222:210:0:o;21710:434::-;21800:16;;;21814:1;21800:16;;;;;;;;21776:21;;21800:16;;;;;;;;;;-1:-1:-1;21800:16:0;21776:40;;21845:4;21827;21832:1;21827:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21827:23:0;;;:7;;;;;;;;;;:23;;;;21871:6;;:13;;;-1:-1:-1;;;21871:13:0;;;;:6;;;;;:11;;:13;;;;;21827:7;;21871:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21861:4;21866:1;21861:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21861:23:0;;;:7;;;;;;;;;:23;21927:6;;21895:53;;21912:4;;21927:6;21936:11;21895:8;:53::i;:::-;21959:6;;:177;;-1:-1:-1;;;21959:177:0;;-1:-1:-1;;;;;21959:6:0;;;;:57;;:177;;22031:11;;21959:6;;22073:4;;22100;;22120:15;;21959:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21359:343;21472:6;;21440:53;;21457:4;;-1:-1:-1;;;;;21472:6:0;21481:11;21440:8;:53::i;:::-;21504:6;;21645:18;;21504:190;;-1:-1:-1;;;21504:190:0;;21567:4;21504:190;;;15905:34:1;15955:18;;;15948:34;;;21504:6:0;15998:18:1;;;15991:34;;;16041:18;;;16034:34;-1:-1:-1;;;;;21645:18:0;;;16084:19:1;;;16077:44;21678:15:0;16137:19:1;;;16130:35;21504:6:0;;;:22;;21534:9;;15839:19:1;;21504:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2295:248::-;2363:6;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;-1:-1:-1;;2463:23:1;;;2533:2;2518:18;;;2505:32;;-1:-1:-1;2295:248:1:o;2737:118::-;2823:5;2816:13;2809:21;2802:5;2799:32;2789:60;;2845:1;2842;2835:12;2860:309;2925:6;2933;2986:2;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3038:9;3025:23;3015:33;;3098:2;3087:9;3083:18;3070:32;3111:28;3133:5;3111:28;:::i;:::-;3158:5;3148:15;;;2860:309;;;;;:::o;3174:382::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3355:9;3342:23;3374:28;3396:5;3374:28;:::i;:::-;3421:5;-1:-1:-1;3478:2:1;3463:18;;3450:32;3491:33;3450:32;3491:33;:::i;3561:523::-;3665:6;3673;3681;3689;3697;3705;3758:3;3746:9;3737:7;3733:23;3729:33;3726:53;;;3775:1;3772;3765:12;3726:53;-1:-1:-1;;3798:23:1;;;3868:2;3853:18;;3840:32;;-1:-1:-1;3919:2:1;3904:18;;3891:32;;3970:2;3955:18;;3942:32;;-1:-1:-1;4021:3:1;4006:19;;3993:33;;-1:-1:-1;4073:3:1;4058:19;4045:33;;-1:-1:-1;3561:523:1;-1:-1:-1;3561:523:1:o;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;4476:529::-;4553:6;4561;4569;4622:2;4610:9;4601:7;4597:23;4593:32;4590:52;;;4638:1;4635;4628:12;4590:52;4677:9;4664:23;4696:31;4721:5;4696:31;:::i;:::-;4746:5;-1:-1:-1;4803:2:1;4788:18;;4775:32;4816:33;4775:32;4816:33;:::i;:::-;4868:7;-1:-1:-1;4927:2:1;4912:18;;4899:32;4940:33;4899:32;4940:33;:::i;:::-;4992:7;4982:17;;;4476:529;;;;;:::o;5218:388::-;5286:6;5294;5347:2;5335:9;5326:7;5322:23;5318:32;5315:52;;;5363:1;5360;5353:12;5315:52;5402:9;5389:23;5421:31;5446:5;5421:31;:::i;5611:309::-;5676:6;5684;5737:2;5725:9;5716:7;5712:23;5708:32;5705:52;;;5753:1;5750;5743:12;5705:52;5792:9;5779:23;5811:28;5833:5;5811:28;:::i;5925:316::-;6002:6;6010;6018;6071:2;6059:9;6050:7;6046:23;6042:32;6039:52;;;6087:1;6084;6077:12;6039:52;-1:-1:-1;;6110:23:1;;;6180:2;6165:18;;6152:32;;-1:-1:-1;6231:2:1;6216:18;;;6203:32;;5925:316;-1:-1:-1;5925:316:1:o;6729:329::-;6931:2;6913:21;;;6970:1;6950:18;;;6943:29;-1:-1:-1;;;7003:2:1;6988:18;;6981:36;7049:2;7034:18;;6729:329::o;7415:127::-;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:127;7608:10;7603:3;7599:20;7596:1;7589:31;7639:4;7636:1;7629:15;7663:4;7660:1;7653:15;7679:128;7746:9;;;7767:11;;;7764:37;;;7781:18;;:::i;7812:127::-;7873:10;7868:3;7864:20;7861:1;7854:31;7904:4;7901:1;7894:15;7928:4;7925:1;7918:15;7944:135;7983:3;8004:17;;;8001:43;;8024:18;;:::i;:::-;-1:-1:-1;8071:1:1;8060:13;;7944:135::o;8851:217::-;8891:1;8917;8907:132;;8961:10;8956:3;8952:20;8949:1;8942:31;8996:4;8993:1;8986:15;9024:4;9021:1;9014:15;8907:132;-1:-1:-1;9053:9:1;;8851:217::o;9073:125::-;9138:9;;;9159:10;;;9156:36;;;9172:18;;:::i;9985:184::-;10055:6;10108:2;10096:9;10087:7;10083:23;10079:32;10076:52;;;10124:1;10121;10114:12;10076:52;-1:-1:-1;10147:16:1;;9985:184;-1:-1:-1;9985:184:1:o;10453:245::-;10520:6;10573:2;10561:9;10552:7;10548:23;10544:32;10541:52;;;10589:1;10586;10579:12;10541:52;10621:9;10615:16;10640:28;10662:5;10640:28;:::i;11727:168::-;11800:9;;;11831;;11848:15;;;11842:22;;11828:37;11818:71;;11869:18;;:::i;14323:251::-;14393:6;14446:2;14434:9;14425:7;14421:23;14417:32;14414:52;;;14462:1;14459;14452:12;14414:52;14494:9;14488:16;14513:31;14538:5;14513:31;:::i;14579:980::-;14841:4;14889:3;14878:9;14874:19;14920:6;14909:9;14902:25;14946:2;14984:6;14979:2;14968:9;14964:18;14957:34;15027:3;15022:2;15011:9;15007:18;15000:31;15051:6;15086;15080:13;15117:6;15109;15102:22;15155:3;15144:9;15140:19;15133:26;;15194:2;15186:6;15182:15;15168:29;;15215:1;15225:195;15239:6;15236:1;15233:13;15225:195;;;15304:13;;-1:-1:-1;;;;;15300:39:1;15288:52;;15395:15;;;;15360:12;;;;15336:1;15254:9;15225:195;;;-1:-1:-1;;;;;;;15476:32:1;;;;15471:2;15456:18;;15449:60;-1:-1:-1;;;15540:3:1;15525:19;15518:35;15437:3;14579:980;-1:-1:-1;;;14579:980:1:o;16176:306::-;16264:6;16272;16280;16333:2;16321:9;16312:7;16308:23;16304:32;16301:52;;;16349:1;16346;16339:12;16301:52;16378:9;16372:16;16362:26;;16428:2;16417:9;16413:18;16407:25;16397:35;;16472:2;16461:9;16457:18;16451:25;16441:35;;16176:306;;;;;:::o

Swarm Source

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