ETH Price: $3,257.51 (+2.55%)
Gas: 2 Gwei

Token

MoonRock (ROCK)
 

Overview

Max Total Supply

1,000,000,000 ROCK

Holders

2,300 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$638,100.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
7.073728804 ROCK

Value
$0.00 ( ~0 Eth) [0.0000%]
0x532B012755093aB34fA5Ef1241A0F21f4b40d697
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MoonRock is a decentralized financial ecosystem that provides a collection of specialized services based on smart contracts and decentralized applications (DApps) and provides users with access to a variety of DEFI tools.

Market

Volume (24H):$454.27
Market Capitalization:$0.00
Circulating Supply:0.00 ROCK
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
moonrock

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-08
*/

//SPDX-License-Identifier: MIT
/*
   ░ ░ ░ ░ ░     ░             ░ ░ ░   ░   ░       ░           ░ ░ ░ ░     ░ ░  
░ ░   ░ ░       ░               ░ ░ ░ ░ ░     ░   ░           ░ ░   ░ ░   ░ ░ ░ 
 ░ ░ ░   ░       ░  ▒░░░░░░        ░   ░   ░         ░░░░░░░░    ░ ░ ░   ░   ░  
░ ░   ░ ░ ░   ░    ░███████▓▒       ░   ░     ░     ▒▓▓▓▓▓▓▓▒   ░ ░ ░ ░     ░   
           ░ ░ ░ ░ ░▓█▓▓▓▓▓▓█▓░      ░ ░ ░ ░      ▒▓▓▓▒▒▒▒▒▓▒  ░ ░   ░ ░ ░ ░   ░
░ ░   ░   ░   ░ ░    ▒▓▓▓▓▓▓▓▓█▓░         ░     ▒▓▓▓▓▒▒▒▓▓▒░    ░ ░ ░ ░ ░ ░ ░ ░ 
 ░ ░ ░   ░ ░   ░       ▒▓█▓▓▓▓▓██▓░           ▒▓▓▓▓▓▒▓▓▓▒░     ░ ░   ░ ░ ░ ░ ░ ░
░   ░         ░ ░  ░░    ▒█▓▓▓▓▓▓▓█▓░       ▒▓█▓▓▓▓▓▓▓▓░            ░   ░ ░ ░   
       ░ ░   ░     ░█▓     ▒██▓▓▓▓▓██▓░   ▒▓█▓▓▓▓▓▓▓▓▒     ░▓    ░   ░ ░ ░ ░ ░ ░
░   ░ ░ ░ ░ ░ ░     ███▒    ░▒██▓▓▓▓▓██▒▒▓█▓▓▓▓▓▓▓▓▒      ▓██   ░ ░   ░   ░ ░ ░ 
 ░ ░   ░ ░ ░ ░      ▓▓▓██▓    ░▓██▓▓▓▓▓██▓▓▓▓▓▓█▓▒      ▓████    ░     ░ ░ ░ ░ ░
░ ░ ░   ░ ░ ░   ░   ▓▓▓▓▓█▒     ░▓██▓▓▓▓▓▓▓▓▓█▓▒      ▓██████   ░       ░ ░ ░ ░ 
 ░ ░         ░ ░    ▓▓▓▓▓█▒       ░▓██▓▓▓▓▓██▒     ░▓████████        ░   ░ ░   ░
░   ░ ░   ░ ░ ░     ▓▓▓▓▓█▒         ░▓█▓▓██▒     ░▓██████████     ░       ░ ░ ░ 
   ░ ░ ░ ░   ░ ░    ▓▓▓▓▓█▒           ░▓█▓     ░▓█████▓██████  ░ ░ ░     ░ ░   ░
░   ░ ░ ░ ░ ░   ░   ▓▓▓▓▓▓▒     ░ ░     ░    ░███████░ ▓█████   ░ ░ ░ ░     ░   
 ░ ░ ░ ░ ░   ░ ░    ▓▓▓▓▓█▒    ░ ░         ▒██████▓▒   ██████    ░   ░ ░ ░ ░ ░  
░ ░ ░ ░ ░           ▓▓▓▓▓▓▒   ░   ░ ░    ▒███████      ██████     ░ ░ ░ ░ ░ ░ ░ 
 ░   ░ ░ ░ ░       ░▓▓▓▓▓█▒    ░ ░ ░     ░▓██████▓     ██████    ░ ░     ░   ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░   ▓▓▓▓▓▓▒   ░ ░ ░ ░       ▒██████▓░  ██████   ░   ░ ░   ░ ░   
 ░ ░ ░ ░ ░ ░ ░ ░   ░▓▓▓▓▓▓▒    ░   ░   ░      ▓██████▓ ██████    ░   ░ ░   ░ ░  
░     ░ ░ ░ ░      ░▓▓▓▓▓▓▒       ░ ░ ░     ░▓██████▒  ██████   ░ ░   ░       ░ 
         ░   ░ ░   ░▓▓▓▓▓▓▒  ░   ░ ░      ░███████░    ██████      ░ ░ ░ ░   ░ ░
░ ░ ░     ░ ░   ░    ░▓▓▓▓▒   ░   ░     ▒██████▓░      █████▒     ░   ░ ░   ░   
 ░   ░ ░ ░ ░ ░ ░ ░     ▒▓█▒  ░   ░    ▒███████░        ██▓░      ░ ░ ░ ░   ░ ░ ░
░   ░ ░   ░   ░          ▒▒         ▒███████░          ▓▒     ░ ░ ░ ░ ░   ░     
 ░   ░   ░   ░   ░   ░              ░            ░ ░         ░ ░ ░
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▓▓▓▓▒▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▓▓▓▒▒▒▓▒▒▒▒▒▓▒▒▒
▓█▓▒▒▒▒▒██▒▒▓███████▒▒▒███████▒▒██▓▒▒▒▓█▒▒███████▒▒▓██████▓▒▒▓██████▓▒█▓▒▒▓██▒▒▒
▓██▓▒▒▒███▒▒██▒▒▒▒▒██▒██▒▒▒▒▒██▒████▒▒▓█▒▒██▒▒▒░█▓▓█▓▒▒▒▒▓█▓▒██▒▒▒▒▒▒▒█▓▒██▓▒▒▒▒
▓█▒█▓▒██▓█▒██▒▒▒▒▒▒▓█▒█▒▒▒▒▒▒▓█▒██░██▓▓█▒▒██▓▓▓██▒██▒▒▒▒▒▒██▓█▒▒▒▒▒▒▒▒████▓▒▒▒▒▒
▓█▒▒███▒▓█▒▒██▒▒▒▒▓██▒██▒▒▒▒▒██▒██▒▒▓███▒▒██████▒▒▓█▓▒▒▒▒▓█▓▒██▒▒▒▒▓▒▒██▒▓██▒▒▒▒
▓█▒▒▒█▒▒▓█▒▒▒███████▒▒▒███████▒▒██▒▒▒▒██▒▒██▒▒▒██▓▒▓██████▓▒▒▒██████▓▒█▓▒▒▒██▓▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▓▓▓▒▒▒▓▒▒▒▒▒▓▓▒▒
            Written, deployed & Migrated by Krakovia (@karola96)
 */
// o/
pragma solidity 0.8.13;
//interfaces
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// contracts
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        
        return _owner;
    }   
    
    modifier onlyOwner() {
        
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function getTime() public view returns (uint256) {
        
        return block.timestamp;
    }
}
// main contract
contract moonrock is Context, IERC20, Ownable {

//custom
    IUniswapV2Router02 public uniswapV2Router;
//string
    string private _name = "MoonRock";
    string private _symbol = "ROCK";
//bool
    bool public moveEthToWallets = true;
    bool public TakeEthForFees = true;
    bool public swapAndLiquifyEnabled = true;
    bool public blockMultiBuys = true;
    bool public marketActive = false;
    bool private isInternalTransaction = false;
    bool public vestingActive = true;
//address
    address public uniswapV2Pair;
    address public _MarketingWalletAddress = 0x9151D7B75601E8407049F3642365629e24d8f13d;
    address public _DevelopmentWalletAddress = 0xc040621C8853d1E5fF74f891F976168d39Ba29aA;
    address public _InvfundWalletAddress = 0x03c754661A0B30E01768D612328d95938716Cd31;
    address[] private _excluded;
//uint
    uint public buyReflectionFee = 4;
    uint public sellReflectionFee = 4;
    uint public buyMarketingFee = 2;
    uint public sellMarketingFee = 2;
    uint public buyDevelopmentFee = 2;
    uint public sellDevelopmentFee = 2;
    uint public buyInvfundFee = 2;
    uint public sellInvfundFee = 2;
    uint public buyFee = buyReflectionFee + buyMarketingFee + buyDevelopmentFee + buyInvfundFee;
    uint public sellFee = sellReflectionFee + sellMarketingFee + sellDevelopmentFee + sellInvfundFee;
    uint public buySecondsLimit = 5;
    uint public minimumTokensBeforeSwap;
    uint public tokensToSwap;
    uint public intervalSecondsForSwap = 60;
    uint public minimumWeiForTokenomics = 1 * 10**16; // 0.01 ETH
    uint private startTimeForSwap;
    uint private MarketActiveAt;
    uint private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint private _tTotal = 1_000_000_000 * 10 ** _decimals;
    uint private _rTotal = (MAX - (MAX % _tTotal));
    uint private _tFeeTotal;
    uint private _ReflectionFee;
    uint private _MarketingFee;
    uint private _DevelopmentFee;
    uint private _InvfundFee;
    uint private _OldReflectionFee;
    uint private _OldMarketingFee;
    uint private _OldDevelopmentFee;
    uint private _OldInvfundFee;
//struct
    struct userData {
        uint lastBuyTime;
    }
//mapping
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public premarketUser;
    mapping (address => bool) public VestedUser;
    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => userData) public userLastTradeData;
//event
    event MarketingCollected(uint256 amount);
    event DevelopmentCollected(uint256 amount);
    event InvestmentFundCollected(uint256 amount);
    event ExcludedFromFees(address indexed user, bool state);
    event SwapSystemChanged(bool status, uint256 intervalSecondsToWait, uint256 minimumToSwap, uint256 tokensToSwap);
    event MoveEthToWallets(bool state);
// constructor
    constructor() {
        // set gvars
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        minimumTokensBeforeSwap = 50_000 * 10 ** _decimals ;
        tokensToSwap = minimumTokensBeforeSwap;
        excludedFromFees[address(this)] = true;
        excludedFromFees[owner()] = true;
        premarketUser[owner()] = true;
        excludedFromFees[_MarketingWalletAddress] = true;
        //spawn pair
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());
        // mappings
        automatedMarketMakerPairs[uniswapV2Pair] = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);
    }
    // accept eth for autoswap
    receive() external payable {
  	}
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    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 setFees() private {
        buyFee = buyReflectionFee + buyMarketingFee + buyDevelopmentFee + buyInvfundFee;
        sellFee = sellReflectionFee + sellMarketingFee + sellDevelopmentFee + sellInvfundFee;
    }
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        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 setMoveEthToWallets(bool state) external onlyOwner {
        moveEthToWallets = state;
        emit MoveEthToWallets(state);
    }
    function excludeFromFee(address account) external onlyOwner {
        excludedFromFees[account] = true;
        emit ExcludedFromFees(account,true);
    }
    function includeInFee(address account) external onlyOwner {
        excludedFromFees[account] = false;
        emit ExcludedFromFees(account,false);
    }
    function setReflectionFee(uint buy, uint sell) external onlyOwner() {
        buyReflectionFee = buy;
        sellReflectionFee = sell;
        setFees();
        require(buyFee + sellFee <= 25, "Fees to high");
    }
    function setMarketingFee(uint buy, uint sell) external onlyOwner() {
        buyMarketingFee = buy;
        sellMarketingFee = sell;
        setFees();
        require(buyFee + sellFee <= 25, "Fees to high");
    }
    function setDevelopmentFee(uint buy, uint sell) external onlyOwner() {
        buyDevelopmentFee = buy;
        sellDevelopmentFee = sell;
        setFees();
        require(buyFee + sellFee <= 25, "Fees to high");
    }
    function setInvfundFee(uint buy, uint sell) external onlyOwner() {
        buyInvfundFee = buy;
        sellInvfundFee = sell;
        setFees();
        require(buyFee + sellFee <= 25, "Fees to high");
    }
    function VestingMultipleAccounts(address[] calldata accounts, bool _state) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            VestedUser[accounts[i]] = _state;
        }
    }
    function setMinimumWeiForTokenomics(uint _value) external onlyOwner {
        minimumWeiForTokenomics = _value;
    }
    function disableVesting() external onlyOwner {
        // there is no coming back after disabling vesting.
        vestingActive = false;
    }
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvfund) {
        tFee = calculateReflectionFee(tAmount);
        tMarketing = calculateMarketingFee(tAmount);
        tDevelopment = calculateDevelopmentFee(tAmount);
        tInvfund = calculateInvfundFee(tAmount);
        tTransferAmount = tAmount - tFee - tMarketing - tDevelopment - tInvfund;
        return (tTransferAmount, tFee, tMarketing, tDevelopment, tInvfund);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvfund, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rDevelopment = tDevelopment * currentRate;
        uint256 rInvfund = tInvfund * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rMarketing - rDevelopment - rInvfund;
        return (rAmount, rTransferAmount, rFee);
    }

    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 _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
    }
    function _takeDevelopment(uint256 tDevelopment) private {
        uint256 currentRate =  _getRate();
        uint256 rDevelopment = tDevelopment * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rDevelopment;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tDevelopment;
    }
    function _takeInvfund(uint256 tInvfund) private {
        uint256 currentRate =  _getRate();
        uint256 rInvfund = tInvfund * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rInvfund;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tInvfund;
    }

    function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
        return _amount * _ReflectionFee / 10**2;
    }
    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount * _MarketingFee / 10**2;
    }
    function calculateDevelopmentFee(uint256 _amount) private view returns (uint256) {
        return _amount * _DevelopmentFee / 10**2;
    }
    function calculateInvfundFee(uint256 _amount) private view returns (uint256) {
        return _amount * _InvfundFee / 10**2;
    }
    function setOldFees() private {
        _OldReflectionFee = _ReflectionFee;
        _OldMarketingFee = _MarketingFee;
        _OldDevelopmentFee = _DevelopmentFee;
        _OldInvfundFee = _InvfundFee;
    }
    function shutdownFees() private {
        _ReflectionFee = 0;
        _MarketingFee = 0;
        _DevelopmentFee = 0;
        _InvfundFee = 0;
    }
    function setFeesByType(uint tradeType) private {
        //buy
        if(tradeType == 1) {
            _ReflectionFee = buyReflectionFee;
            _MarketingFee = buyMarketingFee;
            _DevelopmentFee = buyDevelopmentFee;
            _InvfundFee = buyInvfundFee;
        }
        //sell
        else if(tradeType == 2) {
            _ReflectionFee = sellReflectionFee;
            _MarketingFee = sellMarketingFee;
            _DevelopmentFee = sellDevelopmentFee;
            _InvfundFee = sellInvfundFee;
        }
    }
    function restoreFees() private {
        _ReflectionFee = _OldReflectionFee;
        _MarketingFee = _OldMarketingFee;
        _DevelopmentFee = _OldDevelopmentFee;
            _InvfundFee = _OldInvfundFee;
    }

    modifier CheckDisableFees(bool isEnabled, uint tradeType, address from) {
        if(!isEnabled) {
            setOldFees();
            shutdownFees();
            _;
            restoreFees();
        } else {
            // vesting, used to lock vested users, no tranfer, no sell, buy allowed.
            // can be disabled and cannot be enabled again
            if(vestingActive) {
                if(tradeType == 0 || tradeType == 2) {
                    require(!VestedUser[from],"your account is locked.");
                }
            }
            //buy & sell
            if(tradeType == 1 || tradeType == 2) {
                setOldFees();
                setFeesByType(tradeType);
                _;
                restoreFees();
            }
            // no wallet to wallet tax
            else {
                setOldFees();
                shutdownFees();
                _;
                restoreFees();
            }
        }
    }

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

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

    modifier FastTx() {
        isInternalTransaction = true;
        _;
        isInternalTransaction = false;
    }
    function sendToWallet(uint amount) private {
        uint256 marketing_part = amount * sellMarketingFee / 100;
        uint256 development_part = amount * sellDevelopmentFee / 100;
        uint256 invfund_part = amount * sellInvfundFee / 100;
        (bool success, ) = payable(_MarketingWalletAddress).call{value: marketing_part}("");
        if(success) {
            emit MarketingCollected(marketing_part);
        }
        (bool success1, ) = payable(_DevelopmentWalletAddress).call{value: development_part}("");
        if(success1) {
            emit DevelopmentCollected(development_part);
        }
        (bool success2, ) = payable(_InvfundWalletAddress).call{value: invfund_part}("");
        if(success2) {
            emit InvestmentFundCollected(invfund_part);
        }
    }

    function swapAndLiquify(uint256 _tokensToSwap) private FastTx {
        swapTokensForEth(_tokensToSwap);
    }
