ETH Price: $3,380.81 (+1.06%)

Token

OHMPAY (OHMPAY)
 

Overview

Max Total Supply

1,000,000,000,000,000 OHMPAY

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,582,753,496,420.463659555 OHMPAY

Value
$0.00
0x726823afd582d117ab96bdcc36eb45f4d1df2d1b
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OHMPAY

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-03
*/

// File: OHMiePay.sol

// Earn passive income in $OHM with $OHMPAY
// Website: https://ohmpay.xyz/
// Twitter: https://twitter.com/OHMPayDAO

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

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

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;// excluded dividend
        uint256 totalRealised;
    }

    IERC20 OHM = IERC20(0x383518188C0C6d7730D91b2c03a03C837814a899);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;// to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 10 * (10 ** 18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IDEXRouter(_router)
        : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = OHM.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(OHM);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = OHM.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
        && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            OHM.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }
/*
returns the  unpaid earnings
*/
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract OHMPAY is IERC20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address OHM = 0x383518188C0C6d7730D91b2c03a03C837814a899; // USDC
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "OHMPAY";
    string constant _symbol = "OHMPAY";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply.div(200); // 
	uint256 public _maxWallet = _totalSupply.div(40); // 

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public _isFree;

    uint256 liquidityFee = 700;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 400;
    uint256 marketingFee = 400;
    uint256 totalFee = 1500;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver=0xeb0443b9206311edAfe120acF5a6aD0b6062879e;
    address public marketingFeeReceiver=0x43FfD2D3570E48146fA4a661669455ddcd0e5BAf;

    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    mapping (address => bool) buyBacker;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 2000; // 0.005%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        address _dexRouter, address _marketingAddress, address _WETH
    ) Auth(msg.sender) {
        router = IDEXRouter(_dexRouter);
        WETH=_WETH;
        pair = IDEXFactory(router.factory()).createPair(_WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_dexRouter);
        distributorAddress = address(distributor);

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        buyBacker[msg.sender] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = _marketingAddress;

        approve(_dexRouter, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    modifier onlyBuybacker() { require(buyBacker[msg.sender] == true, ""); _; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
		 
		// Max  tx check
		address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
		bool isBuy=sender== pair|| sender == routerAddress;
        bool isSell=recipient== pair|| recipient == routerAddress;
		
		checkTxLimit(sender, amount);
		
		// Max wallet check excluding pair and router
		if (!isSell && !_isFree[recipient]){
			require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
		}
		
		// No swapping on buy and tx
		if (isSell) {
			if(shouldSwapBack()){ swapBack(); }
			if(shouldAutoBuyback()){ triggerAutoBuyback(); }
		}
        //  if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
//        emit Transfer(sender, recipient, amount);
        return true;
    }



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

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return totalFee; }
        if(selling){ return totalFee; }
        return totalFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        /**
         * if (launchedAtTimestamp + 1 days > block.timestamp) {
            return totalFee.mul(18000).div(feeDenominator);
        } else if (buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp) {
            uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
            uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
            return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
        }
        */
        return totalFee;
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);

        try distributor.deposit{value: amountETHReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountETHMarketing);
            
        

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && autoBuybackEnabled
        && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number // After N blocks from last buyback
        && address(this).balance >= autoBuybackAmount;
    }

    function triggerZeusBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }

    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }


    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public authorized {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
    }
	
	function setMaxWallet(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

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

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setFree(address holder) public onlyOwner {
        _isFree[holder] = true;
    }
    
    function unSetFree(address holder) public onlyOwner {
        _isFree[holder] = false;
    }
    
    function checkFree(address holder) public view onlyOwner returns(bool){
        return _isFree[holder];
    }

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/4);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dexRouter","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673383518188c0c6d7730d91b2c03a03c837814a8991790915560038054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560048054821661dead9081179091556005805483169055600680549092161790556200007a6009600a620006d1565b6200008d9066038d7ea4c68000620006e2565b600755620000ad60c86007546200052c60201b620015d01790919060201c565b600855620000cd60286007546200052c60201b620015d01790919060201c565b6009556102bc601055600060115561019060128190556013556105dc601455612710601555601680546001600160a01b031990811673eb0443b9206311edafe120acf5a6ad0b6062879e17909155601780549091167343ffd2d3570e48146fa4a661669455ddcd0e5baf179055600a6018556064601981905560c8601e55601f556107086021556022805460ff199081169091556207a120602b55602c8054909116600117905560075462000186906107d09062000704565b602d553480156200019657600080fd5b5060405162003bf838038062003bf8833981016040819052620001b99162000744565b60008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155601a805483166001600160a01b038881169182179092556003805490941691861691909117909255825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e91906200078e565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303816000875af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e591906200078e565b601b80546001600160a01b0319166001600160a01b03928316179055600754306000908152600b60209081526040808320601a8054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c46489260048082019392918290030181865afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a91906200078e565b600380546001600160a01b0319166001600160a01b03929092169190911790556040518390620003ba90620005b0565b6001600160a01b039091168152602001604051809103906000f080158015620003e7573d6000803e3d6000fd5b50602980546001600160a01b039283166001600160a01b03199182168117909255602a80548216909217909155336000818152600c60209081526040808320805460ff199081166001908117909255600d84528285208054821683179055601b5488168552600e845282852080548216831790553085528285208054821683179055600454881685528285208054821683179055858552602390935292208054909116909117905560168054831690911790556017805492851692909116919091179055600754620004bb90849062000543565b50601b54600754620004d7916001600160a01b03169062000543565b50600754336000818152600a6020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050620007ac565b60006200053a828462000704565b90505b92915050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200059f9086815260200190565b60405180910390a350600192915050565b610e2b8062002dcd83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000615578160001904821115620005f957620005f9620005be565b808516156200060757918102915b93841c9390800290620005d9565b509250929050565b6000826200062e575060016200053d565b816200063d575060006200053d565b8160018114620006565760028114620006615762000681565b60019150506200053d565b60ff841115620006755762000675620005be565b50506001821b6200053d565b5060208310610133831016604e8410600b8410161715620006a6575081810a6200053d565b620006b28383620005d4565b8060001904821115620006c957620006c9620005be565b029392505050565b60006200053a60ff8416836200061d565b6000816000190483118215151615620006ff57620006ff620005be565b500290565b6000826200072257634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200073f57600080fd5b919050565b6000806000606084860312156200075a57600080fd5b620007658462000727565b9250620007756020850162000727565b9150620007856040850162000727565b90509250925092565b600060208284031215620007a157600080fd5b6200053a8262000727565b61261180620007bc6000396000f3fe60806040526004361061037a5760003560e01c806382247ec0116101d1578063ca33e64c11610102578063f0b37c04116100a0578063f708a64f1161006f578063f708a64f14610a22578063f84ba65d14610a42578063f887ea4014610a62578063fe9fbb8014610a8257600080fd5b8063f0b37c04146109a2578063f1f3bca3146109c2578063f2fde38b146109e2578063f5cfec0a14610a0257600080fd5b8063dd62ed3e116100dc578063dd62ed3e146108f8578063df20fd491461093e578063e91f214e1461095e578063e96fada21461098257600080fd5b8063ca33e64c146108a3578063d51ed1c8146108c3578063d806d12f146108e357600080fd5b8063a8aa1b311161016f578063b210b06d11610149578063b210b06d14610842578063b6a5d7de14610857578063bf56b37114610877578063c6d2577d1461088d57600080fd5b8063a8aa1b31146107e2578063a9059cbb14610802578063ad5c46481461082257600080fd5b806395d89b41116101ab57806395d89b41146104065780639d1944f514610782578063a4b45c00146107a2578063a51af4c5146107c257600080fd5b806382247ec01461071a578063893d20e81461073057806389ef69f61461076257600080fd5b80632d48e896116102ab5780635d0044ca116102495780637088fb7f116102235780637088fb7f146106a457806370a08231146106b9578063715018a6146106ef5780637d1db4a51461070457600080fd5b80635d0044ca1461064a578063658d4b7f1461066a5780636ddd17131461068a57600080fd5b80633425c001116102855780633425c001146105d05780633bb8a8d4146105f0578063571ac8b01461060a5780635c85974f1461062a57600080fd5b80632d48e896146105655780632f54bf6e14610585578063313ce567146105b457600080fd5b80631161ae39116103185780632375ce40116102f25780632375ce40146104e057806323b872dd14610500578063296020e7146105205780632b112e491461055057600080fd5b80631161ae391461048b57806318160ddd146104ab578063201e7991146104c057600080fd5b806304a66b481161035457806304a66b48146103e657806306fdde031461040657806307c89fe81461043b578063095ea7b31461046b57600080fd5b806301339c21146103865780630445b6671461039d578063048c7baf146103c657600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610aa2565b005b3480156103a957600080fd5b506103b3602d5481565b6040519081526020015b60405180910390f35b3480156103d257600080fd5b5061039b6103e136600461217d565b610b21565b3480156103f257600080fd5b5061039b6104013660046121b6565b610b6f565b34801561041257600080fd5b5060408051808201825260068152654f484d50415960d01b602082015290516103bd91906121f1565b34801561044757600080fd5b5061045b61045636600461225e565b610be5565b60405190151581526020016103bd565b34801561047757600080fd5b5061045b61048636600461227b565b610c33565b34801561049757600080fd5b5061045b6104a63660046122a7565b610c9f565b3480156104b757600080fd5b506007546103b3565b3480156104cc57600080fd5b5061039b6104db3660046122a7565b610cb3565b3480156104ec57600080fd5b5061039b6104fb3660046122c9565b610ce3565b34801561050c57600080fd5b5061045b61051b3660046122f5565b610d38565b34801561052c57600080fd5b5061045b61053b36600461225e565b600f6020526000908152604090205460ff1681565b34801561055c57600080fd5b506103b3610dfc565b34801561057157600080fd5b5061039b6105803660046122a7565b610e4e565b34801561059157600080fd5b5061045b6105a036600461225e565b6000546001600160a01b0391821691161490565b3480156105c057600080fd5b50604051600981526020016103bd565b3480156105dc57600080fd5b5061039b6105eb36600461225e565b610edd565b3480156105fc57600080fd5b5060225461045b9060ff1681565b34801561061657600080fd5b5061045b61062536600461225e565b610f28565b34801561063657600080fd5b5061039b610645366004612336565b610f3c565b34801561065657600080fd5b5061039b610665366004612336565b610f82565b34801561067657600080fd5b5061039b61068536600461234f565b610fc8565b34801561069657600080fd5b50602c5461045b9060ff1681565b3480156106b057600080fd5b5061039b611018565b3480156106c557600080fd5b506103b36106d436600461225e565b6001600160a01b03166000908152600a602052604090205490565b3480156106fb57600080fd5b5061039b611075565b34801561071057600080fd5b506103b360085481565b34801561072657600080fd5b506103b360095481565b34801561073c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103bd565b34801561076e57600080fd5b5061039b61077d36600461225e565b6110e4565b34801561078e57600080fd5b5061039b61079d366004612336565b611132565b3480156107ae57600080fd5b5061039b6107bd366004612384565b61116b565b3480156107ce57600080fd5b50602a5461074a906001600160a01b031681565b3480156107ee57600080fd5b50601b5461074a906001600160a01b031681565b34801561080e57600080fd5b5061045b61081d36600461227b565b6111be565b34801561082e57600080fd5b5060035461074a906001600160a01b031681565b34801561084e57600080fd5b5061039b6111cb565b34801561086357600080fd5b5061039b61087236600461225e565b6111f7565b34801561088357600080fd5b506103b3601c5481565b34801561089957600080fd5b506103b3601d5481565b3480156108af57600080fd5b5060165461074a906001600160a01b031681565b3480156108cf57600080fd5b506103b36108de366004612336565b611248565b3480156108ef57600080fd5b506014546103b3565b34801561090457600080fd5b506103b3610913366004612384565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561094a57600080fd5b5061039b6109593660046123bd565b61128c565b34801561096a57600080fd5b506103b36fffffffffffffffffffffffffffffffff81565b34801561098e57600080fd5b5060175461074a906001600160a01b031681565b3480156109ae57600080fd5b5061039b6109bd36600461225e565b6112c8565b3480156109ce57600080fd5b506103b36109dd3660046123d9565b611313565b3480156109ee57600080fd5b5061039b6109fd36600461225e565b611348565b348015610a0e57600080fd5b5061039b610a1d3660046123f4565b6113de565b348015610a2e57600080fd5b5061039b610a3d36600461234f565b61145e565b348015610a4e57600080fd5b5061039b610a5d36600461234f565b611562565b348015610a6e57600080fd5b50601a5461074a906001600160a01b031681565b348015610a8e57600080fd5b5061045b610a9d36600461225e565b6115b2565b610aab336115b2565b610ad05760405162461bcd60e51b8152600401610ac790612417565b60405180910390fd5b601c5415610b175760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610ac7565b43601c5542601d55565b610b2a336115b2565b610b465760405162461bcd60e51b8152600401610ac790612417565b6022805460ff191694151594909417909355602491909155600060255560265560275543602855565b610b78336115b2565b610b945760405162461bcd60e51b8152600401610ac790612417565b6010859055601184905560128390556013829055610bbe82610bb8858189896115dc565b906115dc565b6014556015819055610bd1600482612452565b60145410610bde57600080fd5b5050505050565b600080546001600160a01b03163314610c105760405162461bcd60e51b8152600401610ac790612474565b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c8e9086815260200190565b60405180910390a350600192915050565b600082610cab83611248565b119392505050565b610cbc336115b2565b610cd85760405162461bcd60e51b8152600401610ac790612417565b601891909155601955565b610cec336115b2565b610d085760405162461bcd60e51b8152600401610ac790612417565b6002610d148385612452565b11158015610d2157508183115b610d2a57600080fd5b601e92909255601f55602155565b6007546001600160a01b0384166000908152600b60209081526040808320338452909152812054909114610de7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610dc29184906115e8565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610df2848484611614565b90505b9392505050565b6005546001600160a01b03166000908152600a6020526040812054610e49906004546001600160a01b03166000908152600a6020526040902054610e439060075490611a35565b90611a35565b905090565b610e57336115b2565b610e735760405162461bcd60e51b8152600401610ac790612417565b6029546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ec157600080fd5b505af1158015610ed5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f075760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610f3682600754610c33565b92915050565b610f45336115b2565b610f615760405162461bcd60e51b8152600401610ac790612417565b6103e8600754610f719190612452565b811015610f7d57600080fd5b600855565b610f8b336115b2565b610fa75760405162461bcd60e51b8152600401610ac790612417565b6103e8600754610fb79190612452565b811015610fc357600080fd5b600955565b610fd1336115b2565b610fed5760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610ac790612474565b6040514790339082156108fc029083906000818181858888f19350505050158015611071573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461109f5760405162461bcd60e51b8152600401610ac790612474565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b0316331461110e5760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b61113b336115b2565b6111575760405162461bcd60e51b8152600401610ac790612417565b620b71b0811061116657600080fd5b602b55565b611174336115b2565b6111905760405162461bcd60e51b8152600401610ac790612417565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000610df5338484611614565b6111d4336115b2565b6111f05760405162461bcd60e51b8152600401610ac790612417565b6000602055565b6000546001600160a01b031633146112215760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610f36611255610dfc565b601b546001600160a01b03166000908152600a60205260409020546112869061127f906002611a41565b8590611a41565b906115d0565b611295336115b2565b6112b15760405162461bcd60e51b8152600401610ac790612417565b602c805460ff191692151592909217909155602d55565b6000546001600160a01b031633146112f25760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600043601c5460016113259190612494565b1061133257505060145490565b811561134057505060145490565b505060145490565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610ac790612474565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6113e7336115b2565b6114035760405162461bcd60e51b8152600401610ac790612417565b60045461141a9083906001600160a01b0316611a4d565b8015611071574260209081556021546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a910160405180910390a15050565b611467336115b2565b6114835760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03821630148015906114aa5750601b546001600160a01b03838116911614155b6114b357600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561151957602954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610ea7565b6029546001600160a01b038381166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610ea7565b61156b336115b2565b6115875760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610df58284612452565b6000610df58284612494565b6000818484111561160c5760405162461bcd60e51b8152600401610ac791906121f1565b505050900390565b602e5460009060ff16156116345761162d848484611b56565b9050610df5565b601b54737a250d5630b4cf539739df2c5dacb4c659f2488d906000906001600160a01b038781169116148061167a5750816001600160a01b0316866001600160a01b0316145b601b549091506000906001600160a01b03878116911614806116ad5750826001600160a01b0316866001600160a01b0316145b90506116b98786611bf9565b801580156116e057506001600160a01b0386166000908152600f602052604090205460ff16155b15611759576009546001600160a01b0387166000908152600a602052604090205461170c908790612494565b106117595760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610ac7565b801561178957611767611c62565b1561177457611774611cb1565b61177c612010565b156117895761178961206b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038a166000908152600a90915291909120546117db9187906115e8565b6001600160a01b0388166000908152600a6020908152604080832093909355600c90529081205460ff1615611810578561181b565b61181b8888886120b2565b6001600160a01b0388166000908152600a602052604090205490915061184190826115dc565b6001600160a01b038089166000908152600a6020908152604080832094909455918b168152600e909152205460ff166118e5576029546001600160a01b038981166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118d257600080fd5b505af19250505080156118e3575060015b505b6001600160a01b0387166000908152600e602052604090205460ff16611976576029546001600160a01b038881166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561196357600080fd5b505af1925050508015611974575060015b505b602954602b546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119ae9160040190815260200190565b600060405180830381600087803b1580156119c857600080fd5b505af19250505080156119d9575060015b50866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a1f91815260200190565b60405180910390a3506001979650505050505050565b6000610df582846124ac565b6000610df582846124c3565b602e805460ff19166001179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b031691839150600090611a9b57611a9b6124e2565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611acf57611acf6124e2565b6001600160a01b039283166020918202929092010152601a5460405163b6f9de9560e01b815291169063b6f9de95908590611b159060009086908890429060040161253c565b6000604051808303818588803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b5050602e805460ff19169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611ba79184906115e8565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611bd690836115dc565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b60085481111580611c2257506001600160a01b0382166000908152600d602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ac7565b601b546000906001600160a01b03163314801590611c835750602e5460ff16155b8015611c915750602c5460ff165b8015610e49575050602d54306000908152600a6020526040902054101590565b602e805460ff19166001179055601854601954600091611cd091610c9f565b611cdc57601054611cdf565b60005b90506000611d03600261128660145461128686602d54611a4190919063ffffffff16565b90506000611d1c82602d54611a3590919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d5657611d566124e2565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611d8757611d876124e2565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac94790611dd1908690600090879030904290600401612571565b600060405180830381600087803b158015611deb57600080fd5b505af1158015611dff573d6000803e3d6000fd5b505050506000611e188247611a3590919063ffffffff16565b90506000611e33611e2a8860026115d0565b60145490611a35565b90506000611e4860026112868481878d611a41565b90506000611e658361128660125487611a4190919063ffffffff16565b90506000611e828461128660135488611a4190919063ffffffff16565b9050602960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ed457600080fd5b505af193505050508015611ee6575060015b506017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f21573d6000803e3d6000fd5b508815611ffa57601a5460165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af1158015611f98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fbd91906125ad565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805460ff191690555050505050505050565b601b546000906001600160a01b031633148015906120315750602e5460ff16155b801561203f575060225460ff165b801561205a5750436027546028546120579190612494565b11155b8015610e4957505060265447101590565b60265460045461208491906001600160a01b0316611a4d565b43602855602654602554612097916115dc565b602581905560245410156120b0576022805460ff191690555b565b601554601b5460009182916120e49190611286906120dd906001600160a01b03898116911614611313565b8690611a41565b306000908152600a602052604090205490915061210190826115dc565b306000818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121529085815260200190565b60405180910390a36121648382611a35565b95945050505050565b80358015158114610c2e57600080fd5b6000806000806080858703121561219357600080fd5b61219c8561216d565b966020860135965060408601359560600135945092505050565b600080600080600060a086880312156121ce57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561221e57858101830151858201604001528201612202565b81811115612230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461225b57600080fd5b50565b60006020828403121561227057600080fd5b8135610df581612246565b6000806040838503121561228e57600080fd5b823561229981612246565b946020939093013593505050565b600080604083850312156122ba57600080fd5b50508035926020909101359150565b6000806000606084860312156122de57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561230a57600080fd5b833561231581612246565b9250602084013561232581612246565b929592945050506040919091013590565b60006020828403121561234857600080fd5b5035919050565b6000806040838503121561236257600080fd5b823561236d81612246565b915061237b6020840161216d565b90509250929050565b6000806040838503121561239757600080fd5b82356123a281612246565b915060208301356123b281612246565b809150509250929050565b600080604083850312156123d057600080fd5b6122998361216d565b6000602082840312156123eb57600080fd5b610df58261216d565b6000806040838503121561240757600080fd5b8235915061237b6020840161216d565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261246f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600082198211156124a7576124a761243c565b500190565b6000828210156124be576124be61243c565b500390565b60008160001904831182151516156124dd576124dd61243c565b500290565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156125315781516001600160a01b03168752958201959082019060010161250c565b509495945050505050565b84815260806020820152600061255560808301866124f8565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061259060a08301866124f8565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156125c257600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122081df88798e38e1b5296d70a729361b655cd53e27ce0bf9536a09839fdaa2985664736f6c634300080a00336080604052600180546001600160a01b031990811673383518188c0c6d7730d91b2c03a03c837814a899179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55678ac7230489e80000600e5534801561007d57600080fd5b50604051610e2b380380610e2b83398101604081905261009c916100f6565b6001600160a01b0381166100c457737a250d5630b4cf539739df2c5dacb4c659f2488d6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610126565b60006020828403121561010857600080fd5b81516001600160a01b038116811461011f57600080fd5b9392505050565b610cf6806101356000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610ace565b610285565b005b34801561013957600080fd5b506100f8610148366004610af8565b6103fd565b34801561015957600080fd5b5061012b610168366004610b13565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610af8565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106d7565b34801561025b57600080fd5b5061012b61026a366004610b35565b6106e2565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c3826107e2565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b1561038257610382826108fe565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a13565b90610a26565b6008556001600160a01b03821660009081526007602052604090208190556103da81610a32565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610a32565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610a13565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052c9190610b4e565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061057257610572610b67565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105a2576105a2610b67565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105e890600090869030904290600401610b7d565b6000604051808303818588803b15801561060157600080fd5b505af1158015610615573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061069593508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190610b4e565b90610a13565b6009549091506106a59082610a26565b600955600854600c546106cf916106c6916106c09085610a55565b90610a61565b600b5490610a26565b600b55505050565b6106e0336107e2565b565b6000546001600160a01b031633146106f957600080fd5b60045480610705575050565b6000805a905060005b848310801561071c57508381105b156107db5783600f5410610730576000600f555b6107626004600f548154811061074857610748610b67565b6000918252602090912001546001600160a01b0316610a6d565b15610799576107996004600f548154811061077f5761077f610b67565b6000918252602090912001546001600160a01b03166107e2565b6107ae6107a75a8490610a13565b8490610a26565b92505a600f805491935060006107c383610bfd565b919050555080806107d390610bfd565b91505061070e565b5050505050565b6001600160a01b0381166000908152600760205260409020546108025750565b600061080d826103fd565b905080156108fa57600a546108229082610a26565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c9190610c18565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108d09082610a26565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610a32565b5050565b6004805461090e90600190610c3a565b8154811061091e5761091e610b67565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061095c5761095c610b67565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109a890600190610c3a565b815481106109b8576109b8610b67565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806109ee576109ee610c51565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a1f8284610c3a565b9392505050565b6000610a1f8284610c67565b6000610a4f600c546106c0600b5485610a5590919063ffffffff16565b92915050565b6000610a1f8284610c7f565b6000610a1f8284610c9e565b600d546001600160a01b03821660009081526006602052604081205490914291610a979190610c67565b108015610a4f5750600e54610aab836103fd565b1192915050565b80356001600160a01b0381168114610ac957600080fd5b919050565b60008060408385031215610ae157600080fd5b610aea83610ab2565b946020939093013593505050565b600060208284031215610b0a57600080fd5b610a1f82610ab2565b60008060408385031215610b2657600080fd5b50508035926020909101359150565b600060208284031215610b4757600080fd5b5035919050565b600060208284031215610b6057600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610bc75784516001600160a01b031683529383019391830191600101610ba2565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415610c1157610c11610be7565b5060010190565b600060208284031215610c2a57600080fd5b81518015158114610a1f57600080fd5b600082821015610c4c57610c4c610be7565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610c7a57610c7a610be7565b500190565b6000816000190483118215151615610c9957610c99610be7565b500290565b600082610cbb57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122027425fc92cc5219c59cf3d29deea88a1d554e71cddddee2f46cafcc1aac99ac164736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000043ffd2d3570e48146fa4a661669455ddcd0e5baf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806382247ec0116101d1578063ca33e64c11610102578063f0b37c04116100a0578063f708a64f1161006f578063f708a64f14610a22578063f84ba65d14610a42578063f887ea4014610a62578063fe9fbb8014610a8257600080fd5b8063f0b37c04146109a2578063f1f3bca3146109c2578063f2fde38b146109e2578063f5cfec0a14610a0257600080fd5b8063dd62ed3e116100dc578063dd62ed3e146108f8578063df20fd491461093e578063e91f214e1461095e578063e96fada21461098257600080fd5b8063ca33e64c146108a3578063d51ed1c8146108c3578063d806d12f146108e357600080fd5b8063a8aa1b311161016f578063b210b06d11610149578063b210b06d14610842578063b6a5d7de14610857578063bf56b37114610877578063c6d2577d1461088d57600080fd5b8063a8aa1b31146107e2578063a9059cbb14610802578063ad5c46481461082257600080fd5b806395d89b41116101ab57806395d89b41146104065780639d1944f514610782578063a4b45c00146107a2578063a51af4c5146107c257600080fd5b806382247ec01461071a578063893d20e81461073057806389ef69f61461076257600080fd5b80632d48e896116102ab5780635d0044ca116102495780637088fb7f116102235780637088fb7f146106a457806370a08231146106b9578063715018a6146106ef5780637d1db4a51461070457600080fd5b80635d0044ca1461064a578063658d4b7f1461066a5780636ddd17131461068a57600080fd5b80633425c001116102855780633425c001146105d05780633bb8a8d4146105f0578063571ac8b01461060a5780635c85974f1461062a57600080fd5b80632d48e896146105655780632f54bf6e14610585578063313ce567146105b457600080fd5b80631161ae39116103185780632375ce40116102f25780632375ce40146104e057806323b872dd14610500578063296020e7146105205780632b112e491461055057600080fd5b80631161ae391461048b57806318160ddd146104ab578063201e7991146104c057600080fd5b806304a66b481161035457806304a66b48146103e657806306fdde031461040657806307c89fe81461043b578063095ea7b31461046b57600080fd5b806301339c21146103865780630445b6671461039d578063048c7baf146103c657600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610aa2565b005b3480156103a957600080fd5b506103b3602d5481565b6040519081526020015b60405180910390f35b3480156103d257600080fd5b5061039b6103e136600461217d565b610b21565b3480156103f257600080fd5b5061039b6104013660046121b6565b610b6f565b34801561041257600080fd5b5060408051808201825260068152654f484d50415960d01b602082015290516103bd91906121f1565b34801561044757600080fd5b5061045b61045636600461225e565b610be5565b60405190151581526020016103bd565b34801561047757600080fd5b5061045b61048636600461227b565b610c33565b34801561049757600080fd5b5061045b6104a63660046122a7565b610c9f565b3480156104b757600080fd5b506007546103b3565b3480156104cc57600080fd5b5061039b6104db3660046122a7565b610cb3565b3480156104ec57600080fd5b5061039b6104fb3660046122c9565b610ce3565b34801561050c57600080fd5b5061045b61051b3660046122f5565b610d38565b34801561052c57600080fd5b5061045b61053b36600461225e565b600f6020526000908152604090205460ff1681565b34801561055c57600080fd5b506103b3610dfc565b34801561057157600080fd5b5061039b6105803660046122a7565b610e4e565b34801561059157600080fd5b5061045b6105a036600461225e565b6000546001600160a01b0391821691161490565b3480156105c057600080fd5b50604051600981526020016103bd565b3480156105dc57600080fd5b5061039b6105eb36600461225e565b610edd565b3480156105fc57600080fd5b5060225461045b9060ff1681565b34801561061657600080fd5b5061045b61062536600461225e565b610f28565b34801561063657600080fd5b5061039b610645366004612336565b610f3c565b34801561065657600080fd5b5061039b610665366004612336565b610f82565b34801561067657600080fd5b5061039b61068536600461234f565b610fc8565b34801561069657600080fd5b50602c5461045b9060ff1681565b3480156106b057600080fd5b5061039b611018565b3480156106c557600080fd5b506103b36106d436600461225e565b6001600160a01b03166000908152600a602052604090205490565b3480156106fb57600080fd5b5061039b611075565b34801561071057600080fd5b506103b360085481565b34801561072657600080fd5b506103b360095481565b34801561073c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103bd565b34801561076e57600080fd5b5061039b61077d36600461225e565b6110e4565b34801561078e57600080fd5b5061039b61079d366004612336565b611132565b3480156107ae57600080fd5b5061039b6107bd366004612384565b61116b565b3480156107ce57600080fd5b50602a5461074a906001600160a01b031681565b3480156107ee57600080fd5b50601b5461074a906001600160a01b031681565b34801561080e57600080fd5b5061045b61081d36600461227b565b6111be565b34801561082e57600080fd5b5060035461074a906001600160a01b031681565b34801561084e57600080fd5b5061039b6111cb565b34801561086357600080fd5b5061039b61087236600461225e565b6111f7565b34801561088357600080fd5b506103b3601c5481565b34801561089957600080fd5b506103b3601d5481565b3480156108af57600080fd5b5060165461074a906001600160a01b031681565b3480156108cf57600080fd5b506103b36108de366004612336565b611248565b3480156108ef57600080fd5b506014546103b3565b34801561090457600080fd5b506103b3610913366004612384565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561094a57600080fd5b5061039b6109593660046123bd565b61128c565b34801561096a57600080fd5b506103b36fffffffffffffffffffffffffffffffff81565b34801561098e57600080fd5b5060175461074a906001600160a01b031681565b3480156109ae57600080fd5b5061039b6109bd36600461225e565b6112c8565b3480156109ce57600080fd5b506103b36109dd3660046123d9565b611313565b3480156109ee57600080fd5b5061039b6109fd36600461225e565b611348565b348015610a0e57600080fd5b5061039b610a1d3660046123f4565b6113de565b348015610a2e57600080fd5b5061039b610a3d36600461234f565b61145e565b348015610a4e57600080fd5b5061039b610a5d36600461234f565b611562565b348015610a6e57600080fd5b50601a5461074a906001600160a01b031681565b348015610a8e57600080fd5b5061045b610a9d36600461225e565b6115b2565b610aab336115b2565b610ad05760405162461bcd60e51b8152600401610ac790612417565b60405180910390fd5b601c5415610b175760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610ac7565b43601c5542601d55565b610b2a336115b2565b610b465760405162461bcd60e51b8152600401610ac790612417565b6022805460ff191694151594909417909355602491909155600060255560265560275543602855565b610b78336115b2565b610b945760405162461bcd60e51b8152600401610ac790612417565b6010859055601184905560128390556013829055610bbe82610bb8858189896115dc565b906115dc565b6014556015819055610bd1600482612452565b60145410610bde57600080fd5b5050505050565b600080546001600160a01b03163314610c105760405162461bcd60e51b8152600401610ac790612474565b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c8e9086815260200190565b60405180910390a350600192915050565b600082610cab83611248565b119392505050565b610cbc336115b2565b610cd85760405162461bcd60e51b8152600401610ac790612417565b601891909155601955565b610cec336115b2565b610d085760405162461bcd60e51b8152600401610ac790612417565b6002610d148385612452565b11158015610d2157508183115b610d2a57600080fd5b601e92909255601f55602155565b6007546001600160a01b0384166000908152600b60209081526040808320338452909152812054909114610de7576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610dc29184906115e8565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610df2848484611614565b90505b9392505050565b6005546001600160a01b03166000908152600a6020526040812054610e49906004546001600160a01b03166000908152600a6020526040902054610e439060075490611a35565b90611a35565b905090565b610e57336115b2565b610e735760405162461bcd60e51b8152600401610ac790612417565b6029546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610ec157600080fd5b505af1158015610ed5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f075760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610f3682600754610c33565b92915050565b610f45336115b2565b610f615760405162461bcd60e51b8152600401610ac790612417565b6103e8600754610f719190612452565b811015610f7d57600080fd5b600855565b610f8b336115b2565b610fa75760405162461bcd60e51b8152600401610ac790612417565b6103e8600754610fb79190612452565b811015610fc357600080fd5b600955565b610fd1336115b2565b610fed5760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610ac790612474565b6040514790339082156108fc029083906000818181858888f19350505050158015611071573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461109f5760405162461bcd60e51b8152600401610ac790612474565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b0316331461110e5760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b61113b336115b2565b6111575760405162461bcd60e51b8152600401610ac790612417565b620b71b0811061116657600080fd5b602b55565b611174336115b2565b6111905760405162461bcd60e51b8152600401610ac790612417565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000610df5338484611614565b6111d4336115b2565b6111f05760405162461bcd60e51b8152600401610ac790612417565b6000602055565b6000546001600160a01b031633146112215760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610f36611255610dfc565b601b546001600160a01b03166000908152600a60205260409020546112869061127f906002611a41565b8590611a41565b906115d0565b611295336115b2565b6112b15760405162461bcd60e51b8152600401610ac790612417565b602c805460ff191692151592909217909155602d55565b6000546001600160a01b031633146112f25760405162461bcd60e51b8152600401610ac790612474565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600043601c5460016113259190612494565b1061133257505060145490565b811561134057505060145490565b505060145490565b6000546001600160a01b031633146113725760405162461bcd60e51b8152600401610ac790612474565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6113e7336115b2565b6114035760405162461bcd60e51b8152600401610ac790612417565b60045461141a9083906001600160a01b0316611a4d565b8015611071574260209081556021546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a910160405180910390a15050565b611467336115b2565b6114835760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03821630148015906114aa5750601b546001600160a01b03838116911614155b6114b357600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561151957602954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610ea7565b6029546001600160a01b038381166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610ea7565b61156b336115b2565b6115875760405162461bcd60e51b8152600401610ac790612417565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610df58284612452565b6000610df58284612494565b6000818484111561160c5760405162461bcd60e51b8152600401610ac791906121f1565b505050900390565b602e5460009060ff16156116345761162d848484611b56565b9050610df5565b601b54737a250d5630b4cf539739df2c5dacb4c659f2488d906000906001600160a01b038781169116148061167a5750816001600160a01b0316866001600160a01b0316145b601b549091506000906001600160a01b03878116911614806116ad5750826001600160a01b0316866001600160a01b0316145b90506116b98786611bf9565b801580156116e057506001600160a01b0386166000908152600f602052604090205460ff16155b15611759576009546001600160a01b0387166000908152600a602052604090205461170c908790612494565b106117595760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610ac7565b801561178957611767611c62565b1561177457611774611cb1565b61177c612010565b156117895761178961206b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038a166000908152600a90915291909120546117db9187906115e8565b6001600160a01b0388166000908152600a6020908152604080832093909355600c90529081205460ff1615611810578561181b565b61181b8888886120b2565b6001600160a01b0388166000908152600a602052604090205490915061184190826115dc565b6001600160a01b038089166000908152600a6020908152604080832094909455918b168152600e909152205460ff166118e5576029546001600160a01b038981166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118d257600080fd5b505af19250505080156118e3575060015b505b6001600160a01b0387166000908152600e602052604090205460ff16611976576029546001600160a01b038881166000818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561196357600080fd5b505af1925050508015611974575060015b505b602954602b546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119ae9160040190815260200190565b600060405180830381600087803b1580156119c857600080fd5b505af19250505080156119d9575060015b50866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a1f91815260200190565b60405180910390a3506001979650505050505050565b6000610df582846124ac565b6000610df582846124c3565b602e805460ff19166001179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b031691839150600090611a9b57611a9b6124e2565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611acf57611acf6124e2565b6001600160a01b039283166020918202929092010152601a5460405163b6f9de9560e01b815291169063b6f9de95908590611b159060009086908890429060040161253c565b6000604051808303818588803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b5050602e805460ff19169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a90915291822054611ba79184906115e8565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054611bd690836115dc565b6001600160a01b0384166000908152600a60205260409020555060019392505050565b60085481111580611c2257506001600160a01b0382166000908152600d602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ac7565b601b546000906001600160a01b03163314801590611c835750602e5460ff16155b8015611c915750602c5460ff165b8015610e49575050602d54306000908152600a6020526040902054101590565b602e805460ff19166001179055601854601954600091611cd091610c9f565b611cdc57601054611cdf565b60005b90506000611d03600261128660145461128686602d54611a4190919063ffffffff16565b90506000611d1c82602d54611a3590919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d5657611d566124e2565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611d8757611d876124e2565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac94790611dd1908690600090879030904290600401612571565b600060405180830381600087803b158015611deb57600080fd5b505af1158015611dff573d6000803e3d6000fd5b505050506000611e188247611a3590919063ffffffff16565b90506000611e33611e2a8860026115d0565b60145490611a35565b90506000611e4860026112868481878d611a41565b90506000611e658361128660125487611a4190919063ffffffff16565b90506000611e828461128660135488611a4190919063ffffffff16565b9050602960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ed457600080fd5b505af193505050508015611ee6575060015b506017546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f21573d6000803e3d6000fd5b508815611ffa57601a5460165460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af1158015611f98573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fbd91906125ad565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805460ff191690555050505050505050565b601b546000906001600160a01b031633148015906120315750602e5460ff16155b801561203f575060225460ff165b801561205a5750436027546028546120579190612494565b11155b8015610e4957505060265447101590565b60265460045461208491906001600160a01b0316611a4d565b43602855602654602554612097916115dc565b602581905560245410156120b0576022805460ff191690555b565b601554601b5460009182916120e49190611286906120dd906001600160a01b03898116911614611313565b8690611a41565b306000908152600a602052604090205490915061210190826115dc565b306000818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121529085815260200190565b60405180910390a36121648382611a35565b95945050505050565b80358015158114610c2e57600080fd5b6000806000806080858703121561219357600080fd5b61219c8561216d565b966020860135965060408601359560600135945092505050565b600080600080600060a086880312156121ce57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561221e57858101830151858201604001528201612202565b81811115612230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461225b57600080fd5b50565b60006020828403121561227057600080fd5b8135610df581612246565b6000806040838503121561228e57600080fd5b823561229981612246565b946020939093013593505050565b600080604083850312156122ba57600080fd5b50508035926020909101359150565b6000806000606084860312156122de57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561230a57600080fd5b833561231581612246565b9250602084013561232581612246565b929592945050506040919091013590565b60006020828403121561234857600080fd5b5035919050565b6000806040838503121561236257600080fd5b823561236d81612246565b915061237b6020840161216d565b90509250929050565b6000806040838503121561239757600080fd5b82356123a281612246565b915060208301356123b281612246565b809150509250929050565b600080604083850312156123d057600080fd5b6122998361216d565b6000602082840312156123eb57600080fd5b610df58261216d565b6000806040838503121561240757600080fd5b8235915061237b6020840161216d565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261246f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600082198211156124a7576124a761243c565b500190565b6000828210156124be576124be61243c565b500390565b60008160001904831182151516156124dd576124dd61243c565b500290565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156125315781516001600160a01b03168752958201959082019060010161250c565b509495945050505050565b84815260806020820152600061255560808301866124f8565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061259060a08301866124f8565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156125c257600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122081df88798e38e1b5296d70a729361b655cd53e27ce0bf9536a09839fdaa2985664736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000043ffd2d3570e48146fa4a661669455ddcd0e5baf000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _dexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _marketingAddress (address): 0x43FfD2D3570E48146fA4a661669455ddcd0e5BAf
Arg [2] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000043ffd2d3570e48146fa4a661669455ddcd0e5baf
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

