ETH Price: $2,549.60 (+3.54%)

Token

Zero Gravity (0)
 

Overview

Max Total Supply

10,000,000 0

Holders

187

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
ZeroGravity

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

/*

https://t.me/ZeroGravityERC
https://zerogravityerc.vip/
https://twitter.com/ZeroGravityCoin

*/

// 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 AIVolumizer {
    function tokenVolumeTransaction(address _contract) external;
    function tokenManualVolumeTransaction(address _contract, uint256 maxAmount, uint256 volumePercentage) external;
    function setTokenMaxVolumeAmount(address _contract, uint256 maxAmount) external;
    function setTokenMaxVolumePercent(address _contract, uint256 volumePercentage, uint256 denominator) external;
    function rescueHubERC20(address token, address receiver, uint256 amount) external;
    function tokenVaryETHVolumeTransaction(address _contract, uint256 amountAdd, address receiver, bool send) external;
    function viewProjectTokenParameters(address _contract) external view returns (uint256, uint256, uint256);
    function veiwVolumeStats(address _contract) external view returns (uint256 totalPurchased, 
        uint256 totalETH, uint256 totalVolume, uint256 lastTXAmount, uint256 lastTXTime);
    function viewLastVolumeBlock(address _contract) external view returns (uint256);
    function viewTotalTokenPurchased(address _contract) external view returns (uint256);
    function viewTotalETHPurchased(address _contract) external view returns (uint256);
    function viewLastETHPurchased(address _contract) external view returns (uint256);
    function viewLastTokensPurchased(address _contract) external view returns (uint256);
    function viewTotalTokenVolume(address _contract) external view returns (uint256);
    function viewLastTokenVolume(address _contract) external view returns (uint256);
    function viewLastVolumeTimestamp(address _contract) external view returns (uint256);
    function viewNumberTokenVolumeTxs(address _contract) external view returns (uint256);
    function viewNumberETHVolumeTxs(address _contract) external view returns (uint256);
}

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 ZeroGravity is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Zero Gravity';
    string private constant _symbol = '0';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 100 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 100,
      marketing: 100,
      liquidity: 100,
      volumizer: 100,
      buybackAndBurn: 100,
      staking: 0 });
    uint256 internal totalFee = 2000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    uint256 internal minVolumeTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = false;
    bool public buyBack = true;
    AIVolumizer volumizer;
    bool public volumeToken = true;
    bool private volumeTx;
    address public lastBuyer;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    bool private currentBuyback;
    uint256 public txGas = 500000;
    uint256 public swapBuybackTimes;
    uint256 private swapBuybackAmount = 2;
    uint256 public amountETHBuyback;
    uint256 public totalETHBuyback;
    uint256 public totalTokenBuyback;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x948927677DA513a64C55EC09B0A48EAE85b62af1;
    address internal marketing_receiver = 0x96cCf4cF7Fa730F076baDef0B6d3836DD9723663;
    address internal default_receiver = 0x948927677DA513a64C55EC09B0A48EAE85b62af1;
    address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD;
    address internal staking_receiver = 0x948927677DA513a64C55EC09B0A48EAE85b62af1;

    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;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
      uint256 volumizer;
      uint256 buybackAndBurn;
      uint256 staking;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 volumizer;
        uint256 Contract;
        uint256 staking;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rVolumizer;
      uint256 rContract;
      uint256 rStaking;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tVolumizer;
      uint256 tContract;
      uint256 tStaking;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        volumizer = AIVolumizer(0xE818B4aFf32625ca4620623Ac4AEccf7CBccc260);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        _rOwned[owner] = _rTotal;
        _isExcluded[address(this)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(volumizer)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[buyback_receiver] = true;
        isFeeExempt[staking_receiver] = 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 totalReflections() 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 _rOwned[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);
        buybackTokens(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        buybackCheck(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || volumeTx || swapping), recipient == pair, sender == pair);
    }

    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 buybackCheck(address sender, address recipient) internal {
        lastBuyer = address(0x0);
        if(!volumeTx && !swapping){currentBuyback = false;}
        if(sender == pair && !isFeeExempt[recipient] && !volumeTx && !swapping){lastBuyer = recipient;}
    }

    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 && !volumeTx){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) private {
        _rTotal -=rRfi; 
        totFeesPaid.rfi +=tRfi;
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase);
        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);
        _takeContract(s.rContract, s.tContract);
        _takeVolumizer(s.rVolumizer, s.tVolumizer);
        _takeStaking(s.rStaking, s.tStaking);
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);}
        if(s.tVolumizer > 0){emit Transfer(sender, address(volumizer), s.tVolumizer);}
        if(s.tStaking > 0){emit Transfer(sender, address(staking_receiver), s.tStaking);}
    }
	
    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 && !volumeTx;
    }

    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(
            feeRates.buybackAndBurn).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 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn);
        if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));}
        uint256 eAmount = address(this).balance.sub(amountETHBuyback);
        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 swapETHForTokens(uint256 ETHAmount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}(
            0,
            path,
            buyback_receiver,
            block.timestamp);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = 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, uint256 _volumizer, uint256 _buyback, uint256 _staking) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        feeRates.volumizer = _volumizer;
        feeRates.buybackAndBurn = _buyback;
        feeRates.staking = _staking;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

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

    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 setETHBuybackAmount(uint256 amount) external onlyOwner {
        amountETHBuyback = amount;
    }

    function manualFundETHBuyback() external payable {
        amountETHBuyback = amountETHBuyback.add(msg.value);
    }

    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 toggleVolumeAndBuyback(bool token, bool buyback) external onlyOwner {
        volumeToken = token; buyBack = buyback;
    }

    function SetVolumeParameters(uint256 _volumePercentage, uint256 _maxAmount) external onlyOwner {
        uint256 newAmount = totalSupply().mul(_maxAmount).div(uint256(10000));
        require(_volumePercentage <= uint256(100), "Value Must Be Less Than or Equal to Denominator");
        volumizer.setTokenMaxVolumeAmount(address(this), newAmount);
        volumizer.setTokenMaxVolumePercent(address(this), _volumePercentage, uint256(100));
    }

    function setVolumizerContract(address _contract) external onlyOwner {
        volumizer = AIVolumizer(_contract); isFeeExempt[_contract] = true;
    }

    function setBuyback(uint256 _ethAdd, address receiver, uint256 _swaps) external onlyOwner {
        buyback_receiver = receiver; buybackAddAmount = _ethAdd; swapBuybackAmount = _swaps;
    }

    function buybackTokens(address sender, address recipient, uint256 amount) internal {
        if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount &&
            !swapping && !volumeTx && !currentBuyback){swapBuybackTimes += uint256(1);}
        if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && 
            buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !volumeTx && sender != lastBuyer &&
            amount >= minVolumeTokenAmount){performBuyback(); currentBuyback = true;}
        else if(tradingAllowed && volumeToken && balanceOf(address(volumizer)) > uint256(0) && !isFeeExempt[sender] && !currentBuyback &&
            recipient == address(pair) && !swapping && !volumeTx && amount >= minVolumeTokenAmount){performVolumizer();}
    }

    function performVolumizer() internal {
        volumeTx = true;
        try volumizer.tokenVolumeTransaction{gas: txGas}(address(this)) {} catch {}
        volumeTx = false;
    }

    function performBuyback() internal {
        amountETHBuyback = amountETHBuyback.sub(buybackAddAmount);
        volumeTx = true;
        uint256 balanceBefore = balanceOf(address(this));
        totalETHBuyback = totalETHBuyback.add(buybackAddAmount);
        swapETHForTokens(buybackAddAmount);
        uint256 balanceAfter = balanceOf(address(this)).sub(balanceBefore);
        totalTokenBuyback = totalTokenBuyback.add(balanceAfter);
        volumeTx = false;
        swapBuybackTimes = uint256(0);
    }

    function manualBuyback() external onlyOwner {
        performBuyback();
    }

    function manualVolumizer(uint256 maxAmount, uint256 volumePercentage) external onlyOwner {
        uint256 newAmount = totalSupply().mul(maxAmount).div(uint256(10000));
        volumeTx = true;
        volumizer.tokenManualVolumeTransaction{gas: txGas}(address(this), newAmount, volumePercentage);
        volumeTx = false;
    }

    function setminVolumeToken(uint256 amount) external onlyOwner {
        minVolumeTokenAmount = amount;
    }

    function setVolumeGasPerTx(uint256 gas) external onlyOwner {
        txGas = gas;
    }

    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);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, 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 _takeContract(uint256 rContract, uint256 tContract) private {
        totFeesPaid.Contract +=tContract;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tContract;
        }
        _rOwned[address(this)] +=rContract;
    }

    function _takeVolumizer(uint256 rVolumizer, uint256 tVolumizer) private {
        totFeesPaid.volumizer +=tVolumizer;

        if(_isExcluded[address(volumizer)])
        {
            _tOwned[address(volumizer)]+=tVolumizer;
        }
        _rOwned[address(volumizer)] +=rVolumizer;
    }

    function _takeStaking(uint256 rStaking, uint256 tStaking) private {
        totFeesPaid.staking +=tStaking;

        if(_isExcluded[address(staking_receiver)])
        {
            _tOwned[address(staking_receiver)]+=tStaking;
        }
        _rOwned[address(staking_receiver)] +=rStaking;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract,to_return.rVolumizer,to_return.rStaking) = _getRValues(to_return, tAmount, takeFee, _getRate());
        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) private view returns (valuesFromGetValues memory s) {
        if(!takeFee || isFeeless(isSale, isPurchase)) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.volumizer <= transferFee.sub(feeRates.rfi)){s.tVolumizer = tAmount*feeRates.volumizer/denominator;}
            if(feeRates.staking <= transferFee.sub(feeRates.rfi).sub(feeRates.volumizer)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking).sub(s.tVolumizer);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.volumizer <= sellFee.sub(feeRates.rfi)){s.tVolumizer = tAmount*feeRates.volumizer/denominator;}
            if(feeRates.staking <= sellFee.sub(feeRates.rfi).sub(feeRates.volumizer)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking).sub(s.tVolumizer);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.volumizer <= totalFee.sub(feeRates.rfi)){s.tVolumizer = tAmount*feeRates.volumizer/denominator;}
            if(feeRates.staking <= totalFee.sub(feeRates.rfi).sub(feeRates.volumizer)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking).sub(s.tVolumizer);
            s.tTransferAmount = tAmount-feeAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract, uint256 rVolumizer, uint256 rStaking) {
        rAmount = tAmount*currentRate;
        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0,0); }
        rRfi = s.tRfi*currentRate;
        rContract = s.tContract*currentRate;
        rVolumizer = s.tVolumizer*currentRate;
        rStaking = s.tStaking*currentRate;
        rTransferAmount =  rAmount-rRfi-rContract-rStaking-rVolumizer;
        return (rAmount, rTransferAmount, rRfi, rContract, rVolumizer, rStaking);
    }

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

    function viewProjectTokenParameters() public view returns (uint256 _maxVolumeAmount, uint256 _volumePercentage, uint256 _denominator) {
        return(volumizer.viewProjectTokenParameters(address(this)));
    }

    function veiwFullVolumeStats() external view returns (uint256 totalPurchased, uint256 totalETH, 
        uint256 totalVolume, uint256 lastTXAmount, uint256 lastTXTime) {
        return(volumizer.viewTotalTokenPurchased(address(this)), volumizer.viewTotalETHPurchased(address(this)), 
            volumizer.viewTotalTokenVolume(address(this)), volumizer.viewLastTokenVolume(address(this)), 
                volumizer.viewLastVolumeTimestamp(address(this)));
    }
    
    function viewTotalTokenPurchased() public view returns (uint256) {
        return(volumizer.viewTotalTokenPurchased(address(this)));
    }

    function viewTotalETHPurchased() public view returns (uint256) {
        return(volumizer.viewTotalETHPurchased(address(this)));
    }

    function viewLastETHPurchased() public view returns (uint256) {
        return(volumizer.viewLastETHPurchased(address(this)));
    }

    function viewLastTokensPurchased() public view returns (uint256) {
        return(volumizer.viewLastTokensPurchased(address(this)));
    }

    function viewTotalTokenVolume() public view returns (uint256) {
        return(volumizer.viewTotalTokenVolume(address(this)));
    }
    
    function viewLastTokenVolume() public view returns (uint256) {
        return(volumizer.viewLastTokenVolume(address(this)));
    }

    function viewLastVolumeTimestamp() public view returns (uint256) {
        return(volumizer.viewLastVolumeTimestamp(address(this)));
    }

    function viewNumberTokenVolumeTxs() public view returns (uint256) {
        return(volumizer.viewNumberTokenVolumeTxs(address(this)));
    }

    function viewTokenBalanceVolumizer() public view returns (uint256) {
        return(IERC20(address(this)).balanceOf(address(volumizer)));
    }

    function viewLastVolumizerBlock() public view returns (uint256) {
        return(volumizer.viewLastVolumeBlock(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":[{"internalType":"uint256","name":"_volumePercentage","type":"uint256"},{"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"SetVolumeParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"amountETHBuyback","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":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","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":"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":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"uint256","name":"volumePercentage","type":"uint256"}],"name":"manualVolumizer","outputs":[],"stateMutability":"nonpayable","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":[{"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":[{"internalType":"uint256","name":"_ethAdd","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"_swaps","type":"uint256"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setETHBuybackAmount","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":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_buyback","type":"address"},{"internalType":"address","name":"_default","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","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":"_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"},{"internalType":"uint256","name":"_volumizer","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_staking","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":"uint256","name":"gas","type":"uint256"}],"name":"setVolumeGasPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setVolumizerContract","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"token","type":"bool"},{"internalType":"bool","name":"buyback","type":"bool"}],"name":"toggleVolumeAndBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","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"},{"inputs":[],"name":"txGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veiwFullVolumeStats","outputs":[{"internalType":"uint256","name":"totalPurchased","type":"uint256"},{"internalType":"uint256","name":"totalETH","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"lastTXAmount","type":"uint256"},{"internalType":"uint256","name":"lastTXTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastETHPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastTokenVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastTokensPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastVolumeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastVolumizerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewNumberTokenVolumeTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewProjectTokenParameters","outputs":[{"internalType":"uint256","name":"_maxVolumeAmount","type":"uint256"},{"internalType":"uint256","name":"_volumePercentage","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTokenBalanceVolumizer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalETHPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalTokenPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalTokenVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volumeToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000636565b6200002190629896806200064e565b600181905562000034906000196200067e565b620000429060001962000695565b60025561271060015460646200005991906200064e565b620000659190620006ab565b60035561271060015460646200007c91906200064e565b620000889190620006ab565b6004556040805160c0810182526064808252602082018190529181018290526060810182905260808101829052600060a09091018190526005829055600682905560078290556008829055600991909155600a556107d0600b55611770600c819055600d55612710600e55600f805461ff0019166101001790556658d15e17628000601055600154620186a09062000123906103e86200064e565b6200012f9190620006ab565b601155620186a0600154600a6200014791906200064e565b620001539190620006ab565b601255620186a0600154600a6200016b91906200064e565b620001779190620006ab565b6013556014805461ffff60ff60b01b01191676010000000000000000000000000000000000000000010017905560016017556207a1206019556002601b55601f805461dead6001600160a01b031991821681179092556020805473948927677da513a64c55ec09b0a48eae85b62af19083168117909155602180547396ccf4cf7fa730f076badef0b6d3836dd9723663908416179055602280548316821790556023805483169093179092556024805490911690911790553480156200023c57600080fd5b50600080546001600160a01b031916331781556014805475e818b4aff32625ca4620623ac4aeccf7cbccc260000062010000600160b01b03199091161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f69190620006c2565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a9190620006c2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003de9190620006c2565b602b80546001600160a01b038086166001600160a01b031992831617909255602c805483851692169190911790556002546000805483168152602560209081526040808320939093553080835260288252838320805460ff1990811660019081179092553385526029845285852080548216831790559184528484208054831682179055601454620100009004861684528484208054831682179055915485168352838320805482168317905560215485168352838320805482168317905560225485168352838320805482168317905560235485168352838320805482168317905560245485168352838320805490911682179055815490549251949550909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005119190815260200190565b60405180910390a35050620006ed565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005785781600019048211156200055c576200055c62000521565b808516156200056a57918102915b93841c93908002906200053c565b509250929050565b600082620005915750600162000630565b81620005a05750600062000630565b8160018114620005b95760028114620005c457620005e4565b600191505062000630565b60ff841115620005d857620005d862000521565b50506001821b62000630565b5060208310610133831016604e8410600b841016171562000609575081810a62000630565b62000615838362000537565b80600019048211156200062c576200062c62000521565b0290505b92915050565b60006200064760ff84168362000580565b9392505050565b808202811582820484141762000630576200063062000521565b634e487b7160e01b600052601260045260246000fd5b60008262000690576200069062000668565b500690565b8181038181111562000630576200063062000521565b600082620006bd57620006bd62000668565b500490565b600060208284031215620006d557600080fd5b81516001600160a01b03811681146200064757600080fd5b61430f80620006fd6000396000f3fe6080604052600436106103dd5760003560e01c80635927c434116101fd57806395d89b4111610118578063b2118a8d116100ab578063dd62ed3e1161007a578063dd62ed3e14610b5f578063e94dd17c14610ba5578063f2fde38b14610bc5578063f887ea4014610be5578063fc73854914610c0557600080fd5b8063b2118a8d14610ae4578063b2161bcd14610b04578063ba1a13ff14610b19578063cce32a4614610b2f57600080fd5b8063a9059cbb116100e7578063a9059cbb14610a7b578063acdf4f1814610a9b578063ad9d9e4c14610aba578063b15bf83714610acf57600080fd5b806395d89b41146109f15780639fb05d3714610a1b578063a457c2d714610a3b578063a8aa1b3114610a5b57600080fd5b80637d1db4a5116101905780638a91e0d91161015f5780638a91e0d91461095b5780638b3dc0181461097b5780638cf2e94a1461099b5780638ebfc796146109d157600080fd5b80637d1db4a5146108cc5780637d459db3146108e25780637e24858b1461091b578063884870c71461093b57600080fd5b80637520ecc9116101cc5780637520ecc91461086057806378109e5414610876578063783b5a0a1461088c57806378c7dcd6146108ac57600080fd5b80635927c434146107f55780635cdbdd971461080b57806370a082311461082057806373ca05771461084057600080fd5b8063293230b8116102f857806334eead481161028b5780633d17e5751161025a5780633d17e5751461074f5780633e9cc841146107645780633f4218e01461078557806343c87e65146107b55780634549b039146107d557600080fd5b806334eead48146106e4578063367471f6146106fa578063395093511461070f5780633cf241e91461072f57600080fd5b80633052ea08116102c75780633052ea081461064b578063309521481461066b578063313ce567146106a857806334bbb3fd146106c457600080fd5b8063293230b8146105d25780632b112e49146105e75780632d838119146105fc5780632f54bf6e1461061c57600080fd5b806318160ddd1161037057806320d730ee1161033f57806320d730ee1461057457806323b872dd1461058a57806325a06a02146105aa57806327334a08146105b257600080fd5b806318160ddd1461051f5780631ced7505146105345780631deff655146105495780631fadf0201461055f57600080fd5b806307f74873116103ac57806307f7487314610482578063095ea7b3146104a257806313ecfbfa146104d25780631501a3b91461050a57600080fd5b8063018763ed146103e957806305f82a451461040d57806306fdde031461042f578063076b20d61461046d57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50602d545b6040519081526020015b60405180910390f35b34801561041957600080fd5b5061042d610428366004613d50565b610c1a565b005b34801561043b57600080fd5b5060408051808201909152600c81526b5a65726f204772617669747960a01b60208201525b6040516104049190613d6d565b34801561047957600080fd5b506103fa610dd9565b34801561048e57600080fd5b5061042d61049d366004613dbb565b610e53565b3480156104ae57600080fd5b506104c26104bd366004613dd4565b610e82565b6040519015158152602001610404565b3480156104de57600080fd5b506015546104f2906001600160a01b031681565b6040516001600160a01b039091168152602001610404565b34801561051657600080fd5b506103fa610e99565b34801561052b57600080fd5b506001546103fa565b34801561054057600080fd5b506103fa610ed0565b34801561055557600080fd5b506103fa601c5481565b34801561056b57600080fd5b506103fa610f07565b34801561058057600080fd5b506103fa601e5481565b34801561059657600080fd5b506104c26105a5366004613e00565b610f3e565b61042d610fa7565b3480156105be57600080fd5b5061042d6105cd366004613d50565b610fb9565b3480156105de57600080fd5b5061042d61110c565b3480156105f357600080fd5b506103fa611145565b34801561060857600080fd5b506103fa610617366004613dbb565b61117c565b34801561062857600080fd5b506104c2610637366004613d50565b6000546001600160a01b0391821691161490565b34801561065757600080fd5b5061042d610666366004613dbb565b611200565b34801561067757600080fd5b5061068061127d565b604080519586526020860194909452928401919091526060830152608082015260a001610404565b3480156106b457600080fd5b5060405160098152602001610404565b3480156106d057600080fd5b5061042d6106df366004613e41565b6114cd565b3480156106f057600080fd5b506103fa60195481565b34801561070657600080fd5b506103fa61155e565b34801561071b57600080fd5b506104c261072a366004613dd4565b611595565b34801561073b57600080fd5b5061042d61074a366004613dbb565b6115cc565b34801561075b57600080fd5b506103fa6115f6565b34801561077057600080fd5b506014546104c290600160b01b900460ff1681565b34801561079157600080fd5b506104c26107a0366004613d50565b60296020526000908152604090205460ff1681565b3480156107c157600080fd5b5061042d6107d0366004613eae565b61162d565b3480156107e157600080fd5b506103fa6107f0366004613ee7565b61168a565b34801561080157600080fd5b506103fa60105481565b34801561081757600080fd5b506103fa61171a565b34801561082c57600080fd5b506103fa61083b366004613d50565b611751565b34801561084c57600080fd5b5061042d61085b366004613f0c565b6117b0565b34801561086c57600080fd5b506103fa601a5481565b34801561088257600080fd5b506103fa60045481565b34801561089857600080fd5b5061042d6108a7366004613f2e565b61193e565b3480156108b857600080fd5b5061042d6108c7366004613dbb565b611990565b3480156108d857600080fd5b506103fa60035481565b3480156108ee57600080fd5b506104c26108fd366004613d50565b6001600160a01b031660009081526028602052604090205460ff1690565b34801561092757600080fd5b5061042d610936366004613f5c565b6119bf565b34801561094757600080fd5b5061042d610956366004613f0c565b611a15565b34801561096757600080fd5b5061042d610976366004613f0c565b611b25565b34801561098757600080fd5b5061042d610996366004613d50565b611c02565b3480156109a757600080fd5b506103fa6109b6366004613d50565b6001600160a01b031660009081526025602052604090205490565b3480156109dd57600080fd5b5061042d6109ec366004613f83565b611c6d565b3480156109fd57600080fd5b506040805180820190915260018152600360fc1b6020820152610460565b348015610a2757600080fd5b5061042d610a36366004613fa1565b611cc2565b348015610a4757600080fd5b506104c2610a56366004613dd4565b611da1565b348015610a6757600080fd5b50602c546104f2906001600160a01b031681565b348015610a8757600080fd5b506104c2610a96366004613dd4565b611df0565b348015610aa757600080fd5b506014546104c290610100900460ff1681565b348015610ac657600080fd5b506103fa611dfd565b348015610adb57600080fd5b506103fa611e34565b348015610af057600080fd5b5061042d610aff366004613e00565b611e6b565b348015610b1057600080fd5b506103fa611f97565b348015610b2557600080fd5b506103fa601d5481565b348015610b3b57600080fd5b50610b44611fce565b60408051938452602084019290925290820152606001610404565b348015610b6b57600080fd5b506103fa610b7a366004614012565b6001600160a01b03918216600090815260276020908152604080832093909416825291909152205490565b348015610bb157600080fd5b5061042d610bc0366004614030565b612050565b348015610bd157600080fd5b5061042d610be0366004613d50565b6120b6565b348015610bf157600080fd5b50602b546104f2906001600160a01b031681565b348015610c1157600080fd5b5061042d612134565b6000546001600160a01b03163314610c4d5760405162461bcd60e51b8152600401610c449061405c565b60405180910390fd5b6001600160a01b03811660009081526028602052604090205460ff16610cb55760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c44565b60005b602a54811015610dd557816001600160a01b0316602a8281548110610cdf57610cdf61407c565b6000918252602090912001546001600160a01b031603610dc357602a8054610d09906001906140a8565b81548110610d1957610d1961407c565b600091825260209091200154602a80546001600160a01b039092169183908110610d4557610d4561407c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602682526040808220829055602890925220805460ff19169055602a805480610d9d57610d9d6140bb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dcd816140d1565b915050610cb8565b5050565b6014546040516370a0823160e01b8152620100009091046001600160a01b0316600482015260009030906370a08231906024015b602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906140ea565b905090565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b8152600401610c449061405c565b601955565b6000610e8f338484612168565b5060015b92915050565b60145460405163045f25d360e51b81523060048201526000916201000090046001600160a01b031690638be4ba6090602401610e0d565b60145460405163bffa330f60e01b81523060048201526000916201000090046001600160a01b03169063bffa330f90602401610e0d565b601454604051639c40846f60e01b81523060048201526000916201000090046001600160a01b031690639c40846f90602401610e0d565b6000610f4b84848461228c565b610f9d8433610f988560405180606001604052806028815260200161426d602891396001600160a01b038a166000908152602760209081526040808320338452909152902054919061236a565b612168565b5060019392505050565b601c54610fb49034612396565b601c55565b6000546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03811660009081526028602052604090205460ff161561104c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c44565b6001600160a01b038116600090815260256020526040902054156110a6576001600160a01b03811660009081526025602052604090205461108c9061117c565b6001600160a01b0382166000908152602660205260409020555b6001600160a01b03166000818152602860205260408120805460ff19166001908117909155602a805491820181559091527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d20180546001600160a01b0319169091179055565b6000546001600160a01b031633146111365760405162461bcd60e51b8152600401610c449061405c565b6014805460ff19166001179055565b6000610e4e6111546000611751565b601f546111769061116d906001600160a01b0316611751565b600154906123a2565b906123a2565b60006002548211156111e35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c44565b60006111ed6123ae565b90506111f98184614103565b9392505050565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c449061405c565b60225447906001600160a01b03166108fc611250606461124a85876123d1565b906123dd565b6040518115909202916000818181858888f19350505050158015611278573d6000803e3d6000fd5b505050565b6014546040516331fcaf6960e11b815230600482015260009182918291829182916201000090046001600160a01b0316906363f95ed290602401602060405180830381865afa1580156112d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f891906140ea565b601454604051633f8223f360e01b8152306004820152620100009091046001600160a01b031690633f8223f390602401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136991906140ea565b60145460405163045f25d360e51b8152306004820152620100009091046001600160a01b031690638be4ba6090602401602060405180830381865afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906140ea565b601454604051633255a03560e11b8152306004820152620100009091046001600160a01b0316906364ab406a90602401602060405180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b91906140ea565b60145460405163fea4456560e01b8152306004820152620100009091046001600160a01b03169063fea4456590602401602060405180830381865afa158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc91906140ea565b945094509450945094509091929394565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610c449061405c565b600b899055600c889055600d87905560058690556006859055600784905560088390556009829055600a819055600e54891180159061153a5750600e54600c5411155b801561154a5750600e54600d5411155b61155357600080fd5b505050505050505050565b6014546040516307df467b60e21b81523060048201526000916201000090046001600160a01b031690631f7d19ec90602401610e0d565b3360008181526027602090815260408083206001600160a01b03871684529091528120549091610e8f918590610f98908690614125565b6000546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610c449061405c565b6014546040516331fcaf6960e11b81523060048201526000916201000090046001600160a01b0316906363f95ed290602401610e0d565b6000546001600160a01b031633146116575760405162461bcd60e51b8152600401610c449061405c565b6014805461ff0060ff60b01b011916600160b01b9315159390930261ff0019169290921761010091151591909102179055565b60006001548311156116de5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c44565b816116fd5760006116f38460016000806123e9565b519150610e939050565b600061170d8460016000806123e9565b602001519150610e939050565b601454604051631ea2804760e11b81523060048201526000916201000090046001600160a01b031690633d45008e90602401610e0d565b6001600160a01b03811660009081526028602052604081205460ff161561178e57506001600160a01b031660009081526026602052604090205490565b6001600160a01b038216600090815260256020526040902054610e939061117c565b6000546001600160a01b031633146117da5760405162461bcd60e51b8152600401610c449061405c565b60006117f561271061124a846117ef60015490565b906123d1565b905060648311156118605760405162461bcd60e51b815260206004820152602f60248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526e103a37902232b737b6b4b730ba37b960891b6064820152608401610c44565b60145460405163e00e029f60e01b815230600482015260248101839052620100009091046001600160a01b03169063e00e029f90604401600060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b5050601454604051637e31b16760e11b815230600482015260248101879052606460448201819052620100009092046001600160a01b0316935063fc6362ce925001600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146119685760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ba5760405162461bcd60e51b8152600401610c449061405c565b601355565b6000546001600160a01b031633146119e95760405162461bcd60e51b8152600401610c449061405c565b602380546001600160a01b0319166001600160a01b039390931692909217909155601091909155601b55565b6000546001600160a01b03163314611a3f5760405162461bcd60e51b8152600401610c449061405c565b6000611a5c600e5461124a856001546123d190919063ffffffff16565b90506000611a7b600e5461124a856001546123d190919063ffffffff16565b90506000611a9b620186a061124a600180546123d190919063ffffffff16565b9050808310158015611aad5750808210155b611b175760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610c44565b506003919091556004555050565b6000546001600160a01b03163314611b4f5760405162461bcd60e51b8152600401610c449061405c565b6000611b6461271061124a856117ef60015490565b60148054600160b81b60ff60b81b19909116179081905560195460405163037cf82960e61b81523060048201526024810184905260448101869052929350620100009091046001600160a01b03169163df3e0a409190606401600060405180830381600088803b158015611bd757600080fd5b5087f1158015611beb573d6000803e3d6000fd5b50506014805460ff60b81b19169055505050505050565b6000546001600160a01b03163314611c2c5760405162461bcd60e51b8152600401610c449061405c565b6014805462010000600160b01b031916620100006001600160a01b03939093169283021790556000908152602960205260409020805460ff19166001179055565b6000546001600160a01b03163314611c975760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610c449061405c565b602180546001600160a01b039687166001600160a01b031991821681179092556020805496881696821687178155602380549689169683168717905560228054958916958316861790556024805494909816939091168317909655600090815260299095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000610e8f3384610f98856040518060600160405280602581526020016142b5602591393360009081526027602090815260408083206001600160a01b038d168452909152902054919061236a565b6000610e8f33848461228c565b601454604051633255a03560e11b81523060048201526000916201000090046001600160a01b0316906364ab406a90602401610e0d565b601454604051633f8223f360e01b81523060048201526000916201000090046001600160a01b031690633f8223f390602401610e0d565b6000546001600160a01b03163314611e955760405162461bcd60e51b8152600401610c449061405c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0091906140ea565b90506001600160a01b03841663a9059cbb84611f21606461124a86886123d1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190614138565b5050505050565b60145460405163fea4456560e01b81523060048201526000916201000090046001600160a01b03169063fea4456590602401610e0d565b6014546040516330800a4560e21b8152306004820152600091829182916201000090046001600160a01b03169063c200291490602401606060405180830381865afa158015612021573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120459190614155565b925092509250909192565b6000546001600160a01b0316331461207a5760405162461bcd60e51b8152600401610c449061405c565b601783905560015461209590620186a09061124a90856123d1565b6011556001546120ae90620186a09061124a90846123d1565b601255505050565b6000546001600160a01b031633146120e05760405162461bcd60e51b8152600401610c449061405c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b0316331461215e5760405162461bcd60e51b8152600401610c449061405c565b612166612436565b565b6001600160a01b0383166121ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c44565b6001600160a01b03821661222b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c44565b6001600160a01b0383811660008181526027602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6122978383836124c6565b6122a183836125fe565b6122ac838383612697565b6122b78284836127a6565b6122c18383612832565b6122cc8383836128a7565b6122d7838383612b0b565b6122e18383612b30565b6001600160a01b0383166000908152602960205260409020546112789084908490849060ff168061232a57506001600160a01b03861660009081526029602052604090205460ff165b8061233e5750601454600160b81b900460ff165b8061234b5750600f5460ff165b602c549015906001600160a01b039081168882168114918a1614612bee565b6000818484111561238e5760405162461bcd60e51b8152600401610c449190613d6d565b505050900390565b60006111f98284614125565b60006111f982846140a8565b60008060006123bb612eaf565b90925090506123ca8183614103565b9250505090565b60006111f98284614183565b60006111f98284614103565b6123f1613cde565b6123fd85858585613032565b905061241281868661240d6123ae565b613393565b60a0870152606086015260808501526040840152602083015281525b949350505050565b601054601c54612445916123a2565b601c556014805460ff60b81b1916600160b81b179055600061246630611751565b905061247f601054601d5461239690919063ffffffff16565b601d5560105461248e90613445565b600061249d8261117630611751565b601e549091506124ad9082612396565b601e5550506014805460ff60b81b191690556000601a55565b6001600160a01b03831661252a5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c44565b6001600160a01b03821661258c5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c44565b61259583611751565b8111156112785760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c44565b6001600160a01b03821660009081526029602052604090205460ff1615801561264057506001600160a01b03811660009081526029602052604090205460ff16155b15610dd55760145460ff16610dd55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610c44565b6001600160a01b03821660009081526029602052604090205460ff161580156126d957506001600160a01b03831660009081526029602052604090205460ff16155b80156126ee57506001600160a01b0382163014155b80156127085750601f546001600160a01b03838116911614155b80156127225750602c546001600160a01b03838116911614155b801561273c57506020546001600160a01b03838116911614155b15611278576004548161274e84611751565b6127589190614125565b11156112785760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610c44565b600354811115806127cf57506001600160a01b03821660009081526029602052604090205460ff165b806127f257506001600160a01b03831660009081526029602052604090205460ff165b6112785760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c44565b602c546001600160a01b03828116911614801561286857506001600160a01b03821660009081526029602052604090205460ff16155b80156128775750600f5460ff16155b801561288d5750601454600160b81b900460ff16155b15610dd5576016546128a0906001612396565b6016555050565b60145460ff1680156128d257506001600160a01b03831660009081526029602052604090205460ff16155b80156128eb5750602c546001600160a01b038381169116145b80156128f957506013548110155b80156129085750600f5460ff16155b801561291e5750601454600160b81b900460ff16155b801561292d575060185460ff16155b1561294b576001601a60008282546129459190614125565b90915550505b601054601c541015801561296157506010544710155b80156129715750601b54601a5410155b80156129845750601454610100900460ff165b80156129a957506001600160a01b03831660009081526029602052604090205460ff16155b80156129c25750602c546001600160a01b038381169116145b80156129d0575060145460ff165b80156129df5750600f5460ff16155b80156129f55750601454600160b81b900460ff16155b8015612a0f57506015546001600160a01b03848116911614155b8015612a1d57506013548110155b15612a3c57612a2a612436565b6018805460ff19166001179055505050565b60145460ff168015612a575750601454600160b01b900460ff165b8015612a7e5750601454600090612a7c906201000090046001600160a01b0316611751565b115b8015612aa357506001600160a01b03831660009081526029602052604090205460ff16155b8015612ab2575060185460ff16155b8015612acb5750602c546001600160a01b038381169116145b8015612ada5750600f5460ff16155b8015612af05750601454600160b81b900460ff16155b8015612afe57506013548110155b156112785761127861357f565b612b16838383613603565b1561127857612b266011546136c9565b6000601655505050565b601580546001600160a01b0319169055601454600160b81b900460ff16158015612b5d5750600f5460ff16155b15612b6d576018805460ff191690555b602c546001600160a01b038381169116148015612ba357506001600160a01b03811660009081526029602052604090205460ff16155b8015612bb95750601454600160b81b900460ff16155b8015612bc85750600f5460ff16155b15610dd557601580546001600160a01b0383166001600160a01b03199091161790555050565b6000612bfc858585856123e9565b6001600160a01b03881660009081526028602052604090205490915060ff1615612c5e576001600160a01b038716600090815260266020526040902054612c449086906140a8565b6001600160a01b0388166000908152602660205260409020555b6001600160a01b03861660009081526028602052604090205460ff1615612cc15760c08101516001600160a01b038716600090815260266020526040902054612ca79190614125565b6001600160a01b0387166000908152602660205260409020555b80516001600160a01b038816600090815260256020526040902054612ce691906140a8565b6001600160a01b0380891660009081526025602090815260408083209490945584015191891681529190912054612d1d9190614125565b6001600160a01b038716600090815260256020526040908190209190915581015160e0820151612d4d91906138a6565b612d6081608001518261012001516138db565b612d738160600151826101000151613951565b612d868160a001518261014001516139fa565b856001600160a01b0316876001600160a01b03166000805160206142958339815191528360c00151604051612dbd91815260200190565b60405180910390a361012081015115612e1157306001600160a01b0316876001600160a01b0316600080516020614295833981519152836101200151604051612e0891815260200190565b60405180910390a35b61010081015115612e62576014546101008201516040516001600160a01b03620100009093048316928a169160008051602061429583398151915291612e5991815260200190565b60405180910390a35b61014081015115611935576024546101408201516040519081526001600160a01b03918216918916906000805160206142958339815191529060200160405180910390a350505050505050565b6002546001546000918291825b602a54811015613001578260256000602a8481548110612ede57612ede61407c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f4957508160266000602a8481548110612f2257612f2261407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f5f57600254600154945094505050509091565b60256000602a8381548110612f7657612f7661407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fa590846140a8565b925060266000602a8381548110612fbe57612fbe61407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fed90836140a8565b915080612ff9816140d1565b915050612ebc565b506001546002546130129190614103565b821015613029576002546001549350935050509091565b90939092509050565b61303a613cde565b83158061304c575061304c8383613a91565b1561305d5760c0810185905261242e565b82158015613069575081155b1561317457600061308b600e5461124a600d54896123d190919063ffffffff16565b9050600d54600560000154116130bb57600e546005546130ab9088614183565b6130b59190614103565b60e08301525b600554600d546130ca916123a2565b600854116130f357600e546008546130e29088614183565b6130ec9190614103565b6101008301525b600854600554600d5461310b929161117691906123a2565b600a541161313457600e54600a546131239088614183565b61312d9190614103565b6101408301525b61315d8261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261316d81876140a8565b60c0830152505b8215613280576000613197600e5461124a600c54896123d190919063ffffffff16565b9050600c54600560000154116131c757600e546005546131b79088614183565b6131c19190614103565b60e08301525b600554600c546131d6916123a2565b600854116131ff57600e546008546131ee9088614183565b6131f89190614103565b6101008301525b600854600554600c54613217929161117691906123a2565b600a541161324057600e54600a5461322f9088614183565b6132399190614103565b6101408301525b6132698261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261327981876140a8565b60c0830152505b811561242e5760006132a3600e5461124a600b54896123d190919063ffffffff16565b9050600b54600560000154116132d357600e546005546132c39088614183565b6132cd9190614103565b60e08301525b600554600b546132e2916123a2565b6008541161330b57600e546008546132fa9088614183565b6133049190614103565b6101008301525b600854600554600b54613323929161117691906123a2565b600a541161334c57600e54600a5461333b9088614183565b6133459190614103565b6101408301525b6133758261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261338581876140a8565b60c083015250949350505050565b600080808080806133a4878a614183565b9550876133bf57508493506000925082915081905080613438565b868a60e001516133cf9190614183565b9350868a61012001516133e29190614183565b9250868a61010001516133f59190614183565b9150868a61014001516134089190614183565b9050818184613417878a6140a8565b61342191906140a8565b61342b91906140a8565b61343591906140a8565b94505b9499939850945094509450565b6040805160028082526060820183526000926020830190803683375050602b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156134af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d3919061419a565b816000815181106134e6576134e661407c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061351a5761351a61407c565b6001600160a01b039283166020918202929092010152602b5460235460405163b6f9de9560e01b81529183169263b6f9de959286926135669260009288929091169042906004016141fb565b6000604051808303818588803b15801561192157600080fd5b60148054600160b81b60ff60b81b19909116179081905560195460405163170864a160e11b8152306004820152620100009092046001600160a01b031691632e10c9429190602401600060405180830381600088803b1580156135e157600080fd5b5087f1935050505080156135f3575060015b506014805460ff60b81b19169055565b6000806012548310159050600060115461361c30611751565b600f54911115915060ff1615801561363b5750600f54610100900460ff165b80156136445750815b801561366957506001600160a01b03861660009081526029602052604090205460ff16155b8015613677575060145460ff165b80156136905750602c546001600160a01b038681169116145b80156136a0575060175460165410155b80156136a95750805b80156136bf5750601454600160b81b900460ff16155b9695505050505050565b600f805460ff19166001908117909155600b546000916136f0916002916117ef9190612396565b9050600b5460000361372957600954600654600754613726926002926117ef926001926137209290918391612396565b90612396565b90505b600754600090829061373b9085614183565b6137459190614103565b9050600061375382856140a8565b90504761375f82613ad7565b600061376b82476140a8565b60075490915060009061377e90876140a8565b6137889083614103565b60075490915060009061379b9083614183565b905080156137ad576137ad8682613c31565b6006546000906137c2906117ef8560026123d1565b90508015613806576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613804573d6000803e3d6000fd5b505b60095460009061381b906117ef8660026123d1565b9050801561383457601c546138309082612396565b601c555b600061384b601c54476123a290919063ffffffff16565b9050801561388f576022546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561388d573d6000803e3d6000fd5b505b5050600f805460ff19169055505050505050505050565b81600260008282546138b891906140a8565b9091555050602d80548291906000906138d2908490614125565b90915550505050565b80602d60020160008282546138f09190614125565b90915550503060009081526028602052604090205460ff161561393257306000908152602660205260408120805483929061392c908490614125565b90915550505b30600090815260256020526040812080548492906138d2908490614125565b80602d60010160008282546139669190614125565b90915550506014546201000090046001600160a01b031660009081526028602052604090205460ff16156139ca576014546201000090046001600160a01b0316600090815260266020526040812080548392906139c4908490614125565b90915550505b6014546201000090046001600160a01b0316600090815260256020526040812080548492906138d2908490614125565b80602d6003016000828254613a0f9190614125565b90915550506024546001600160a01b031660009081526028602052604090205460ff1615613a67576024546001600160a01b031660009081526026602052604081208054839290613a61908490614125565b90915550505b6024546001600160a01b0316600090815260256020526040812080548492906138d2908490614125565b6000828015613aa05750600c54155b80613ab35750818015613ab35750600b54155b806111f9575082158015613ac5575081155b80156111f9575050600d541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b0c57613b0c61407c565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b89919061419a565b81600181518110613b9c57613b9c61407c565b6001600160a01b039283166020918202929092010152602b54613bc29130911684612168565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bfb908590600090869030904290600401614230565b600060405180830381600087803b158015613c1557600080fd5b505af1158015613c29573d6000803e3d6000fd5b505050505050565b602b54613c499030906001600160a01b031684612168565b602b5460205460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613cb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f909190614155565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114613d4d57600080fd5b50565b600060208284031215613d6257600080fd5b81356111f981613d38565b600060208083528351808285015260005b81811015613d9a57858101830151858201604001528201613d7e565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215613dcd57600080fd5b5035919050565b60008060408385031215613de757600080fd5b8235613df281613d38565b946020939093013593505050565b600080600060608486031215613e1557600080fd5b8335613e2081613d38565b92506020840135613e3081613d38565b929592945050506040919091013590565b60008060008060008060008060006101208a8c031215613e6057600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b8015158114613d4d57600080fd5b60008060408385031215613ec157600080fd5b8235613ecc81613ea0565b91506020830135613edc81613ea0565b809150509250929050565b60008060408385031215613efa57600080fd5b823591506020830135613edc81613ea0565b60008060408385031215613f1f57600080fd5b50508035926020909101359150565b60008060408385031215613f4157600080fd5b8235613f4c81613ea0565b91506020830135613edc81613d38565b600080600060608486031215613f7157600080fd5b833592506020840135613e3081613d38565b60008060408385031215613f9657600080fd5b8235613ecc81613d38565b600080600080600060a08688031215613fb957600080fd5b8535613fc481613d38565b94506020860135613fd481613d38565b93506040860135613fe481613d38565b92506060860135613ff481613d38565b9150608086013561400481613d38565b809150509295509295909350565b6000806040838503121561402557600080fd5b8235613f4c81613d38565b60008060006060848603121561404557600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610e9357610e93614092565b634e487b7160e01b600052603160045260246000fd5b6000600182016140e3576140e3614092565b5060010190565b6000602082840312156140fc57600080fd5b5051919050565b60008261412057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e9357610e93614092565b60006020828403121561414a57600080fd5b81516111f981613ea0565b60008060006060848603121561416a57600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610e9357610e93614092565b6000602082840312156141ac57600080fd5b81516111f981613d38565b600081518084526020808501945080840160005b838110156141f05781516001600160a01b0316875295820195908201906001016141cb565b509495945050505050565b84815260806020820152600061421460808301866141b7565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061424f60a08301866141b7565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205b7b2c0d9495741dc870fcbcf1f91de982983fb16c40ac9c7e512e6adcd1733464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80635927c434116101fd57806395d89b4111610118578063b2118a8d116100ab578063dd62ed3e1161007a578063dd62ed3e14610b5f578063e94dd17c14610ba5578063f2fde38b14610bc5578063f887ea4014610be5578063fc73854914610c0557600080fd5b8063b2118a8d14610ae4578063b2161bcd14610b04578063ba1a13ff14610b19578063cce32a4614610b2f57600080fd5b8063a9059cbb116100e7578063a9059cbb14610a7b578063acdf4f1814610a9b578063ad9d9e4c14610aba578063b15bf83714610acf57600080fd5b806395d89b41146109f15780639fb05d3714610a1b578063a457c2d714610a3b578063a8aa1b3114610a5b57600080fd5b80637d1db4a5116101905780638a91e0d91161015f5780638a91e0d91461095b5780638b3dc0181461097b5780638cf2e94a1461099b5780638ebfc796146109d157600080fd5b80637d1db4a5146108cc5780637d459db3146108e25780637e24858b1461091b578063884870c71461093b57600080fd5b80637520ecc9116101cc5780637520ecc91461086057806378109e5414610876578063783b5a0a1461088c57806378c7dcd6146108ac57600080fd5b80635927c434146107f55780635cdbdd971461080b57806370a082311461082057806373ca05771461084057600080fd5b8063293230b8116102f857806334eead481161028b5780633d17e5751161025a5780633d17e5751461074f5780633e9cc841146107645780633f4218e01461078557806343c87e65146107b55780634549b039146107d557600080fd5b806334eead48146106e4578063367471f6146106fa578063395093511461070f5780633cf241e91461072f57600080fd5b80633052ea08116102c75780633052ea081461064b578063309521481461066b578063313ce567146106a857806334bbb3fd146106c457600080fd5b8063293230b8146105d25780632b112e49146105e75780632d838119146105fc5780632f54bf6e1461061c57600080fd5b806318160ddd1161037057806320d730ee1161033f57806320d730ee1461057457806323b872dd1461058a57806325a06a02146105aa57806327334a08146105b257600080fd5b806318160ddd1461051f5780631ced7505146105345780631deff655146105495780631fadf0201461055f57600080fd5b806307f74873116103ac57806307f7487314610482578063095ea7b3146104a257806313ecfbfa146104d25780631501a3b91461050a57600080fd5b8063018763ed146103e957806305f82a451461040d57806306fdde031461042f578063076b20d61461046d57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50602d545b6040519081526020015b60405180910390f35b34801561041957600080fd5b5061042d610428366004613d50565b610c1a565b005b34801561043b57600080fd5b5060408051808201909152600c81526b5a65726f204772617669747960a01b60208201525b6040516104049190613d6d565b34801561047957600080fd5b506103fa610dd9565b34801561048e57600080fd5b5061042d61049d366004613dbb565b610e53565b3480156104ae57600080fd5b506104c26104bd366004613dd4565b610e82565b6040519015158152602001610404565b3480156104de57600080fd5b506015546104f2906001600160a01b031681565b6040516001600160a01b039091168152602001610404565b34801561051657600080fd5b506103fa610e99565b34801561052b57600080fd5b506001546103fa565b34801561054057600080fd5b506103fa610ed0565b34801561055557600080fd5b506103fa601c5481565b34801561056b57600080fd5b506103fa610f07565b34801561058057600080fd5b506103fa601e5481565b34801561059657600080fd5b506104c26105a5366004613e00565b610f3e565b61042d610fa7565b3480156105be57600080fd5b5061042d6105cd366004613d50565b610fb9565b3480156105de57600080fd5b5061042d61110c565b3480156105f357600080fd5b506103fa611145565b34801561060857600080fd5b506103fa610617366004613dbb565b61117c565b34801561062857600080fd5b506104c2610637366004613d50565b6000546001600160a01b0391821691161490565b34801561065757600080fd5b5061042d610666366004613dbb565b611200565b34801561067757600080fd5b5061068061127d565b604080519586526020860194909452928401919091526060830152608082015260a001610404565b3480156106b457600080fd5b5060405160098152602001610404565b3480156106d057600080fd5b5061042d6106df366004613e41565b6114cd565b3480156106f057600080fd5b506103fa60195481565b34801561070657600080fd5b506103fa61155e565b34801561071b57600080fd5b506104c261072a366004613dd4565b611595565b34801561073b57600080fd5b5061042d61074a366004613dbb565b6115cc565b34801561075b57600080fd5b506103fa6115f6565b34801561077057600080fd5b506014546104c290600160b01b900460ff1681565b34801561079157600080fd5b506104c26107a0366004613d50565b60296020526000908152604090205460ff1681565b3480156107c157600080fd5b5061042d6107d0366004613eae565b61162d565b3480156107e157600080fd5b506103fa6107f0366004613ee7565b61168a565b34801561080157600080fd5b506103fa60105481565b34801561081757600080fd5b506103fa61171a565b34801561082c57600080fd5b506103fa61083b366004613d50565b611751565b34801561084c57600080fd5b5061042d61085b366004613f0c565b6117b0565b34801561086c57600080fd5b506103fa601a5481565b34801561088257600080fd5b506103fa60045481565b34801561089857600080fd5b5061042d6108a7366004613f2e565b61193e565b3480156108b857600080fd5b5061042d6108c7366004613dbb565b611990565b3480156108d857600080fd5b506103fa60035481565b3480156108ee57600080fd5b506104c26108fd366004613d50565b6001600160a01b031660009081526028602052604090205460ff1690565b34801561092757600080fd5b5061042d610936366004613f5c565b6119bf565b34801561094757600080fd5b5061042d610956366004613f0c565b611a15565b34801561096757600080fd5b5061042d610976366004613f0c565b611b25565b34801561098757600080fd5b5061042d610996366004613d50565b611c02565b3480156109a757600080fd5b506103fa6109b6366004613d50565b6001600160a01b031660009081526025602052604090205490565b3480156109dd57600080fd5b5061042d6109ec366004613f83565b611c6d565b3480156109fd57600080fd5b506040805180820190915260018152600360fc1b6020820152610460565b348015610a2757600080fd5b5061042d610a36366004613fa1565b611cc2565b348015610a4757600080fd5b506104c2610a56366004613dd4565b611da1565b348015610a6757600080fd5b50602c546104f2906001600160a01b031681565b348015610a8757600080fd5b506104c2610a96366004613dd4565b611df0565b348015610aa757600080fd5b506014546104c290610100900460ff1681565b348015610ac657600080fd5b506103fa611dfd565b348015610adb57600080fd5b506103fa611e34565b348015610af057600080fd5b5061042d610aff366004613e00565b611e6b565b348015610b1057600080fd5b506103fa611f97565b348015610b2557600080fd5b506103fa601d5481565b348015610b3b57600080fd5b50610b44611fce565b60408051938452602084019290925290820152606001610404565b348015610b6b57600080fd5b506103fa610b7a366004614012565b6001600160a01b03918216600090815260276020908152604080832093909416825291909152205490565b348015610bb157600080fd5b5061042d610bc0366004614030565b612050565b348015610bd157600080fd5b5061042d610be0366004613d50565b6120b6565b348015610bf157600080fd5b50602b546104f2906001600160a01b031681565b348015610c1157600080fd5b5061042d612134565b6000546001600160a01b03163314610c4d5760405162461bcd60e51b8152600401610c449061405c565b60405180910390fd5b6001600160a01b03811660009081526028602052604090205460ff16610cb55760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c44565b60005b602a54811015610dd557816001600160a01b0316602a8281548110610cdf57610cdf61407c565b6000918252602090912001546001600160a01b031603610dc357602a8054610d09906001906140a8565b81548110610d1957610d1961407c565b600091825260209091200154602a80546001600160a01b039092169183908110610d4557610d4561407c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602682526040808220829055602890925220805460ff19169055602a805480610d9d57610d9d6140bb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dcd816140d1565b915050610cb8565b5050565b6014546040516370a0823160e01b8152620100009091046001600160a01b0316600482015260009030906370a08231906024015b602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906140ea565b905090565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b8152600401610c449061405c565b601955565b6000610e8f338484612168565b5060015b92915050565b60145460405163045f25d360e51b81523060048201526000916201000090046001600160a01b031690638be4ba6090602401610e0d565b60145460405163bffa330f60e01b81523060048201526000916201000090046001600160a01b03169063bffa330f90602401610e0d565b601454604051639c40846f60e01b81523060048201526000916201000090046001600160a01b031690639c40846f90602401610e0d565b6000610f4b84848461228c565b610f9d8433610f988560405180606001604052806028815260200161426d602891396001600160a01b038a166000908152602760209081526040808320338452909152902054919061236a565b612168565b5060019392505050565b601c54610fb49034612396565b601c55565b6000546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03811660009081526028602052604090205460ff161561104c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c44565b6001600160a01b038116600090815260256020526040902054156110a6576001600160a01b03811660009081526025602052604090205461108c9061117c565b6001600160a01b0382166000908152602660205260409020555b6001600160a01b03166000818152602860205260408120805460ff19166001908117909155602a805491820181559091527fbeced09521047d05b8960b7e7bcc1d1292cf3e4b2a6b63f48335cbde5f7545d20180546001600160a01b0319169091179055565b6000546001600160a01b031633146111365760405162461bcd60e51b8152600401610c449061405c565b6014805460ff19166001179055565b6000610e4e6111546000611751565b601f546111769061116d906001600160a01b0316611751565b600154906123a2565b906123a2565b60006002548211156111e35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c44565b60006111ed6123ae565b90506111f98184614103565b9392505050565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610c449061405c565b60225447906001600160a01b03166108fc611250606461124a85876123d1565b906123dd565b6040518115909202916000818181858888f19350505050158015611278573d6000803e3d6000fd5b505050565b6014546040516331fcaf6960e11b815230600482015260009182918291829182916201000090046001600160a01b0316906363f95ed290602401602060405180830381865afa1580156112d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f891906140ea565b601454604051633f8223f360e01b8152306004820152620100009091046001600160a01b031690633f8223f390602401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136991906140ea565b60145460405163045f25d360e51b8152306004820152620100009091046001600160a01b031690638be4ba6090602401602060405180830381865afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da91906140ea565b601454604051633255a03560e11b8152306004820152620100009091046001600160a01b0316906364ab406a90602401602060405180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b91906140ea565b60145460405163fea4456560e01b8152306004820152620100009091046001600160a01b03169063fea4456590602401602060405180830381865afa158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc91906140ea565b945094509450945094509091929394565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610c449061405c565b600b899055600c889055600d87905560058690556006859055600784905560088390556009829055600a819055600e54891180159061153a5750600e54600c5411155b801561154a5750600e54600d5411155b61155357600080fd5b505050505050505050565b6014546040516307df467b60e21b81523060048201526000916201000090046001600160a01b031690631f7d19ec90602401610e0d565b3360008181526027602090815260408083206001600160a01b03871684529091528120549091610e8f918590610f98908690614125565b6000546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610c449061405c565b6014546040516331fcaf6960e11b81523060048201526000916201000090046001600160a01b0316906363f95ed290602401610e0d565b6000546001600160a01b031633146116575760405162461bcd60e51b8152600401610c449061405c565b6014805461ff0060ff60b01b011916600160b01b9315159390930261ff0019169290921761010091151591909102179055565b60006001548311156116de5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c44565b816116fd5760006116f38460016000806123e9565b519150610e939050565b600061170d8460016000806123e9565b602001519150610e939050565b601454604051631ea2804760e11b81523060048201526000916201000090046001600160a01b031690633d45008e90602401610e0d565b6001600160a01b03811660009081526028602052604081205460ff161561178e57506001600160a01b031660009081526026602052604090205490565b6001600160a01b038216600090815260256020526040902054610e939061117c565b6000546001600160a01b031633146117da5760405162461bcd60e51b8152600401610c449061405c565b60006117f561271061124a846117ef60015490565b906123d1565b905060648311156118605760405162461bcd60e51b815260206004820152602f60248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526e103a37902232b737b6b4b730ba37b960891b6064820152608401610c44565b60145460405163e00e029f60e01b815230600482015260248101839052620100009091046001600160a01b03169063e00e029f90604401600060405180830381600087803b1580156118b157600080fd5b505af11580156118c5573d6000803e3d6000fd5b5050601454604051637e31b16760e11b815230600482015260248101879052606460448201819052620100009092046001600160a01b0316935063fc6362ce925001600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146119685760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ba5760405162461bcd60e51b8152600401610c449061405c565b601355565b6000546001600160a01b031633146119e95760405162461bcd60e51b8152600401610c449061405c565b602380546001600160a01b0319166001600160a01b039390931692909217909155601091909155601b55565b6000546001600160a01b03163314611a3f5760405162461bcd60e51b8152600401610c449061405c565b6000611a5c600e5461124a856001546123d190919063ffffffff16565b90506000611a7b600e5461124a856001546123d190919063ffffffff16565b90506000611a9b620186a061124a600180546123d190919063ffffffff16565b9050808310158015611aad5750808210155b611b175760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610c44565b506003919091556004555050565b6000546001600160a01b03163314611b4f5760405162461bcd60e51b8152600401610c449061405c565b6000611b6461271061124a856117ef60015490565b60148054600160b81b60ff60b81b19909116179081905560195460405163037cf82960e61b81523060048201526024810184905260448101869052929350620100009091046001600160a01b03169163df3e0a409190606401600060405180830381600088803b158015611bd757600080fd5b5087f1158015611beb573d6000803e3d6000fd5b50506014805460ff60b81b19169055505050505050565b6000546001600160a01b03163314611c2c5760405162461bcd60e51b8152600401610c449061405c565b6014805462010000600160b01b031916620100006001600160a01b03939093169283021790556000908152602960205260409020805460ff19166001179055565b6000546001600160a01b03163314611c975760405162461bcd60e51b8152600401610c449061405c565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610c449061405c565b602180546001600160a01b039687166001600160a01b031991821681179092556020805496881696821687178155602380549689169683168717905560228054958916958316861790556024805494909816939091168317909655600090815260299095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000610e8f3384610f98856040518060600160405280602581526020016142b5602591393360009081526027602090815260408083206001600160a01b038d168452909152902054919061236a565b6000610e8f33848461228c565b601454604051633255a03560e11b81523060048201526000916201000090046001600160a01b0316906364ab406a90602401610e0d565b601454604051633f8223f360e01b81523060048201526000916201000090046001600160a01b031690633f8223f390602401610e0d565b6000546001600160a01b03163314611e955760405162461bcd60e51b8152600401610c449061405c565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0091906140ea565b90506001600160a01b03841663a9059cbb84611f21606461124a86886123d1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190614138565b5050505050565b60145460405163fea4456560e01b81523060048201526000916201000090046001600160a01b03169063fea4456590602401610e0d565b6014546040516330800a4560e21b8152306004820152600091829182916201000090046001600160a01b03169063c200291490602401606060405180830381865afa158015612021573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120459190614155565b925092509250909192565b6000546001600160a01b0316331461207a5760405162461bcd60e51b8152600401610c449061405c565b601783905560015461209590620186a09061124a90856123d1565b6011556001546120ae90620186a09061124a90846123d1565b601255505050565b6000546001600160a01b031633146120e05760405162461bcd60e51b8152600401610c449061405c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b0316331461215e5760405162461bcd60e51b8152600401610c449061405c565b612166612436565b565b6001600160a01b0383166121ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c44565b6001600160a01b03821661222b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c44565b6001600160a01b0383811660008181526027602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6122978383836124c6565b6122a183836125fe565b6122ac838383612697565b6122b78284836127a6565b6122c18383612832565b6122cc8383836128a7565b6122d7838383612b0b565b6122e18383612b30565b6001600160a01b0383166000908152602960205260409020546112789084908490849060ff168061232a57506001600160a01b03861660009081526029602052604090205460ff165b8061233e5750601454600160b81b900460ff165b8061234b5750600f5460ff165b602c549015906001600160a01b039081168882168114918a1614612bee565b6000818484111561238e5760405162461bcd60e51b8152600401610c449190613d6d565b505050900390565b60006111f98284614125565b60006111f982846140a8565b60008060006123bb612eaf565b90925090506123ca8183614103565b9250505090565b60006111f98284614183565b60006111f98284614103565b6123f1613cde565b6123fd85858585613032565b905061241281868661240d6123ae565b613393565b60a0870152606086015260808501526040840152602083015281525b949350505050565b601054601c54612445916123a2565b601c556014805460ff60b81b1916600160b81b179055600061246630611751565b905061247f601054601d5461239690919063ffffffff16565b601d5560105461248e90613445565b600061249d8261117630611751565b601e549091506124ad9082612396565b601e5550506014805460ff60b81b191690556000601a55565b6001600160a01b03831661252a5760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c44565b6001600160a01b03821661258c5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c44565b61259583611751565b8111156112785760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c44565b6001600160a01b03821660009081526029602052604090205460ff1615801561264057506001600160a01b03811660009081526029602052604090205460ff16155b15610dd55760145460ff16610dd55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610c44565b6001600160a01b03821660009081526029602052604090205460ff161580156126d957506001600160a01b03831660009081526029602052604090205460ff16155b80156126ee57506001600160a01b0382163014155b80156127085750601f546001600160a01b03838116911614155b80156127225750602c546001600160a01b03838116911614155b801561273c57506020546001600160a01b03838116911614155b15611278576004548161274e84611751565b6127589190614125565b11156112785760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610c44565b600354811115806127cf57506001600160a01b03821660009081526029602052604090205460ff165b806127f257506001600160a01b03831660009081526029602052604090205460ff165b6112785760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c44565b602c546001600160a01b03828116911614801561286857506001600160a01b03821660009081526029602052604090205460ff16155b80156128775750600f5460ff16155b801561288d5750601454600160b81b900460ff16155b15610dd5576016546128a0906001612396565b6016555050565b60145460ff1680156128d257506001600160a01b03831660009081526029602052604090205460ff16155b80156128eb5750602c546001600160a01b038381169116145b80156128f957506013548110155b80156129085750600f5460ff16155b801561291e5750601454600160b81b900460ff16155b801561292d575060185460ff16155b1561294b576001601a60008282546129459190614125565b90915550505b601054601c541015801561296157506010544710155b80156129715750601b54601a5410155b80156129845750601454610100900460ff165b80156129a957506001600160a01b03831660009081526029602052604090205460ff16155b80156129c25750602c546001600160a01b038381169116145b80156129d0575060145460ff165b80156129df5750600f5460ff16155b80156129f55750601454600160b81b900460ff16155b8015612a0f57506015546001600160a01b03848116911614155b8015612a1d57506013548110155b15612a3c57612a2a612436565b6018805460ff19166001179055505050565b60145460ff168015612a575750601454600160b01b900460ff165b8015612a7e5750601454600090612a7c906201000090046001600160a01b0316611751565b115b8015612aa357506001600160a01b03831660009081526029602052604090205460ff16155b8015612ab2575060185460ff16155b8015612acb5750602c546001600160a01b038381169116145b8015612ada5750600f5460ff16155b8015612af05750601454600160b81b900460ff16155b8015612afe57506013548110155b156112785761127861357f565b612b16838383613603565b1561127857612b266011546136c9565b6000601655505050565b601580546001600160a01b0319169055601454600160b81b900460ff16158015612b5d5750600f5460ff16155b15612b6d576018805460ff191690555b602c546001600160a01b038381169116148015612ba357506001600160a01b03811660009081526029602052604090205460ff16155b8015612bb95750601454600160b81b900460ff16155b8015612bc85750600f5460ff16155b15610dd557601580546001600160a01b0383166001600160a01b03199091161790555050565b6000612bfc858585856123e9565b6001600160a01b03881660009081526028602052604090205490915060ff1615612c5e576001600160a01b038716600090815260266020526040902054612c449086906140a8565b6001600160a01b0388166000908152602660205260409020555b6001600160a01b03861660009081526028602052604090205460ff1615612cc15760c08101516001600160a01b038716600090815260266020526040902054612ca79190614125565b6001600160a01b0387166000908152602660205260409020555b80516001600160a01b038816600090815260256020526040902054612ce691906140a8565b6001600160a01b0380891660009081526025602090815260408083209490945584015191891681529190912054612d1d9190614125565b6001600160a01b038716600090815260256020526040908190209190915581015160e0820151612d4d91906138a6565b612d6081608001518261012001516138db565b612d738160600151826101000151613951565b612d868160a001518261014001516139fa565b856001600160a01b0316876001600160a01b03166000805160206142958339815191528360c00151604051612dbd91815260200190565b60405180910390a361012081015115612e1157306001600160a01b0316876001600160a01b0316600080516020614295833981519152836101200151604051612e0891815260200190565b60405180910390a35b61010081015115612e62576014546101008201516040516001600160a01b03620100009093048316928a169160008051602061429583398151915291612e5991815260200190565b60405180910390a35b61014081015115611935576024546101408201516040519081526001600160a01b03918216918916906000805160206142958339815191529060200160405180910390a350505050505050565b6002546001546000918291825b602a54811015613001578260256000602a8481548110612ede57612ede61407c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f4957508160266000602a8481548110612f2257612f2261407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f5f57600254600154945094505050509091565b60256000602a8381548110612f7657612f7661407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fa590846140a8565b925060266000602a8381548110612fbe57612fbe61407c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fed90836140a8565b915080612ff9816140d1565b915050612ebc565b506001546002546130129190614103565b821015613029576002546001549350935050509091565b90939092509050565b61303a613cde565b83158061304c575061304c8383613a91565b1561305d5760c0810185905261242e565b82158015613069575081155b1561317457600061308b600e5461124a600d54896123d190919063ffffffff16565b9050600d54600560000154116130bb57600e546005546130ab9088614183565b6130b59190614103565b60e08301525b600554600d546130ca916123a2565b600854116130f357600e546008546130e29088614183565b6130ec9190614103565b6101008301525b600854600554600d5461310b929161117691906123a2565b600a541161313457600e54600a546131239088614183565b61312d9190614103565b6101408301525b61315d8261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261316d81876140a8565b60c0830152505b8215613280576000613197600e5461124a600c54896123d190919063ffffffff16565b9050600c54600560000154116131c757600e546005546131b79088614183565b6131c19190614103565b60e08301525b600554600c546131d6916123a2565b600854116131ff57600e546008546131ee9088614183565b6131f89190614103565b6101008301525b600854600554600c54613217929161117691906123a2565b600a541161324057600e54600a5461322f9088614183565b6132399190614103565b6101408301525b6132698261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261327981876140a8565b60c0830152505b811561242e5760006132a3600e5461124a600b54896123d190919063ffffffff16565b9050600b54600560000154116132d357600e546005546132c39088614183565b6132cd9190614103565b60e08301525b600554600b546132e2916123a2565b6008541161330b57600e546008546132fa9088614183565b6133049190614103565b6101008301525b600854600554600b54613323929161117691906123a2565b600a541161334c57600e54600a5461333b9088614183565b6133459190614103565b6101408301525b6133758261010001516111768461014001516111768660e00151866123a290919063ffffffff16565b61012083015261338581876140a8565b60c083015250949350505050565b600080808080806133a4878a614183565b9550876133bf57508493506000925082915081905080613438565b868a60e001516133cf9190614183565b9350868a61012001516133e29190614183565b9250868a61010001516133f59190614183565b9150868a61014001516134089190614183565b9050818184613417878a6140a8565b61342191906140a8565b61342b91906140a8565b61343591906140a8565b94505b9499939850945094509450565b6040805160028082526060820183526000926020830190803683375050602b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156134af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d3919061419a565b816000815181106134e6576134e661407c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061351a5761351a61407c565b6001600160a01b039283166020918202929092010152602b5460235460405163b6f9de9560e01b81529183169263b6f9de959286926135669260009288929091169042906004016141fb565b6000604051808303818588803b15801561192157600080fd5b60148054600160b81b60ff60b81b19909116179081905560195460405163170864a160e11b8152306004820152620100009092046001600160a01b031691632e10c9429190602401600060405180830381600088803b1580156135e157600080fd5b5087f1935050505080156135f3575060015b506014805460ff60b81b19169055565b6000806012548310159050600060115461361c30611751565b600f54911115915060ff1615801561363b5750600f54610100900460ff165b80156136445750815b801561366957506001600160a01b03861660009081526029602052604090205460ff16155b8015613677575060145460ff165b80156136905750602c546001600160a01b038681169116145b80156136a0575060175460165410155b80156136a95750805b80156136bf5750601454600160b81b900460ff16155b9695505050505050565b600f805460ff19166001908117909155600b546000916136f0916002916117ef9190612396565b9050600b5460000361372957600954600654600754613726926002926117ef926001926137209290918391612396565b90612396565b90505b600754600090829061373b9085614183565b6137459190614103565b9050600061375382856140a8565b90504761375f82613ad7565b600061376b82476140a8565b60075490915060009061377e90876140a8565b6137889083614103565b60075490915060009061379b9083614183565b905080156137ad576137ad8682613c31565b6006546000906137c2906117ef8560026123d1565b90508015613806576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613804573d6000803e3d6000fd5b505b60095460009061381b906117ef8660026123d1565b9050801561383457601c546138309082612396565b601c555b600061384b601c54476123a290919063ffffffff16565b9050801561388f576022546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561388d573d6000803e3d6000fd5b505b5050600f805460ff19169055505050505050505050565b81600260008282546138b891906140a8565b9091555050602d80548291906000906138d2908490614125565b90915550505050565b80602d60020160008282546138f09190614125565b90915550503060009081526028602052604090205460ff161561393257306000908152602660205260408120805483929061392c908490614125565b90915550505b30600090815260256020526040812080548492906138d2908490614125565b80602d60010160008282546139669190614125565b90915550506014546201000090046001600160a01b031660009081526028602052604090205460ff16156139ca576014546201000090046001600160a01b0316600090815260266020526040812080548392906139c4908490614125565b90915550505b6014546201000090046001600160a01b0316600090815260256020526040812080548492906138d2908490614125565b80602d6003016000828254613a0f9190614125565b90915550506024546001600160a01b031660009081526028602052604090205460ff1615613a67576024546001600160a01b031660009081526026602052604081208054839290613a61908490614125565b90915550505b6024546001600160a01b0316600090815260256020526040812080548492906138d2908490614125565b6000828015613aa05750600c54155b80613ab35750818015613ab35750600b54155b806111f9575082158015613ac5575081155b80156111f9575050600d541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b0c57613b0c61407c565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b89919061419a565b81600181518110613b9c57613b9c61407c565b6001600160a01b039283166020918202929092010152602b54613bc29130911684612168565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613bfb908590600090869030904290600401614230565b600060405180830381600087803b158015613c1557600080fd5b505af1158015613c29573d6000803e3d6000fd5b505050505050565b602b54613c499030906001600160a01b031684612168565b602b5460205460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613cb9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f909190614155565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114613d4d57600080fd5b50565b600060208284031215613d6257600080fd5b81356111f981613d38565b600060208083528351808285015260005b81811015613d9a57858101830151858201604001528201613d7e565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215613dcd57600080fd5b5035919050565b60008060408385031215613de757600080fd5b8235613df281613d38565b946020939093013593505050565b600080600060608486031215613e1557600080fd5b8335613e2081613d38565b92506020840135613e3081613d38565b929592945050506040919091013590565b60008060008060008060008060006101208a8c031215613e6057600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b8015158114613d4d57600080fd5b60008060408385031215613ec157600080fd5b8235613ecc81613ea0565b91506020830135613edc81613ea0565b809150509250929050565b60008060408385031215613efa57600080fd5b823591506020830135613edc81613ea0565b60008060408385031215613f1f57600080fd5b50508035926020909101359150565b60008060408385031215613f4157600080fd5b8235613f4c81613ea0565b91506020830135613edc81613d38565b600080600060608486031215613f7157600080fd5b833592506020840135613e3081613d38565b60008060408385031215613f9657600080fd5b8235613ecc81613d38565b600080600080600060a08688031215613fb957600080fd5b8535613fc481613d38565b94506020860135613fd481613d38565b93506040860135613fe481613d38565b92506060860135613ff481613d38565b9150608086013561400481613d38565b809150509295509295909350565b6000806040838503121561402557600080fd5b8235613f4c81613d38565b60008060006060848603121561404557600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610e9357610e93614092565b634e487b7160e01b600052603160045260246000fd5b6000600182016140e3576140e3614092565b5060010190565b6000602082840312156140fc57600080fd5b5051919050565b60008261412057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e9357610e93614092565b60006020828403121561414a57600080fd5b81516111f981613ea0565b60008060006060848603121561416a57600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610e9357610e93614092565b6000602082840312156141ac57600080fd5b81516111f981613d38565b600081518084526020808501945080840160005b838110156141f05781516001600160a01b0316875295820195908201906001016141cb565b509495945050505050565b84815260806020820152600061421460808301866141b7565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061424f60a08301866141b7565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205b7b2c0d9495741dc870fcbcf1f91de982983fb16c40ac9c7e512e6adcd1733464736f6c63430008130033

Deployed Bytecode Sourcemap

9255:28416:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14429:83;;;;;;;;;;-1:-1:-1;14495:11:0;:15;14429:83;;;160:25:1;;;148:2;133:18;14429:83:0;;;;;;;;30018:464;;;;;;;;;;-1:-1:-1;30018:464:0;;;;;:::i;:::-;;:::i;:::-;;13523:67;;;;;;;;;;-1:-1:-1;13583:5:0;;;;;;;;;;;;-1:-1:-1;;;13583:5:0;;;;13523:67;;;;;;;:::i;37380:145::-;;;;;;;;;;;;;:::i;28688:89::-;;;;;;;;;;-1:-1:-1;28688:89:0;;;;;:::i;:::-;;:::i;14289:134::-;;;;;;;;;;-1:-1:-1;14289:134:0;;;;;:::i;:::-;;:::i;:::-;;;1807:14:1;;1800:22;1782:41;;1770:2;1755:18;14289:134:0;1642:187:1;10668:24:0;;;;;;;;;;-1:-1:-1;10668:24:0;;;;-1:-1:-1;;;;;10668:24:0;;;;;;-1:-1:-1;;;;;1998:32:1;;;1980:51;;1968:2;1953:18;10668:24:0;1834:203:1;36796:134:0;;;;;;;;;;;;;:::i;13746:79::-;;;;;;;;;;-1:-1:-1;13816:7:0;;13746:79;;36506:134;;;;;;;;;;;;;:::i;10921:31::-;;;;;;;;;;;;;;;;37533:135;;;;;;;;;;;;;:::i;10996:32::-;;;;;;;;;;;;;;;;14700:309;;;;;;;;;;-1:-1:-1;14700:309:0;;;;;:::i;:::-;;:::i;24694:118::-;;;:::i;29675:335::-;;;;;;;;;;-1:-1:-1;29675:335:0;;;;;:::i;:::-;;:::i;22623:83::-;;;;;;;;;;;;;:::i;28785:143::-;;;;;;;;;;;;;:::i;29419:248::-;;;;;;;;;;-1:-1:-1;29419:248:0;;;;;:::i;:::-;;:::i;6154:87::-;;;;;;;;;;-1:-1:-1;6154:87:0;;;;;:::i;:::-;6209:4;6234:5;-1:-1:-1;;;;;6223:16:0;;;6234:5;;6223:16;;6154:87;23961:182;;;;;;;;;;-1:-1:-1;23961:182:0;;;;;:::i;:::-;;:::i;35735:467::-;;;;;;;;;;;;;:::i;:::-;;;;2762:25:1;;;2818:2;2803:18;;2796:34;;;;2846:18;;;2839:34;;;;2904:2;2889:18;;2882:34;2947:3;2932:19;;2925:35;2749:3;2734:19;35735:467:0;2503:463:1;13673:67:0;;;;;;;;;;-1:-1:-1;13673:67:0;;9499:1;3113:36:1;;3101:2;3086:18;13673:67:0;2971:184:1;22846:623:0;;;;;;;;;;-1:-1:-1;22846:623:0;;;;;:::i;:::-;;:::i;10803:29::-;;;;;;;;;;;;;;;;36648:140;;;;;;;;;;;;;:::i;15017:209::-;;;;;;;;;;-1:-1:-1;15017:209:0;;;;;:::i;:::-;;:::i;24578:108::-;;;;;;;;;;-1:-1:-1;24578:108:0;;;;;:::i;:::-;;:::i;36214:140::-;;;;;;;;;;;;;:::i;10603:30::-;;;;;;;;;;-1:-1:-1;10603:30:0;;;;-1:-1:-1;;;10603:30:0;;;;;;11769:44;;;;;;;;;;-1:-1:-1;11769:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25527:134;;;;;;;;;;-1:-1:-1;25527:134:0;;;;;:::i;:::-;;:::i;28936:475::-;;;;;;;;;;-1:-1:-1;28936:475:0;;;;;:::i;:::-;;:::i;10226:60::-;;;;;;;;;;;;;;;;37230:142;;;;;;;;;;;;;:::i;13831:173::-;;;;;;;;;;-1:-1:-1;13831:173:0;;;;;:::i;:::-;;:::i;25669:450::-;;;;;;;;;;-1:-1:-1;25669:450:0;;;;;:::i;:::-;;:::i;10839:31::-;;;;;;;;;;;;;;;;9735:58;;;;;;;;;;;;;;;;22714:124;;;;;;;;;;-1:-1:-1;22714:124:0;;;;;:::i;:::-;;:::i;28570:110::-;;;;;;;;;;-1:-1:-1;28570:110:0;;;;;:::i;:::-;;:::i;9673:55::-;;;;;;;;;;;;;;;;14518:108;;;;;;;;;;-1:-1:-1;14518:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;14604:20:0;14590:4;14604:20;;;:11;:20;;;;;;;;;14518:108;26287:192;;;;;;;;;;-1:-1:-1;26287:192:0;;;;;:::i;:::-;;:::i;24820:445::-;;;;;;;;;;-1:-1:-1;24820:445:0;;;;;:::i;:::-;;:::i;28228:334::-;;;;;;;;;;-1:-1:-1;28228:334:0;;;;;:::i;:::-;;:::i;26127:152::-;;;;;;;;;;-1:-1:-1;26127:152:0;;;;;:::i;:::-;;:::i;15507:115::-;;;;;;;;;;-1:-1:-1;15507:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;15599:15:0;15572:7;15599:15;;;:7;:15;;;;;;;15507:115;24151:117;;;;;;;;;;-1:-1:-1;24151:117:0;;;;;:::i;:::-;;:::i;13596:71::-;;;;;;;;;;-1:-1:-1;13658:7:0;;;;;;;;;;;;-1:-1:-1;;;13658:7:0;;;;13596:71;;23477:476;;;;;;;;;;-1:-1:-1;23477:476:0;;;;;:::i;:::-;;:::i;15234:265::-;;;;;;;;;;-1:-1:-1;15234:265:0;;;;;:::i;:::-;;:::i;11882:19::-;;;;;;;;;;-1:-1:-1;11882:19:0;;;;-1:-1:-1;;;;;11882:19:0;;;14010:140;;;;;;;;;;-1:-1:-1;14010:140:0;;;;;:::i;:::-;;:::i;10542:26::-;;;;;;;;;;-1:-1:-1;10542:26:0;;;;;;;;;;;36942:132;;;;;;;;;;;;;:::i;36362:136::-;;;;;;;;;;;;;:::i;25273:246::-;;;;;;;;;;-1:-1:-1;25273:246:0;;;;;:::i;:::-;;:::i;37082:140::-;;;;;;;;;;;;;:::i;10959:30::-;;;;;;;;;;;;;;;;35515:212;;;;;;;;;;;;;:::i;:::-;;;;7148:25:1;;;7204:2;7189:18;;7182:34;;;;7232:18;;;7225:34;7136:2;7121:18;35515:212:0;6946:319:1;14156:127:0;;;;;;;;;;-1:-1:-1;14156:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14254:18:0;;;14237:7;14254:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14156:127;24276:294;;;;;;;;;;-1:-1:-1;24276:294:0;;;;;:::i;:::-;;:::i;6247:111::-;;;;;;;;;;-1:-1:-1;6247:111:0;;;;;:::i;:::-;;:::i;11854:21::-;;;;;;;;;;-1:-1:-1;11854:21:0;;;;-1:-1:-1;;;;;11854:21:0;;;28141:79;;;;;;;;;;;;;:::i;30018:464::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30102:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30094:56;;;::::0;-1:-1:-1;;;30094:56:0;;9003:2:1;30094:56:0::1;::::0;::::1;8985:21:1::0;9042:2;9022:18;;;9015:30;9081:25;9061:18;;;9054:53;9124:18;;30094:56:0::1;8801:347:1::0;30094:56:0::1;30166:9;30161:314;30185:9;:16:::0;30181:20;::::1;30161:314;;;30243:7;-1:-1:-1::0;;;;;30227:23:0::1;:9;30237:1;30227:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30227:12:0::1;:23:::0;30223:241:::1;;30286:9;30296:16:::0;;:20:::1;::::0;30315:1:::1;::::0;30296:20:::1;:::i;:::-;30286:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30271:9:::1;:12:::0;;-1:-1:-1;;;;;30286:31:0;;::::1;::::0;30281:1;;30271:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30271:46:0::1;-1:-1:-1::0;;;;;30271:46:0;;::::1;;::::0;;30336:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30375:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30375:28:0::1;::::0;;30422:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30422:15:0;;;;;-1:-1:-1;;;;;;30422:15:0::1;::::0;;;;;30161:314:::1;30018:464:::0;:::o;30223:241::-:1;30203:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30161:314;;;;30018:464:::0;:::o;37380:145::-;37505:9;;37465:51;;-1:-1:-1;;;37465:51:0;;37505:9;;;;-1:-1:-1;;;;;37505:9:0;37465:51;;;1980::1;-1:-1:-1;;37480:4:0;;37465:31;;1953:18:1;;37465:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37458:59;;37380:145;:::o;28688:89::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;28758:5:::1;:11:::0;28688:89::o;14289:134::-;14364:4;14371:37;14380:10;14392:7;14401:6;14371:8;:37::i;:::-;-1:-1:-1;14417:4:0;14289:134;;;;;:::o;36796:::-;36876:9;;:45;;-1:-1:-1;;;36876:45:0;;36915:4;36876:45;;;1980:51:1;36849:7:0;;36876:9;;;-1:-1:-1;;;;;36876:9:0;;:30;;1953:18:1;;36876:45:0;1834:203:1;36506:134:0;36586:9;;:45;;-1:-1:-1;;;36586:45:0;;36625:4;36586:45;;;1980:51:1;36559:7:0;;36586:9;;;-1:-1:-1;;;;;36586:9:0;;:30;;1953:18:1;;36586:45:0;1834:203:1;37533:135:0;37615:9;;:44;;-1:-1:-1;;;37615:44:0;;37653:4;37615:44;;;1980:51:1;37588:7:0;;37615:9;;;-1:-1:-1;;;;;37615:9:0;;:29;;1953:18:1;;37615:44:0;1834:203:1;14700:309:0;14798:4;14815:36;14825:6;14833:9;14844:6;14815:9;:36::i;:::-;14862:117;14871:6;14879:10;14891:87;14927:6;14891:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14891:19:0;;;;;;:11;:19;;;;;;;;14911:10;14891:31;;;;;;;;;:87;:35;:87::i;:::-;14862:8;:117::i;:::-;-1:-1:-1;14997:4:0;14700:309;;;;;:::o;24694:118::-;24773:16;;:31;;24794:9;24773:20;:31::i;:::-;24754:16;:50;24694:118::o;29675:335::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29760:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29759:21;29751:61;;;::::0;-1:-1:-1;;;29751:61:0;;10213:2:1;29751:61:0::1;::::0;::::1;10195:21:1::0;10252:2;10232:18;;;10225:30;10291:29;10271:18;;;10264:57;10338:18;;29751:61:0::1;10011:351:1::0;29751:61:0::1;-1:-1:-1::0;;;;;29826:16:0;::::1;29845:1;29826:16:::0;;;:7:::1;:16;::::0;;;;;:20;29823:108:::1;;-1:-1:-1::0;;;;;29902:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29882:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29863:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29823:108:::1;-1:-1:-1::0;;;;;29941:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29941:27:0::1;29964:4;29941:27:::0;;::::1;::::0;;;29979:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29979:23:0::1;::::0;;::::1;::::0;;29675:335::o;22623:83::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;22677:14:::1;:21:::0;;-1:-1:-1;;22677:21:0::1;22694:4;22677:21;::::0;;22623:83::o;28785:143::-;28838:7;28865:55;28898:21;28916:1;28898:9;:21::i;:::-;28887:4;;28865:28;;28877:15;;-1:-1:-1;;;;;28887:4:0;28877:9;:15::i;:::-;28865:7;;;:11;:28::i;:::-;:32;;:55::i;29419:248::-;29485:7;29524;;29513;:18;;29505:73;;;;-1:-1:-1;;;29505:73:0;;10569:2:1;29505:73:0;;;10551:21:1;10608:2;10588:18;;;10581:30;10647:34;10627:18;;;10620:62;-1:-1:-1;;;10698:18:1;;;10691:40;10748:19;;29505:73:0;10367:406:1;29505:73:0;29589:19;29612:10;:8;:10::i;:::-;29589:33;-1:-1:-1;29640:19:0;29589:33;29640:7;:19;:::i;:::-;29633:26;29419:248;-1:-1:-1;;;29419:248:0:o;23961:182::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;24081:16:::1;::::0;24041:21:::1;::::0;-1:-1:-1;;;;;24081:16:0::1;24073:62;24108:26;24130:3;24108:17;24041:21:::0;24122:2;24108:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;24073:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24010:133;23961:182:::0;:::o;35735:467::-;35922:9;;:48;;-1:-1:-1;;;35922:48:0;;35964:4;35922:48;;;1980:51:1;35789:22:0;;;;;;;;;;35922:9;;;-1:-1:-1;;;;;35922:9:0;;:33;;1953:18:1;;35922:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35972:9;;:46;;-1:-1:-1;;;35972:46:0;;36012:4;35972:46;;;1980:51:1;35972:9:0;;;;-1:-1:-1;;;;;35972:9:0;;:31;;1953:18:1;;35972:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36034:9;;:45;;-1:-1:-1;;;36034:45:0;;36073:4;36034:45;;;1980:51:1;36034:9:0;;;;-1:-1:-1;;;;;36034:9:0;;:30;;1953:18:1;;36034:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36081:9;;:44;;-1:-1:-1;;;36081:44:0;;36119:4;36081:44;;;1980:51:1;36081:9:0;;;;-1:-1:-1;;;;;36081:9:0;;:29;;1953:18:1;;36081:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36145:9;;:48;;-1:-1:-1;;;36145:48:0;;36187:4;36145:48;;;1980:51:1;36145:9:0;;;;-1:-1:-1;;;;;36145:9:0;;:33;;1953:18:1;;36145:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35915:279;;;;;;;;;;35735:467;;;;;:::o;22846:623::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;23061:8:::1;:15:::0;;;23078:7:::1;:15:::0;;;23095:11:::1;:20:::0;;;23126:8:::1;:27:::0;;;-1:-1:-1;23164:31:0;;;-1:-1:-1;23206:31:0;;;-1:-1:-1;23248:31:0;;;23290:23;:34;;;23335:16;:27;;;23393:11:::1;::::0;23381:23;::::1;::::0;::::1;::::0;:49:::1;;;23419:11;;23408:7;;:22;;23381:49;:79;;;;;23449:11;;23434;;:26;;23381:79;23373:88;;;::::0;::::1;;22846:623:::0;;;;;;;;;:::o;36648:140::-;36731:9;;:48;;-1:-1:-1;;;36731:48:0;;36773:4;36731:48;;;1980:51:1;36704:7:0;;36731:9;;;-1:-1:-1;;;;;36731:9:0;;:33;;1953:18:1;;36731:48:0;1834:203:1;15017:209:0;15131:10;15105:4;15152:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15152:32:0;;;;;;;;;;15105:4;;15122:74;;15143:7;;15152:43;;15185:10;;15152:43;:::i;24578:108::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;36214:140::-;36297:9;;:48;;-1:-1:-1;;;36297:48:0;;36339:4;36297:48;;;1980:51:1;36270:7:0;;36297:9;;;-1:-1:-1;;;;;36297:9:0;;:33;;1953:18:1;;36297:48:0;1834:203:1;25527:134:0;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;25615:11:::1;:19:::0;;-1:-1:-1;;;;;;25636:17:0;-1:-1:-1;;;25615:19:0;::::1;;::::0;;;::::1;-1:-1:-1::0;;25636:17:0;;;;;25615:19:::1;25636:17:::0;::::1;;::::0;;;::::1;;::::0;;25527:134::o;28936:475::-;29026:7;29065;;29054;:18;;29046:62;;;;-1:-1:-1;;;29046:62:0;;11332:2:1;29046:62:0;;;11314:21:1;11371:2;11351:18;;;11344:30;11410:33;11390:18;;;11383:61;11461:18;;29046:62:0;11130:355:1;29046:62:0;29124:17;29119:285;;29158:28;29189:39;29200:7;29209:4;29215:5;29222;29189:10;:39::i;:::-;29250:9;;-1:-1:-1;29243:16:0;;-1:-1:-1;29243:16:0;29119:285;29292:28;29323:39;29334:7;29343:4;29349:5;29356;29323:10;:39::i;:::-;29384:17;;;;-1:-1:-1;29377:24:0;;-1:-1:-1;29377:24:0;37230:142;37314:9;;:49;;-1:-1:-1;;;37314:49:0;;37357:4;37314:49;;;1980:51:1;37287:7:0;;37314:9;;;-1:-1:-1;;;;;37314:9:0;;:34;;1953:18:1;;37314:49:0;1834:203:1;13831:173:0;-1:-1:-1;;;;;13911:20:0;;13897:7;13911:20;;;:11;:20;;;;;;;;13907:49;;;-1:-1:-1;;;;;;13940:16:0;;;;;:7;:16;;;;;;;13831:173::o;13907:49::-;-1:-1:-1;;;;;13985:16:0;;;;;;:7;:16;;;;;;13965:37;;:19;:37::i;25669:450::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;25775:17:::1;25795:49;25837:5;25795:29;25813:10;25795:13;13816:7:::0;;;13746:79;25795:13:::1;:17:::0;::::1;:29::i;:49::-;25775:69;;25892:3;25863:17;:33;;25855:93;;;::::0;-1:-1:-1;;;25855:93:0;;11692:2:1;25855:93:0::1;::::0;::::1;11674:21:1::0;11731:2;11711:18;;;11704:30;11770:34;11750:18;;;11743:62;-1:-1:-1;;;11821:18:1;;;11814:45;11876:19;;25855:93:0::1;11490:411:1::0;25855:93:0::1;25959:9;::::0;:59:::1;::::0;-1:-1:-1;;;25959:59:0;;26001:4:::1;25959:59;::::0;::::1;12080:51:1::0;12147:18;;;12140:34;;;25959:9:0;;;::::1;-1:-1:-1::0;;;;;25959:9:0::1;::::0;:33:::1;::::0;12053:18:1;;25959:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26029:9:0::1;::::0;:82:::1;::::0;-1:-1:-1;;;26029:82:0;;26072:4:::1;26029:82;::::0;::::1;12387:51:1::0;12454:18;;;12447:34;;;26106:3:0::1;12497:18:1::0;;;12490:34;;;26029:9:0;;;::::1;-1:-1:-1::0;;;;;26029:9:0::1;::::0;-1:-1:-1;26029:34:0::1;::::0;-1:-1:-1;12360:18:1;26029:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25764:355;25669:450:::0;;:::o;22714:124::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22798:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22798:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22714:124::o;28570:110::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;28643:20:::1;:29:::0;28570:110::o;26287:192::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;26388:16:::1;:27:::0;;-1:-1:-1;;;;;;26388:27:0::1;-1:-1:-1::0;;;;;26388:27:0;;;::::1;::::0;;;::::1;::::0;;;26417:16:::1;:26:::0;;;;26445:17:::1;:26:::0;26287:192::o;24820:445::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;24904:13:::1;24920:43;24950:11;;24920:17;24932:4;24920:7;;:11;;:17;;;;:::i;:43::-;24904:59;;24974:17;24994:46;25027:11;;24994:20;25006:7;24994;;:11;;:20;;;;:::i;:46::-;24974:66;;25042:13;25058:26;25077:6;25058:14;25070:1;25058:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25042:42;;25112:5;25103;:14;;:36;;;;;25134:5;25121:9;:18;;25103:36;25095:102;;;::::0;-1:-1:-1;;;25095:102:0;;12737:2:1;25095:102:0::1;::::0;::::1;12719:21:1::0;12776:2;12756:18;;;12749:30;12815:34;12795:18;;;12788:62;-1:-1:-1;;;12866:18:1;;;12859:51;12927:19;;25095:102:0::1;12535:417:1::0;25095:102:0::1;-1:-1:-1::0;25208:12:0::1;:20:::0;;;;25230:15:::1;:27:::0;-1:-1:-1;;24820:445:0:o;28228:334::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;28328:17:::1;28348:48;28389:5;28348:28;28366:9;28348:13;13816:7:::0;;;13746:79;28348:48:::1;28407:8;:15:::0;;-1:-1:-1;;;;;;;28407:15:0;;::::1;;::::0;;;;28477:5:::1;::::0;28433:94:::1;::::0;-1:-1:-1;;;28433:94:0;;28492:4:::1;28433:94;::::0;::::1;12387:51:1::0;12454:18;;;12447:34;;;12497:18;;;12490:34;;;28328:68:0;;-1:-1:-1;28433:9:0;;;::::1;-1:-1:-1::0;;;;;28433:9:0::1;::::0;:38:::1;::::0;28477:5;12360:18:1;;28433:94:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28538:8:0::1;:16:::0;;-1:-1:-1;;;;28538:16:0::1;::::0;;-1:-1:-1;;;;;;28228:334:0:o;26127:152::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;26206:9:::1;:34:::0;;-1:-1:-1;;;;;;26206:34:0::1;::::0;-1:-1:-1;;;;;26206:34:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;26242:22:0;;;:11:::1;:22;::::0;;;;:29;;-1:-1:-1;;26242:29:0::1;-1:-1:-1::0;26242:29:0::1;::::0;;26127:152::o;24151:117::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24232:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24232:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24151:117::o;23477:476::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;23631:18:::1;:31:::0;;-1:-1:-1;;;;;23631:31:0;;::::1;-1:-1:-1::0;;;;;;23631:31:0;;::::1;::::0;::::1;::::0;;;23664:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23697:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23726:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23755:16:::1;:27:::0;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;23631:18:::1;23793:23:::0;;;:11:::1;:23:::0;;;;;;;:30;;-1:-1:-1;;23793:30:0;;::::1;23631:31:::0;23793:30;;::::1;::::0;;;23825:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23857:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;23887:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;23917:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23477:476::o;15234:265::-;15327:4;15344:125;15353:10;15365:7;15374:94;15411:15;15374:94;;;;;;;;;;;;;;;;;15386:10;15374:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15374:32:0;;;;;;;;;;;:94;:36;:94::i;14010:140::-;14088:4;14095:40;14105:10;14117:9;14128:6;14095:9;:40::i;36942:132::-;37021:9;;:44;;-1:-1:-1;;;37021:44:0;;37059:4;37021:44;;;1980:51:1;36994:7:0;;37021:9;;;-1:-1:-1;;;;;37021:9:0;;:29;;1953:18:1;;37021:44:0;1834:203:1;36362:136:0;36443:9;;:46;;-1:-1:-1;;;36443:46:0;;36483:4;36443:46;;;1980:51:1;36416:7:0;;36443:9;;;-1:-1:-1;;;;;36443:9:0;;:31;;1953:18:1;;36443:46:0;1834:203:1;25273:246:0;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;25395:39:::1;::::0;-1:-1:-1;;;25395:39:0;;25428:4:::1;25395:39;::::0;::::1;1980:51:1::0;25380:12:0::1;::::0;-1:-1:-1;;;;;25395:24:0;::::1;::::0;::::1;::::0;1953:18:1;;25395:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25380:54:::0;-1:-1:-1;;;;;;25445:23:0;::::1;;25469:9:::0;25480:30:::1;25506:3;25480:21;25380:54:::0;25489:11;25480:8:::1;:21::i;:30::-;25445:66;::::0;-1:-1:-1;;;;;;25445:66:0::1;::::0;;;;;;-1:-1:-1;;;;;12098:32:1;;;25445:66:0::1;::::0;::::1;12080:51:1::0;12147:18;;;12140:34;12053:18;;25445:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25369:150;25273:246:::0;;;:::o;37082:140::-;37165:9;;:48;;-1:-1:-1;;;37165:48:0;;37207:4;37165:48;;;1980:51:1;37138:7:0;;37165:9;;;-1:-1:-1;;;;;37165:9:0;;:33;;1953:18:1;;37165:48:0;1834:203:1;35515:212:0;35667:9;;:51;;-1:-1:-1;;;35667:51:0;;35712:4;35667:51;;;1980::1;35574:24:0;;;;;;35667:9;;;-1:-1:-1;;;;;35667:9:0;;:36;;1953:18:1;;35667:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35660:59;;;;;;35515:212;;;:::o;24276:294::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;24404:10:::1;:24:::0;;;24446:7:::1;::::0;:48:::1;::::0;24486:6:::1;::::0;24446:27:::1;::::0;24458:14;24446:11:::1;:27::i;:48::-;24430:13;:64:::0;24514:7:::1;::::0;:48:::1;::::0;24554:6:::1;::::0;24514:27:::1;::::0;24526:14;24514:11:::1;:27::i;:48::-;24496:15;:66:::0;-1:-1:-1;;;24276:294:0:o;6247:111::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;6313:5:::1;:11:::0;;-1:-1:-1;;;;;;6313:11:0::1;-1:-1:-1::0;;;;;6313:11:0;::::1;::::0;;::::1;::::0;;;6331:25:::1;::::0;1980:51:1;;;6331:25:0::1;::::0;1968:2:1;1953:18;6331:25:0::1;;;;;;;6247:111:::0;:::o;28141:79::-;6209:4;6234:5;-1:-1:-1;;;;;6234:5:0;6121:10;6223:16;6105:38;;;;-1:-1:-1;;;6105:38:0;;;;;;;:::i;:::-;28196:16:::1;:14;:16::i;:::-;28141:79::o:0;15630:335::-;-1:-1:-1;;;;;15723:19:0;;15715:68;;;;-1:-1:-1;;;15715:68:0;;13936:2:1;15715:68:0;;;13918:21:1;13975:2;13955:18;;;13948:30;14014:34;13994:18;;;13987:62;-1:-1:-1;;;14065:18:1;;;14058:34;14109:19;;15715:68:0;13734:400:1;15715:68:0;-1:-1:-1;;;;;15802:21:0;;15794:68;;;;-1:-1:-1;;;15794:68:0;;14341:2:1;15794:68:0;;;14323:21:1;14380:2;14360:18;;;14353:30;14419:34;14399:18;;;14392:62;-1:-1:-1;;;14470:18:1;;;14463:32;14512:19;;15794:68:0;14139:398:1;15794:68:0;-1:-1:-1;;;;;15873:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15925:32;;160:25:1;;;15925:32:0;;133:18:1;15925:32:0;;;;;;;15630:335;;;:::o;15973:632::-;16062:37;16073:6;16081:9;16092:6;16062:10;:37::i;:::-;16110:38;16130:6;16138:9;16110:19;:38::i;:::-;16159:41;16174:6;16182:9;16193:6;16159:14;:41::i;:::-;16212:39;16225:9;16236:6;16244;16212:12;:39::i;:::-;16262:35;16279:6;16287:9;16262:16;:35::i;:::-;16308:40;16322:6;16330:9;16341:6;16308:13;:40::i;:::-;16359:35;16368:6;16376:9;16387:6;16359:8;:35::i;:::-;16405:31;16418:6;16426:9;16405:12;:31::i;:::-;-1:-1:-1;;;;;16491:19:0;;;;;;:11;:19;;;;;;16447:150;;16462:6;;16470:9;;16481:6;;16491:19;;;:45;;-1:-1:-1;;;;;;16514:22:0;;;;;;:11;:22;;;;;;;;16491:45;:57;;;-1:-1:-1;16540:8:0;;-1:-1:-1;;;16540:8:0;;;;16491:57;:69;;;-1:-1:-1;16552:8:0;;;;16491:69;16576:4;;16489:72;;;-1:-1:-1;;;;;16576:4:0;;;16563:17;;;;;;16582:14;;;16447;:150::i;1496:162::-;1582:7;1628:12;1620:6;;;;1612:29;;;;-1:-1:-1;;;1612:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1650:5:0;;;1496:162::o;195:82::-;253:7;270:5;274:1;270;:5;:::i;283:82::-;341:7;358:5;362:1;358;:5;:::i;34810:158::-;34851:7;34872:15;34889;34908:19;:17;:19::i;:::-;34871:56;;-1:-1:-1;34871:56:0;-1:-1:-1;34945:15:0;34871:56;;34945:15;:::i;:::-;34938:22;;;;34810:158;:::o;371:82::-;429:7;446:5;450:1;446;:5;:::i;459:82::-;517:7;534:5;538:1;534;:5;:::i;31396:436::-;31499:36;;:::i;:::-;31560:49;31572:7;31581;31590:6;31598:10;31560:11;:49::i;:::-;31548:61;;31745:52;31757:9;31768:7;31777;31786:10;:8;:10::i;:::-;31745:11;:52::i;:::-;31723:18;;;31620:177;31702:20;;;31620:177;31682:19;;;31620:177;31667:14;;;31620:177;31640:25;;;31620:177;;;31396:436;;;;;;;:::o;27616:517::-;27702:16;;27681;;:38;;:20;:38::i;:::-;27662:16;:57;27730:8;:15;;-1:-1:-1;;;;27730:15:0;-1:-1:-1;;;27730:15:0;;;;27780:24;27798:4;27780:9;:24::i;:::-;27756:48;;27833:37;27853:16;;27833:15;;:19;;:37;;;;:::i;:::-;27815:15;:55;27898:16;;27881:34;;:16;:34::i;:::-;27926:20;27949:43;27978:13;27949:24;27967:4;27949:9;:24::i;:43::-;28023:17;;27926:66;;-1:-1:-1;28023:35:0;;27926:66;28023:21;:35::i;:::-;28003:17;:55;-1:-1:-1;;28069:8:0;:16;;-1:-1:-1;;;;28069:16:0;;;28080:5;28096:16;:29;27616:517::o;16613:355::-;-1:-1:-1;;;;;16717:20:0;;16709:70;;;;-1:-1:-1;;;16709:70:0;;14917:2:1;16709:70:0;;;14899:21:1;14956:2;14936:18;;;14929:30;14995:34;14975:18;;;14968:62;-1:-1:-1;;;15046:18:1;;;15039:35;15091:19;;16709:70:0;14715:401:1;16709:70:0;-1:-1:-1;;;;;16798:23:0;;16790:71;;;;-1:-1:-1;;;16790:71:0;;15323:2:1;16790:71:0;;;15305:21:1;15362:2;15342:18;;;15335:30;15401:34;15381:18;;;15374:62;-1:-1:-1;;;15452:18:1;;;15445:33;15495:19;;16790:71:0;15121:399:1;16790:71:0;16890:17;16900:6;16890:9;:17::i;:::-;16880:6;:27;;16872:88;;;;-1:-1:-1;;;16872:88:0;;15727:2:1;16872:88:0;;;15709:21:1;15766:2;15746:18;;;15739:30;15805:34;15785:18;;;15778:62;-1:-1:-1;;;15856:18:1;;;15849:47;15913:19;;16872:88:0;15525:413:1;17259:206:0;-1:-1:-1;;;;;17352:19:0;;;;;;:11;:19;;;;;;;;17351:20;:47;;;;-1:-1:-1;;;;;;17376:22:0;;;;;;:11;:22;;;;;;;;17375:23;17351:47;17348:110;;;17408:14;;;;17400:56;;;;-1:-1:-1;;;17400:56:0;;16145:2:1;17400:56:0;;;16127:21:1;16184:2;16164:18;;;16157:30;16223:31;16203:18;;;16196:59;16272:18;;17400:56:0;15943:353:1;17477:384:0;-1:-1:-1;;;;;17581:22:0;;;;;;:11;:22;;;;;;;;17580:23;:47;;;;-1:-1:-1;;;;;;17608:19:0;;;;;;:11;:19;;;;;;;;17607:20;17580:47;:77;;;;-1:-1:-1;;;;;;17631:26:0;;17652:4;17631:26;;17580:77;:107;;;;-1:-1:-1;17682:4:0;;-1:-1:-1;;;;;17661:26:0;;;17682:4;;17661:26;;17580:107;:128;;;;-1:-1:-1;17704:4:0;;-1:-1:-1;;;;;17691:17:0;;;17704:4;;17691:17;;17580:128;:163;;;;-1:-1:-1;17725:18:0;;-1:-1:-1;;;;;17712:31:0;;;17725:18;;17712:31;;17580:163;17577:277;;;17802:15;;17791:6;17768:20;17778:9;17768;:20::i;:::-;:29;;;;:::i;:::-;17767:50;;17759:93;;;;-1:-1:-1;;;17759:93:0;;16503:2:1;17759:93:0;;;16485:21:1;16542:2;16522:18;;;16515:30;16581:32;16561:18;;;16554:60;16631:18;;17759:93:0;16301:354:1;18067:193:0;18176:12;;18166:6;:22;;:45;;;-1:-1:-1;;;;;;18192:19:0;;;;;;:11;:19;;;;;;;;18166:45;:64;;;-1:-1:-1;;;;;;18215:15:0;;;;;;:11;:15;;;;;;;;18166:64;18158:94;;;;-1:-1:-1;;;18158:94:0;;16862:2:1;18158:94:0;;;16844:21:1;16901:2;16881:18;;;16874:30;-1:-1:-1;;;16920:18:1;;;16913:47;16977:18;;18158:94:0;16660:341:1;17869:190:0;17966:4;;-1:-1:-1;;;;;17953:17:0;;;17966:4;;17953:17;:41;;;;-1:-1:-1;;;;;;17975:19:0;;;;;;:11;:19;;;;;;;;17974:20;17953:41;:54;;;;-1:-1:-1;17999:8:0;;;;17998:9;17953:54;:67;;;;-1:-1:-1;18012:8:0;;-1:-1:-1;;;18012:8:0;;;;18011:9;17953:67;17950:102;;;18034:9;;:16;;18048:1;18034:13;:16::i;:::-;18022:9;:28;17869:190;;:::o;26487:930::-;26584:14;;;;:38;;;;-1:-1:-1;;;;;;26603:19:0;;;;;;:11;:19;;;;;;;;26602:20;26584:38;:68;;;;-1:-1:-1;26647:4:0;;-1:-1:-1;;;;;26626:26:0;;;26647:4;;26626:26;26584:68;:102;;;;;26666:20;;26656:6;:30;;26584:102;:128;;;;-1:-1:-1;26704:8:0;;;;26703:9;26584:128;:141;;;;-1:-1:-1;26717:8:0;;-1:-1:-1;;;26717:8:0;;;;26716:9;26584:141;:160;;;;-1:-1:-1;26730:14:0;;;;26729:15;26584:160;26581:197;;;26774:1;26746:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;26581:197:0;26811:16;;26791;;:36;;:81;;;;;26856:16;;26831:21;:41;;26791:81;:122;;;;;26896:17;;26876:16;;:37;;26791:122;:147;;;;-1:-1:-1;26931:7:0;;;;;;;26791:147;:171;;;;-1:-1:-1;;;;;;26943:19:0;;;;;;:11;:19;;;;;;;;26942:20;26791:171;:201;;;;-1:-1:-1;26987:4:0;;-1:-1:-1;;;;;26966:26:0;;;26987:4;;26966:26;26791:201;:219;;;;-1:-1:-1;26996:14:0;;;;26791:219;:232;;;;-1:-1:-1;27015:8:0;;;;27014:9;26791:232;:245;;;;-1:-1:-1;27028:8:0;;-1:-1:-1;;;27028:8:0;;;;27027:9;26791:245;:268;;;;-1:-1:-1;27050:9:0;;-1:-1:-1;;;;;27040:19:0;;;27050:9;;27040:19;;26791:268;:315;;;;;27086:20;;27076:6;:30;;26791:315;26788:622;;;27108:16;:14;:16::i;:::-;27126:14;:21;;-1:-1:-1;;27126:21:0;27143:4;27126:21;;;24073:62:::1;24010:133;23961:182:::0;:::o;26788:622::-;27167:14;;;;:29;;;;-1:-1:-1;27185:11:0;;-1:-1:-1;;;27185:11:0;;;;27167:29;:75;;;;-1:-1:-1;27218:9:0;;27240:1;;27200:29;;27218:9;;;-1:-1:-1;;;;;27218:9:0;27200;:29::i;:::-;:42;27167:75;:99;;;;-1:-1:-1;;;;;;27247:19:0;;;;;;:11;:19;;;;;;;;27246:20;27167:99;:118;;;;-1:-1:-1;27271:14:0;;;;27270:15;27167:118;:161;;;;-1:-1:-1;27323:4:0;;-1:-1:-1;;;;;27302:26:0;;;27323:4;;27302:26;27167:161;:174;;;;-1:-1:-1;27333:8:0;;;;27332:9;27167:174;:187;;;;-1:-1:-1;27346:8:0;;-1:-1:-1;;;27346:8:0;;;;27345:9;27167:187;:221;;;;;27368:20;;27358:6;:30;;27167:221;27164:246;;;27390:18;:16;:18::i;19905:188::-;19997:41;20012:6;20020:9;20031:6;19997:14;:41::i;:::-;19994:92;;;20040:29;20055:13;;20040:14;:29::i;:::-;20083:1;20071:9;:13;19905:188;;;:::o;16976:275::-;17053:9;:24;;-1:-1:-1;;;;;;17053:24:0;;;17092:8;;-1:-1:-1;;;17092:8:0;;;;17091:9;:22;;;;-1:-1:-1;17105:8:0;;;;17104:9;17091:22;17088:51;;;17115:14;:22;;-1:-1:-1;;17115:22:0;;;17088:51;17162:4;;-1:-1:-1;;;;;17152:14:0;;;17162:4;;17152:14;:41;;;;-1:-1:-1;;;;;;17171:22:0;;;;;;:11;:22;;;;;;;;17170:23;17152:41;:54;;;;-1:-1:-1;17198:8:0;;-1:-1:-1;;;17198:8:0;;;;17197:9;17152:54;:67;;;;-1:-1:-1;17211:8:0;;;;17210:9;17152:67;17149:95;;;17221:9;:21;;-1:-1:-1;;;;;17221:21:0;;-1:-1:-1;;;;;;17221:21:0;;;;;;16976:275;;:::o;18400:1062::-;18539:28;18570:48;18581:7;18590;18599:6;18607:10;18570;:48::i;:::-;-1:-1:-1;;;;;18632:19:0;;;;;;:11;:19;;;;;;18539:79;;-1:-1:-1;18632:19:0;;18629:83;;;-1:-1:-1;;;;;18687:15:0;;;;;;:7;:15;;;;;;:23;;18703:7;;18687:23;:::i;:::-;-1:-1:-1;;;;;18669:15:0;;;;;;:7;:15;;;;;:41;18629:83;-1:-1:-1;;;;;18725:22:0;;;;;;:11;:22;;;;;;;;18722:101;;;18804:17;;;;-1:-1:-1;;;;;18785:18:0;;;;;;:7;:18;;;;;;:36;;18804:17;18785:36;:::i;:::-;-1:-1:-1;;;;;18764:18:0;;;;;;:7;:18;;;;;:57;18722:101;18867:9;;-1:-1:-1;;;;;18851:15:0;;18867:9;18851:15;;;:7;:15;;;;;;:25;;18867:9;18851:25;:::i;:::-;-1:-1:-1;;;;;18833:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;18927:17;;;18908:18;;;;;;;;;;:36;;18927:17;18908:36;:::i;:::-;-1:-1:-1;;;;;18887:18:0;;;;;;:7;:18;;;;;;;:57;;;;18967:6;;;18975;;;;18955:27;;18967:6;18955:11;:27::i;:::-;18993:39;19007:1;:11;;;19020:1;:11;;;18993:13;:39::i;:::-;19043:42;19058:1;:12;;;19072:1;:12;;;19043:14;:42::i;:::-;19096:36;19109:1;:10;;;19121:1;:10;;;19096:12;:36::i;:::-;19165:9;-1:-1:-1;;;;;19148:46:0;19157:6;-1:-1:-1;;;;;19148:46:0;-1:-1:-1;;;;;;;;;;;19176:1:0;:17;;;19148:46;;;;160:25:1;;148:2;133:18;;14:177;19148:46:0;;;;;;;;19208:11;;;;:15;19205:71;;19255:4;-1:-1:-1;;;;;19230:44:0;19239:6;-1:-1:-1;;;;;19230:44:0;-1:-1:-1;;;;;;;;;;;19262:1:0;:11;;;19230:44;;;;160:25:1;;148:2;133:18;;14:177;19230:44:0;;;;;;;;19205:71;19289:12;;;;:16;19286:78;;19337:9;;;19349:12;;;19312:50;;-1:-1:-1;;;;;19337:9:0;;;;;;;19312:50;;;-1:-1:-1;;;;;;;;;;;19312:50:0;;;160:25:1;;148:2;133:18;;14:177;19312:50:0;;;;;;;;19286:78;19377:10;;;;:14;19374:81;;19423:16;;19442:10;;;;19398:55;;160:25:1;;;-1:-1:-1;;;;;19423:16:0;;;;19398:55;;;-1:-1:-1;;;;;;;;;;;19398:55:0;148:2:1;133:18;19398:55:0;;;;;;;18528:934;18400:1062;;;;;;:::o;34976:531::-;35073:7;;35109;;35026;;;;;35127:270;35151:9;:16;35147:20;;35127:270;;;35217:7;35193;:21;35201:9;35211:1;35201:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35201:12:0;35193:21;;;;;;;;;;;;;:31;;:66;;;35252:7;35228;:21;35236:9;35246:1;35236:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35236:12:0;35228:21;;;;;;;;;;;;;:31;35193:66;35189:97;;;35269:7;;35278;;35261:25;;;;;;;34976:531;;:::o;35189:97::-;35319:7;:21;35327:9;35337:1;35327:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35327:12:0;35319:21;;;;;;;;;;;;;35311:29;;:7;:29;:::i;:::-;35301:39;;35373:7;:21;35381:9;35391:1;35381:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35381:12:0;35373:21;;;;;;;;;;;;;35365:29;;:7;:29;:::i;:::-;35355:39;-1:-1:-1;35169:3:0;;;;:::i;:::-;;;;35127:270;;;;35429:7;;35421;;:15;;;;:::i;:::-;35411:7;:25;35407:56;;;35446:7;;35455;;35438:25;;;;;;34976:531;;:::o;35407:56::-;35482:7;;35491;;-1:-1:-1;34976:531:0;-1:-1:-1;34976:531:0:o;32058:2049::-;32162:28;;:::i;:::-;32207:7;32206:8;:41;;;;32218:29;32228:6;32236:10;32218:9;:29::i;:::-;32203:110;;;32262:17;;;:27;;;32302:8;;32203:110;32327:6;32326:7;:22;;;;;32338:10;32337:11;32326:22;32323:598;;;32364:17;32384:41;32413:11;;32384:24;32396:11;;32384:7;:11;;:24;;;;:::i;:41::-;32364:61;;32459:11;;32443:8;:12;;;:27;32440:75;;32502:11;;32489:8;:12;32481:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;32472:6;;;:41;32440:75;32570:8;:12;32554:11;;:29;;:15;:29::i;:::-;32532:18;;:51;32529:111;;32627:11;;32608:18;;32600:26;;:7;:26;:::i;:::-;:38;;;;:::i;:::-;32585:12;;;:53;32529:111;32711:18;;:8;32693:12;32677:11;;:53;;32711:18;32677:29;;:11;:15;:29::i;:53::-;32657:16;;:73;32654:129;;32770:11;;32753:16;;32745:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;32732:10;;;:49;32654:129;32811:55;32853:1;:12;;;32811:37;32837:1;:10;;;32811:21;32825:1;:6;;;32811:9;:13;;:21;;;;:::i;:55::-;32797:11;;;:69;32901:17;32909:9;32901:7;:17;:::i;:::-;32881;;;:37;-1:-1:-1;32323:598:0;32934:6;32931:566;;;32956:17;32976:37;33001:11;;32976:20;32988:7;;32976;:11;;:20;;;;:::i;:37::-;32956:57;;33047:7;;33031:8;:12;;;:23;33028:71;;33086:11;;33073:8;:12;33065:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;33056:6;;;:41;33028:71;33150:8;:12;33138:7;;:25;;:11;:25::i;:::-;33116:18;;:47;33113:107;;33207:11;;33188:18;;33180:26;;:7;:26;:::i;:::-;:38;;;;:::i;:::-;33165:12;;;:53;33113:107;33287:18;;:8;33269:12;33257:7;;:49;;33287:18;33257:25;;:7;:11;:25::i;:49::-;33237:16;;:69;33234:125;;33346:11;;33329:16;;33321:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;33308:10;;;:49;33234:125;33387:55;33429:1;:12;;;33387:37;33413:1;:10;;;33387:21;33401:1;:6;;;33387:9;:13;;:21;;;;:::i;:55::-;33373:11;;;:69;33477:17;33485:9;33477:7;:17;:::i;:::-;33457;;;:37;-1:-1:-1;32931:566:0;33510:10;33507:574;;;33536:17;33556:38;33582:11;;33556:21;33568:8;;33556:7;:11;;:21;;;;:::i;:38::-;33536:58;;33628:8;;33612;:12;;;:24;33609:72;;33668:11;;33655:8;:12;33647:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;33638:6;;;:41;33609:72;33733:8;:12;33720:8;;:26;;:12;:26::i;:::-;33698:18;;:48;33695:108;;33790:11;;33771:18;;33763:26;;:7;:26;:::i;:::-;:38;;;;:::i;:::-;33748:12;;;:53;33695:108;33871:18;;:8;33853:12;33840:8;;:50;;33871:18;33840:26;;:8;:12;:26::i;:50::-;33820:16;;:70;33817:126;;33930:11;;33913:16;;33905:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;33892:10;;;:49;33817:126;33971:55;34013:1;:12;;;33971:37;33997:1;:10;;;33971:21;33985:1;:6;;;33971:9;:13;;:21;;;;:::i;:55::-;33957:11;;;:69;34061:17;34069:9;34061:7;:17;:::i;:::-;34041;;;:37;-1:-1:-1;32058:2049:0;;;;;;:::o;34115:687::-;34240:15;;;;;;34374:19;34382:11;34374:7;:19;:::i;:::-;34364:29;;34408:7;34404:62;;-1:-1:-1;34437:7:0;;-1:-1:-1;34455:1:0;;-1:-1:-1;34455:1:0;;-1:-1:-1;34455:1:0;;-1:-1:-1;34455:1:0;34430:33;;34404:62;34490:11;34483:1;:6;;;:18;;;;:::i;:::-;34476:25;;34536:11;34524:1;:11;;;:23;;;;:::i;:::-;34512:35;;34584:11;34571:1;:12;;;:24;;;;:::i;:::-;34558:37;;34628:11;34617:1;:10;;;:22;;;;:::i;:::-;34606:33;-1:-1:-1;34701:10:0;34606:33;34682:9;34669:12;34677:4;34669:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;:42;;;;:::i;:::-;34650:61;;34115:687;;;;;;;;;;;;:::o;22252:363::-;22340:16;;;22354:1;22340:16;;;;;;;;22316:21;;22340:16;;;;;;;;-1:-1:-1;;22377:6:0;;:13;;;-1:-1:-1;;;22377:13:0;;;;22316:40;;-1:-1:-1;;;;;;22377:6:0;;;;:11;;-1:-1:-1;22377:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22367:4;22372:1;22367:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22367:23:0;;;-1:-1:-1;;;;;22367:23:0;;;;;22419:4;22401;22406:1;22401:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22401:23:0;;;:7;;;;;;;;;:23;22435:6;;22560:16;;22435:172;;-1:-1:-1;;;22435:172:0;;:6;;;;:57;;22500:9;;22435:172;;:6;;22541:4;;22560:16;;;;22591:15;;22435:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;27425:183;27473:8;:15;;-1:-1:-1;;;;;;;27473:15:0;;;;;;;;27541:5;;27503:59;;-1:-1:-1;;;27503:59:0;;27556:4;27503:59;;;1980:51:1;27503:9:0;;;;-1:-1:-1;;;;;27503:9:0;;:32;;27541:5;1953:18:1;;27503:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27499:75;27584:8;:16;;-1:-1:-1;;;;27584:16:0;;;27425:183::o;19471:426::-;19569:4;19586:13;19612:15;;19602:6;:25;;19586:41;;19638:19;19688:13;;19660:24;19678:4;19660:9;:24::i;:::-;19720:8;;19660:41;-1:-1:-1;19660:41:0;;-1:-1:-1;19720:8:0;;19719:9;:24;;;;-1:-1:-1;19732:11:0;;;;;;;19719:24;:36;;;;;19747:8;19719:36;:60;;;;-1:-1:-1;;;;;;19760:19:0;;;;;;:11;:19;;;;;;;;19759:20;19719:60;:78;;;;-1:-1:-1;19783:14:0;;;;19719:78;:112;;;;-1:-1:-1;19827:4:0;;-1:-1:-1;;;;;19814:17:0;;;19827:4;;19814:17;19719:112;:139;;;;;19848:10;;19835:9;;:23;;19719:139;:157;;;;;19862:14;19719:157;:170;;;;-1:-1:-1;19881:8:0;;-1:-1:-1;;;19881:8:0;;;;19880:9;19719:170;19712:177;19471:426;-1:-1:-1;;;;;;19471:426:0:o;20101:1350::-;14654:8;:15;;-1:-1:-1;;14654:15:0;14665:4;14654:15;;;;;;20195:8:::1;::::0;14654;;20194:24:::1;::::0;20216:1:::1;::::0;20194:17:::1;::::0;20195:8;20194:14:::1;:17::i;:24::-;20171:47;;20232:8;;20244:1;20232:13:::0;20229:134:::1;;20323:23:::0;;20285:18;;20262;;:99:::1;::::0;20359:1:::1;::::0;20262:92:::1;::::0;20352:1:::1;::::0;20262:85:::1;::::0;20323:23;;20262:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;20247:114;;20229:134;20417:18:::0;;20373:32:::1;::::0;20438:12;;20408:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20373:77:::0;-1:-1:-1;20461:14:0::1;20478:33;20373:77:::0;20478:6;:33:::1;:::i;:::-;20461:50:::0;-1:-1:-1;20547:21:0::1;20579:24;20461:50:::0;20579:16:::1;:24::i;:::-;20614:20;20637:38;20661:14:::0;20637:21:::1;:38;:::i;:::-;20738:18:::0;;20614:61;;-1:-1:-1;20686:19:0::1;::::0;20723:33:::1;::::0;:12;:33:::1;:::i;:::-;20707:50;::::0;:12;:50:::1;:::i;:::-;20814:18:::0;;20686:71;;-1:-1:-1;20768:29:0::1;::::0;20800:32:::1;::::0;20686:71;20800:32:::1;:::i;:::-;20768:64:::0;-1:-1:-1;20846:25:0;;20843:108:::1;;20887:61;20900:24;20926:21;20887:12;:61::i;:::-;21010:18:::0;;20961:23:::1;::::0;20987:42:::1;::::0;:18:::1;:11:::0;21003:1:::1;20987:15;:18::i;:42::-;20961:68:::0;-1:-1:-1;21043:19:0;;21040:80:::1;;21072:18;::::0;21064:53:::1;::::0;-1:-1:-1;;;;;21072:18:0;;::::1;::::0;21064:53;::::1;;;::::0;21101:15;;21072:18:::1;21064:53:::0;21072:18;21064:53;21101:15;21072:18;21064:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21040:80;21177:23:::0;;21130:21:::1;::::0;21154:47:::1;::::0;:18:::1;:11:::0;21170:1:::1;21154:15;:18::i;:47::-;21130:71:::0;-1:-1:-1;21215:17:0;;21212:80:::1;;21254:16;::::0;:35:::1;::::0;21275:13;21254:20:::1;:35::i;:::-;21235:16;:54:::0;21212:80:::1;21302:15;21320:43;21346:16;;21320:21;:25;;:43;;;;:::i;:::-;21302:61:::0;-1:-1:-1;21377:20:0;;21374:70:::1;;21407:16;::::0;21399:43:::1;::::0;-1:-1:-1;;;;;21407:16:0;;::::1;::::0;21399:43;::::1;;;::::0;21434:7;;21407:16:::1;21399:43:::0;21407:16;21399:43;21434:7;21407:16;21399:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21374:70;-1:-1:-1::0;;14674:8:0;:16;;-1:-1:-1;;14674:16:0;;;-1:-1:-1;;;;;;;;;20101:1350:0:o;18268:124::-;18346:4;18336:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;18362:11:0;:22;;18380:4;;18362:11;:15;;:22;;18380:4;;18362:22;:::i;:::-;;;;-1:-1:-1;;;;18268:124:0:o;30490:277::-;30593:9;30570:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;30638:4:0;30618:26;;;;:11;:26;;;;;;;;30615:100;;;30686:4;30670:22;;;;:7;:22;;;;;:33;;30694:9;;30670:22;:33;;30694:9;;30670:33;:::i;:::-;;;;-1:-1:-1;;30615:100:0;30741:4;30725:22;;;;:7;:22;;;;;:34;;30750:9;;30725:22;:34;;30750:9;;30725:34;:::i;30775:299::-;30882:10;30858:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;30928:9:0;;;;;-1:-1:-1;;;;;30928:9:0;30908:31;;;;:11;:31;;;;;;;;30905:111;;;30981:9;;;;;-1:-1:-1;;;;;30981:9:0;30965:27;;;;:7;:27;;;;;:39;;30994:10;;30965:27;:39;;30994:10;;30965:39;:::i;:::-;;;;-1:-1:-1;;30905:111:0;31042:9;;;;;-1:-1:-1;;;;;31042:9:0;31026:27;;;;:7;:27;;;;;:40;;31056:10;;31026:27;:40;;31056:10;;31026:40;:::i;31082:306::-;31181:8;31159:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;31225:16:0;;-1:-1:-1;;;;;31225:16:0;31205:38;;;;:11;:38;;;;;;;;31202:123;;;31285:16;;-1:-1:-1;;;;;31285:16:0;31269:34;;;;:7;:34;;;;;:44;;31305:8;;31269:34;:44;;31305:8;;31269:44;:::i;:::-;;;;-1:-1:-1;;31202:123:0;31351:16;;-1:-1:-1;;;;;31351:16:0;31335:34;;;;:7;:34;;;;;:45;;31372:8;;31335:34;:45;;31372:8;;31335:45;:::i;31840:210::-;31912:4;31937:6;:22;;;;-1:-1:-1;31947:7:0;;:12;31937:22;31936:57;;;;31965:10;:27;;;;-1:-1:-1;31979:8:0;;:13;31965:27;31936:105;;;;31999:6;31998:7;:22;;;;;32010:10;32009:11;31998:22;:42;;;;-1:-1:-1;;32024:11:0;;:16;;31840:210;-1:-1:-1;;31840:210:0:o;21810:434::-;21900:16;;;21914:1;21900:16;;;;;;;;21876:21;;21900:16;;;;;;;;;;-1:-1:-1;21900:16:0;21876:40;;21945:4;21927;21932:1;21927:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21927:23:0;;;:7;;;;;;;;;;:23;;;;21971:6;;:13;;;-1:-1:-1;;;21971:13:0;;;;:6;;;;;:11;;:13;;;;;21927:7;;21971:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21961:4;21966:1;21961:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21961:23:0;;;:7;;;;;;;;;:23;22027:6;;21995:53;;22012:4;;22027:6;22036:11;21995:8;:53::i;:::-;22059:6;;:177;;-1:-1:-1;;;22059:177:0;;-1:-1:-1;;;;;22059:6:0;;;;:57;;:177;;22131:11;;22059:6;;22173:4;;22200;;22220:15;;22059:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21865:379;21810:434;:::o;21459:343::-;21572:6;;21540:53;;21557:4;;-1:-1:-1;;;;;21572:6:0;21581:11;21540:8;:53::i;:::-;21604:6;;21745:18;;21604:190;;-1:-1:-1;;;21604:190:0;;21667:4;21604:190;;;19303:34:1;19353:18;;;19346:34;;;21604:6:0;19396:18:1;;;19389:34;;;19439:18;;;19432:34;-1:-1:-1;;;;;21745:18:0;;;19482:19:1;;;19475:44;21778:15:0;19535:19:1;;;19528:35;21604:6:0;;;:22;;21634:9;;19237:19:1;;21604:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;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:180::-;1196:6;1249:2;1237:9;1228:7;1224:23;1220:32;1217:52;;;1265:1;1262;1255:12;1217:52;-1:-1:-1;1288:23:1;;1137:180;-1:-1:-1;1137:180:1:o;1322:315::-;1390:6;1398;1451:2;1439:9;1430:7;1426:23;1422:32;1419:52;;;1467:1;1464;1457:12;1419:52;1506:9;1493:23;1525:31;1550:5;1525:31;:::i;:::-;1575:5;1627:2;1612:18;;;;1599:32;;-1:-1:-1;;;1322:315:1:o;2042:456::-;2119:6;2127;2135;2188:2;2176:9;2167:7;2163:23;2159:32;2156:52;;;2204:1;2201;2194:12;2156:52;2243:9;2230:23;2262:31;2287:5;2262:31;:::i;:::-;2312:5;-1:-1:-1;2369:2:1;2354:18;;2341:32;2382:33;2341:32;2382:33;:::i;:::-;2042:456;;2434:7;;-1:-1:-1;;;2488:2:1;2473:18;;;;2460:32;;2042:456::o;3160:730::-;3291:6;3299;3307;3315;3323;3331;3339;3347;3355;3408:3;3396:9;3387:7;3383:23;3379:33;3376:53;;;3425:1;3422;3415:12;3376:53;-1:-1:-1;;3448:23:1;;;3518:2;3503:18;;3490:32;;-1:-1:-1;3569:2:1;3554:18;;3541:32;;3620:2;3605:18;;3592:32;;-1:-1:-1;3671:3:1;3656:19;;3643:33;;-1:-1:-1;3723:3:1;3708:19;;3695:33;;-1:-1:-1;3775:3:1;3760:19;;3747:33;;-1:-1:-1;3827:3:1;3812:19;;3799:33;;-1:-1:-1;3879:3:1;3864:19;3851:33;;-1:-1:-1;3160:730:1;-1:-1:-1;3160:730:1:o;3895:118::-;3981:5;3974:13;3967:21;3960:5;3957:32;3947:60;;4003:1;4000;3993:12;4018:376;4080:6;4088;4141:2;4129:9;4120:7;4116:23;4112:32;4109:52;;;4157:1;4154;4147:12;4109:52;4196:9;4183:23;4215:28;4237:5;4215:28;:::i;:::-;4262:5;-1:-1:-1;4319:2:1;4304:18;;4291:32;4332:30;4291:32;4332:30;:::i;:::-;4381:7;4371:17;;;4018:376;;;;;:::o;4399:309::-;4464:6;4472;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4577:9;4564:23;4554:33;;4637:2;4626:9;4622:18;4609:32;4650:28;4672:5;4650:28;:::i;4713:248::-;4781:6;4789;4842:2;4830:9;4821:7;4817:23;4813:32;4810:52;;;4858:1;4855;4848:12;4810:52;-1:-1:-1;;4881:23:1;;;4951:2;4936:18;;;4923:32;;-1:-1:-1;4713:248:1:o;4966:382::-;5031:6;5039;5092:2;5080:9;5071:7;5067:23;5063:32;5060:52;;;5108:1;5105;5098:12;5060:52;5147:9;5134:23;5166:28;5188:5;5166:28;:::i;:::-;5213:5;-1:-1:-1;5270:2:1;5255:18;;5242:32;5283:33;5242:32;5283:33;:::i;5353:383::-;5430:6;5438;5446;5499:2;5487:9;5478:7;5474:23;5470:32;5467:52;;;5515:1;5512;5505:12;5467:52;5551:9;5538:23;5528:33;;5611:2;5600:9;5596:18;5583:32;5624:31;5649:5;5624:31;:::i;5741:382::-;5806:6;5814;5867:2;5855:9;5846:7;5842:23;5838:32;5835:52;;;5883:1;5880;5873:12;5835:52;5922:9;5909:23;5941:31;5966:5;5941:31;:::i;6128:813::-;6223:6;6231;6239;6247;6255;6308:3;6296:9;6287:7;6283:23;6279:33;6276:53;;;6325:1;6322;6315:12;6276:53;6364:9;6351:23;6383:31;6408:5;6383:31;:::i;:::-;6433:5;-1:-1:-1;6490:2:1;6475:18;;6462:32;6503:33;6462:32;6503:33;:::i;:::-;6555:7;-1:-1:-1;6614:2:1;6599:18;;6586:32;6627:33;6586:32;6627:33;:::i;:::-;6679:7;-1:-1:-1;6738:2:1;6723:18;;6710:32;6751:33;6710:32;6751:33;:::i;:::-;6803:7;-1:-1:-1;6862:3:1;6847:19;;6834:33;6876;6834;6876;:::i;:::-;6928:7;6918:17;;;6128:813;;;;;;;;:::o;7270:388::-;7338:6;7346;7399:2;7387:9;7378:7;7374:23;7370:32;7367:52;;;7415:1;7412;7405:12;7367:52;7454:9;7441:23;7473:31;7498:5;7473:31;:::i;7663:316::-;7740:6;7748;7756;7809:2;7797:9;7788:7;7784:23;7780:32;7777:52;;;7825:1;7822;7815:12;7777:52;-1:-1:-1;;7848:23:1;;;7918:2;7903:18;;7890:32;;-1:-1:-1;7969:2:1;7954:18;;;7941:32;;7663:316;-1:-1:-1;7663:316:1:o;8467:329::-;8669:2;8651:21;;;8708:1;8688:18;;;8681:29;-1:-1:-1;;;8741:2:1;8726:18;;8719:36;8787:2;8772:18;;8467:329::o;9153:127::-;9214:10;9209:3;9205:20;9202:1;9195:31;9245:4;9242:1;9235:15;9269:4;9266:1;9259:15;9285:127;9346:10;9341:3;9337:20;9334:1;9327:31;9377:4;9374:1;9367:15;9401:4;9398:1;9391:15;9417:128;9484:9;;;9505:11;;;9502:37;;;9519:18;;:::i;9550:127::-;9611:10;9606:3;9602:20;9599:1;9592:31;9642:4;9639:1;9632:15;9666:4;9663:1;9656:15;9682:135;9721:3;9742:17;;;9739:43;;9762:18;;:::i;:::-;-1:-1:-1;9809:1:1;9798:13;;9682:135::o;9822:184::-;9892:6;9945:2;9933:9;9924:7;9920:23;9916:32;9913:52;;;9961:1;9958;9951:12;9913:52;-1:-1:-1;9984:16:1;;9822:184;-1:-1:-1;9822:184:1:o;10778:217::-;10818:1;10844;10834:132;;10888:10;10883:3;10879:20;10876:1;10869:31;10923:4;10920:1;10913:15;10951:4;10948:1;10941:15;10834:132;-1:-1:-1;10980:9:1;;10778:217::o;11000:125::-;11065:9;;;11086:10;;;11083:36;;;11099:18;;:::i;12957:245::-;13024:6;13077:2;13065:9;13056:7;13052:23;13048:32;13045:52;;;13093:1;13090;13083:12;13045:52;13125:9;13119:16;13144:28;13166:5;13144:28;:::i;13207:306::-;13295:6;13303;13311;13364:2;13352:9;13343:7;13339:23;13335:32;13332:52;;;13380:1;13377;13370:12;13332:52;13409:9;13403:16;13393:26;;13459:2;13448:9;13444:18;13438:25;13428:35;;13503:2;13492:9;13488:18;13482:25;13472:35;;13207:306;;;;;:::o;14542:168::-;14615:9;;;14646;;14663:15;;;14657:22;;14643:37;14633:71;;14684:18;;:::i;17138:251::-;17208:6;17261:2;17249:9;17240:7;17236:23;17232:32;17229:52;;;17277:1;17274;17267:12;17229:52;17309:9;17303:16;17328:31;17353:5;17328:31;:::i;17394:461::-;17447:3;17485:5;17479:12;17512:6;17507:3;17500:19;17538:4;17567:2;17562:3;17558:12;17551:19;;17604:2;17597:5;17593:14;17625:1;17635:195;17649:6;17646:1;17643:13;17635:195;;;17714:13;;-1:-1:-1;;;;;17710:39:1;17698:52;;17770:12;;;;17805:15;;;;17746:1;17664:9;17635:195;;;-1:-1:-1;17846:3:1;;17394:461;-1:-1:-1;;;;;17394:461:1:o;17860:510::-;18131:6;18120:9;18113:25;18174:3;18169:2;18158:9;18154:18;18147:31;18094:4;18195:57;18247:3;18236:9;18232:19;18224:6;18195:57;:::i;:::-;-1:-1:-1;;;;;18288:32:1;;;;18283:2;18268:18;;18261:60;-1:-1:-1;18352:2:1;18337:18;18330:34;18187:65;17860:510;-1:-1:-1;;17860:510:1:o;18375:582::-;18674:6;18663:9;18656:25;18717:6;18712:2;18701:9;18697:18;18690:34;18760:3;18755:2;18744:9;18740:18;18733:31;18637:4;18781:57;18833:3;18822:9;18818:19;18810:6;18781:57;:::i;:::-;-1:-1:-1;;;;;18874:32:1;;;;18869:2;18854:18;;18847:60;-1:-1:-1;18938:3:1;18923:19;18916:35;18773:65;18375:582;-1:-1:-1;;;18375:582:1:o

Swarm Source

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