// utility functions
    function transferForeignToken(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        }
        _sent = IERC20(_token).transfer(_to, _value);
    }
    function Sweep() external onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }
//switch functions
    function ActivateMarket(bool _state) external onlyOwner {
        marketActive = _state;
        if(_state) {
            MarketActiveAt = block.timestamp;
        }
    }
//set functions
    function setMarketingAddress(address _value) external onlyOwner {
        _MarketingWalletAddress = _value;
    }
    function setDevelopmentAddress(address _value) external onlyOwner {
        _DevelopmentWalletAddress = _value;
    }
    function setInvfundAddress(address _value) external onlyOwner {
        _InvfundWalletAddress = _value;
    }
    function setSwapAndLiquify(bool _state, uint _minimumTokensBeforeSwap, uint _intervalSecondsForSwap, uint _tokenToSwap) external onlyOwner {
        swapAndLiquifyEnabled = _state;
        intervalSecondsForSwap = _intervalSecondsForSwap;
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap*10**decimals();
        tokensToSwap = _tokenToSwap*10**decimals();
        require(tokensToSwap <= _tTotal / 500,"tokensToSwap should be max 0.2% of total supply.");
        emit SwapSystemChanged(_state,_intervalSecondsForSwap,_minimumTokensBeforeSwap,_tokenToSwap);
    }
// mappings functions
    function editPowerUser(address _target, bool _status) external onlyOwner {
        premarketUser[_target] = _status;
        excludedFromFees[_target] = _status;
    }
    function editPremarketUser(address _target, bool _status) external onlyOwner {
        premarketUser[_target] = _status;
    }
    function editExcludedFromFees(address _target, bool _status) external onlyOwner {
        excludedFromFees[_target] = _status;
    }
    function editBatchExcludedFromFees(address[] memory _address, bool _status) external onlyOwner {
        for(uint i=0; i< _address.length; i++){
            address adr = _address[i];
            excludedFromFees[adr] = _status;
        }
    }
    function editAutomatedMarketMakerPairs(address _target, bool _status) external onlyOwner {
        automatedMarketMakerPairs[_target] = _status;
    }