12985:16386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25895:187;;;;;;;;;;;;;:::i;:::-;;15273:50;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15273:50:0;;;;;;;;25080:359;;;;;;;;;;-1:-1:-1;25080:359:0;;;;;:::i;:::-;;:::i;27345:496::-;;;;;;;;;;-1:-1:-1;27345:496:0;;;;;:::i;:::-;;:::i;16772:80::-;;;;;;;;;;-1:-1:-1;16844:5:0;;;;;;;;;;;-1:-1:-1;;;16844:5:0;;;;16772:80;;;;16844:5;16772:80;:::i;27226:111::-;;;;;;;;;;-1:-1:-1;27226:111:0;;;;;:::i;:::-;;:::i;:::-;;;2365:14:1;;2358:22;2340:41;;2328:2;2313:18;27226:111:0;2200:187:1;17275:216:0;;;;;;;;;;-1:-1:-1;17275:216:0;;;;;:::i;:::-;;:::i;29100:150::-;;;;;;;;;;-1:-1:-1;29100:150:0;;;;;:::i;:::-;;:::i;16502:88::-;;;;;;;;;;-1:-1:-1;16575:12:0;;16502:88;;28249:183;;;;;;;;;;-1:-1:-1;28249:183:0;;;;;:::i;:::-;;:::i;25447:342::-;;;;;;;;;;-1:-1:-1;25447:342:0;;;;;:::i;:::-;;:::i;17788:365::-;;;;;;;;;;-1:-1:-1;17788:365:0;;;;;:::i;:::-;;:::i;14027:40::-;;;;;;;;;;-1:-1:-1;14027:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28775:142;;;;;;;;;;;;;:::i;28440:183::-;;;;;;;;;;-1:-1:-1;28440:183:0;;;;;:::i;:::-;;:::i;4662:103::-;;;;;;;;;;-1:-1:-1;4662:103:0;;;;;:::i;:::-;4717:4;4752:5;-1:-1:-1;;;;;4741:16:0;;;4752:5;;4741:16;;4662:103;16596:80;;;;;;;;;;-1:-1:-1;16596:80:0;;13570:1;3889:36:1;;3877:2;3862:18;16596:80:0;3747:184:1;27120:94:0;;;;;;;;;;-1:-1:-1;27120:94:0;;;;;:::i;:::-;;:::i;14857:38::-;;;;;;;;;;-1:-1:-1;14857:38:0;;;;;;;;17499:117;;;;;;;;;;-1:-1:-1;17499:117:0;;;;;:::i;:::-;;:::i;26241:145::-;;;;;;;;;;-1:-1:-1;26241:145:0;;;;;:::i;:::-;;:::i;26088:::-;;;;;;;;;;-1:-1:-1;26088:145:0;;;;;:::i;:::-;;:::i;26749:120::-;;;;;;;;;;-1:-1:-1;26749:120:0;;;;;:::i;:::-;;:::i;15236:30::-;;;;;;;;;;-1:-1:-1;15236:30:0;;;;;;;;24928:142;;;;;;;;;;;;;:::i;17023:105::-;;;;;;;;;;-1:-1:-1;17023:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17107:18:0;17089:7;17107:18;;;:9;:18;;;;;;;17023:105;4951:139;;;;;;;;;;;;;:::i;13651:51::-;;;;;;;;;;;;;;;;13710:48;;;;;;;;;;;;;;;;16858:78;;;;;;;;;;-1:-1:-1;16910:7:0;16928:5;-1:-1:-1;;;;;16928:5:0;16858:78;;;-1:-1:-1;;;;;4605:32:1;;;4587:51;;4575:2;4560:18;16858:78:0;4441:203:1;27017:91:0;;;;;;;;;;-1:-1:-1;27017:91:0;;;;;:::i;:::-;;:::i;28631:136::-;;;;;;;;;;-1:-1:-1;28631:136:0;;;;;:::i;:::-;;:::i;27849:228::-;;;;;;;;;;-1:-1:-1;27849:228:0;;;;;:::i;:::-;;:::i;15154:33::-;;;;;;;;;;-1:-1:-1;15154:33:0;;;;-1:-1:-1;;;;;15154:33:0;;;14562:19;;;;;;;;;;-1:-1:-1;14562:19:0;;;;-1:-1:-1;;;;;14562:19:0;;;17624:156;;;;;;;;;;-1:-1:-1;17624:156:0;;;;;:::i;:::-;;:::i;13185:64::-;;;;;;;;;;-1:-1:-1;13185:64:0;;;;-1:-1:-1;;;;;13185:64:0;;;24131:105;;;;;;;;;;;;;:::i;4335:94::-;;;;;;;;;;-1:-1:-1;4335:94:0;;;;;:::i;:::-;;:::i;14590:25::-;;;;;;;;;;;;;;;;14622:34;;;;;;;;;;;;;;;;14274:79;;;;;;;;;;-1:-1:-1;14274:79:0;;;;-1:-1:-1;;;;;14274:79:0;;;28925:167;;;;;;;;;;-1:-1:-1;28925:167:0;;;;;:::i;:::-;;:::i;20528:691::-;;;;;;;;;;-1:-1:-1;21203:8:0;;20528:691;;17134:133;;;;;;;;;;-1:-1:-1;17134:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17236:19:0;;;17218:7;17236:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17134:133;28085:156;;;;;;;;;;-1:-1:-1;28085:156:0;;;;;:::i;:::-;;:::i;13059:48::-;;;;;;;;;;-1:-1:-1;13059:48:0;13090:17;13059:48;;14360:78;;;;;;;;;;-1:-1:-1;14360:78:0;;;;-1:-1:-1;;;;;14360:78:0;;;4505:97;;;;;;;;;;-1:-1:-1;4505:97:0;;;;;:::i;:::-;;:::i;20316:204::-;;;;;;;;;;-1:-1:-1;20316:204:0;;;;;:::i;:::-;;:::i;5209:173::-;;;;;;;;;;-1:-1:-1;5209:173:0;;;;;:::i;:::-;;:::i;23807:316::-;;;;;;;;;;-1:-1:-1;23807:316:0;;;;;:::i;:::-;;:::i;26394:347::-;;;;;;;;;;-1:-1:-1;26394:347:0;;;;;:::i;:::-;;:::i;26877:128::-;;;;;;;;;;-1:-1:-1;26877:128:0;;;;;:::i;:::-;;:::i;14531:24::-;;;;;;;;;;-1:-1:-1;14531:24:0;;;;-1:-1:-1;;;;;14531:24:0;;;4836:107;;;;;;;;;;-1:-1:-1;4836:107:0;;;;;:::i;:::-;;:::i;25895:187::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;;;;;;;;;25950:10:::1;::::0;:15;25942:48:::1;;;::::0;-1:-1:-1;;;25942:48:0;;6761:2:1;25942:48:0::1;::::0;::::1;6743:21:1::0;6800:2;6780:18;;;6773:30;-1:-1:-1;;;6819:18:1;;;6812:50;6879:18;;25942:48:0::1;6559:344:1::0;25942:48:0::1;26014:12;26001:10;:25:::0;26059:15:::1;26037:19;:37:::0;25895:187::o;25080:359::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;25206:18:::1;:29:::0;;-1:-1:-1;;25206:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25246:14:::1;:21:::0;;;;-1:-1:-1;25278:22:0::1;:26:::0;25315:17:::1;:27:::0;25353:22:::1;:32:::0;25419:12:::1;25396:20;:35:::0;25080:359::o;27345:496::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;27509:12:::1;:28:::0;;;27548:10:::1;:24:::0;;;27583:13:::1;:30:::0;;;27624:12:::1;:28:::0;;;27674:69:::1;27639:13:::0;27674:50:::1;27599:14:::0;27674:50;27524:13;27561:11;27674:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;27663:8;:80:::0;27754:14:::1;:32:::0;;;27816:16:::1;27831:1;27771:15:::0;27816:16:::1;:::i;:::-;27805:8;;:27;27797:36;;;::::0;::::1;;27345:496:::0;;;;;:::o;27226:111::-;27291:4;4752:5;;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;27314:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;4083:1;27226:111:::0;;;:::o;17275:216::-;17379:10;17350:4;17367:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17367:32:0;;;;;;;;;;:41;;;17424:37;17350:4;;17367:32;;17424:37;;;;17402:6;160:25:1;;148:2;133:18;;14:177;17424:37:0;;;;;;;;-1:-1:-1;17479:4:0;17275:216;;;;:::o;29100:150::-;29180:4;29236:6;29204:29;29224:8;29204:19;:29::i;:::-;:38;;29100:150;-1:-1:-1;;;29100:150:0:o;28249:183::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;28347:15:::1;:25:::0;;;;28383:26:::1;:41:::0;28249:183::o;25447:342::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;25607:1:::1;25580:23;25592:11:::0;25580:9;:23:::1;:::i;:::-;:28;;:55;;;;;25624:11;25612:9;:23;25580:55;25572:64;;;::::0;::::1;;25647:26;:38:::0;;;;25696:28:::1;:42:::0;25749:23:::1;:32:::0;25447:342::o;17788:365::-;17943:12;;-1:-1:-1;;;;;17908:19:0;;17888:4;17908:19;;;:11;:19;;;;;;;;17928:10;17908:31;;;;;;;;17888:4;;17908:47;17905:181;;18005:69;;;;;;;;;;;-1:-1:-1;;;18005:69:0;;;;;;;;-1:-1:-1;;;;;18005:19:0;;-1:-1:-1;18005:19:0;;;:11;:19;;;;;18025:10;18005:31;;;;;;;;;;:69;;18041:6;;18005:35;:69::i;:::-;-1:-1:-1;;;;;17971:19:0;;;;;;:11;:19;;;;;;;;17991:10;17971:31;;;;;;;:103;17905:181;18105:40;18119:6;18127:9;18138:6;18105:13;:40::i;:::-;18098:47;;17788:365;;;;;;:::o;28775:142::-;28903:4;;-1:-1:-1;;;;;28903:4:0;28828:7;17107:18;;;:9;:18;;;;;;28855:54;;28882:4;;-1:-1:-1;;;;;28882:4:0;17089:7;17107:18;;;:9;:18;;;;;;28855:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;28848:61;;28775:142;:::o;28440:183::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;28550:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;28550:65:0;;::::1;::::0;::::1;7770:25:1::0;;;7811:18;;;7804:34;;;-1:-1:-1;;;;;28550:11:0;;::::1;::::0;:35:::1;::::0;7743:18:1;;28550:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28440:183:::0;;:::o;27120:94::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27183:15:0::1;27201:5;27183:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;27183:23:0::1;::::0;;27120:94::o;17499:117::-;17554:4;17578:30;17586:7;17595:12;;17578:7;:30::i;:::-;17571:37;17499:117;-1:-1:-1;;17499:117:0:o;26241:145::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;26341:4:::1;26326:12;;:19;;;;:::i;:::-;26316:6;:29;;26308:38;;;::::0;::::1;;26357:12;:21:::0;26241:145::o;26088:::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;26190:4:::1;26175:12;;:19;;;;:::i;:::-;26165:6;:29;;26157:38;;;::::0;::::1;;26206:10;:19:::0;26088:145::o;26749:120::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26833:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26833:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26749:120::o;24928:142::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;25025:37:::1;::::0;24993:21:::1;::::0;25033:10:::1;::::0;25025:37;::::1;;;::::0;24993:21;;24975:15:::1;25025:37:::0;24975:15;25025:37;24993:21;25033:10;25025:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24964:106;24928:142::o:0;4951:139::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;5032:1:::1;5016:18:::0;;-1:-1:-1;;;;;;5016:18:0::1;::::0;;5050:32:::1;::::0;4587:51:1;;;5050:32:0::1;::::0;4575:2:1;4560:18;5050:32:0::1;;;;;;;4951:139::o:0;27017:91::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27078:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;27078:22:0::1;27096:4;27078:22;::::0;;27017:91::o;28631:136::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;28721:6:::1;28715:3;:12;28707:21;;;::::0;::::1;;28739:14;:20:::0;28631:136::o;27849:228::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;27968:21:::1;:46:::0;;-1:-1:-1;;;;;27968:46:0;;::::1;-1:-1:-1::0;;;;;;27968:46:0;;::::1;;::::0;;;28025:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;27849:228::o;17624:156::-;17704:4;17728:44;17742:10;17754:9;17765:6;17728:13;:44::i;24131:105::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;24227:1:::1;24196:28;:32:::0;24131:105::o;4335:94::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4395:19:0::1;;::::0;;;4417:4:::1;4395:19;::::0;;;;;;;:26;;-1:-1:-1;;4395:26:0::1;::::0;;::::1;::::0;;4335:94::o;28925:167::-;28993:7;29020:64;29061:22;:20;:22::i;:::-;29043:4;;-1:-1:-1;;;;;29043:4:0;17089:7;17107:18;;;:9;:18;;;;;;29020:36;;29033:22;;29053:1;29033:19;:22::i;:::-;29020:8;;:12;:36::i;:::-;:40;;:64::i;28085:156::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;28177:11:::1;:22:::0;;-1:-1:-1;;28177:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;28210:13:::1;:23:::0;28085:156::o;4505:97::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4567:19:0::1;4589:5;4567:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4567:27:0::1;::::0;;4505:97::o;20316:204::-;20372:7;20413:12;20395:10;;20408:1;20395:14;;;;:::i;:::-;:30;20392:54;;-1:-1:-1;;20435:8:0;;;20316:204::o;20392:54::-;20459:7;20456:31;;;-1:-1:-1;;20476:8:0;;;20316:204::o;20456:31::-;-1:-1:-1;;20504:8:0;;;20316:204::o;5209:173::-;4717:4;4752:5;-1:-1:-1;;;;;4752:5:0;4059:10;4741:16;4043:38;;;;-1:-1:-1;;;4043:38:0;;;;;;;:::i;:::-;5285:5:::1;:11:::0;;-1:-1:-1;;;;;;5285:11:0::1;-1:-1:-1::0;;;;;5285:11:0;::::1;::::0;;::::1;::::0;;5307:19;;;-1:-1:-1;5307:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5307:26:0::1;::::0;;::::1;::::0;;;5349:25;;4587:51:1;;;5349:25:0::1;::::0;4560:18:1;5349:25:0::1;;;;;;;5209:173:::0;:::o;23807:316::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;23931:4:::1;::::0;23913:23:::1;::::0;23923:6;;-1:-1:-1;;;;;23931:4:0::1;23913:9;:23::i;:::-;23950:24;23947:169;;;24021:15;23990:28;:46:::0;;;24080:23:::1;::::0;24056:48:::1;::::0;160:25:1;;;24056:48:0::1;::::0;133:18:1;24056:48:0::1;;;;;;;23807:316:::0;;:::o;26394:347::-;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26491:23:0;::::1;26509:4;26491:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;26528:4:0::1;::::0;-1:-1:-1;;;;;26518:14:0;;::::1;26528:4:::0;::::1;26518:14;;26491:41;26483:50;;;::::0;::::1;;-1:-1:-1::0;;;;;26544:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26544:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;26588:146:::1;;26613:11;::::0;:31:::1;::::0;-1:-1:-1;;;26613:31:0;;-1:-1:-1;;;;;8398:32:1;;;26613:31:0::1;::::0;::::1;8380:51:1::0;26613:11:0::1;8447:18:1::0;;;8440:34;26613:11:0;;::::1;::::0;:20:::1;::::0;8353:18:1;;26613:31:0::1;8198:282:1::0;26588:146:0::1;26675:11;::::0;-1:-1:-1;;;;;26704:17:0;;::::1;26675:11;26704:17:::0;;;:9:::1;:17;::::0;;;;;;;26675:47;;-1:-1:-1;;;26675:47:0;;::::1;::::0;::::1;8380:51:1::0;;;;8447:18;;;8440:34;26675:11:0;::::1;::::0;:20:::1;::::0;8353:18:1;;26675:47:0::1;8198:282:1::0;26877:128:0;4220:24;4233:10;4220:12;:24::i;:::-;4212:48;;;;-1:-1:-1;;;4212:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26965:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26965:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26877:128::o;4836:107::-;-1:-1:-1;;;;;4916:19:0;4892:4;4916:19;;;:14;:19;;;;;;;;;4836:107::o;1937:98::-;1995:7;2022:5;2026:1;2022;:5;:::i;1619:98::-;1677:7;1704:5;1708:1;1704;:5;:::i;2149:206::-;2235:7;2296:12;2288:6;;;;2280:29;;;;-1:-1:-1;;;2280:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2331:5:0;;;2149:206::o;18161:1507::-;18273:6;;18253:4;;18273:6;;18270:63;;;18289:41;18304:6;18312:9;18323:6;18289:14;:41::i;:::-;18282:48;;;;18270:63;18453:4;;18386:42;;18362:21;;-1:-1:-1;;;;;18444:13:0;;;18453:4;;18444:13;;:39;;;18470:13;-1:-1:-1;;;;;18460:23:0;:6;-1:-1:-1;;;;;18460:23:0;;18444:39;18518:4;;18433:50;;-1:-1:-1;18494:11:0;;-1:-1:-1;;;;;18506:16:0;;;18518:4;;18506:16;;:45;;;18538:13;-1:-1:-1;;;;;18525:26:0;:9;-1:-1:-1;;;;;18525:26:0;;18506:45;18494:57;;18560:28;18573:6;18581;18560:12;:28::i;:::-;18651:6;18650:7;:30;;;;-1:-1:-1;;;;;;18662:18:0;;;;;;:7;:18;;;;;;;;18661:19;18650:30;18646:133;;;18729:10;;-1:-1:-1;;;;;18696:20:0;;;;;;:9;:20;;;;;;:29;;18719:6;;18696:29;:::i;:::-;18695:44;18687:86;;;;-1:-1:-1;;;18687:86:0;;8966:2:1;18687:86:0;;;8948:21:1;9005:2;8985:18;;;8978:30;9044:31;9024:18;;;9017:59;9093:18;;18687:86:0;8764:353:1;18687:86:0;18823:6;18819:111;;;18840:16;:14;:16::i;:::-;18837:35;;;18859:10;:8;:10::i;:::-;18880:19;:17;:19::i;:::-;18877:48;;;18902:20;:18;:20::i;:::-;19057:53;;;;;;;;;;;-1:-1:-1;;;19057:53:0;;;;;;;;-1:-1:-1;;;;;19057:17:0;;-1:-1:-1;19057:17:0;;;:9;:17;;;;;;;;:53;;19079:6;;19057:21;:53::i;:::-;-1:-1:-1;;;;;19037:17:0;;;;;;:9;:17;;;;;;;;:73;;;;20281:11;:19;;;;;;;;20280:20;19148:67;;19209:6;19148:67;;;19172:34;19180:6;19188:9;19199:6;19172:7;:34::i;:::-;-1:-1:-1;;;;;19251:20:0;;;;;;:9;:20;;;;;;19123:92;;-1:-1:-1;19251:40:0;;19123:92;19251:24;:40::i;:::-;-1:-1:-1;;;;;19228:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;19308:24;;;;;:16;:24;;;;;;;19304:96;;19339:11;;-1:-1:-1;;;;;19368:17:0;;;19339:11;19368:17;;;:9;:17;;;;;;;;19339:47;;-1:-1:-1;;;19339:47:0;;;;;8380:51:1;;;;8447:18;;;8440:34;19339:11:0;;;:20;;8353:18:1;;19339:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19335:63;;-1:-1:-1;;;;;19414:27:0;;;;;;:16;:27;;;;;;;;19410:105;;19448:11;;-1:-1:-1;;;;;19480:20:0;;;19448:11;19480:20;;;:9;:20;;;;;;;;19448:53;;-1:-1:-1;;;19448:53:0;;;;;8380:51:1;;;;8447:18;;;8440:34;19448:11:0;;;:20;;8353:18:1;;19448:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19444:69;;19531:11;;19551:14;;19531:35;;-1:-1:-1;;;;;;19531:35:0;;-1:-1:-1;;;;;19531:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;19531:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19527:51;19612:9;-1:-1:-1;;;;;19595:43:0;19604:6;-1:-1:-1;;;;;19595:43:0;;19623:14;19595:43;;;;160:25:1;;148:2;133:18;;14:177;19595:43:0;;;;;;;;-1:-1:-1;19656:4:0;;18161:1507;-1:-1:-1;;;;;;;18161:1507:0:o;1725:98::-;1783:7;1810:5;1814:1;1810;:5;:::i;1831:98::-;1889:7;1916:5;1920:1;1916;:5;:::i;24555:361::-;15380:6;:13;;-1:-1:-1;;15380:13:0;15389:4;15380:13;;;24655:16:::1;::::0;;24669:1:::1;24655:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24655:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;24692:4:0::1;::::0;24682:7;;;;-1:-1:-1;;;;;;24692:4:0::1;::::0;24682:7;;-1:-1:-1;24692:4:0::1;::::0;24682:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;24682:14:0::1;;;-1:-1:-1::0;;;;;24682:14:0::1;;;::::0;::::1;24725:4;24707;24712:1;24707:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24707:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24743:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;24743:165:0;;:6;::::1;::::0;:57:::1;::::0;24808:6;;24743:165:::1;::::0;:6:::1;::::0;24846:4;;24865:2;;24882:15:::1;::::0;24743:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15398:6:0;:14;;-1:-1:-1;;15398:14:0;;;-1:-1:-1;;;;;;24555:361:0:o;19676:332::-;19806:53;;;;;;;;;;;-1:-1:-1;;;19806:53:0;;;;;;;;-1:-1:-1;;;;;19806:17:0;;19769:4;19806:17;;;:9;:17;;;;;;;:53;;19828:6;;19806:21;:53::i;:::-;-1:-1:-1;;;;;19786:17:0;;;;;;;:9;:17;;;;;;:73;;;;19893:20;;;;;;;:32;;19918:6;19893:24;:32::i;:::-;-1:-1:-1;;;;;19870:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;19996:4:0;19676:332;;;;;:::o;20020:166::-;20117:12;;20107:6;:22;;:49;;;-1:-1:-1;;;;;;20133:23:0;;;;;;:15;:23;;;;;;;;20107:49;20099:79;;;;-1:-1:-1;;;20099:79:0;;10872:2:1;20099:79:0;;;10854:21:1;10911:2;10891:18;;;10884:30;-1:-1:-1;;;10930:18:1;;;10923:47;10987:18;;20099:79:0;10670:341:1;21607:197:0;21694:4;;21656;;-1:-1:-1;;;;;21694:4:0;21680:10;:18;;;;:38;;-1:-1:-1;21712:6:0;;;;21711:7;21680:38;:62;;;;-1:-1:-1;21731:11:0;;;;21680:62;:116;;;;-1:-1:-1;;21783:13:0;;21773:4;21755:24;;;;:9;:24;;;;;;:41;;;21607:197::o;21812:1661::-;15380:6;:13;;-1:-1:-1;;15380:13:0;15389:4;15380:13;;;21907:15:::1;::::0;21924:26:::1;::::0;15380:6;;21891:60:::1;::::0;:15:::1;:60::i;:::-;:79;;21958:12;;21891:79;;;21954:1;21891:79;21861:109;;21981:23;22007:59;22064:1;22007:52;22050:8;;22007:38;22025:19;22007:13;;:17;;:38;;;;:::i;:59::-;21981:85;;22077:20;22100:34;22118:15;22100:13;;:17;;:34;;;;:::i;:::-;22171:16;::::0;;22185:1:::1;22171:16:::0;;;;;::::1;::::0;;22077:57;;-1:-1:-1;22147:21:0::1;::::0;22171:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22171:16:0::1;22147:40;;22216:4;22198;22203:1;22198:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22198:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22242:4:::1;::::0;22232:7;;22242:4;::::1;::::0;22232;;22242;;22232:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22232:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;22315:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22315:188:0;;22281:21:::1;::::0;22315:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22387:12;;22257:21:::1;::::0;22430:4;;22457::::1;::::0;22477:15:::1;::::0;22315:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22516:17;22536:40;22562:13;22536:21;:25;;:40;;;;:::i;:::-;22516:60:::0;-1:-1:-1;22589:19:0::1;22611:40;22624:26;:19:::0;22648:1:::1;22624:23;:26::i;:::-;22611:8;::::0;;:12:::1;:40::i;:::-;22589:62:::0;-1:-1:-1;22664:26:0::1;22693:58;22749:1;22693:51;22589:62:::0;22693:51;:9;22707:19;22693:13:::1;:34::i;:58::-;22664:87;;22762:27;22792:45;22825:11;22792:28;22806:13;;22792:9;:13;;:28;;;;:::i;:45::-;22762:75;;22848:26;22877:44;22909:11;22877:27;22891:12;;22877:9;:13;;:27;;;;:::i;:44::-;22848:73;;22938:11;;;;;;;;;-1:-1:-1::0;;;;;22938:11:0::1;-1:-1:-1::0;;;;;22938:19:0::1;;22965;22938:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22934:65:::0;23017:20:::1;::::0;23009:58:::1;::::0;-1:-1:-1;;;;;23017:20:0;;::::1;::::0;23009:58;::::1;;;::::0;23048:18;;23017:20:::1;23009:58:::0;23017:20;23009:58;23048:18;23017:20;23009:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23107:19:0;;23104:362:::1;;23142:6;::::0;23316:21:::1;::::0;23142:244:::1;::::0;-1:-1:-1;;;23142:244:0;;23218:4:::1;23142:244;::::0;::::1;11944:34:1::0;11994:18;;;11987:34;;;23142:6:0::1;12037:18:1::0;;;12030:34;;;12080:18;;;12073:34;-1:-1:-1;;;;;23316:21:0;;::::1;12123:19:1::0;;;12116:44;23356:15:0::1;12176:19:1::0;;;12169:35;23142:6:0;::::1;::::0;:22:::1;::::0;23172:18;;11878:19:1;;23142:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23406:48:0::1;::::0;;7770:25:1;;;7826:2;7811:18;;7804:34;;;23406:48:0::1;::::0;-1:-1:-1;7743:18:1;23406:48:0::1;;;;;;;23104:362;-1:-1:-1::0;;15398:6:0;:14;;-1:-1:-1;;15398:14:0;;;-1:-1:-1;;;;;;;;21812:1661:0:o;23481:318::-;23571:4;;23533;;-1:-1:-1;;;;;23571:4:0;23557:10;:18;;;;:38;;-1:-1:-1;23589:6:0;;;;23588:7;23557:38;:69;;;;-1:-1:-1;23608:18:0;;;;23557:69;:143;;;;;23688:12;23662:22;;23639:20;;:45;;;;:::i;:::-;:61;;23557:143;:234;;;;-1:-1:-1;;23774:17:0;;23749:21;:42;;;23481:318::o;24244:303::-;24304:17;;24323:4;;24294:34;;24304:17;-1:-1:-1;;;;;24323:4:0;24294:9;:34::i;:::-;24362:12;24339:20;:35;24437:17;;24410:22;;:45;;:26;:45::i;:::-;24385:22;:70;;;24494:14;;-1:-1:-1;24466:74:0;;;24511:18;:26;;-1:-1:-1;;24511:26:0;;;24466:74;24244:303::o;21227:372::-;21398:14;;21387:4;;21312:7;;;;21352:61;;21398:14;21352:41;;21363:29;;-1:-1:-1;;;;;21375:16:0;;;21387:4;;21375:16;21363:11;:29::i;:::-;21352:6;;:10;:41::i;:61::-;21471:4;21453:24;;;;:9;:24;;;;;;21332:81;;-1:-1:-1;21453:39:0;;21332:81;21453:28;:39::i;:::-;21444:4;21426:24;;;;:9;:24;;;;;;;:66;;;;21508:42;;-1:-1:-1;;;;;21508:42:0;;;;;;;21540:9;160:25:1;;148:2;133:18;;14:177;21508:42:0;;;;;;;;21570:21;:6;21581:9;21570:10;:21::i;:::-;21563:28;21227:372;-1:-1:-1;;;;;21227:372:0:o;196:160:1:-;261:20;;317:13;;310:21;300:32;;290:60;;346:1;343;336:12;361:385;444:6;452;460;468;521:3;509:9;500:7;496:23;492:33;489:53;;;538:1;535;528:12;489:53;561:26;577:9;561:26;:::i;:::-;551:36;634:2;619:18;;606:32;;-1:-1:-1;685:2:1;670:18;;657:32;;736:2;721:18;708:32;;-1:-1:-1;361:385:1;-1:-1:-1;;;361:385:1:o;751:454::-;846:6;854;862;870;878;931:3;919:9;910:7;906:23;902:33;899:53;;;948:1;945;938:12;899:53;-1:-1:-1;;971:23:1;;;1041:2;1026:18;;1013:32;;-1:-1:-1;1092:2:1;1077:18;;1064:32;;1143:2;1128:18;;1115:32;;-1:-1:-1;1194:3:1;1179:19;1166:33;;-1:-1:-1;751:454:1;-1:-1:-1;751:454:1:o;1210:597::-;1322:4;1351:2;1380;1369:9;1362:21;1412:6;1406:13;1455:6;1450:2;1439:9;1435:18;1428:34;1480:1;1490:140;1504:6;1501:1;1498:13;1490:140;;;1599:14;;;1595:23;;1589:30;1565:17;;;1584:2;1561:26;1554:66;1519:10;;1490:140;;;1648:6;1645:1;1642:13;1639:91;;;1718:1;1713:2;1704:6;1693:9;1689:22;1685:31;1678:42;1639:91;-1:-1:-1;1791:2:1;1770:15;-1:-1:-1;;1766:29:1;1751:45;;;;1798:2;1747:54;;1210:597;-1:-1:-1;;;1210:597:1:o;1812:131::-;-1:-1:-1;;;;;1887:31:1;;1877:42;;1867:70;;1933:1;1930;1923:12;1867:70;1812:131;:::o;1948:247::-;2007:6;2060:2;2048:9;2039:7;2035:23;2031:32;2028:52;;;2076:1;2073;2066:12;2028:52;2115:9;2102:23;2134:31;2159:5;2134:31;:::i;2392:315::-;2460:6;2468;2521:2;2509:9;2500:7;2496:23;2492:32;2489:52;;;2537:1;2534;2527:12;2489:52;2576:9;2563:23;2595:31;2620:5;2595:31;:::i;:::-;2645:5;2697:2;2682:18;;;;2669:32;;-1:-1:-1;;;2392:315:1:o;2712:248::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;-1:-1:-1;;2880:23:1;;;2950:2;2935:18;;;2922:32;;-1:-1:-1;2712:248:1:o;2965:316::-;3042:6;3050;3058;3111:2;3099:9;3090:7;3086:23;3082:32;3079:52;;;3127:1;3124;3117:12;3079:52;-1:-1:-1;;3150:23:1;;;3220:2;3205:18;;3192:32;;-1:-1:-1;3271:2:1;3256:18;;;3243:32;;2965:316;-1:-1:-1;2965:316:1:o;3286:456::-;3363:6;3371;3379;3432:2;3420:9;3411:7;3407:23;3403:32;3400:52;;;3448:1;3445;3438:12;3400:52;3487:9;3474:23;3506:31;3531:5;3506:31;:::i;:::-;3556:5;-1:-1:-1;3613:2:1;3598:18;;3585:32;3626:33;3585:32;3626:33;:::i;:::-;3286:456;;3678:7;;-1:-1:-1;;;3732:2:1;3717:18;;;;3704:32;;3286:456::o;3936:180::-;3995:6;4048:2;4036:9;4027:7;4023:23;4019:32;4016:52;;;4064:1;4061;4054:12;4016:52;-1:-1:-1;4087:23:1;;3936:180;-1:-1:-1;3936:180:1:o;4121:315::-;4186:6;4194;4247:2;4235:9;4226:7;4222:23;4218:32;4215:52;;;4263:1;4260;4253:12;4215:52;4302:9;4289:23;4321:31;4346:5;4321:31;:::i;:::-;4371:5;-1:-1:-1;4395:35:1;4426:2;4411:18;;4395:35;:::i;:::-;4385:45;;4121:315;;;;;:::o;4649:388::-;4717:6;4725;4778:2;4766:9;4757:7;4753:23;4749:32;4746:52;;;4794:1;4791;4784:12;4746:52;4833:9;4820:23;4852:31;4877:5;4852:31;:::i;:::-;4902:5;-1:-1:-1;4959:2:1;4944:18;;4931:32;4972:33;4931:32;4972:33;:::i;:::-;5024:7;5014:17;;;4649:388;;;;;:::o;5042:248::-;5107:6;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5207:26;5223:9;5207:26;:::i;5295:180::-;5351:6;5404:2;5392:9;5383:7;5379:23;5375:32;5372:52;;;5420:1;5417;5410:12;5372:52;5443:26;5459:9;5443:26;:::i;5740:248::-;5805:6;5813;5866:2;5854:9;5845:7;5841:23;5837:32;5834:52;;;5882:1;5879;5872:12;5834:52;5918:9;5905:23;5895:33;;5947:35;5978:2;5967:9;5963:18;5947:35;:::i;6219:335::-;6421:2;6403:21;;;6460:2;6440:18;;;6433:30;-1:-1:-1;;;6494:2:1;6479:18;;6472:41;6545:2;6530:18;;6219:335::o;6908:127::-;6969:10;6964:3;6960:20;6957:1;6950:31;7000:4;6997:1;6990:15;7024:4;7021:1;7014:15;7040:217;7080:1;7106;7096:132;;7150:10;7145:3;7141:20;7138:1;7131:31;7185:4;7182:1;7175:15;7213:4;7210:1;7203:15;7096:132;-1:-1:-1;7242:9:1;;7040:217::o;7262:329::-;7464:2;7446:21;;;7503:1;7483:18;;;7476:29;-1:-1:-1;;;7536:2:1;7521:18;;7514:36;7582:2;7567:18;;7262:329::o;7849:128::-;7889:3;7920:1;7916:6;7913:1;7910:13;7907:39;;;7926:18;;:::i;:::-;-1:-1:-1;7962:9:1;;7849:128::o;9122:125::-;9162:4;9190:1;9187;9184:8;9181:34;;;9195:18;;:::i;:::-;-1:-1:-1;9232:9:1;;9122:125::o;9252:168::-;9292:7;9358:1;9354;9350:6;9346:14;9343:1;9340:21;9335:1;9328:9;9321:17;9317:45;9314:71;;;9365:18;;:::i;:::-;-1:-1:-1;9405:9:1;;9252:168::o;9557:127::-;9618:10;9613:3;9609:20;9606:1;9599:31;9649:4;9646:1;9639:15;9673:4;9670:1;9663:15;9689:461;9742:3;9780:5;9774:12;9807:6;9802:3;9795:19;9833:4;9862:2;9857:3;9853:12;9846:19;;9899:2;9892:5;9888:14;9920:1;9930:195;9944:6;9941:1;9938:13;9930:195;;;10009:13;;-1:-1:-1;;;;;10005:39:1;9993:52;;10065:12;;;;10100:15;;;;10041:1;9959:9;9930:195;;;-1:-1:-1;10141:3:1;;9689:461;-1:-1:-1;;;;;9689:461:1:o;10155:510::-;10426:6;10415:9;10408:25;10469:3;10464:2;10453:9;10449:18;10442:31;10389:4;10490:57;10542:3;10531:9;10527:19;10519:6;10490:57;:::i;:::-;-1:-1:-1;;;;;10583:32:1;;;;10578:2;10563:18;;10556:60;-1:-1:-1;10647:2:1;10632:18;10625:34;10482:65;10155:510;-1:-1:-1;;10155:510:1:o;11016:582::-;11315:6;11304:9;11297:25;11358:6;11353:2;11342:9;11338:18;11331:34;11401:3;11396:2;11385:9;11381:18;11374:31;11278:4;11422:57;11474:3;11463:9;11459:19;11451:6;11422:57;:::i;:::-;-1:-1:-1;;;;;11515:32:1;;;;11510:2;11495:18;;11488:60;-1:-1:-1;11579:3:1;11564:19;11557:35;11414:65;11016:582;-1:-1:-1;;;11016:582:1:o;12215:306::-;12303:6;12311;12319;12372:2;12360:9;12351:7;12347:23;12343:32;12340:52;;;12388:1;12385;12378:12;12340:52;12417:9;12411:16;12401:26;;12467:2;12456:9;12452:18;12446:25;12436:35;;12511:2;12500:9;12496:18;12490:25;12480:35;;12215:306;;;;;:::o

Swarm Source

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