// operational functions
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function _transfer(address from, address to, uint256 amount) private {
        uint trade_type = 0;
        bool takeFee = true;
        bool overMinimumTokenBalance = balanceOf(address(this)) >= minimumTokensBeforeSwap;
        require(from != address(0), "ERC20: transfer from the zero address");
    // market status flag
        if(!marketActive) {
            require(premarketUser[from],"cannot trade before the market opening");
        }
    // normal transaction
        if(!isInternalTransaction) {
        // tx limits
            //buy
            if(automatedMarketMakerPairs[from]) {
                trade_type = 1;
            }
            //sell
            else if(automatedMarketMakerPairs[to]) {
                trade_type = 2;
                // liquidity generator for tokenomics
                if (swapAndLiquifyEnabled && 
                    balanceOf(uniswapV2Pair) > 0 && 
                    overMinimumTokenBalance &&
                    startTimeForSwap + intervalSecondsForSwap <= block.timestamp
                    ) {
                        startTimeForSwap = block.timestamp;
                        swapAndLiquify(tokensToSwap);
                }
            }
            // send converted eth from fees to respective wallets
            if(moveEthToWallets) {
                uint256 remaningEth = address(this).balance;
                if(remaningEth > minimumWeiForTokenomics) {
                    sendToWallet(remaningEth);
                }
            }
        }
        //if any account belongs to excludedFromFees account then remove the fee
        if(excludedFromFees[from] || excludedFromFees[to]){
            takeFee = false;
        }
        // transfer tokens
        _tokenTransfer(from,to,amount,takeFee,trade_type);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, uint tradeType) private CheckDisableFees(takeFee,tradeType,sender) {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvFund) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeDevelopment(tDevelopment);
        _takeInvfund(tInvFund);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvFund) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeDevelopment(tDevelopment);
        _takeInvfund(tInvFund);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvFund) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeDevelopment(tDevelopment);
        _takeInvfund(tInvFund);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tDevelopment, uint256 tInvFund) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _takeDevelopment(tDevelopment);
        _takeInvfund(tInvFund);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function KKMigration(address[] memory _address, uint256[] memory _amount) external onlyOwner {
        require(_amount.length == _amount.length,"wrong address:amount rows");
        for(uint i=0; i< _amount.length; i++){
            address adr = _address[i];
            uint amnt = _amount[i] *10**decimals();
            (uint256 rAmount, uint256 rTransferAmount,,,,,,) = _getValues(amnt);
            _rOwned[owner()] = _rOwned[owner()] - rAmount;
            _rOwned[adr] = _rOwned[adr] + rTransferAmount;
            emit Transfer(owner(),adr,rTransferAmount);
        } 
    }
}

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":"uint256","name":"amount","type":"uint256"}],"name":"DevelopmentCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvestmentFundCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MarketingCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"MoveEthToWallets","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"intervalSecondsToWait","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minimumToSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensToSwap","type":"uint256"}],"name":"SwapSystemChanged","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":"bool","name":"_state","type":"bool"}],"name":"ActivateMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"KKMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TakeEthForFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"VestedUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"VestingMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_DevelopmentWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_InvfundWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MarketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockMultiBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyInvfundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySecondsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"editAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"editBatchExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"editExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"editPowerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"editPremarketUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"intervalSecondsForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumWeiForTokenomics","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moveEthToWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"premarketUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellInvfundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setDevelopmentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setInvfundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setInvfundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinimumWeiForTokenomics","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setMoveEthToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setReflectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"},{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"},{"internalType":"uint256","name":"_intervalSecondsForSwap","type":"uint256"},{"internalType":"uint256","name":"_tokenToSwap","type":"uint256"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastTradeData","outputs":[{"internalType":"uint256","name":"lastBuyTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260086080819052674d6f6f6e526f636b60c01b60a09081526200002b91600291906200055a565b5060408051808201909152600480825263524f434b60e01b602090920191825262000059916003916200055a565b5060048054660100000101010166ffffffffffffff19909116178155600580546001600160a01b0319908116739151d7b75601e8407049f3642365629e24d8f13d1790915560068054821673c040621c8853d1e5ff74f891f976168d39ba29aa179055600780549091167303c754661a0b30e01768d612328d95938716cd311790556009819055600a8190556002600b819055600c819055600d819055600e819055600f81905560108190559081906200011590829062000616565b62000121919062000616565b6200012d919062000616565b601155601054600e54600c54600a5462000148919062000616565b62000154919062000616565b62000160919062000616565b6012556005601355603c601655662386f26fc10000601755601a805460ff191660099081179091556200019590600a62000730565b620001a590633b9aca0062000748565b601b819055620001b8906000196200076a565b620001c6906000196200078d565b601c55348015620001d657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155601a54620002549060ff16600a62000730565b620002629061c35062000748565b6014819055601555306000908152602b602081905260408220805460ff19166001908117909155916200029d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190602990620002e16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560055482168152602b84528290208054909416600117909355805163c45a015560e01b815290519284169263c45a0155926004808401939192918290030181865afa15801562000363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003899190620007a7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fd9190620007a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200044b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004719190620007a7565b60048054600160381b600160d81b0319166701000000000000006001600160a01b03938416810291909117918290559004166000908152602d60205260408120805460ff19166001179055601c5490602690620004d66000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005036000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040516200054b91815260200190565b60405180910390a3506200080e565b8280546200056890620007d2565b90600052602060002090601f0160209004810192826200058c5760008555620005d7565b82601f10620005a757805160ff1916838001178555620005d7565b82800160010185558215620005d7579182015b82811115620005d7578251825591602001919060010190620005ba565b50620005e5929150620005e9565b5090565b5b80821115620005e55760008155600101620005ea565b634e487b7160e01b600052601160045260246000fd5b600082198211156200062c576200062c62000600565b500190565b600181815b808511156200067257816000190482111562000656576200065662000600565b808516156200066457918102915b93841c939080029062000636565b509250929050565b6000826200068b575060016200072a565b816200069a575060006200072a565b8160018114620006b35760028114620006be57620006de565b60019150506200072a565b60ff841115620006d257620006d262000600565b50506001821b6200072a565b5060208310610133831016604e8410600b841016171562000703575081810a6200072a565b6200070f838362000631565b806000190482111562000726576200072662000600565b0290505b92915050565b60006200074160ff8416836200067a565b9392505050565b600081600019048311821515161562000765576200076562000600565b500290565b6000826200078857634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620007a257620007a262000600565b500390565b600060208284031215620007ba57600080fd5b81516001600160a01b03811681146200074157600080fd5b600181811c90821680620007e757607f821691505b6020821081036200080857634e487b7160e01b600052602260045260246000fd5b50919050565b613be1806200081e6000396000f3fe60806040526004361061044b5760003560e01c8063715018a611610234578063b62496f51161012e578063dbe66ca0116100b6578063eedeacbe1161007a578063eedeacbe14610d48578063f226099914610d68578063f2fde38b14610d7e578063f6f7638d14610d9e578063fc7bddcc14610dbe57600080fd5b8063dbe66ca014610c78578063dd62ed3e14610ca8578063e7044e1014610cee578063ea2f0b3714610d08578063ee72a45414610d2857600080fd5b8063bf8e7024116100fd578063bf8e702414610bd2578063c78b71cd14610c02578063cb53b20714610c22578063d2d2162914610c42578063d2d7ad8314610c6257600080fd5b8063b62496f514610b3f578063b6d7822014610b6f578063bda258e414610b8f578063bf2e92c614610bbc57600080fd5b806395d89b41116101bc578063a9059cbb11610180578063a9059cbb14610a97578063aaa3115114610ab7578063ac252bd314610ad9578063b204141114610b09578063b3b2f06014610b1f57600080fd5b806395d89b4114610a0257806398f6840814610a175780639d1213a714610a375780639e5fea8a14610a57578063a457c2d714610a7757600080fd5b806388f820201161020357806388f82020146109555780638941dc351461098e5780638da5cb5b146109ae578063906e9dd0146109cc57806392136913146109ec57600080fd5b8063715018a6146108e65780637bce5a04146108fb5780637c6331ea14610911578063826887561461093557600080fd5b80633f301893116103455780635076d8b1116102cd5780635b3c6e01116102915780635b3c6e01146108645780635c67ed9c146108855780636042f7191461089b5780637088fb7f146108b157806370a08231146108c657600080fd5b80635076d8b1146107b857806352390c02146107d85780635342acb4146107f8578063555d55dd14610831578063557ed1ba1461085157600080fd5b80634706240211610314578063470624021461071b578063492ff3091461073157806349bd5a5e146107515780634a74bb02146107785780634f97f4c11461079857600080fd5b80633f3018931461069b57806342f4202d146106bb578063437823ec146106db5780634549b039146106fb57600080fd5b8063272ecbb3116103d35780632dded817116103975780632dded81714610604578063313ce567146106245780633685d4191461064657806339509351146106665780633cb650d01461068657600080fd5b8063272ecbb31461058057806329b1c15c146105965780632b14ca56146105b85780632b893929146105ce5780632d838119146105e457600080fd5b806318160ddd1161041a57806318160ddd1461050957806318a94cf11461051e5780632078c21014610534578063231363711461054a57806323b872dd1461056057600080fd5b806306fdde0314610457578063095ea7b31461048257806313114a9d146104b25780631694505e146104d157600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610ddd565b6040516104799190613432565b60405180910390f35b34801561048e57600080fd5b506104a261049d36600461349c565b610e6f565b6040519015158152602001610479565b3480156104be57600080fd5b50601d545b604051908152602001610479565b3480156104dd57600080fd5b506001546104f1906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b34801561051557600080fd5b50601b546104c3565b34801561052a57600080fd5b506104c3600e5481565b34801561054057600080fd5b506104c3600f5481565b34801561055657600080fd5b506104c360095481565b34801561056c57600080fd5b506104a261057b3660046134c8565b610e86565b34801561058c57600080fd5b506104c360165481565b3480156105a257600080fd5b506105b66105b1366004613509565b610f3c565b005b3480156105c457600080fd5b506104c360125481565b3480156105da57600080fd5b506104c360155481565b3480156105f057600080fd5b506104c36105ff366004613526565b610f88565b34801561061057600080fd5b506006546104f1906001600160a01b031681565b34801561063057600080fd5b50601a5460405160ff9091168152602001610479565b34801561065257600080fd5b506105b6610661366004613509565b61100c565b34801561067257600080fd5b506104a261068136600461349c565b6111c2565b34801561069257600080fd5b506105b66111f9565b3480156106a757600080fd5b506105b66106b636600461353f565b611235565b3480156106c757600080fd5b506105b66106d636600461356f565b6112c0565b3480156106e757600080fd5b506105b66106f6366004613509565b611331565b34801561070757600080fd5b506104c361071636600461358c565b6113b9565b34801561072757600080fd5b506104c360115481565b34801561073d57600080fd5b506105b661074c3660046135bc565b61144a565b34801561075d57600080fd5b506004546104f190600160381b90046001600160a01b031681565b34801561078457600080fd5b506004546104a29062010000900460ff1681565b3480156107a457600080fd5b506105b66107b33660046135ea565b61149f565b3480156107c457600080fd5b506105b66107d336600461353f565b6115e9565b3480156107e457600080fd5b506105b66107f3366004613509565b611625565b34801561080457600080fd5b506104a2610813366004613509565b6001600160a01b03166000908152602b602052604090205460ff1690565b34801561083d57600080fd5b506105b661084c36600461353f565b611778565b34801561085d57600080fd5b50426104c3565b34801561087057600080fd5b506004546104a2906301000000900460ff1681565b34801561089157600080fd5b506104c360175481565b3480156108a757600080fd5b506104c3600a5481565b3480156108bd57600080fd5b506105b66117b4565b3480156108d257600080fd5b506104c36108e1366004613509565b611829565b3480156108f257600080fd5b506105b6611888565b34801561090757600080fd5b506104c3600b5481565b34801561091d57600080fd5b506004546104a2906601000000000000900460ff1681565b34801561094157600080fd5b506105b661095036600461353f565b6118fc565b34801561096157600080fd5b506104a2610970366004613509565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561099a57600080fd5b506105b66109a93660046135bc565b611938565b3480156109ba57600080fd5b506000546001600160a01b03166104f1565b3480156109d857600080fd5b506105b66109e7366004613509565b61198d565b3480156109f857600080fd5b506104c3600c5481565b348015610a0e57600080fd5b5061046c6119d9565b348015610a2357600080fd5b506105b6610a32366004613509565b6119e8565b348015610a4357600080fd5b506105b6610a5236600461356f565b611a34565b348015610a6357600080fd5b506104a2610a723660046134c8565b611a8a565b348015610a8357600080fd5b506104a2610a9236600461349c565b611ba3565b348015610aa357600080fd5b506104a2610ab236600461349c565b611c3e565b348015610ac357600080fd5b506004546104a290640100000000900460ff1681565b348015610ae557600080fd5b506104a2610af4366004613509565b60296020526000908152604090205460ff1681565b348015610b1557600080fd5b506104c3600d5481565b348015610b2b57600080fd5b506105b6610b3a3660046135bc565b611c4b565b348015610b4b57600080fd5b506104a2610b5a366004613509565b602d6020526000908152604090205460ff1681565b348015610b7b57600080fd5b506105b6610b8a366004613704565b611ca0565b348015610b9b57600080fd5b506104c3610baa366004613509565b602e6020526000908152604090205481565b348015610bc857600080fd5b506104c360135481565b348015610bde57600080fd5b506104a2610bed366004613509565b602a6020526000908152604090205460ff1681565b348015610c0e57600080fd5b506105b6610c1d366004613526565b611d31565b348015610c2e57600080fd5b506105b6610c3d3660046135bc565b611d60565b348015610c4e57600080fd5b506105b6610c5d36600461374b565b611dc8565b348015610c6e57600080fd5b506104c360145481565b348015610c8457600080fd5b506104a2610c93366004613509565b602b6020526000908152604090205460ff1681565b348015610cb457600080fd5b506104c3610cc3366004613806565b6001600160a01b03918216600090815260286020908152604080832093909416825291909152205490565b348015610cfa57600080fd5b506004546104a29060ff1681565b348015610d1457600080fd5b506105b6610d23366004613509565b611f7d565b348015610d3457600080fd5b506105b6610d43366004613834565b611ff6565b348015610d5457600080fd5b506005546104f1906001600160a01b031681565b348015610d7457600080fd5b506104c360105481565b348015610d8a57600080fd5b506105b6610d99366004613509565b612097565b348015610daa57600080fd5b506007546104f1906001600160a01b031681565b348015610dca57600080fd5b506004546104a290610100900460ff1681565b606060028054610dec906138ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e18906138ba565b8015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b5050505050905090565b6000610e7c338484612181565b5060015b92915050565b6000610e938484846122a5565b6001600160a01b038416600090815260286020908152604080832033845290915290205482811015610f1d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610f318533610f2c868561390a565b612181565b506001949350505050565b6000546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f1490613921565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000601c54821115610fef5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f14565b6000610ff96124fa565b90506110058184613956565b9392505050565b6000546001600160a01b031633146110365760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000908152602c602052604090205460ff1661109e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f14565b60005b6008548110156111be57816001600160a01b0316600882815481106110c8576110c8613978565b6000918252602090912001546001600160a01b0316036111ac57600880546110f29060019061390a565b8154811061110257611102613978565b600091825260209091200154600880546001600160a01b03909216918390811061112e5761112e613978565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602782526040808220829055602c90925220805460ff1916905560088054806111865761118661398e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111b6816139a4565b9150506110a1565b5050565b3360008181526028602090815260408083206001600160a01b03871684529091528120549091610e7c918590610f2c9086906139bd565b6000546001600160a01b031633146112235760405162461bcd60e51b8152600401610f1490613921565b6004805466ff00000000000019169055565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610f1490613921565b600b829055600c81905561127161251d565b601960125460115461128391906139bd565b11156111be5760405162461bcd60e51b815260206004820152600c60248201526b08ccacae640e8de40d0d2ced60a31b6044820152606401610f14565b6000546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610f1490613921565b6004805460ff19168215159081179091556040519081527f5549bf390eb6c86582334885be666206392141c71e8520c4e2a4c76fa33482079060200160405180910390a150565b6000546001600160a01b0316331461135b5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000818152602b6020908152604091829020805460ff1916600190811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb91015b60405180910390a250565b6000601b5483111561140d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f14565b8161142e57600061141d84612579565b50959750610e809650505050505050565b600061143984612579565b50949750610e809650505050505050565b6000546001600160a01b031633146114745760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610f1490613921565b6004805462ff0000191662010000861515021790556016829055601a5460ff166114f490600a613ab9565b6114fe9084613ac8565b601455601a5460ff1661151290600a613ab9565b61151c9082613ac8565b601555601b5461152f906101f490613956565b60155411156115995760405162461bcd60e51b815260206004820152603060248201527f746f6b656e73546f537761702073686f756c64206265206d617820302e32252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610f14565b60408051851515815260208101849052908101849052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6000546001600160a01b031633146116135760405162461bcd60e51b8152600401610f1490613921565b600f829055601081905561127161251d565b6000546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000908152602c602052604090205460ff16156116b85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f14565b6001600160a01b03811660009081526026602052604090205415611712576001600160a01b0381166000908152602660205260409020546116f890610f88565b6001600160a01b0382166000908152602760205260409020555b6001600160a01b03166000818152602c60205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610f1490613921565b6009829055600a81905561127161251d565b6000546001600160a01b031633146117de5760405162461bcd60e51b8152600401610f1490613921565b476117f16000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156111be573d6000803e3d6000fd5b6001600160a01b0381166000908152602c602052604081205460ff161561186657506001600160a01b031660009081526027602052604090205490565b6001600160a01b038216600090815260266020526040902054610e8090610f88565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610f1490613921565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119265760405162461bcd60e51b8152600401610f1490613921565b600d829055600e81905561127161251d565b6000546001600160a01b031633146119625760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f1490613921565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610dec906138ba565b6000546001600160a01b03163314611a125760405162461bcd60e51b8152600401610f1490613921565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610f1490613921565b60048054821580156401000000000264ff000000001990921691909117909155611a8757426019555b50565b600080546001600160a01b03163314611ab55760405162461bcd60e51b8152600401610f1490613921565b81600003611b28576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190613ae7565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015611b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9b9190613b00565b949350505050565b3360009081526028602090815260408083206001600160a01b038616845290915281205482811015611c255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f14565b611c343385610f2c868561390a565b5060019392505050565b6000610e7c3384846122a5565b6000546001600160a01b03163314611c755760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cca5760405162461bcd60e51b8152600401610f1490613921565b60005b8251811015611d2c576000838281518110611cea57611cea613978565b6020908102919091018101516001600160a01b03166000908152602b90915260409020805460ff19168415151790555080611d24816139a4565b915050611ccd565b505050565b6000546001600160a01b03163314611d5b5760405162461bcd60e51b8152600401610f1490613921565b601755565b6000546001600160a01b03163314611d8a5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b039091166000908152602960209081526040808320805494151560ff199586168117909155602b9092529091208054909216179055565b6000546001600160a01b03163314611df25760405162461bcd60e51b8152600401610f1490613921565b60005b8151811015611d2c576000838281518110611e1257611e12613978565b602002602001015190506000611e2a601a5460ff1690565b611e3590600a613ab9565b848481518110611e4757611e47613978565b6020026020010151611e599190613ac8565b9050600080611e6783612579565b505050505050915091508160266000611e886000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611eb3919061390a565b60266000611ec96000546001600160a01b031690565b6001600160a01b0390811682526020808301939093526040918201600090812094909455871683526026909152902054611f049082906139bd565b6001600160a01b038581166000818152602660205260408120939093559154166001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5e91815260200190565b60405180910390a3505050508080611f75906139a4565b915050611df5565b6000546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000818152602b60209081526040808320805460ff19169055519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb91016113ae565b6000546001600160a01b031633146120205760405162461bcd60e51b8152600401610f1490613921565b60005b828110156120915781602a600086868581811061204257612042613978565b90506020020160208101906120579190613509565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612089816139a4565b915050612023565b50505050565b6000546001600160a01b031633146120c15760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166121265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f14565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f14565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f14565b6001600160a01b0383811660008181526028602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806001905060006014546122ba30611829565b101590506001600160a01b0386166123225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f14565b600454640100000000900460ff166123ab576001600160a01b03861660009081526029602052604090205460ff166123ab5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401610f14565b60045465010000000000900460ff1661249c576001600160a01b0386166000908152602d602052604090205460ff16156123e8576001925061247a565b6001600160a01b0385166000908152602d602052604090205460ff161561247a576004546002935062010000900460ff168015612441575060045460009061243f90600160381b90046001600160a01b0316611829565b115b801561244a5750805b801561246557504260165460185461246291906139bd565b11155b1561247a574260185560155461247a906125c1565b60045460ff161561249c57601754479081111561249a5761249a816125f3565b505b6001600160a01b0386166000908152602b602052604090205460ff16806124db57506001600160a01b0385166000908152602b602052604090205460ff165b156124e557600091505b6124f28686868587612809565b505050505050565b6000806000612507612c38565b90925090506125168183613956565b9250505090565b600f54600d54600b5460095461253391906139bd565b61253d91906139bd565b61254791906139bd565b601155601054600e54600c54600a5461256091906139bd565b61256a91906139bd565b61257491906139bd565b601255565b60008060008060008060008061258e89612dbb565b9398509196509450925090506125af89858585856125aa6124fa565b612e24565b91995097509550919395975091939597565b6004805465ff00000000001916650100000000001790556125e181612eb1565b506004805465ff000000000019169055565b60006064600c54836126059190613ac8565b61260f9190613956565b905060006064600e54846126239190613ac8565b61262d9190613956565b905060006064601054856126419190613ac8565b61264b9190613956565b6005546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461269d576040519150601f19603f3d011682016040523d82523d6000602084013e6126a2565b606091505b5050905080156126e0576040518481527ff305e858d42f169071401ed0dd44800b21105c60ac21f993b04a9c633f3a1cd49060200160405180910390a15b6006546040516000916001600160a01b03169085908381818185875af1925050503d806000811461272d576040519150601f19603f3d011682016040523d82523d6000602084013e612732565b606091505b505090508015612770576040518481527fa51eeb1d6bb8388ec33c0dbc101ed0bec9a1610e870f2a2756a01aed330e6e4c9060200160405180910390a15b6007546040516000916001600160a01b03169085908381818185875af1925050503d80600081146127bd576040519150601f19603f3d011682016040523d82523d6000602084013e6127c2565b606091505b505090508015612800576040518481527f3bacb32920256355f0bc7a6a134b2d79cd71e3984a0fa4b171d1aae8e192d9209060200160405180910390a15b50505050505050565b818186826129bd5761282e601e54602255601f54602355602054602455602154602555565b6128476000601e819055601f8190556020819055602155565b6001600160a01b0388166000908152602c602052604090205460ff16801561288857506001600160a01b0387166000908152602c602052604090205460ff16155b1561289d57612898888888613003565b61299b565b6001600160a01b0388166000908152602c602052604090205460ff161580156128de57506001600160a01b0387166000908152602c602052604090205460ff165b156128ee57612898888888613151565b6001600160a01b0388166000908152602c602052604090205460ff1615801561293057506001600160a01b0387166000908152602c602052604090205460ff16155b156129405761289888888861320e565b6001600160a01b0388166000908152602c602052604090205460ff16801561298057506001600160a01b0387166000908152602c602052604090205460ff165b1561299057612898888888613264565b61299b88888861320e565b6129b8602254601e55602354601f55602454602055602554602155565b612c2e565b6004546601000000000000900460ff1615612a4d578115806129df5750816002145b15612a4d576001600160a01b0381166000908152602a602052604090205460ff1615612a4d5760405162461bcd60e51b815260206004820152601760248201527f796f7572206163636f756e74206973206c6f636b65642e0000000000000000006044820152606401610f14565b8160011480612a5c5750816002145b15612a8757612a7e601e54602255601f54602355602054602455602154602555565b612847826132ea565b612aa4601e54602255601f54602355602054602455602154602555565b612abd6000601e819055601f8190556020819055602155565b6001600160a01b0388166000908152602c602052604090205460ff168015612afe57506001600160a01b0387166000908152602c602052604090205460ff16155b15612b1357612b0e888888613003565b612c11565b6001600160a01b0388166000908152602c602052604090205460ff16158015612b5457506001600160a01b0387166000908152602c602052604090205460ff165b15612b6457612b0e888888613151565b6001600160a01b0388166000908152602c602052604090205460ff16158015612ba657506001600160a01b0387166000908152602c602052604090205460ff16155b15612bb657612b0e88888861320e565b6001600160a01b0388166000908152602c602052604090205460ff168015612bf657506001600160a01b0387166000908152602c602052604090205460ff165b15612c0657612b0e888888613264565b612c1188888861320e565b612c2e602254601e55602354601f55602454602055602554602155565b5050505050505050565b601c54601b546000918291825b600854811015612d8a57826026600060088481548110612c6757612c67613978565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cd25750816027600060088481548110612cab57612cab613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ce857601c54601b54945094505050509091565b6026600060088381548110612cff57612cff613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d2e908461390a565b92506027600060088381548110612d4757612d47613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d76908361390a565b915080612d82816139a4565b915050612c45565b50601b54601c54612d9b9190613956565b821015612db257601c54601b549350935050509091565b90939092509050565b6000806000806000612dcc86613330565b9350612dd78661334c565b9250612de28661335e565b9150612ded86613370565b9050808284612dfc878a61390a565b612e06919061390a565b612e10919061390a565b612e1a919061390a565b9693955091935091565b6000808080612e33858b613ac8565b90506000612e41868b613ac8565b90506000612e4f878b613ac8565b90506000612e5d888b613ac8565b90506000612e6b898b613ac8565b90506000818385612e7c888a61390a565b612e86919061390a565b612e90919061390a565b612e9a919061390a565b959f959e50939c50939a5050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ee657612ee6613978565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190613b1d565b81600181518110612f7657612f76613978565b6001600160a01b039283166020918202929092010152600154612f9c9130911684612181565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fd5908590600090869030904290600401613b3a565b600060405180830381600087803b158015612fef57600080fd5b505af11580156124f2573d6000803e3d6000fd5b60008060008060008060008061301889612579565b9750975097509750975097509750975088602760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613059919061390a565b6001600160a01b038c1660009081526027602090815260408083209390935560269052205461308990899061390a565b6001600160a01b03808d1660009081526026602052604080822093909355908c16815220546130b99088906139bd565b6001600160a01b038b166000908152602660205260409020556130db83613382565b6130e482613382565b6130ed81613382565b6130f7868561340c565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161313c91815260200190565b60405180910390a35050505050505050505050565b60008060008060008060008061316689612579565b9750975097509750975097509750975087602660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546131a7919061390a565b6001600160a01b03808d16600090815260266020908152604080832094909455918d168152602790915220546131de9086906139bd565b6001600160a01b038b166000908152602760209081526040808320939093556026905220546130b99088906139bd565b60008060008060008060008061322389612579565b9750975097509750975097509750975087602660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613089919061390a565b60008060008060008060008061327989612579565b9750975097509750975097509750975088602760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546132ba919061390a565b6001600160a01b038c166000908152602760209081526040808320939093556026905220546131a790899061390a565b8060010361330d57600954601e55600b54601f55600d54602055600f5460215550565b80600203611a8757600a54601e55600c54601f55600e5460205560105460215550565b60006064601e54836133429190613ac8565b610e809190613956565b60006064601f54836133429190613ac8565b60006064602054836133429190613ac8565b60006064602154836133429190613ac8565b600061338c6124fa565b9050600061339a8284613ac8565b306000908152602660205260409020549091506133b89082906139bd565b30600090815260266020908152604080832093909355602c9052205460ff1615611d2c57306000908152602760205260409020546133f79084906139bd565b30600090815260276020526040902055505050565b81601c5461341a919061390a565b601c55601d5461342b9082906139bd565b601d555050565b600060208083528351808285015260005b8181101561345f57858101830151858201604001528201613443565b81811115613471576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611a8757600080fd5b600080604083850312156134af57600080fd5b82356134ba81613487565b946020939093013593505050565b6000806000606084860312156134dd57600080fd5b83356134e881613487565b925060208401356134f881613487565b929592945050506040919091013590565b60006020828403121561351b57600080fd5b813561100581613487565b60006020828403121561353857600080fd5b5035919050565b6000806040838503121561355257600080fd5b50508035926020909101359150565b8015158114611a8757600080fd5b60006020828403121561358157600080fd5b813561100581613561565b6000806040838503121561359f57600080fd5b8235915060208301356135b181613561565b809150509250929050565b600080604083850312156135cf57600080fd5b82356135da81613487565b915060208301356135b181613561565b6000806000806080858703121561360057600080fd5b843561360b81613561565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561366457613664613625565b604052919050565b600067ffffffffffffffff82111561368657613686613625565b5060051b60200190565b600082601f8301126136a157600080fd5b813560206136b66136b18361366c565b61363b565b82815260059290921b840181019181810190868411156136d557600080fd5b8286015b848110156136f95780356136ec81613487565b83529183019183016136d9565b509695505050505050565b6000806040838503121561371757600080fd5b823567ffffffffffffffff81111561372e57600080fd5b61373a85828601613690565b92505060208301356135b181613561565b6000806040838503121561375e57600080fd5b823567ffffffffffffffff8082111561377657600080fd5b61378286838701613690565b935060209150818501358181111561379957600080fd5b85019050601f810186136137ac57600080fd5b80356137ba6136b18261366c565b81815260059190911b820183019083810190888311156137d957600080fd5b928401925b828410156137f7578335825292840192908401906137de565b80955050505050509250929050565b6000806040838503121561381957600080fd5b823561382481613487565b915060208301356135b181613487565b60008060006040848603121561384957600080fd5b833567ffffffffffffffff8082111561386157600080fd5b818601915086601f83011261387557600080fd5b81358181111561388457600080fd5b8760208260051b850101111561389957600080fd5b602092830195509350508401356138af81613561565b809150509250925092565b600181811c908216806138ce57607f821691505b6020821081036138ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561391c5761391c6138f4565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008261397357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016139b6576139b66138f4565b5060010190565b600082198211156139d0576139d06138f4565b500190565b600181815b80851115613a105781600019048211156139f6576139f66138f4565b80851615613a0357918102915b93841c93908002906139da565b509250929050565b600082613a2757506001610e80565b81613a3457506000610e80565b8160018114613a4a5760028114613a5457613a70565b6001915050610e80565b60ff841115613a6557613a656138f4565b50506001821b610e80565b5060208310610133831016604e8410600b8410161715613a93575081810a610e80565b613a9d83836139d5565b8060001904821115613ab157613ab16138f4565b029392505050565b600061100560ff841683613a18565b6000816000190483118215151615613ae257613ae26138f4565b500290565b600060208284031215613af957600080fd5b5051919050565b600060208284031215613b1257600080fd5b815161100581613561565b600060208284031215613b2f57600080fd5b815161100581613487565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b8a5784516001600160a01b031683529383019391830191600101613b65565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220048851d91743f385716c148c54b67fe9121b3fba781dfd21e731e22c57987cc664736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c8063715018a611610234578063b62496f51161012e578063dbe66ca0116100b6578063eedeacbe1161007a578063eedeacbe14610d48578063f226099914610d68578063f2fde38b14610d7e578063f6f7638d14610d9e578063fc7bddcc14610dbe57600080fd5b8063dbe66ca014610c78578063dd62ed3e14610ca8578063e7044e1014610cee578063ea2f0b3714610d08578063ee72a45414610d2857600080fd5b8063bf8e7024116100fd578063bf8e702414610bd2578063c78b71cd14610c02578063cb53b20714610c22578063d2d2162914610c42578063d2d7ad8314610c6257600080fd5b8063b62496f514610b3f578063b6d7822014610b6f578063bda258e414610b8f578063bf2e92c614610bbc57600080fd5b806395d89b41116101bc578063a9059cbb11610180578063a9059cbb14610a97578063aaa3115114610ab7578063ac252bd314610ad9578063b204141114610b09578063b3b2f06014610b1f57600080fd5b806395d89b4114610a0257806398f6840814610a175780639d1213a714610a375780639e5fea8a14610a57578063a457c2d714610a7757600080fd5b806388f820201161020357806388f82020146109555780638941dc351461098e5780638da5cb5b146109ae578063906e9dd0146109cc57806392136913146109ec57600080fd5b8063715018a6146108e65780637bce5a04146108fb5780637c6331ea14610911578063826887561461093557600080fd5b80633f301893116103455780635076d8b1116102cd5780635b3c6e01116102915780635b3c6e01146108645780635c67ed9c146108855780636042f7191461089b5780637088fb7f146108b157806370a08231146108c657600080fd5b80635076d8b1146107b857806352390c02146107d85780635342acb4146107f8578063555d55dd14610831578063557ed1ba1461085157600080fd5b80634706240211610314578063470624021461071b578063492ff3091461073157806349bd5a5e146107515780634a74bb02146107785780634f97f4c11461079857600080fd5b80633f3018931461069b57806342f4202d146106bb578063437823ec146106db5780634549b039146106fb57600080fd5b8063272ecbb3116103d35780632dded817116103975780632dded81714610604578063313ce567146106245780633685d4191461064657806339509351146106665780633cb650d01461068657600080fd5b8063272ecbb31461058057806329b1c15c146105965780632b14ca56146105b85780632b893929146105ce5780632d838119146105e457600080fd5b806318160ddd1161041a57806318160ddd1461050957806318a94cf11461051e5780632078c21014610534578063231363711461054a57806323b872dd1461056057600080fd5b806306fdde0314610457578063095ea7b31461048257806313114a9d146104b25780631694505e146104d157600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610ddd565b6040516104799190613432565b60405180910390f35b34801561048e57600080fd5b506104a261049d36600461349c565b610e6f565b6040519015158152602001610479565b3480156104be57600080fd5b50601d545b604051908152602001610479565b3480156104dd57600080fd5b506001546104f1906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b34801561051557600080fd5b50601b546104c3565b34801561052a57600080fd5b506104c3600e5481565b34801561054057600080fd5b506104c3600f5481565b34801561055657600080fd5b506104c360095481565b34801561056c57600080fd5b506104a261057b3660046134c8565b610e86565b34801561058c57600080fd5b506104c360165481565b3480156105a257600080fd5b506105b66105b1366004613509565b610f3c565b005b3480156105c457600080fd5b506104c360125481565b3480156105da57600080fd5b506104c360155481565b3480156105f057600080fd5b506104c36105ff366004613526565b610f88565b34801561061057600080fd5b506006546104f1906001600160a01b031681565b34801561063057600080fd5b50601a5460405160ff9091168152602001610479565b34801561065257600080fd5b506105b6610661366004613509565b61100c565b34801561067257600080fd5b506104a261068136600461349c565b6111c2565b34801561069257600080fd5b506105b66111f9565b3480156106a757600080fd5b506105b66106b636600461353f565b611235565b3480156106c757600080fd5b506105b66106d636600461356f565b6112c0565b3480156106e757600080fd5b506105b66106f6366004613509565b611331565b34801561070757600080fd5b506104c361071636600461358c565b6113b9565b34801561072757600080fd5b506104c360115481565b34801561073d57600080fd5b506105b661074c3660046135bc565b61144a565b34801561075d57600080fd5b506004546104f190600160381b90046001600160a01b031681565b34801561078457600080fd5b506004546104a29062010000900460ff1681565b3480156107a457600080fd5b506105b66107b33660046135ea565b61149f565b3480156107c457600080fd5b506105b66107d336600461353f565b6115e9565b3480156107e457600080fd5b506105b66107f3366004613509565b611625565b34801561080457600080fd5b506104a2610813366004613509565b6001600160a01b03166000908152602b602052604090205460ff1690565b34801561083d57600080fd5b506105b661084c36600461353f565b611778565b34801561085d57600080fd5b50426104c3565b34801561087057600080fd5b506004546104a2906301000000900460ff1681565b34801561089157600080fd5b506104c360175481565b3480156108a757600080fd5b506104c3600a5481565b3480156108bd57600080fd5b506105b66117b4565b3480156108d257600080fd5b506104c36108e1366004613509565b611829565b3480156108f257600080fd5b506105b6611888565b34801561090757600080fd5b506104c3600b5481565b34801561091d57600080fd5b506004546104a2906601000000000000900460ff1681565b34801561094157600080fd5b506105b661095036600461353f565b6118fc565b34801561096157600080fd5b506104a2610970366004613509565b6001600160a01b03166000908152602c602052604090205460ff1690565b34801561099a57600080fd5b506105b66109a93660046135bc565b611938565b3480156109ba57600080fd5b506000546001600160a01b03166104f1565b3480156109d857600080fd5b506105b66109e7366004613509565b61198d565b3480156109f857600080fd5b506104c3600c5481565b348015610a0e57600080fd5b5061046c6119d9565b348015610a2357600080fd5b506105b6610a32366004613509565b6119e8565b348015610a4357600080fd5b506105b6610a5236600461356f565b611a34565b348015610a6357600080fd5b506104a2610a723660046134c8565b611a8a565b348015610a8357600080fd5b506104a2610a9236600461349c565b611ba3565b348015610aa357600080fd5b506104a2610ab236600461349c565b611c3e565b348015610ac357600080fd5b506004546104a290640100000000900460ff1681565b348015610ae557600080fd5b506104a2610af4366004613509565b60296020526000908152604090205460ff1681565b348015610b1557600080fd5b506104c3600d5481565b348015610b2b57600080fd5b506105b6610b3a3660046135bc565b611c4b565b348015610b4b57600080fd5b506104a2610b5a366004613509565b602d6020526000908152604090205460ff1681565b348015610b7b57600080fd5b506105b6610b8a366004613704565b611ca0565b348015610b9b57600080fd5b506104c3610baa366004613509565b602e6020526000908152604090205481565b348015610bc857600080fd5b506104c360135481565b348015610bde57600080fd5b506104a2610bed366004613509565b602a6020526000908152604090205460ff1681565b348015610c0e57600080fd5b506105b6610c1d366004613526565b611d31565b348015610c2e57600080fd5b506105b6610c3d3660046135bc565b611d60565b348015610c4e57600080fd5b506105b6610c5d36600461374b565b611dc8565b348015610c6e57600080fd5b506104c360145481565b348015610c8457600080fd5b506104a2610c93366004613509565b602b6020526000908152604090205460ff1681565b348015610cb457600080fd5b506104c3610cc3366004613806565b6001600160a01b03918216600090815260286020908152604080832093909416825291909152205490565b348015610cfa57600080fd5b506004546104a29060ff1681565b348015610d1457600080fd5b506105b6610d23366004613509565b611f7d565b348015610d3457600080fd5b506105b6610d43366004613834565b611ff6565b348015610d5457600080fd5b506005546104f1906001600160a01b031681565b348015610d7457600080fd5b506104c360105481565b348015610d8a57600080fd5b506105b6610d99366004613509565b612097565b348015610daa57600080fd5b506007546104f1906001600160a01b031681565b348015610dca57600080fd5b506004546104a290610100900460ff1681565b606060028054610dec906138ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610e18906138ba565b8015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b5050505050905090565b6000610e7c338484612181565b5060015b92915050565b6000610e938484846122a5565b6001600160a01b038416600090815260286020908152604080832033845290915290205482811015610f1d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610f318533610f2c868561390a565b612181565b506001949350505050565b6000546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f1490613921565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000601c54821115610fef5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f14565b6000610ff96124fa565b90506110058184613956565b9392505050565b6000546001600160a01b031633146110365760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000908152602c602052604090205460ff1661109e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610f14565b60005b6008548110156111be57816001600160a01b0316600882815481106110c8576110c8613978565b6000918252602090912001546001600160a01b0316036111ac57600880546110f29060019061390a565b8154811061110257611102613978565b600091825260209091200154600880546001600160a01b03909216918390811061112e5761112e613978565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602782526040808220829055602c90925220805460ff1916905560088054806111865761118661398e565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111b6816139a4565b9150506110a1565b5050565b3360008181526028602090815260408083206001600160a01b03871684529091528120549091610e7c918590610f2c9086906139bd565b6000546001600160a01b031633146112235760405162461bcd60e51b8152600401610f1490613921565b6004805466ff00000000000019169055565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610f1490613921565b600b829055600c81905561127161251d565b601960125460115461128391906139bd565b11156111be5760405162461bcd60e51b815260206004820152600c60248201526b08ccacae640e8de40d0d2ced60a31b6044820152606401610f14565b6000546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610f1490613921565b6004805460ff19168215159081179091556040519081527f5549bf390eb6c86582334885be666206392141c71e8520c4e2a4c76fa33482079060200160405180910390a150565b6000546001600160a01b0316331461135b5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000818152602b6020908152604091829020805460ff1916600190811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb91015b60405180910390a250565b6000601b5483111561140d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f14565b8161142e57600061141d84612579565b50959750610e809650505050505050565b600061143984612579565b50949750610e809650505050505050565b6000546001600160a01b031633146114745760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610f1490613921565b6004805462ff0000191662010000861515021790556016829055601a5460ff166114f490600a613ab9565b6114fe9084613ac8565b601455601a5460ff1661151290600a613ab9565b61151c9082613ac8565b601555601b5461152f906101f490613956565b60155411156115995760405162461bcd60e51b815260206004820152603060248201527f746f6b656e73546f537761702073686f756c64206265206d617820302e32252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610f14565b60408051851515815260208101849052908101849052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6000546001600160a01b031633146116135760405162461bcd60e51b8152600401610f1490613921565b600f829055601081905561127161251d565b6000546001600160a01b0316331461164f5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000908152602c602052604090205460ff16156116b85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f14565b6001600160a01b03811660009081526026602052604090205415611712576001600160a01b0381166000908152602660205260409020546116f890610f88565b6001600160a01b0382166000908152602760205260409020555b6001600160a01b03166000818152602c60205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b8152600401610f1490613921565b6009829055600a81905561127161251d565b6000546001600160a01b031633146117de5760405162461bcd60e51b8152600401610f1490613921565b476117f16000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156111be573d6000803e3d6000fd5b6001600160a01b0381166000908152602c602052604081205460ff161561186657506001600160a01b031660009081526027602052604090205490565b6001600160a01b038216600090815260266020526040902054610e8090610f88565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610f1490613921565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119265760405162461bcd60e51b8152600401610f1490613921565b600d829055600e81905561127161251d565b6000546001600160a01b031633146119625760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f1490613921565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610dec906138ba565b6000546001600160a01b03163314611a125760405162461bcd60e51b8152600401610f1490613921565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a5e5760405162461bcd60e51b8152600401610f1490613921565b60048054821580156401000000000264ff000000001990921691909117909155611a8757426019555b50565b600080546001600160a01b03163314611ab55760405162461bcd60e51b8152600401610f1490613921565b81600003611b28576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190613ae7565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015611b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9b9190613b00565b949350505050565b3360009081526028602090815260408083206001600160a01b038616845290915281205482811015611c255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f14565b611c343385610f2c868561390a565b5060019392505050565b6000610e7c3384846122a5565b6000546001600160a01b03163314611c755760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cca5760405162461bcd60e51b8152600401610f1490613921565b60005b8251811015611d2c576000838281518110611cea57611cea613978565b6020908102919091018101516001600160a01b03166000908152602b90915260409020805460ff19168415151790555080611d24816139a4565b915050611ccd565b505050565b6000546001600160a01b03163314611d5b5760405162461bcd60e51b8152600401610f1490613921565b601755565b6000546001600160a01b03163314611d8a5760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b039091166000908152602960209081526040808320805494151560ff199586168117909155602b9092529091208054909216179055565b6000546001600160a01b03163314611df25760405162461bcd60e51b8152600401610f1490613921565b60005b8151811015611d2c576000838281518110611e1257611e12613978565b602002602001015190506000611e2a601a5460ff1690565b611e3590600a613ab9565b848481518110611e4757611e47613978565b6020026020010151611e599190613ac8565b9050600080611e6783612579565b505050505050915091508160266000611e886000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002054611eb3919061390a565b60266000611ec96000546001600160a01b031690565b6001600160a01b0390811682526020808301939093526040918201600090812094909455871683526026909152902054611f049082906139bd565b6001600160a01b038581166000818152602660205260408120939093559154166001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5e91815260200190565b60405180910390a3505050508080611f75906139a4565b915050611df5565b6000546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166000818152602b60209081526040808320805460ff19169055519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb91016113ae565b6000546001600160a01b031633146120205760405162461bcd60e51b8152600401610f1490613921565b60005b828110156120915781602a600086868581811061204257612042613978565b90506020020160208101906120579190613509565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612089816139a4565b915050612023565b50505050565b6000546001600160a01b031633146120c15760405162461bcd60e51b8152600401610f1490613921565b6001600160a01b0381166121265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f14565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166121e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f14565b6001600160a01b0382166122445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f14565b6001600160a01b0383811660008181526028602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806001905060006014546122ba30611829565b101590506001600160a01b0386166123225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f14565b600454640100000000900460ff166123ab576001600160a01b03861660009081526029602052604090205460ff166123ab5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401610f14565b60045465010000000000900460ff1661249c576001600160a01b0386166000908152602d602052604090205460ff16156123e8576001925061247a565b6001600160a01b0385166000908152602d602052604090205460ff161561247a576004546002935062010000900460ff168015612441575060045460009061243f90600160381b90046001600160a01b0316611829565b115b801561244a5750805b801561246557504260165460185461246291906139bd565b11155b1561247a574260185560155461247a906125c1565b60045460ff161561249c57601754479081111561249a5761249a816125f3565b505b6001600160a01b0386166000908152602b602052604090205460ff16806124db57506001600160a01b0385166000908152602b602052604090205460ff165b156124e557600091505b6124f28686868587612809565b505050505050565b6000806000612507612c38565b90925090506125168183613956565b9250505090565b600f54600d54600b5460095461253391906139bd565b61253d91906139bd565b61254791906139bd565b601155601054600e54600c54600a5461256091906139bd565b61256a91906139bd565b61257491906139bd565b601255565b60008060008060008060008061258e89612dbb565b9398509196509450925090506125af89858585856125aa6124fa565b612e24565b91995097509550919395975091939597565b6004805465ff00000000001916650100000000001790556125e181612eb1565b506004805465ff000000000019169055565b60006064600c54836126059190613ac8565b61260f9190613956565b905060006064600e54846126239190613ac8565b61262d9190613956565b905060006064601054856126419190613ac8565b61264b9190613956565b6005546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461269d576040519150601f19603f3d011682016040523d82523d6000602084013e6126a2565b606091505b5050905080156126e0576040518481527ff305e858d42f169071401ed0dd44800b21105c60ac21f993b04a9c633f3a1cd49060200160405180910390a15b6006546040516000916001600160a01b03169085908381818185875af1925050503d806000811461272d576040519150601f19603f3d011682016040523d82523d6000602084013e612732565b606091505b505090508015612770576040518481527fa51eeb1d6bb8388ec33c0dbc101ed0bec9a1610e870f2a2756a01aed330e6e4c9060200160405180910390a15b6007546040516000916001600160a01b03169085908381818185875af1925050503d80600081146127bd576040519150601f19603f3d011682016040523d82523d6000602084013e6127c2565b606091505b505090508015612800576040518481527f3bacb32920256355f0bc7a6a134b2d79cd71e3984a0fa4b171d1aae8e192d9209060200160405180910390a15b50505050505050565b818186826129bd5761282e601e54602255601f54602355602054602455602154602555565b6128476000601e819055601f8190556020819055602155565b6001600160a01b0388166000908152602c602052604090205460ff16801561288857506001600160a01b0387166000908152602c602052604090205460ff16155b1561289d57612898888888613003565b61299b565b6001600160a01b0388166000908152602c602052604090205460ff161580156128de57506001600160a01b0387166000908152602c602052604090205460ff165b156128ee57612898888888613151565b6001600160a01b0388166000908152602c602052604090205460ff1615801561293057506001600160a01b0387166000908152602c602052604090205460ff16155b156129405761289888888861320e565b6001600160a01b0388166000908152602c602052604090205460ff16801561298057506001600160a01b0387166000908152602c602052604090205460ff165b1561299057612898888888613264565b61299b88888861320e565b6129b8602254601e55602354601f55602454602055602554602155565b612c2e565b6004546601000000000000900460ff1615612a4d578115806129df5750816002145b15612a4d576001600160a01b0381166000908152602a602052604090205460ff1615612a4d5760405162461bcd60e51b815260206004820152601760248201527f796f7572206163636f756e74206973206c6f636b65642e0000000000000000006044820152606401610f14565b8160011480612a5c5750816002145b15612a8757612a7e601e54602255601f54602355602054602455602154602555565b612847826132ea565b612aa4601e54602255601f54602355602054602455602154602555565b612abd6000601e819055601f8190556020819055602155565b6001600160a01b0388166000908152602c602052604090205460ff168015612afe57506001600160a01b0387166000908152602c602052604090205460ff16155b15612b1357612b0e888888613003565b612c11565b6001600160a01b0388166000908152602c602052604090205460ff16158015612b5457506001600160a01b0387166000908152602c602052604090205460ff165b15612b6457612b0e888888613151565b6001600160a01b0388166000908152602c602052604090205460ff16158015612ba657506001600160a01b0387166000908152602c602052604090205460ff16155b15612bb657612b0e88888861320e565b6001600160a01b0388166000908152602c602052604090205460ff168015612bf657506001600160a01b0387166000908152602c602052604090205460ff165b15612c0657612b0e888888613264565b612c1188888861320e565b612c2e602254601e55602354601f55602454602055602554602155565b5050505050505050565b601c54601b546000918291825b600854811015612d8a57826026600060088481548110612c6757612c67613978565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cd25750816027600060088481548110612cab57612cab613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ce857601c54601b54945094505050509091565b6026600060088381548110612cff57612cff613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d2e908461390a565b92506027600060088381548110612d4757612d47613978565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d76908361390a565b915080612d82816139a4565b915050612c45565b50601b54601c54612d9b9190613956565b821015612db257601c54601b549350935050509091565b90939092509050565b6000806000806000612dcc86613330565b9350612dd78661334c565b9250612de28661335e565b9150612ded86613370565b9050808284612dfc878a61390a565b612e06919061390a565b612e10919061390a565b612e1a919061390a565b9693955091935091565b6000808080612e33858b613ac8565b90506000612e41868b613ac8565b90506000612e4f878b613ac8565b90506000612e5d888b613ac8565b90506000612e6b898b613ac8565b90506000818385612e7c888a61390a565b612e86919061390a565b612e90919061390a565b612e9a919061390a565b959f959e50939c50939a5050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ee657612ee6613978565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190613b1d565b81600181518110612f7657612f76613978565b6001600160a01b039283166020918202929092010152600154612f9c9130911684612181565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fd5908590600090869030904290600401613b3a565b600060405180830381600087803b158015612fef57600080fd5b505af11580156124f2573d6000803e3d6000fd5b60008060008060008060008061301889612579565b9750975097509750975097509750975088602760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613059919061390a565b6001600160a01b038c1660009081526027602090815260408083209390935560269052205461308990899061390a565b6001600160a01b03808d1660009081526026602052604080822093909355908c16815220546130b99088906139bd565b6001600160a01b038b166000908152602660205260409020556130db83613382565b6130e482613382565b6130ed81613382565b6130f7868561340c565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161313c91815260200190565b60405180910390a35050505050505050505050565b60008060008060008060008061316689612579565b9750975097509750975097509750975087602660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546131a7919061390a565b6001600160a01b03808d16600090815260266020908152604080832094909455918d168152602790915220546131de9086906139bd565b6001600160a01b038b166000908152602760209081526040808320939093556026905220546130b99088906139bd565b60008060008060008060008061322389612579565b9750975097509750975097509750975087602660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054613089919061390a565b60008060008060008060008061327989612579565b9750975097509750975097509750975088602760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546132ba919061390a565b6001600160a01b038c166000908152602760209081526040808320939093556026905220546131a790899061390a565b8060010361330d57600954601e55600b54601f55600d54602055600f5460215550565b80600203611a8757600a54601e55600c54601f55600e5460205560105460215550565b60006064601e54836133429190613ac8565b610e809190613956565b60006064601f54836133429190613ac8565b60006064602054836133429190613ac8565b60006064602154836133429190613ac8565b600061338c6124fa565b9050600061339a8284613ac8565b306000908152602660205260409020549091506133b89082906139bd565b30600090815260266020908152604080832093909355602c9052205460ff1615611d2c57306000908152602760205260409020546133f79084906139bd565b30600090815260276020526040902055505050565b81601c5461341a919061390a565b601c55601d5461342b9082906139bd565b601d555050565b600060208083528351808285015260005b8181101561345f57858101830151858201604001528201613443565b81811115613471576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611a8757600080fd5b600080604083850312156134af57600080fd5b82356134ba81613487565b946020939093013593505050565b6000806000606084860312156134dd57600080fd5b83356134e881613487565b925060208401356134f881613487565b929592945050506040919091013590565b60006020828403121561351b57600080fd5b813561100581613487565b60006020828403121561353857600080fd5b5035919050565b6000806040838503121561355257600080fd5b50508035926020909101359150565b8015158114611a8757600080fd5b60006020828403121561358157600080fd5b813561100581613561565b6000806040838503121561359f57600080fd5b8235915060208301356135b181613561565b809150509250929050565b600080604083850312156135cf57600080fd5b82356135da81613487565b915060208301356135b181613561565b6000806000806080858703121561360057600080fd5b843561360b81613561565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561366457613664613625565b604052919050565b600067ffffffffffffffff82111561368657613686613625565b5060051b60200190565b600082601f8301126136a157600080fd5b813560206136b66136b18361366c565b61363b565b82815260059290921b840181019181810190868411156136d557600080fd5b8286015b848110156136f95780356136ec81613487565b83529183019183016136d9565b509695505050505050565b6000806040838503121561371757600080fd5b823567ffffffffffffffff81111561372e57600080fd5b61373a85828601613690565b92505060208301356135b181613561565b6000806040838503121561375e57600080fd5b823567ffffffffffffffff8082111561377657600080fd5b61378286838701613690565b935060209150818501358181111561379957600080fd5b85019050601f810186136137ac57600080fd5b80356137ba6136b18261366c565b81815260059190911b820183019083810190888311156137d957600080fd5b928401925b828410156137f7578335825292840192908401906137de565b80955050505050509250929050565b6000806040838503121561381957600080fd5b823561382481613487565b915060208301356135b181613487565b60008060006040848603121561384957600080fd5b833567ffffffffffffffff8082111561386157600080fd5b818601915086601f83011261387557600080fd5b81358181111561388457600080fd5b8760208260051b850101111561389957600080fd5b602092830195509350508401356138af81613561565b809150509250925092565b600181811c908216806138ce57607f821691505b6020821081036138ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561391c5761391c6138f4565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008261397357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016139b6576139b66138f4565b5060010190565b600082198211156139d0576139d06138f4565b500190565b600181815b80851115613a105781600019048211156139f6576139f66138f4565b80851615613a0357918102915b93841c93908002906139da565b509250929050565b600082613a2757506001610e80565b81613a3457506000610e80565b8160018114613a4a5760028114613a5457613a70565b6001915050610e80565b60ff841115613a6557613a656138f4565b50506001821b610e80565b5060208310610133831016604e8410600b8410161715613a93575081810a610e80565b613a9d83836139d5565b8060001904821115613ab157613ab16138f4565b029392505050565b600061100560ff841683613a18565b6000816000190483118215151615613ae257613ae26138f4565b500290565b600060208284031215613af957600080fd5b5051919050565b600060208284031215613b1257600080fd5b815161100581613561565b600060208284031215613b2f57600080fd5b815161100581613487565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b8a5784516001600160a01b031683529383019391830191600101613b65565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220048851d91743f385716c148c54b67fe9121b3fba781dfd21e731e22c57987cc664736f6c634300080d0033

Deployed Bytecode Sourcemap

9163:26946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13227:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14125:161;;;;;;;;;;-1:-1:-1;14125:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;14125:161:0;1072:187:1;15444:87:0;;;;;;;;;;-1:-1:-1;15513:10:0;;15444:87;;;1410:25:1;;;1398:2;1383:18;15444:87:0;1264:177:1;9228:41:0;;;;;;;;;;-1:-1:-1;9228:41:0;;;;-1:-1:-1;;;;;9228:41:0;;;;;;-1:-1:-1;;;;;1635:32:1;;;1617:51;;1605:2;1590:18;9228:41:0;1446:228:1;13498:95:0;;;;;;;;;;-1:-1:-1;13578:7:0;;13498:95;;10222:34;;;;;;;;;;;;;;;;10263:29;;;;;;;;;;;;;;;;10026:32;;;;;;;;;;;;;;;;14292:418;;;;;;;;;;-1:-1:-1;14292:418:0;;;;;:::i;:::-;;:::i;10648:39::-;;;;;;;;;;;;;;;;27965:119;;;;;;;;;;-1:-1:-1;27965:119:0;;;;;:::i;:::-;;:::i;:::-;;10434:96;;;;;;;;;;;;;;;;10617:24;;;;;;;;;;;;;;;;15983:250;;;;;;;;;;-1:-1:-1;15983:250:0;;;;;:::i;:::-;;:::i;9804:85::-;;;;;;;;;;-1:-1:-1;9804:85:0;;;;-1:-1:-1;;;;;9804:85:0;;;13409:83;;;;;;;;;;-1:-1:-1;13475:9:0;;13409:83;;13475:9;;;;2927:36:1;;2915:2;2900:18;13409:83:0;2785:184:1;16806:479:0;;;;;;;;;;-1:-1:-1;16806:479:0;;;;;:::i;:::-;;:::i;14716:215::-;;;;;;;;;;-1:-1:-1;14716:215:0;;;;;:::i;:::-;;:::i;19015:146::-;;;;;;;;;;;;;:::i;17993:219::-;;;;;;;;;;-1:-1:-1;17993:219:0;;;;;:::i;:::-;;:::i;17291:142::-;;;;;;;;;;-1:-1:-1;17291:142:0;;;;;:::i;:::-;;:::i;17439:157::-;;;;;;;;;;-1:-1:-1;17439:157:0;;;;;:::i;:::-;;:::i;15537:440::-;;;;;;;;;;-1:-1:-1;15537:440:0;;;;;:::i;:::-;;:::i;10336:91::-;;;;;;;;;;;;;;;;28991:128;;;;;;;;;;-1:-1:-1;28991:128:0;;;;;:::i;:::-;;:::i;9679:28::-;;;;;;;;;;-1:-1:-1;9679:28:0;;;;-1:-1:-1;;;9679:28:0;;-1:-1:-1;;;;;9679:28:0;;;9454:40;;;;;;;;;;-1:-1:-1;9454:40:0;;;;;;;;;;;28207:579;;;;;;;;;;-1:-1:-1;28207:579:0;;;;;:::i;:::-;;:::i;18449:213::-;;;;;;;;;;-1:-1:-1;18449:213:0;;;;;:::i;:::-;;:::i;16465:335::-;;;;;;;;;;-1:-1:-1;16465:335:0;;;;;:::i;:::-;;:::i;25649:121::-;;;;;;;;;;-1:-1:-1;25649:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;25737:25:0;25713:4;25737:25;;;:16;:25;;;;;;;;;25649:121;17765:222;;;;;;;;;;-1:-1:-1;17765:222:0;;;;;:::i;:::-;;:::i;9040:100::-;;;;;;;;;;-1:-1:-1;9117:15:0;9040:100;;9501:33;;;;;;;;;;-1:-1:-1;9501:33:0;;;;;;;;;;;10694:48;;;;;;;;;;;;;;;;10065:33;;;;;;;;;;;;;;;;27483:136;;;;;;;;;;;;;:::i;13599:198::-;;;;;;;;;;-1:-1:-1;13599:198:0;;;;;:::i;:::-;;:::i;8618:158::-;;;;;;;;;;;;;:::i;10105:31::-;;;;;;;;;;;;;;;;9629:32;;;;;;;;;;-1:-1:-1;9629:32:0;;;;;;;;;;;18218:225;;;;;;;;;;-1:-1:-1;18218:225:0;;;;;:::i;:::-;;:::i;15318:120::-;;;;;;;;;;-1:-1:-1;15318:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;15410:20:0;15386:4;15410:20;;;:11;:20;;;;;;;;;15318:120;29125:134;;;;;;;;;;-1:-1:-1;29125:134:0;;;;;:::i;:::-;;:::i;8373:89::-;;;;;;;;;;-1:-1:-1;8411:7:0;8448:6;-1:-1:-1;;;;;8448:6:0;8373:89;;27844:115;;;;;;;;;;-1:-1:-1;27844:115:0;;;;;:::i;:::-;;:::i;10143:32::-;;;;;;;;;;;;;;;;13316:87;;;;;;;;;;;;;:::i;28090:111::-;;;;;;;;;;-1:-1:-1;28090:111:0;;;;;:::i;:::-;;:::i;27645:176::-;;;;;;;;;;-1:-1:-1;27645:176:0;;;;;:::i;:::-;;:::i;27203:274::-;;;;;;;;;;-1:-1:-1;27203:274:0;;;;;:::i;:::-;;:::i;14937:375::-;;;;;;;;;;-1:-1:-1;14937:375:0;;;;;:::i;:::-;;:::i;13803:167::-;;;;;;;;;;-1:-1:-1;13803:167:0;;;;;:::i;:::-;;:::i;9541:32::-;;;;;;;;;;-1:-1:-1;9541:32:0;;;;;;;;;;;11589:46;;;;;;;;;;-1:-1:-1;11589:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10182:33;;;;;;;;;;;;;;;;29520:152;;;;;;;;;;-1:-1:-1;29520:152:0;;;;;:::i;:::-;;:::i;11800:58::-;;;;;;;;;;-1:-1:-1;11800:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29265:249;;;;;;;;;;-1:-1:-1;29265:249:0;;;;;:::i;:::-;;:::i;11865:54::-;;;;;;;;;;-1:-1:-1;11865:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;10537:31;;;;;;;;;;;;;;;;11642:43;;;;;;;;;;-1:-1:-1;11642:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18890:119;;;;;;;;;;-1:-1:-1;18890:119:0;;;;;:::i;:::-;;:::i;28815:170::-;;;;;;;;;;-1:-1:-1;28815:170:0;;;;;:::i;:::-;;:::i;35513:593::-;;;;;;;;;;-1:-1:-1;35513:593:0;;;;;:::i;:::-;;:::i;10575:35::-;;;;;;;;;;;;;;;;11692:49;;;;;;;;;;-1:-1:-1;11692:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13976:143;;;;;;;;;;-1:-1:-1;13976:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;14084:18:0;;;14057:7;14084:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13976:143;9372:35;;;;;;;;;;-1:-1:-1;9372:35:0;;;;;;;;17602:157;;;;;;;;;;-1:-1:-1;17602:157:0;;;;;:::i;:::-;;:::i;18668:216::-;;;;;;;;;;-1:-1:-1;18668:216:0;;;;;:::i;:::-;;:::i;9714:83::-;;;;;;;;;;-1:-1:-1;9714:83:0;;;;-1:-1:-1;;;;;9714:83:0;;;10299:30;;;;;;;;;;;;;;;;8784:244;;;;;;;;;;-1:-1:-1;8784:244:0;;;;;:::i;:::-;;:::i;9896:81::-;;;;;;;;;;-1:-1:-1;9896:81:0;;;;-1:-1:-1;;;;;9896:81:0;;;9414:33;;;;;;;;;;-1:-1:-1;9414:33:0;;;;;;;;;;;13227:83;13264:13;13297:5;13290:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13227:83;:::o;14125:161::-;14200:4;14217:39;7914:10;14240:7;14249:6;14217:8;:39::i;:::-;-1:-1:-1;14274:4:0;14125:161;;;;;:::o;14292:418::-;14398:4;14415:36;14425:6;14433:9;14444:6;14415:9;:36::i;:::-;-1:-1:-1;;;;;14489:19:0;;14462:24;14489:19;;;:11;:19;;;;;;;;7914:10;14489:33;;;;;;;;14541:26;;;;14533:79;;;;-1:-1:-1;;;14533:79:0;;9450:2:1;14533:79:0;;;9432:21:1;9489:2;9469:18;;;9462:30;9528:34;9508:18;;;9501:62;-1:-1:-1;;;9579:18:1;;;9572:38;9627:19;;14533:79:0;;;;;;;;;14623:57;14632:6;7914:10;14654:25;14673:6;14654:16;:25;:::i;:::-;14623:8;:57::i;:::-;-1:-1:-1;14698:4:0;;14292:418;-1:-1:-1;;;;14292:418:0:o;27965:119::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;28042:25:::1;:34:::0;;-1:-1:-1;;;;;;28042:34:0::1;-1:-1:-1::0;;;;;28042:34:0;;;::::1;::::0;;;::::1;::::0;;27965:119::o;15983:250::-;16049:7;16088;;16077;:18;;16069:73;;;;-1:-1:-1;;;16069:73:0;;10482:2:1;16069:73:0;;;10464:21:1;10521:2;10501:18;;;10494:30;10560:34;10540:18;;;10533:62;-1:-1:-1;;;10611:18:1;;;10604:40;10661:19;;16069:73:0;10280:406:1;16069:73:0;16153:19;16176:10;:8;:10::i;:::-;16153:33;-1:-1:-1;16204:21:0;16153:33;16204:7;:21;:::i;:::-;16197:28;15983:250;-1:-1:-1;;;15983:250:0:o;16806:479::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16888:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;16880:60;;;::::0;-1:-1:-1;;;16880:60:0;;11115:2:1;16880:60:0::1;::::0;::::1;11097:21:1::0;11154:2;11134:18;;;11127:30;11193:29;11173:18;;;11166:57;11240:18;;16880:60:0::1;10913:351:1::0;16880:60:0::1;16956:9;16951:327;16975:9;:16:::0;16971:20;::::1;16951:327;;;17033:7;-1:-1:-1::0;;;;;17017:23:0::1;:9;17027:1;17017:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17017:12:0::1;:23:::0;17013:254:::1;;17076:9;17086:16:::0;;:20:::1;::::0;17105:1:::1;::::0;17086:20:::1;:::i;:::-;17076:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17061:9:::1;:12:::0;;-1:-1:-1;;;;;17076:31:0;;::::1;::::0;17071:1;;17061:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;17061:46:0::1;-1:-1:-1::0;;;;;17061:46:0;;::::1;;::::0;;17126:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17165:11:::1;:20:::0;;;;:28;;-1:-1:-1;;17165:28:0::1;::::0;;17212:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17212:15:0;;;;;-1:-1:-1;;;;;;17212:15:0::1;::::0;;;;;16951:327:::1;16806:479:::0;:::o;17013:254::-:1;16993:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16951:327;;;;16806:479:::0;:::o;14716:215::-;7914:10;14804:4;14853:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14853:34:0;;;;;;;;;;14804:4;;14821:80;;14844:7;;14853:47;;14890:10;;14853:47;:::i;19015:146::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;19132:13:::1;:21:::0;;-1:-1:-1;;19132:21:0::1;::::0;;19015:146::o;17993:219::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;18071:15:::1;:21:::0;;;18103:16:::1;:23:::0;;;18137:9:::1;:7;:9::i;:::-;18185:2;18174:7;;18165:6;;:16;;;;:::i;:::-;:22;;18157:47;;;::::0;-1:-1:-1;;;18157:47:0;;12008:2:1;18157:47:0::1;::::0;::::1;11990:21:1::0;12047:2;12027:18;;;12020:30;-1:-1:-1;;;12066:18:1;;;12059:42;12118:18;;18157:47:0::1;11806:336:1::0;17291:142:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;17362:16:::1;:24:::0;;-1:-1:-1;;17362:24:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17402:23:::1;::::0;1212:41:1;;;17402:23:0::1;::::0;1200:2:1;1185:18;17402:23:0::1;;;;;;;17291:142:::0;:::o;17439:157::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17510:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:32;;-1:-1:-1;;17510:32:0::1;17538:4;17510:32:::0;;::::1;::::0;;;17558:30;;1212:41:1;;;17558:30:0::1;::::0;1185:18:1;17558:30:0::1;;;;;;;;17439:157:::0;:::o;15537:440::-;15627:7;15666;;15655;:18;;15647:62;;;;-1:-1:-1;;;15647:62:0;;12349:2:1;15647:62:0;;;12331:21:1;12388:2;12368:18;;;12361:30;12427:33;12407:18;;;12400:61;12478:18;;15647:62:0;12147:355:1;15647:62:0;15725:17;15720:250;;15760:15;15786:19;15797:7;15786:10;:19::i;:::-;-1:-1:-1;15759:46:0;;-1:-1:-1;15820:14:0;;-1:-1:-1;;;;;;;15820:14:0;15720:250;15869:23;15902:19;15913:7;15902:10;:19::i;:::-;-1:-1:-1;15867:54:0;;-1:-1:-1;15936:22:0;;-1:-1:-1;;;;;;;15936:22:0;28991:128;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29079:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:32;;-1:-1:-1;;29079:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28991:128::o;28207:579::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;28357:21:::1;:30:::0;;-1:-1:-1;;28357:30:0::1;::::0;;::::1;;;;::::0;;28398:22:::1;:48:::0;;;13475:9;;;;28508:14:::1;::::0;:2:::1;:14;:::i;:::-;28483:39;::::0;:24;:39:::1;:::i;:::-;28457:23;:65:::0;13475:9;;;;28561:14:::1;::::0;:2:::1;:14;:::i;:::-;28548:27;::::0;:12;:27:::1;:::i;:::-;28533:12;:42:::0;28610:7:::1;::::0;:13:::1;::::0;28620:3:::1;::::0;28610:13:::1;:::i;:::-;28594:12;;:29;;28586:89;;;::::0;-1:-1:-1;;;28586:89:0;;14265:2:1;28586:89:0::1;::::0;::::1;14247:21:1::0;14304:2;14284:18;;;14277:30;14343:34;14323:18;;;14316:62;-1:-1:-1;;;14394:18:1;;;14387:46;14450:19;;28586:89:0::1;14063:412:1::0;28586:89:0::1;28691:87;::::0;;14730:14:1;;14723:22;14705:41;;14777:2;14762:18;;14755:34;;;14805:18;;;14798:34;;;14863:2;14848:18;;14841:34;;;28691:87:0::1;::::0;14692:3:1;14677:19;28691:87:0::1;;;;;;;28207:579:::0;;;;:::o;18449:213::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;18525:13:::1;:19:::0;;;18555:14:::1;:21:::0;;;18587:9:::1;:7;:9::i;16465:335::-:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16550:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;16549:21;16541:61;;;::::0;-1:-1:-1;;;16541:61:0;;15088:2:1;16541:61:0::1;::::0;::::1;15070:21:1::0;15127:2;15107:18;;;15100:30;15166:29;15146:18;;;15139:57;15213:18;;16541:61:0::1;14886:351:1::0;16541:61:0::1;-1:-1:-1::0;;;;;16616:16:0;::::1;16635:1;16616:16:::0;;;:7:::1;:16;::::0;;;;;:20;16613:108:::1;;-1:-1:-1::0;;;;;16692:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;16672:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;16653:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;16613:108:::1;-1:-1:-1::0;;;;;16731:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;16731:27:0::1;16754:4;16731:27:::0;;::::1;::::0;;;16769:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;16769:23:0::1;::::0;;::::1;::::0;;16465:335::o;17765:222::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;17844:16:::1;:22:::0;;;17877:17:::1;:24:::0;;;17912:9:::1;:7;:9::i;27483:136::-:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;27545:21:::1;27585:7;8411::::0;8448:6;-1:-1:-1;;;;;8448:6:0;;8373:89;27585:7:::1;-1:-1:-1::0;;;;;27577:25:0::1;:34;27603:7;27577:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;13599:198:::0;-1:-1:-1;;;;;13689:20:0;;13665:7;13689:20;;;:11;:20;;;;;;;;13685:49;;;-1:-1:-1;;;;;;13718:16:0;;;;;:7;:16;;;;;;;13599:198::o;13685:49::-;-1:-1:-1;;;;;13772:16:0;;;;;;:7;:16;;;;;;13752:37;;:19;:37::i;8618:158::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;8725:1:::1;8709:6:::0;;8688:40:::1;::::0;-1:-1:-1;;;;;8709:6:0;;::::1;::::0;8688:40:::1;::::0;8725:1;;8688:40:::1;8766:1;8749:19:::0;;-1:-1:-1;;;;;;8749:19:0::1;::::0;;8618:158::o;18218:225::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;18298:17:::1;:23:::0;;;18332:18:::1;:25:::0;;;18368:9:::1;:7;:9::i;29125:134::-:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29216:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;29216:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29125:134::o;27844:115::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;27919:23:::1;:32:::0;;-1:-1:-1;;;;;;27919:32:0::1;-1:-1:-1::0;;;;;27919:32:0;;;::::1;::::0;;;::::1;::::0;;27844:115::o;13316:87::-;13355:13;13388:7;13381:14;;;;;:::i;28090:111::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;28163:21:::1;:30:::0;;-1:-1:-1;;;;;;28163:30:0::1;-1:-1:-1::0;;;;;28163:30:0;;;::::1;::::0;;;::::1;::::0;;28090:111::o;27645:176::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;27712:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;27712:21:0;;::::1;::::0;;;::::1;::::0;;;27744:70:::1;;27787:15;27770:14;:32:::0;27744:70:::1;27645:176:::0;:::o;27203:274::-;27302:10;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;27327:6:::1;27337:1;27327:11:::0;27324:91:::1;;27364:39;::::0;-1:-1:-1;;;27364:39:0;;27397:4:::1;27364:39;::::0;::::1;1617:51:1::0;-1:-1:-1;;;;;27364:24:0;::::1;::::0;::::1;::::0;1590:18:1;;27364:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27355:48;;27324:91;27433:36;::::0;-1:-1:-1;;;27433:36:0;;-1:-1:-1;;;;;15623:32:1;;;27433:36:0::1;::::0;::::1;15605:51:1::0;15672:18;;;15665:34;;;27433:23:0;::::1;::::0;::::1;::::0;15578:18:1;;27433:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27425:44:::0;27203:274;-1:-1:-1;;;;27203:274:0:o;14937:375::-;7914:10;15030:4;15074:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15074:34:0;;;;;;;;;;15127:35;;;;15119:85;;;;-1:-1:-1;;;15119:85:0;;16162:2:1;15119:85:0;;;16144:21:1;16201:2;16181:18;;;16174:30;16240:34;16220:18;;;16213:62;-1:-1:-1;;;16291:18:1;;;16284:35;16336:19;;15119:85:0;15960:401:1;15119:85:0;15215:67;7914:10;15238:7;15247:34;15266:15;15247:16;:34;:::i;15215:67::-;-1:-1:-1;15300:4:0;;14937:375;-1:-1:-1;;;14937:375:0:o;13803:167::-;13881:4;13898:42;7914:10;13922:9;13933:6;13898:9;:42::i;29520:152::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29620:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;29620:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29520:152::o;29265:249::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;29375:6:::1;29371:136;29388:8;:15;29385:1;:18;29371:136;;;29424:11;29438:8;29447:1;29438:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29464:21:0::1;;::::0;;;:16:::1;:21:::0;;;;;;:31;;-1:-1:-1;;29464:31:0::1;::::0;::::1;;;::::0;;-1:-1:-1;29405:3:0;::::1;::::0;::::1;:::i;:::-;;;;29371:136;;;;29265:249:::0;;:::o;18890:119::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;18969:23:::1;:32:::0;18890:119::o;28815:170::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28899:22:0;;::::1;;::::0;;;:13:::1;:22;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;28899:32:0;;::::1;::::0;::::1;::::0;;;28942:16:::1;:25:::0;;;;;;:35;;;;::::1;;::::0;;28815:170::o;35513:593::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;35701:6:::1;35697:401;35714:7;:14;35711:1;:17;35697:401;;;35749:11;35763:8;35772:1;35763:11;;;;;;;;:::i;:::-;;;;;;;35749:25;;35789:9;35817:10;13475:9:::0;;;;;13409:83;35817:10:::1;35813:14;::::0;:2:::1;:14;:::i;:::-;35801:7;35809:1;35801:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;35789:38;;35843:15;35860:23:::0;35893:16:::1;35904:4;35893:10;:16::i;:::-;35842:67;;;;;;;;;;35962:7;35943;:16;35951:7;8411::::0;8448:6;-1:-1:-1;;;;;8448:6:0;;8373:89;35951:7:::1;-1:-1:-1::0;;;;;35943:16:0::1;-1:-1:-1::0;;;;;35943:16:0::1;;;;;;;;;;;;;:26;;;;:::i;:::-;35924:7;:16;35932:7;8411::::0;8448:6;-1:-1:-1;;;;;8448:6:0;;8373:89;35932:7:::1;-1:-1:-1::0;;;;;35924:16:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;35924:16:0;;;:45;;;;35999:12;::::1;::::0;;:7:::1;:12:::0;;;;;;:30:::1;::::0;36014:15;;35999:30:::1;:::i;:::-;-1:-1:-1::0;;;;;35984:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;:45;;;;8448:6;;;-1:-1:-1;;;;;36049:37:0::1;;36070:15;36049:37;;;;1410:25:1::0;;1398:2;1383:18;;1264:177;36049:37:0::1;;;;;;;;35734:364;;;;35730:3;;;;;:::i;:::-;;;;35697:401;;17602:157:::0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17671:25:0;::::1;17699:5;17671:25:::0;;;:16:::1;:25;::::0;;;;;;;:33;;-1:-1:-1;;17671:33:0::1;::::0;;17720:31;1212:41:1;;;17720:31:0::1;::::0;1185:18:1;17720:31:0::1;1072:187:1::0;18668:216:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;18777:9:::1;18773:104;18792:19:::0;;::::1;18773:104;;;18859:6;18833:10;:23;18844:8;;18853:1;18844:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18833:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18833:23:0;:32;;-1:-1:-1;;18833:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18813:3;::::1;::::0;::::1;:::i;:::-;;;;18773:104;;;;18668:216:::0;;;:::o;8784:244::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7914:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8873:22:0;::::1;8865:73;;;::::0;-1:-1:-1;;;8865:73:0;;16922:2:1;8865:73:0::1;::::0;::::1;16904:21:1::0;16961:2;16941:18;;;16934:30;17000:34;16980:18;;;16973:62;-1:-1:-1;;;17051:18:1;;;17044:36;17097:19;;8865:73:0::1;16720:402:1::0;8865:73:0::1;8975:6;::::0;;8954:38:::1;::::0;-1:-1:-1;;;;;8954:38:0;;::::1;::::0;8975:6;::::1;::::0;8954:38:::1;::::0;::::1;9003:6;:17:::0;;-1:-1:-1;;;;;;9003:17:0::1;-1:-1:-1::0;;;;;9003:17:0;;;::::1;::::0;;;::::1;::::0;;8784:244::o;25778:337::-;-1:-1:-1;;;;;25871:19:0;;25863:68;;;;-1:-1:-1;;;25863:68:0;;17329:2:1;25863:68:0;;;17311:21:1;17368:2;17348:18;;;17341:30;17407:34;17387:18;;;17380:62;-1:-1:-1;;;17458:18:1;;;17451:34;17502:19;;25863:68:0;17127:400:1;25863:68:0;-1:-1:-1;;;;;25950:21:0;;25942:68;;;;-1:-1:-1;;;25942:68:0;;17734:2:1;25942:68:0;;;17716:21:1;17773:2;17753:18;;;17746:30;17812:34;17792:18;;;17785:62;-1:-1:-1;;;17863:18:1;;;17856:32;17905:19;;25942:68:0;17532:398:1;25942:68:0;-1:-1:-1;;;;;26023:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26075:32;;1410:25:1;;;26075:32:0;;1383:18:1;26075:32:0;;;;;;;25778:337;;;:::o;30181:1824::-;30261:15;30291:12;30306:4;30291:19;;30321:28;30380:23;;30352:24;30370:4;30352:9;:24::i;:::-;:51;;;-1:-1:-1;;;;;;30422:18:0;;30414:68;;;;-1:-1:-1;;;30414:68:0;;18137:2:1;30414:68:0;;;18119:21:1;18176:2;18156:18;;;18149:30;18215:34;18195:18;;;18188:62;-1:-1:-1;;;18266:18:1;;;18259:35;18311:19;;30414:68:0;17935:401:1;30414:68:0;30524:12;;;;;;;30520:114;;-1:-1:-1;;;;;30561:19:0;;;;;;:13;:19;;;;;;;;30553:69;;;;-1:-1:-1;;;30553:69:0;;18543:2:1;30553:69:0;;;18525:21:1;18582:2;18562:18;;;18555:30;18621:34;18601:18;;;18594:62;-1:-1:-1;;;18672:18:1;;;18665:36;18718:19;;30553:69:0;18341:402:1;30553:69:0;30675:21;;;;;;;30671:1055;;-1:-1:-1;;;;;30757:31:0;;;;;;:25;:31;;;;;;;;30754:653;;;30822:1;30809:14;;30754:653;;;-1:-1:-1;;;;;30881:29:0;;;;;;:25;:29;;;;;;;;30878:529;;;31023:21;;30944:1;;-1:-1:-1;31023:21:0;;;;;:75;;;;-1:-1:-1;31080:13:0;;31097:1;;31070:24;;-1:-1:-1;;;31080:13:0;;-1:-1:-1;;;;;31080:13:0;31070:9;:24::i;:::-;:28;31023:75;:124;;;;;31124:23;31023:124;:209;;;;;31217:15;31191:22;;31172:16;;:41;;;;:::i;:::-;:60;;31023:209;31019:373;;;31302:15;31283:16;:34;31359:12;;31344:28;;:14;:28::i;:::-;31491:16;;;;31488:227;;;31607:23;;31550:21;;31593:37;;31590:110;;;31655:25;31668:11;31655:12;:25::i;:::-;31509:206;31488:227;-1:-1:-1;;;;;31821:22:0;;;;;;:16;:22;;;;;;;;;:46;;-1:-1:-1;;;;;;31847:20:0;;;;;;:16;:20;;;;;;;;31821:46;31818:92;;;31893:5;31883:15;;31818:92;31948:49;31963:4;31968:2;31971:6;31978:7;31986:10;31948:14;:49::i;:::-;30250:1755;;;30181:1824;;;:::o;21141:160::-;21182:7;21203:15;21220;21239:19;:17;:19::i;:::-;21202:56;;-1:-1:-1;21202:56:0;-1:-1:-1;21276:17:0;21202:56;;21276:17;:::i;:::-;21269:24;;;;21141:160;:::o;16239:220::-;16343:13;;16323:17;;16305:15;;16286:16;;:34;;;;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;16277:6;:79;16437:14;;16416:18;;16397:16;;16377:17;;:36;;16397:16;16377:36;:::i;:::-;:57;;;;:::i;:::-;:74;;;;:::i;:::-;16367:7;:84;16239:220::o;19316:672::-;19375:15;19392:23;19417:12;19495:23;19520:12;19534:18;19618:20;19640:16;19731:20;19743:7;19731:11;:20::i;:::-;19669:82;;-1:-1:-1;19669:82:0;;-1:-1:-1;19669:82:0;-1:-1:-1;19669:82:0;-1:-1:-1;19669:82:0;-1:-1:-1;19797:74:0;19809:7;19669:82;;;;19860:10;:8;:10::i;:::-;19797:11;:74::i;:::-;19762:109;;-1:-1:-1;19762:109:0;-1:-1:-1;19762:109:0;-1:-1:-1;19316:672:0;;;;;;;;;:::o;27063:112::-;26152:21;:28;;-1:-1:-1;;26152:28:0;;;;;27136:31:::1;27153:13:::0;27136:16:::1;:31::i;:::-;-1:-1:-1::0;26203:21:0;:29;;-1:-1:-1;;26203:29:0;;;27063:112::o;26246:809::-;26300:22;26353:3;26334:16;;26325:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;26300:56;;26367:24;26424:3;26403:18;;26394:6;:27;;;;:::i;:::-;:33;;;;:::i;:::-;26367:60;;26438:20;26487:3;26470:14;;26461:6;:23;;;;:::i;:::-;:29;;;;:::i;:::-;26528:23;;26520:64;;26438:52;;-1:-1:-1;26502:12:0;;-1:-1:-1;;;;;26528:23:0;;;;26565:14;;26502:12;26520:64;26502:12;26520:64;26565:14;26528:23;26520:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26501:83;;;26598:7;26595:78;;;26627:34;;1410:25:1;;;26627:34:0;;1398:2:1;1383:18;26627:34:0;;;;;;;26595:78;26711:25;;26703:68;;26684:13;;-1:-1:-1;;;;;26711:25:0;;26750:16;;26684:13;26703:68;26684:13;26703:68;26750:16;26711:25;26703:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26683:88;;;26785:8;26782:83;;;26815:38;;1410:25:1;;;26815:38:0;;1398:2:1;1383:18;26815:38:0;;;;;;;26782:83;26903:21;;26895:60;;26876:13;;-1:-1:-1;;;;;26903:21:0;;26938:12;;26876:13;26895:60;26876:13;26895:60;26938:12;26903:21;26895:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26875:80;;;26969:8;26966:82;;;26999:37;;1410:25:1;;;26999:37:0;;1398:2:1;1383:18;26999:37:0;;;;;;;26966:82;26289:766;;;;;;26246:809;:::o;32013:770::-;32142:7;32150:9;32160:6;24739:9;24735:899;;24765:12;23556:14;;23536:17;:34;23600:13;;23581:16;:32;23645:15;;23624:18;:36;23688:11;;23671:14;:28;23495:212;24765:12;24792:14;23773:1;23756:14;:18;;;23785:13;:17;;;23813:15;:19;;;23843:11;:15;23713:153;24792:14;-1:-1:-1;;;;;32183:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;:46:::0;::::1;;;-1:-1:-1::0;;;;;;32207:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32206:23;32183:46;32179:597;;;32246:48;32268:6;32276:9;32287:6;32246:21;:48::i;:::-;32179:597;;;-1:-1:-1::0;;;;;32317:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;32316:20;:46:::0;::::1;;;-1:-1:-1::0;;;;;;32340:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32316:46;32312:464;;;32379:46;32399:6;32407:9;32418:6;32379:19;:46::i;32312:464::-;-1:-1:-1::0;;;;;32448:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;32447:20;:47:::0;::::1;;;-1:-1:-1::0;;;;;;32472:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32471:23;32447:47;32443:333;;;32511:44;32529:6;32537:9;32548:6;32511:17;:44::i;32443:333::-;-1:-1:-1::0;;;;;32577:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;:45:::0;::::1;;;-1:-1:-1::0;;;;;;32600:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32577:45;32573:203;;;32639:48;32661:6;32669:9;32680:6;32639:21;:48::i;32573:203::-;32720:44;32738:6;32746:9;32757:6;32720:17;:44::i;:::-;24837:13:::0;24486:17;;24469:14;:34;24530:16;;24514:13;:32;24575:18;;24557:15;:36;24622:14;;24608:11;:28;24427:217;24837:13;24735:899;;;25032:13;;;;;;;25029:184;;;25069:14;;;:32;;;25087:9;25100:1;25087:14;25069:32;25066:132;;;-1:-1:-1;;;;;25135:16:0;;;;;;:10;:16;;;;;;;;25134:17;25126:52;;;;-1:-1:-1;;;25126:52:0;;19160:2:1;25126:52:0;;;19142:21:1;19199:2;19179:18;;;19172:30;19238:25;19218:18;;;19211:53;19281:18;;25126:52:0;18958:347:1;25126:52:0;25256:9;25269:1;25256:14;:32;;;;25274:9;25287:1;25274:14;25256:32;25253:370;;;25309:12;23556:14;;23536:17;:34;23600:13;;23581:16;:32;23645:15;;23624:18;:36;23688:11;;23671:14;:28;23495:212;25309:12;25340:24;25354:9;25340:13;:24::i;25253:370::-;25510:12;23556:14;;23536:17;:34;23600:13;;23581:16;:32;23645:15;;23624:18;:36;23688:11;;23671:14;:28;23495:212;25510:12;25541:14;23773:1;23756:14;:18;;;23785:13;:17;;;23813:15;:19;;;23843:11;:15;23713:153;25541:14;-1:-1:-1;;;;;32183:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;:46:::0;::::1;;;-1:-1:-1::0;;;;;;32207:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32206:23;32183:46;32179:597;;;32246:48;32268:6;32276:9;32287:6;32246:21;:48::i;:::-;32179:597;;;-1:-1:-1::0;;;;;32317:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;32316:20;:46:::0;::::1;;;-1:-1:-1::0;;;;;;32340:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32316:46;32312:464;;;32379:46;32399:6;32407:9;32418:6;32379:19;:46::i;32312:464::-;-1:-1:-1::0;;;;;32448:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;32447:20;:47:::0;::::1;;;-1:-1:-1::0;;;;;;32472:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32471:23;32447:47;32443:333;;;32511:44;32529:6;32537:9;32548:6;32511:17;:44::i;32443:333::-;-1:-1:-1::0;;;;;32577:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;:45:::0;::::1;;;-1:-1:-1::0;;;;;;32600:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;32577:45;32573:203;;;32639:48;32661:6;32669:9;32680:6;32639:21;:48::i;32573:203::-;32720:44;32738:6;32746:9;32757:6;32720:17;:44::i;:::-;25594:13:::0;24486:17;;24469:14;:34;24530:16;;24514:13;:32;24575:18;;24557:15;:36;24622:14;;24608:11;:28;24427:217;25594:13;32013:770;;;;;;;;:::o;21309:552::-;21406:7;;21442;;21359;;;;;21466:283;21490:9;:16;21486:20;;21466:283;;;21556:7;21532;:21;21540:9;21550:1;21540:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21540:12:0;21532:21;;;;;;;;;;;;;:31;;:66;;;21591:7;21567;:21;21575:9;21585:1;21575:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21575:12:0;21567:21;;;;;;;;;;;;;:31;21532:66;21528:97;;;21608:7;;21617;;21600:25;;;;;;;21309:552;;:::o;21528:97::-;21660:7;:21;21668:9;21678:1;21668:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21668:12:0;21660:21;;;;;;;;;;;;;21650:31;;:7;:31;:::i;:::-;21640:41;;21716:7;:21;21724:9;21734:1;21724:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21724:12:0;21716:21;;;;;;;;;;;;;21706:31;;:7;:31;:::i;:::-;21696:41;-1:-1:-1;21508:3:0;;;;:::i;:::-;;;;21466:283;;;;21783:7;;21773;;:17;;;;:::i;:::-;21763:7;:27;21759:58;;;21800:7;;21809;;21792:25;;;;;;21309:552;;:::o;21759:58::-;21836:7;;21845;;-1:-1:-1;21309:552:0;-1:-1:-1;21309:552:0:o;19996:537::-;20056:23;20081:12;20095:18;20115:20;20137:16;20173:31;20196:7;20173:22;:31::i;:::-;20166:38;;20228:30;20250:7;20228:21;:30::i;:::-;20215:43;;20284:32;20308:7;20284:23;:32::i;:::-;20269:47;;20338:28;20358:7;20338:19;:28::i;:::-;20327:39;-1:-1:-1;20327:39:0;20425:12;20412:10;20395:14;20405:4;20395:7;:14;:::i;:::-;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:53;;;;:::i;:::-;20377:71;19996:537;;-1:-1:-1;19996:537:0;;-1:-1:-1;19996:537:0;:::o;20541:592::-;20696:7;;;;20752:21;20762:11;20752:7;:21;:::i;:::-;20734:39;-1:-1:-1;20784:12:0;20799:18;20806:11;20799:4;:18;:::i;:::-;20784:33;-1:-1:-1;20828:18:0;20849:24;20862:11;20849:10;:24;:::i;:::-;20828:45;-1:-1:-1;20884:20:0;20907:26;20922:11;20907:12;:26;:::i;:::-;20884:49;-1:-1:-1;20944:16:0;20963:22;20974:11;20963:8;:22;:::i;:::-;20944:41;-1:-1:-1;20996:23:0;20944:41;21052:12;21039:10;21022:14;21032:4;21022:7;:14;:::i;:::-;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:53;;;;:::i;:::-;21094:7;;;;-1:-1:-1;21120:4:0;;-1:-1:-1;20541:592:0;;-1:-1:-1;;;;;;;;;;;20541:592:0:o;29704:471::-;29794:16;;;29808:1;29794:16;;;;;;;;29770:21;;29794:16;;;;;;;;;;-1:-1:-1;29794:16:0;29770:40;;29839:4;29821;29826:1;29821:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29821:23:0;;;:7;;;;;;;;;;:23;;;;29865:15;;:22;;;-1:-1:-1;;;29865:22:0;;;;:15;;;;;:20;;:22;;;;;29821:7;;29865:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29855:4;29860:1;29855:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29855:32:0;;;:7;;;;;;;;;:32;29930:15;;29898:62;;29915:4;;29930:15;29948:11;29898:8;:62::i;:::-;29971:15;;:196;;-1:-1:-1;;;29971:196:0;;-1:-1:-1;;;;;29971:15:0;;;;:66;;:196;;30052:11;;29971:15;;30094:4;;30121;;30141:15;;29971:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34097:668;34200:15;34217:23;34242:12;34256:23;34281:12;34295:18;34315:20;34337:16;34357:19;34368:7;34357:10;:19::i;:::-;34199:177;;;;;;;;;;;;;;;;34423:7;34405;:15;34413:6;-1:-1:-1;;;;;34405:15:0;-1:-1:-1;;;;;34405:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34387:15:0;;;;;;:7;:15;;;;;;;;:43;;;;34459:7;:15;;;;:25;;34477:7;;34459:25;:::i;:::-;-1:-1:-1;;;;;34441:15:0;;;;;;;:7;:15;;;;;;:43;;;;34516:18;;;;;;;:36;;34537:15;;34516:36;:::i;:::-;-1:-1:-1;;;;;34495:18:0;;;;;;:7;:18;;;;;:57;34563:26;34578:10;34563:14;:26::i;:::-;34600:30;34617:12;34600:16;:30::i;:::-;34641:22;34654:8;34641:12;:22::i;:::-;34674:23;34686:4;34692;34674:11;:23::i;:::-;34730:9;-1:-1:-1;;;;;34713:44:0;34722:6;-1:-1:-1;;;;;34713:44:0;;34741:15;34713:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;34713:44:0;;;;;;;;34188:577;;;;;;;;34097:668;;;:::o;33409:680::-;33510:15;33527:23;33552:12;33566:23;33591:12;33605:18;33625:20;33647:16;33667:19;33678:7;33667:10;:19::i;:::-;33509:177;;;;;;;;;;;;;;;;33733:7;33715;:15;33723:6;-1:-1:-1;;;;;33715:15:0;-1:-1:-1;;;;;33715:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;33697:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;33772:18;;;;;:7;:18;;;;;:36;;33793:15;;33772:36;:::i;:::-;-1:-1:-1;;;;;33751:18:0;;;;;;:7;:18;;;;;;;;:57;;;;33840:7;:18;;;;:36;;33861:15;;33840:36;:::i;32791:610::-;32890:15;32907:23;32932:12;32946:23;32971:12;32985:18;33005:20;33027:16;33047:19;33058:7;33047:10;:19::i;:::-;32889:177;;;;;;;;;;;;;;;;33113:7;33095;:15;33103:6;-1:-1:-1;;;;;33095:15:0;-1:-1:-1;;;;;33095:15:0;;;;;;;;;;;;;:25;;;;:::i;34771:736::-;34874:15;34891:23;34916:12;34930:23;34955:12;34969:18;34989:20;35011:16;35031:19;35042:7;35031:10;:19::i;:::-;34873:177;;;;;;;;;;;;;;;;35097:7;35079;:15;35087:6;-1:-1:-1;;;;;35079:15:0;-1:-1:-1;;;;;35079:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;35061:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35133:7;:15;;;;:25;;35151:7;;35133:25;:::i;23872:549::-;23948:9;23961:1;23948:14;23945:469;;23996:16;;23979:14;:33;24043:15;;24027:13;:31;24091:17;;24073:15;:35;24137:13;;24123:11;:27;27645:176;:::o;23945:469::-;24196:9;24209:1;24196:14;24193:221;;24244:17;;24227:14;:34;24292:16;;24276:13;:32;24341:18;;24323:15;:36;24388:14;;24374:11;:28;23872:549;:::o;22925:138::-;22996:7;23050:5;23033:14;;23023:7;:24;;;;:::i;:::-;:32;;;;:::i;23069:136::-;23139:7;23192:5;23176:13;;23166:7;:23;;;;:::i;23211:140::-;23283:7;23338:5;23320:15;;23310:7;:25;;;;:::i;23357:132::-;23425:7;23476:5;23462:11;;23452:7;:21;;;;:::i;21867:346::-;21930:19;21953:10;:8;:10::i;:::-;21930:33;-1:-1:-1;21974:18:0;21995:24;21930:33;21995:10;:24;:::i;:::-;22071:4;22055:22;;;;:7;:22;;;;;;21974:45;;-1:-1:-1;22055:35:0;;21974:45;;22055:35;:::i;:::-;22046:4;22030:22;;;;:7;:22;;;;;;;;:60;;;;22104:11;:26;;;;;;22101:104;;;22186:4;22170:22;;;;:7;:22;;;;;;:35;;22195:10;;22170:35;:::i;:::-;22161:4;22145:22;;;;:7;:22;;;;;:60;21919:294;;21867:346;:::o;19167:141::-;19255:4;19245:7;;:14;;;;:::i;:::-;19235:7;:24;19283:10;;:17;;19296:4;;19283:17;:::i;:::-;19270:10;:30;-1:-1:-1;;19167:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1679:456::-;1756:6;1764;1772;1825:2;1813:9;1804:7;1800:23;1796:32;1793:52;;;1841:1;1838;1831:12;1793:52;1880:9;1867:23;1899:31;1924:5;1899:31;:::i;:::-;1949:5;-1:-1:-1;2006:2:1;1991:18;;1978:32;2019:33;1978:32;2019:33;:::i;:::-;1679:456;;2071:7;;-1:-1:-1;;;2125:2:1;2110:18;;;;2097:32;;1679:456::o;2140:247::-;2199:6;2252:2;2240:9;2231:7;2227:23;2223:32;2220:52;;;2268:1;2265;2258:12;2220:52;2307:9;2294:23;2326:31;2351:5;2326:31;:::i;2392:180::-;2451:6;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;-1:-1:-1;2543:23:1;;2392:180;-1:-1:-1;2392:180:1:o;2974:248::-;3042:6;3050;3103:2;3091:9;3082:7;3078:23;3074:32;3071:52;;;3119:1;3116;3109:12;3071:52;-1:-1:-1;;3142:23:1;;;3212:2;3197:18;;;3184:32;;-1:-1:-1;2974:248:1:o;3227:118::-;3313:5;3306:13;3299:21;3292:5;3289:32;3279:60;;3335:1;3332;3325:12;3350:241;3406:6;3459:2;3447:9;3438:7;3434:23;3430:32;3427:52;;;3475:1;3472;3465:12;3427:52;3514:9;3501:23;3533:28;3555:5;3533:28;:::i;3596:309::-;3661:6;3669;3722:2;3710:9;3701:7;3697:23;3693:32;3690:52;;;3738:1;3735;3728:12;3690:52;3774:9;3761:23;3751:33;;3834:2;3823:9;3819:18;3806:32;3847:28;3869:5;3847:28;:::i;:::-;3894:5;3884:15;;;3596:309;;;;;:::o;3910:382::-;3975:6;3983;4036:2;4024:9;4015:7;4011:23;4007:32;4004:52;;;4052:1;4049;4042:12;4004:52;4091:9;4078:23;4110:31;4135:5;4110:31;:::i;:::-;4160:5;-1:-1:-1;4217:2:1;4202:18;;4189:32;4230:30;4189:32;4230:30;:::i;4297:446::-;4380:6;4388;4396;4404;4457:3;4445:9;4436:7;4432:23;4428:33;4425:53;;;4474:1;4471;4464:12;4425:53;4513:9;4500:23;4532:28;4554:5;4532:28;:::i;:::-;4579:5;4631:2;4616:18;;4603:32;;-1:-1:-1;4682:2:1;4667:18;;4654:32;;4733:2;4718:18;4705:32;;-1:-1:-1;4297:446:1;-1:-1:-1;;;4297:446:1:o;4748:127::-;4809:10;4804:3;4800:20;4797:1;4790:31;4840:4;4837:1;4830:15;4864:4;4861:1;4854:15;4880:275;4951:2;4945:9;5016:2;4997:13;;-1:-1:-1;;4993:27:1;4981:40;;5051:18;5036:34;;5072:22;;;5033:62;5030:88;;;5098:18;;:::i;:::-;5134:2;5127:22;4880:275;;-1:-1:-1;4880:275:1:o;5160:183::-;5220:4;5253:18;5245:6;5242:30;5239:56;;;5275:18;;:::i;:::-;-1:-1:-1;5320:1:1;5316:14;5332:4;5312:25;;5160:183::o;5348:737::-;5402:5;5455:3;5448:4;5440:6;5436:17;5432:27;5422:55;;5473:1;5470;5463:12;5422:55;5509:6;5496:20;5535:4;5559:60;5575:43;5615:2;5575:43;:::i;:::-;5559:60;:::i;:::-;5653:15;;;5739:1;5735:10;;;;5723:23;;5719:32;;;5684:12;;;;5763:15;;;5760:35;;;5791:1;5788;5781:12;5760:35;5827:2;5819:6;5815:15;5839:217;5855:6;5850:3;5847:15;5839:217;;;5935:3;5922:17;5952:31;5977:5;5952:31;:::i;:::-;5996:18;;6034:12;;;;5872;;5839:217;;;-1:-1:-1;6074:5:1;5348:737;-1:-1:-1;;;;;;5348:737:1:o;6090:477::-;6180:6;6188;6241:2;6229:9;6220:7;6216:23;6212:32;6209:52;;;6257:1;6254;6247:12;6209:52;6297:9;6284:23;6330:18;6322:6;6319:30;6316:50;;;6362:1;6359;6352:12;6316:50;6385:61;6438:7;6429:6;6418:9;6414:22;6385:61;:::i;:::-;6375:71;;;6496:2;6485:9;6481:18;6468:32;6509:28;6531:5;6509:28;:::i;6572:1138::-;6690:6;6698;6751:2;6739:9;6730:7;6726:23;6722:32;6719:52;;;6767:1;6764;6757:12;6719:52;6807:9;6794:23;6836:18;6877:2;6869:6;6866:14;6863:34;;;6893:1;6890;6883:12;6863:34;6916:61;6969:7;6960:6;6949:9;6945:22;6916:61;:::i;:::-;6906:71;;6996:2;6986:12;;7051:2;7040:9;7036:18;7023:32;7080:2;7070:8;7067:16;7064:36;;;7096:1;7093;7086:12;7064:36;7119:24;;;-1:-1:-1;7174:4:1;7166:13;;7162:27;-1:-1:-1;7152:55:1;;7203:1;7200;7193:12;7152:55;7239:2;7226:16;7262:60;7278:43;7318:2;7278:43;:::i;7262:60::-;7356:15;;;7438:1;7434:10;;;;7426:19;;7422:28;;;7387:12;;;;7462:19;;;7459:39;;;7494:1;7491;7484:12;7459:39;7518:11;;;;7538:142;7554:6;7549:3;7546:15;7538:142;;;7620:17;;7608:30;;7571:12;;;;7658;;;;7538:142;;;7699:5;7689:15;;;;;;;6572:1138;;;;;:::o;7715:388::-;7783:6;7791;7844:2;7832:9;7823:7;7819:23;7815:32;7812:52;;;7860:1;7857;7850:12;7812:52;7899:9;7886:23;7918:31;7943:5;7918:31;:::i;:::-;7968:5;-1:-1:-1;8025:2:1;8010:18;;7997:32;8038:33;7997:32;8038:33;:::i;8108:750::-;8200:6;8208;8216;8269:2;8257:9;8248:7;8244:23;8240:32;8237:52;;;8285:1;8282;8275:12;8237:52;8325:9;8312:23;8354:18;8395:2;8387:6;8384:14;8381:34;;;8411:1;8408;8401:12;8381:34;8449:6;8438:9;8434:22;8424:32;;8494:7;8487:4;8483:2;8479:13;8475:27;8465:55;;8516:1;8513;8506:12;8465:55;8556:2;8543:16;8582:2;8574:6;8571:14;8568:34;;;8598:1;8595;8588:12;8568:34;8653:7;8646:4;8636:6;8633:1;8629:14;8625:2;8621:23;8617:34;8614:47;8611:67;;;8674:1;8671;8664:12;8611:67;8705:4;8697:13;;;;-1:-1:-1;8729:6:1;-1:-1:-1;;8770:20:1;;8757:34;8800:28;8757:34;8800:28;:::i;:::-;8847:5;8837:15;;;8108:750;;;;;:::o;8863:380::-;8942:1;8938:12;;;;8985;;;9006:61;;9060:4;9052:6;9048:17;9038:27;;9006:61;9113:2;9105:6;9102:14;9082:18;9079:38;9076:161;;9159:10;9154:3;9150:20;9147:1;9140:31;9194:4;9191:1;9184:15;9222:4;9219:1;9212:15;9076:161;;8863:380;;;:::o;9657:127::-;9718:10;9713:3;9709:20;9706:1;9699:31;9749:4;9746:1;9739:15;9773:4;9770:1;9763:15;9789:125;9829:4;9857:1;9854;9851:8;9848:34;;;9862:18;;:::i;:::-;-1:-1:-1;9899:9:1;;9789:125::o;9919:356::-;10121:2;10103:21;;;10140:18;;;10133:30;10199:34;10194:2;10179:18;;10172:62;10266:2;10251:18;;9919:356::o;10691:217::-;10731:1;10757;10747:132;;10801:10;10796:3;10792:20;10789:1;10782:31;10836:4;10833:1;10826:15;10864:4;10861:1;10854:15;10747:132;-1:-1:-1;10893:9:1;;10691:217::o;11269:127::-;11330:10;11325:3;11321:20;11318:1;11311:31;11361:4;11358:1;11351:15;11385:4;11382:1;11375:15;11401:127;11462:10;11457:3;11453:20;11450:1;11443:31;11493:4;11490:1;11483:15;11517:4;11514:1;11507:15;11533:135;11572:3;11593:17;;;11590:43;;11613:18;;:::i;:::-;-1:-1:-1;11660:1:1;11649:13;;11533:135::o;11673:128::-;11713:3;11744:1;11740:6;11737:1;11734:13;11731:39;;;11750:18;;:::i;:::-;-1:-1:-1;11786:9:1;;11673:128::o;12507:422::-;12596:1;12639:5;12596:1;12653:270;12674:7;12664:8;12661:21;12653:270;;;12733:4;12729:1;12725:6;12721:17;12715:4;12712:27;12709:53;;;12742:18;;:::i;:::-;12792:7;12782:8;12778:22;12775:55;;;12812:16;;;;12775:55;12891:22;;;;12851:15;;;;12653:270;;;12657:3;12507:422;;;;;:::o;12934:806::-;12983:5;13013:8;13003:80;;-1:-1:-1;13054:1:1;13068:5;;13003:80;13102:4;13092:76;;-1:-1:-1;13139:1:1;13153:5;;13092:76;13184:4;13202:1;13197:59;;;;13270:1;13265:130;;;;13177:218;;13197:59;13227:1;13218:10;;13241:5;;;13265:130;13302:3;13292:8;13289:17;13286:43;;;13309:18;;:::i;:::-;-1:-1:-1;;13365:1:1;13351:16;;13380:5;;13177:218;;13479:2;13469:8;13466:16;13460:3;13454:4;13451:13;13447:36;13441:2;13431:8;13428:16;13423:2;13417:4;13414:12;13410:35;13407:77;13404:159;;;-1:-1:-1;13516:19:1;;;13548:5;;13404:159;13595:34;13620:8;13614:4;13595:34;:::i;:::-;13665:6;13661:1;13657:6;13653:19;13644:7;13641:32;13638:58;;;13676:18;;:::i;:::-;13714:20;;12934:806;-1:-1:-1;;;12934:806:1:o;13745:140::-;13803:5;13832:47;13873:4;13863:8;13859:19;13853:4;13832:47;:::i;13890:168::-;13930:7;13996:1;13992;13988:6;13984:14;13981:1;13978:21;13973:1;13966:9;13959:17;13955:45;13952:71;;;14003:18;;:::i;:::-;-1:-1:-1;14043:9:1;;13890:168::o;15242:184::-;15312:6;15365:2;15353:9;15344:7;15340:23;15336:32;15333:52;;;15381:1;15378;15371:12;15333:52;-1:-1:-1;15404:16:1;;15242:184;-1:-1:-1;15242:184:1:o;15710:245::-;15777:6;15830:2;15818:9;15809:7;15805:23;15801:32;15798:52;;;15846:1;15843;15836:12;15798:52;15878:9;15872:16;15897:28;15919:5;15897:28;:::i;19310:251::-;19380:6;19433:2;19421:9;19412:7;19408:23;19404:32;19401:52;;;19449:1;19446;19439:12;19401:52;19481:9;19475:16;19500:31;19525:5;19500:31;:::i;19566:980::-;19828:4;19876:3;19865:9;19861:19;19907:6;19896:9;19889:25;19933:2;19971:6;19966:2;19955:9;19951:18;19944:34;20014:3;20009:2;19998:9;19994:18;19987:31;20038:6;20073;20067:13;20104:6;20096;20089:22;20142:3;20131:9;20127:19;20120:26;;20181:2;20173:6;20169:15;20155:29;;20202:1;20212:195;20226:6;20223:1;20220:13;20212:195;;;20291:13;;-1:-1:-1;;;;;20287:39:1;20275:52;;20382:15;;;;20347:12;;;;20323:1;20241:9;20212:195;;;-1:-1:-1;;;;;;;20463:32:1;;;;20458:2;20443:18;;20436:60;-1:-1:-1;;;20527:3:1;20512:19;20505:35;20424:3;19566:980;-1:-1:-1;;;19566:980:1:o

Swarm Source

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