ETH Price: $2,937.95 (-4.44%)
Gas: 0.04 Gwei
 

Overview

Max Total Supply

100,000,000 BOPTIMUS

Holders

54

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
250,000 BOPTIMUS

Value
$0.00
0x292972a52c283042bb6989fff9ac58bc77066767
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:
babyoptimus

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-03-23
*/

/**

Baby Optimus (BOPTIMUS)

🤖 Baby Optimus Project: Pioneering AI-powered blockchain, 
honoring Elon's Optimus bot! 🔐Secure liquidity, 🎉meme magic, 
🌐Web3 expansion, 💰Optimus Rewards. 100% community-driven, 
transparent & innovative. Join the future!

Socials 

TG: https://t.me/babyoptimuseth
Twitter: https://twitter.com/babyoptimuseth
Website: https://babyoptimuseth.com
Medium: https://medium.com/@boptimuserc

/**
 *
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * ERC20 standard interface.
 */
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);
}

/**
 * Allows for contract ownership for multiple adressess
 */
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 account) public onlyOwner {
        authorizations[account] = true;
    }

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

/* Standard IDEXRouter */
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 for the DividendDistributor */
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;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    // EARN
    IERC20  OPTIMUS = IERC20(0x562E362876c8Aee4744FC2c6aaC8394C312d215d);
    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;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    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 = OPTIMUS.balanceOf(address(this));

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

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

        uint256 amount = OPTIMUS.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);
            OPTIMUS.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

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

/* Token contract */
contract babyoptimus is IERC20, Auth {
    using SafeMath for uint256;

    // Addresses
    address OPTIMUS = 0x562E362876c8Aee4744FC2c6aaC8394C312d215d; 
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV = 0x910A23d839Aa69F11cA535A206c689eb7509b9AC;

    // These are owner by default
    address private autoLiquidityReceiver;
    address private marketingFeeReceiver;

    // Name and symbol
    string constant _name = "Baby Optimus";
    string constant _symbol = "BOPTIMUS";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 100_000_000 * (10 ** _decimals); // 100m 

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = _totalSupply * 200 / 10000; // 2% 
    uint256 public _maxSellTxAmount = _totalSupply * 200 / 10000; // 2% 
    uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 10000; // 2% 

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public isBlacklisted;
    
    // Buy Fees
    uint256 public liquidityFeeBuy = 1; 
    uint256 public buybackFeeBuy = 0;
    uint256 public reflectionFeeBuy = 1;
    uint256 public marketingFeeBuy = 3;
    uint256 public devFeeBuy = 0;
    uint256 public totalFeeBuy = 5;

    // Sell fees
    uint256 public liquidityFeeSell = 1;
    uint256 public buybackFeeSell = 0;
    uint256 public reflectionFeeSell = 1;
    uint256 public marketingFeeSell = 3;
    uint256 public devFeeSell = 0;
    uint256 public totalFeeSell = 5;

    // Fee variables
    uint256 liquidityFee;
    uint256 buybackFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 devFee;
    uint256 totalFee;
    uint256 feeDenominator = 100;

    // GREED
    uint256 GREEDTriggeredAt;
    uint256 GREEDDuration = 3600;
    
    // Dead blocks
    uint256 deadBlocks = 0;

    // Sell amount of tokens when a sell takes place
    uint256 public swapThreshold = _totalSupply * 50 / 10000; // 0.5% of supply

    // Liquidity
    uint256 targetLiquidity = 200;
    uint256 targetLiquidityDenominator = 100;

    // Buyback settings
    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    bool public autoBuybackMultiplier = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 30;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = true;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    /* Token constructor */
    constructor () Auth(msg.sender) {

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[DEV] = true;
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _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; }
    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, type(uint256).max);
    }

    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] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    // settting the max wallet in percentages
    // NOTE: 1% = 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    // Main transfer function
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if address is blacklisted
        require(!isBlacklisted[recipient] && !isBlacklisted[sender], 'Address is blacklisted');

        // Check if buying or selling
        bool isSell = recipient == pair; 

        // Set buy or sell fees
        setCorrectFees(isSell);

        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
   
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we are in GREEDTime
        bool GREEDMode = inGREEDTime();

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

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

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, isSell, GREEDMode) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        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;
    }

    // Do a normal transfer
    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;
    }

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            buybackFee = buybackFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            devFee = devFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            buybackFee = buybackFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            devFee = devFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check if we are in GREED time
    function inGREEDTime() public view returns (bool){
        if(GREEDTriggeredAt.add(GREEDDuration) > block.timestamp){
            return true;
        } else {
            return false;
        }
    }


    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != DEV){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Get total fee's or multiplication of fees
    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return totalFee;
    }

    // Get a multiplied fee when buybackMultiplier is active
    function getMultipliedFee() public view returns (uint256) {
        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));
    }

    // Take the normal total Fee or the GREED Fee
    function takeFee(address sender, uint256 amount, bool isSell, bool GREEDMode) internal returns (uint256) {
        uint256 feeAmount;
        
        // Check if we are GREEDd
        if (GREEDMode){
            if(isSell){
                // We are selling so up the selling tax to 1.5x
                feeAmount = amount.mul(totalFee).mul(3).div(2).div(feeDenominator);
            } else {
                // We are buying so cut our taxes in half
                feeAmount = amount.mul(totalFee).div(2).div(feeDenominator);
            }
        } else {
            feeAmount = amount.mul(totalFee).div(feeDenominator);
        }

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

        return amount.sub(feeAmount);
    }

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

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        launch();
    }

    // Enable GREED
    function enableGREED(uint256 _seconds) public authorized {
        GREEDTriggeredAt = block.timestamp;
        GREEDDuration = _seconds;
    }

    // Disable the GREED mode
    function disableGREED() external authorized {
        GREEDTriggeredAt = 0;
    }

    // Enable/disable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public authorized {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Blacklist/unblacklist an address
    function blacklistAddress(address _address, bool _value) public authorized{
        isBlacklisted[_address] = _value;
    }

    // Main swapback to sell tokens for WETH
    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);
        uint256 amountETHDev = amountETH.mul(devFee).div(totalETHFee); 


        try distributor.deposit{value: amountETHReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (bool successDev, /* bytes memory data */) = payable(DEV).call{value: amountETHDev, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successDev, "dev receiver rejected ETH transfer");

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

    // Check if autoBuyback is enabled
    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && address(this).balance >= autoBuybackAmount;
    }

    // Trigger a manual buyback
    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external {
        uint256 amountWithDecimals = amount * (10 ** 18);
        uint256 amountToBuy = amountWithDecimals.div(100);
        buyTokens(amountToBuy, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    // Stop the buyback Multiplier
    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    // Trigger an autobuyback
    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        if(autoBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    // Buy amount of tokens with ETH from the contract
    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
        );
    }

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

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

    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external authorized {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external authorized {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    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]);
        }
    }

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

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _buybackFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _devFeeBuy, uint256 _feeDenominator) external authorized {
        liquidityFeeBuy = _liquidityFeeBuy;
        buybackFeeBuy = _buybackFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        devFeeBuy = _devFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_buybackFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy).add(_devFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _buybackFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _devFeeSell, uint256 _feeDenominator) external authorized {
        liquidityFeeSell = _liquidityFeeSell;
        buybackFeeSell = _buybackFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;
        devFeeSell = _devFeeSell;
        totalFeeSell = _liquidityFeeSell.add(_buybackFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell).add(_devFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

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

    // Send ETH to marketingwallet
    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there dividend
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

    // Get if we are over liquified or not
    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

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackMultiplier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"enableGREED","outputs":[],"stateMutability":"nonpayable","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":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inGREEDTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","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":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"internalType":"bool","name":"_autoBuybackMultiplier","type":"bool"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","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":"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":"setIsTimelockExempt","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":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","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":[],"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":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673562e362876c8aee4744fc2c6aac8394c312d215d1790915560038054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560048054821661dead17905560058054821690556006805490911673910a23d839aa69f11ca535a206c689eb7509b9ac1790556200008c6012600a62000569565b6200009c906305f5e1006200062a565b60095561271060095460c8620000b391906200062a565b620000bf9190620004fd565b600a5561271060095460c8620000d691906200062a565b620000e29190620004fd565b600b5561271060095460c8620000f991906200062a565b620001059190620004fd565b600c556001601455600060155560016016556003601755600060185560056019556001601a556000601b556001601c556003601d556000601e556005601f556064602655610e10602855600060295561271060095460326200016891906200062a565b620001749190620004fd565b602a5560c8602b8190556064602c819055602d91909155602e556107086030556031805461ffff199081169091556207a120603855603980548216611e00179055603e8054909116610101179055348015620001cf57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155603b8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200025157600080fd5b505afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c9190620004cb565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002d957600080fd5b505af1158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003149190620004cb565b603c80546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320603b80548616855292529182902060001990555490519116906200036690620004bd565b6001600160a01b039091168152602001604051809103906000f08015801562000393573d6000803e3d6000fd5b50603780546001600160a01b03199081166001600160a01b0393841617909155336000818152600f60209081526040808320805460ff199081166001908117909255601084528285208054821683179055601184528285208054821683179055600480548916865283862080548316841790553080875284872080548416851790556006548a1687528487208054841685179055603c548a1687526012865284872080548416851790558652838620805483168417905554909716845281842080549097161790955560078054851684179055600880549094168317909355600954828252600d84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000662565b611068806200381883390190565b600060208284031215620004de57600080fd5b81516001600160a01b0381168114620004f657600080fd5b9392505050565b6000826200051b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005615781600019048211156200054557620005456200064c565b808516156200055357918102915b93841c939080029062000525565b509250929050565b6000620004f660ff841683600082620005855750600162000624565b81620005945750600062000624565b8160018114620005ad5760028114620005b857620005d8565b600191505062000624565b60ff841115620005cc57620005cc6200064c565b50506001821b62000624565b5060208310610133831016604e8410600b8410161715620005fd575081810a62000624565b62000609838362000520565b80600019048211156200062057620006206200064c565b0290505b92915050565b60008160001904831182151516156200064757620006476200064c565b500290565b634e487b7160e01b600052601160045260246000fd5b6131a680620006726000396000f3fe6080604052600436106104355760003560e01c80637affa29b11610229578063d806d12f1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610c8d578063fb5f27fb14610cad578063fe575a8714610cc3578063fe9fbb8014610cf3578063ffb54a9914610d1357600080fd5b8063f2fde38b14610bf8578063f429389014610c18578063f708a64f14610c2d578063f74c9f4714610c4d578063f84ba65d14610c6d57600080fd5b8063e1dcc71f116100fd578063e1dcc71f14610b64578063e3aa51bc14610b83578063f0b37c0414610ba3578063f0fc6bca14610bc3578063f1f3bca314610bd857600080fd5b8063d806d12f14610ac9578063dd62ed3e14610ade578063df20fd4914610b24578063df4a76c514610b4457600080fd5b8063a9059cbb116101b1578063ba876bb911610180578063ba876bb914610a47578063bf56b37114610a67578063cdba31fd14610a7d578063cf4be39414610a93578063d51ed1c814610aa957600080fd5b8063a9059cbb146109dc578063ac45ed1c146109fc578063b210b06d14610a12578063b6a5d7de14610a2757600080fd5b8063893d20e8116101f8578063893d20e81461091957806395d89b411461094b5780639d1944f51461097c578063a4b45c001461099c578063a8aa1b31146109bc57600080fd5b80637affa29b146108a357806382334b94146108c357806382bf293c146108e357806382d201161461090357600080fd5b80632f54bf6e1161033a5780634f7b4d49116102c2578063658d4b7f11610286578063658d4b7f146107f95780636ddd17131461081957806370a0823114610838578063722b62ad1461086e57806378109e541461088d57600080fd5b80634f7b4d491461077457806350db71fb1461078957806353148416146107a9578063571ac8b0146107bf578063617fe0ed146107df57600080fd5b806337bc957e1161030957806337bc957e146106f95780633bb8a8d41461070f578063409d056614610729578063455a43961461073f5780634dfc855a1461075f57600080fd5b80632f54bf6e146106725780632f5620d1146106a1578063313ce567146106c157806333477327146106e357600080fd5b806318160ddd116103bd57806328fd31981161038c57806328fd3198146105e75780632b112e49146106075780632d48e8961461061c5780632d5945671461063c5780632e4a9bd71461065c57600080fd5b806318160ddd14610572578063201e7991146105875780632375ce40146105a757806323b872dd146105c757600080fd5b806310075a691161040457806310075a69146104fa5780631107b3a5146105105780631161ae391461052657806312835c5e1461054657806313374e7a1461055c57600080fd5b80630445b6671461044157806306fdde031461046a578063095ea7b3146104a85780630d295980146104d857600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b50610457602a5481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b5060408051808201909152600c81526b42616279204f7074696d757360a01b60208201525b6040516104619190612fe9565b3480156104b457600080fd5b506104c86104c3366004612d77565b610d2d565b6040519015158152602001610461565b3480156104e457600080fd5b506104f86104f3366004612da3565b610d9a565b005b34801561050657600080fd5b5061045760175481565b34801561051c57600080fd5b50610457601a5481565b34801561053257600080fd5b506104c8610541366004612eb1565b610de5565b34801561055257600080fd5b50610457601e5481565b34801561056857600080fd5b50610457601d5481565b34801561057e57600080fd5b50600954610457565b34801561059357600080fd5b506104f86105a2366004612eb1565b610df9565b3480156105b357600080fd5b506104f86105c2366004612ed3565b610e29565b3480156105d357600080fd5b506104c86105e2366004612d01565b610e7e565b3480156105f357600080fd5b50610457610602366004612cab565b610f40565b34801561061357600080fd5b50610457610fbe565b34801561062857600080fd5b506104f8610637366004612eb1565b611010565b34801561064857600080fd5b506104f8610657366004612e2a565b61109f565b34801561066857600080fd5b5061045760155481565b34801561067e57600080fd5b506104c861068d366004612cab565b6000546001600160a01b0391821691161490565b3480156106ad57600080fd5b506104f86106bc366004612dda565b6110eb565b3480156106cd57600080fd5b5060125b60405160ff9091168152602001610461565b3480156106ef57600080fd5b50610457600a5481565b34801561070557600080fd5b50610457601b5481565b34801561071b57600080fd5b506031546104c89060ff1681565b34801561073557600080fd5b5061045760165481565b34801561074b57600080fd5b506104f861075a366004612d42565b611151565b34801561076b57600080fd5b506104c86111a1565b34801561078057600080fd5b506104f86111cd565b34801561079557600080fd5b506104f86107a4366004612d42565b6111f9565b3480156107b557600080fd5b50610457601f5481565b3480156107cb57600080fd5b506104c86107da366004612cab565b611249565b3480156107eb57600080fd5b506039546104c89060ff1681565b34801561080557600080fd5b506104f8610814366004612d42565b611257565b34801561082557600080fd5b50603e546104c890610100900460ff1681565b34801561084457600080fd5b50610457610853366004612cab565b6001600160a01b03166000908152600d602052604090205490565b34801561087a57600080fd5b506039546106d190610100900460ff1681565b34801561089957600080fd5b50610457600c5481565b3480156108af57600080fd5b506104f86108be366004612e5c565b6112a7565b3480156108cf57600080fd5b506104f86108de366004612e8e565b6112f3565b3480156108ef57600080fd5b506104f86108fe366004612e5c565b611377565b34801561090f57600080fd5b5061045760145481565b34801561092557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610461565b34801561095757600080fd5b50604080518082019091526008815267424f5054494d555360c01b602082015261049b565b34801561098857600080fd5b506104f8610997366004612e5c565b6113c2565b3480156109a857600080fd5b506104f86109b7366004612cc8565b6113fb565b3480156109c857600080fd5b50603c54610933906001600160a01b031681565b3480156109e857600080fd5b506104c86109f7366004612d77565b61144e565b348015610a0857600080fd5b50610457601c5481565b348015610a1e57600080fd5b506104f861145b565b348015610a3357600080fd5b506104f8610a42366004612cab565b611487565b348015610a5357600080fd5b506104f8610a62366004612f2d565b6114d8565b348015610a7357600080fd5b50610457603d5481565b348015610a8957600080fd5b5061045760185481565b348015610a9f57600080fd5b50610457600b5481565b348015610ab557600080fd5b50610457610ac4366004612e5c565b61153b565b348015610ad557600080fd5b5061045761157c565b348015610aea57600080fd5b50610457610af9366004612cc8565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b3057600080fd5b506104f8610b3f366004612dbe565b6115ef565b348015610b5057600080fd5b506104f8610b5f366004612e5c565b61164a565b348015610b7057600080fd5b506031546104c890610100900460ff1681565b348015610b8f57600080fd5b506104f8610b9e366004612e5c565b611690565b348015610baf57600080fd5b506104f8610bbe366004612cab565b6116be565b348015610bcf57600080fd5b506104f8611709565b348015610be457600080fd5b50610457610bf3366004612da3565b611762565b348015610c0457600080fd5b506104f8610c13366004612cab565b6117bf565b348015610c2457600080fd5b506104f8611855565b348015610c3957600080fd5b506104f8610c48366004612d42565b6118b8565b348015610c5957600080fd5b506104f8610c68366004612f2d565b6119bc565b348015610c7957600080fd5b506104f8610c88366004612d42565b611a19565b348015610c9957600080fd5b50603b54610933906001600160a01b031681565b348015610cb957600080fd5b5061045760195481565b348015610ccf57600080fd5b506104c8610cde366004612cab565b60136020526000908152604090205460ff1681565b348015610cff57600080fd5b506104c8610d0e366004612cab565b611a69565b348015610d1f57600080fd5b50603e546104c89060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d889086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610dc49061303e565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610df18361153b565b119392505050565b610e0233611a69565b610e1e5760405162461bcd60e51b8152600401610dc49061305e565b602b91909155602c55565b610e3233611a69565b610e4e5760405162461bcd60e51b8152600401610dc49061305e565b6002610e5a83856130d7565b11158015610e6757508183115b610e7057600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f2b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f06918490611a87565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f36848484611ac1565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610f8657600080fd5b505afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190612e75565b6005546001600160a01b03166000908152600d602052604081205461100b906004546001600160a01b03166000908152600d60205260409020546110059060095490611f0f565b90611f0f565b905090565b61101933611a69565b6110355760405162461bcd60e51b8152600401610dc49061305e565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050505050565b6110a833611a69565b6110c45760405162461bcd60e51b8152600401610dc49061305e565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110f433611a69565b6111105760405162461bcd60e51b8152600401610dc49061305e565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b61115a33611a69565b6111765760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000426111bb602854602754611f5190919063ffffffff16565b11156111c75750600190565b50600090565b6111d633611a69565b6111f25760405162461bcd60e51b8152600401610dc49061305e565b6000602755565b61120233611a69565b61121e5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610d9482600019610d2d565b61126033611a69565b61127c5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6112b033611a69565b6112cc5760405162461bcd60e51b8152600401610dc49061305e565b6112ed6127106112e783600954611fb090919063ffffffff16565b9061202f565b600a5550565b600061130783670de0b6b3a76400006130f9565b9050600061131682606461202f565b6004549091506113309082906001600160a01b0316612071565b82156113715742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610dc49061303e565b6113bc6127106112e783600954611fb090919063ffffffff16565b600c5550565b6113cb33611a69565b6113e75760405162461bcd60e51b8152600401610dc49061305e565b620b71b081106113f657600080fd5b603855565b61140433611a69565b6114205760405162461bcd60e51b8152600401610dc49061305e565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f39338484611ac1565b61146433611a69565b6114805760405162461bcd60e51b8152600401610dc49061305e565b6000602f55565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610dc49061303e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6114e133611a69565b6114fd5760405162461bcd60e51b8152600401610dc49061305e565b601a869055601b859055601c849055601d839055601e82905561152e82611528858188818c8c611f51565b90611f51565b601f556026555050505050565b6000610d94611548610fbe565b603c546001600160a01b03166000908152600d60205260409020546112e790611575906002905b90611fb0565b8590611fb0565b60008061159a42611005603054602f54611f5190919063ffffffff16565b905060006115c1602554611005602e546112e7602d54602554611fb090919063ffffffff16565b90506115e86115df6030546112e78585611fb090919063ffffffff16565b60255490611f51565b9250505090565b6115f833611a69565b6116145760405162461bcd60e51b8152600401610dc49061305e565b603e805461ff00191661010084151502179055600954612710906116399083906130f9565b61164391906130d7565b602a555050565b61165333611a69565b61166f5760405162461bcd60e51b8152600401610dc49061305e565b61168a6127106112e783600954611fb090919063ffffffff16565b600b5550565b61169933611a69565b6116b55760405162461bcd60e51b8152600401610dc49061305e565b42602755602855565b6000546001600160a01b031633146116e85760405162461bcd60e51b8152600401610dc49061303e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561174e57600080fd5b505af1158015611371573d6000803e3d6000fd5b600043602954603d5461177591906130bf565b1061178857602654610d94906001611f0f565b8180156117aa5750426117a8603054602f54611f5190919063ffffffff16565b115b156117b757610d9461157c565b505060255490565b6000546001600160a01b031633146117e95760405162461bcd60e51b8152600401610dc49061303e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61185e33611a69565b61187a5760405162461bcd60e51b8152600401610dc49061305e565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118b4573d6000803e3d6000fd5b5050565b6118c133611a69565b6118dd5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03821630148015906119045750603c546001600160a01b03838116911614155b61190d57600080fd5b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561197357603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611069565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611069565b6119c533611a69565b6119e15760405162461bcd60e51b8152600401610dc49061305e565b60148690556015859055601684905560178390556018829055611a0c82611528858188818c8c611f51565b6019556026555050505050565b611a2233611a69565b611a3e5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611aab5760405162461bcd60e51b8152600401610dc49190612fe9565b506000611ab88486613118565b95945050505050565b603e5460009062010000900460ff1615611ae757611ae0848484612180565b9050610f39565b6001600160a01b03841660009081526001602052604090205460ff16158015611b2957506001600160a01b03831660009081526001602052604090205460ff16155b15611b8057603e5460ff16611b805760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610dc4565b6001600160a01b03831660009081526013602052604090205460ff16158015611bc257506001600160a01b03841660009081526013602052604090205460ff16155b611c075760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610dc4565b603c546001600160a01b03848116911614611c2181612266565b611c2c8585856122ba565b611c36858561242c565b611c428584868461250e565b6000611c4c6111a1565b9050611c56612646565b15611c6357611c636126a0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611cb5918690611a87565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611cea5784611cf6565b611cf687868585612b68565b6001600160a01b0387166000908152600d6020526040902054909150611d1c9082611f51565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611dc0576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611dad57600080fd5b505af1925050508015611dbe575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611e51576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e3e57600080fd5b505af1925050508015611e4f575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611e899160040190815260200190565b600060405180830381600087803b158015611ea357600080fd5b505af1925050508015611eb4575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611efa91815260200190565b60405180910390a35060019695505050505050565b6000610f3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b600080611f5e83856130bf565b905083811015610f395760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dc4565b600082611fbf57506000610d94565b6000611fcb83856130f9565b905082611fd885836130d7565b14610f395760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dc4565b6000610f3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c68565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906120c3576120c3613145565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120f7576120f7613145565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de9590859061213d90600090869088904290600401612fb4565b6000604051808303818588803b15801561215657600080fd5b505af115801561216a573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d909152918220546121d1918490611a87565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122009083611f51565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122549086815260200190565b60405180910390a35060019392505050565b801561229357601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff161580156122f157506000546001600160a01b03838116911614155b801561230657506001600160a01b0382163014155b801561232057506004546001600160a01b03838116911614155b801561233a5750603c546001600160a01b03838116911614155b801561235457506008546001600160a01b03838116911614155b801561236e57506007546001600160a01b03838116911614155b801561238857506006546001600160a01b03838116911614155b15612427576001600160a01b0382166000908152600d6020526040902054600c546123b383836130bf565b11156113715760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610dc4565b505050565b603c546001600160a01b03838116911614801561244b575060395460ff165b801561247057506001600160a01b03811660009081526011602052604090205460ff16155b156118b4576001600160a01b0381166000908152603a602052604090205442116124dc5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610dc4565b6039546124f190610100900460ff16426130bf565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113715780156125ba57600b548311158061255257506001600160a01b03841660009081526010602052604090205460ff165b8061257557506001600160a01b03821660009081526010602052604090205460ff165b6125b55760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dc4565b611371565b600a54831115806125e357506001600160a01b03841660009081526010602052604090205460ff165b8061260657506001600160a01b03821660009081526010602052604090205460ff165b6113715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dc4565b603c546000906001600160a01b0316331480159061266d5750603e5462010000900460ff16155b80156126805750603e54610100900460ff165b801561100b575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c546000916126c391610de5565b6126cf576020546126d2565b60005b905060006126f660026112e76025546112e786602a54611fb090919063ffffffff16565b9050600061270f82602a54611f0f90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061274957612749613145565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061277a5761277a613145565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906127c4908690600090879030904290600401613083565b600060405180830381600087803b1580156127de57600080fd5b505af11580156127f2573d6000803e3d6000fd5b50505050600061280b8247611f0f90919063ffffffff16565b9050600061282661281d88600261202f565b60255490611f0f565b9050600061283b60026112e78481878d611fb0565b90506000612858836112e760225487611fb090919063ffffffff16565b90506000612875846112e760235488611fb090919063ffffffff16565b90506000612892856112e760245489611fb090919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128e457600080fd5b505af1935050505080156128f6575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612949576040519150601f19603f3d011682016040523d82523d6000602084013e61294e565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146129a7576040519150601f19603f3d011682016040523d82523d6000602084013e6129ac565b606091505b5050905081612a0e5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610dc4565b80612a665760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610dc4565b8b15612b4d57603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015612ad757600080fd5b505af1158015612aeb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b109190612eff565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612bc3578315612ba357612b9c6026546112e760026112e7600361156f6025548c611fb090919063ffffffff16565b9050612be1565b612b9c6026546112e760026112e76025548a611fb090919063ffffffff16565b612bde6026546112e760255488611fb090919063ffffffff16565b90505b306000908152600d6020526040902054612bfb9082611f51565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c4c9085815260200190565b60405180910390a3612c5e8582611f0f565b9695505050505050565b60008183612c895760405162461bcd60e51b8152600401610dc49190612fe9565b506000611ab884866130d7565b80358015158114612ca657600080fd5b919050565b600060208284031215612cbd57600080fd5b8135610f398161315b565b60008060408385031215612cdb57600080fd5b8235612ce68161315b565b91506020830135612cf68161315b565b809150509250929050565b600080600060608486031215612d1657600080fd5b8335612d218161315b565b92506020840135612d318161315b565b929592945050506040919091013590565b60008060408385031215612d5557600080fd5b8235612d608161315b565b9150612d6e60208401612c96565b90509250929050565b60008060408385031215612d8a57600080fd5b8235612d958161315b565b946020939093013593505050565b600060208284031215612db557600080fd5b610f3982612c96565b60008060408385031215612dd157600080fd5b612d9583612c96565b600080600080600060a08688031215612df257600080fd5b612dfb86612c96565b9450602086013593506040860135925060608601359150612e1e60808701612c96565b90509295509295909350565b60008060408385031215612e3d57600080fd5b612e4683612c96565b9150602083013560ff81168114612cf657600080fd5b600060208284031215612e6e57600080fd5b5035919050565b600060208284031215612e8757600080fd5b5051919050565b60008060408385031215612ea157600080fd5b82359150612d6e60208401612c96565b60008060408385031215612ec457600080fd5b50508035926020909101359150565b600080600060608486031215612ee857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f1457600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215612f4657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015612fa95781516001600160a01b031687529582019590820190600101612f84565b509495945050505050565b848152608060208201526000612fcd6080830186612f70565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b8181101561301657858101830151858201604001528201612ffa565b81811115613028576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a0604082015260006130a260a0830186612f70565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130d2576130d261312f565b500190565b6000826130f457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131135761311361312f565b500290565b60008282101561312a5761312a61312f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610de257600080fdfea264697066735822122035cc5cd6aefacdb2cc90743d5b63c9e1951975ac9e6022ed14cb956cb7a60e4064736f6c634300080700336080604052600180546001600160a01b031990811673562e362876c8aee4744fc2c6aac8394c312d215d179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e5534801561007a57600080fd5b50604051611068380380611068833981016040819052610099916100f3565b6001600160a01b0381166100c157737a250d5630b4cf539739df2c5dacb4c659f2488d6100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f36806101326000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461022e578063efca2eed14610244578063ffb2c4791461025a578063ffd49c841461027a57600080fd5b8063997664d7146101b9578063ce7c2ac2146101cf578063d0e30db01461022657600080fd5b806328fd3198116100bb57806328fd31981461014d5780632d48e8961461016d5780633a98ef391461018d5780634fab0ae8146101a357600080fd5b806311ce023d146100e257806314b6ca961461010b57806315f7e05e1461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610cd4565b610290565b005b34801561013957600080fd5b5061012b610148366004610cb9565b610408565b34801561015957600080fd5b506100f8610168366004610cb9565b61042b565b34801561017957600080fd5b5061012b610188366004610d52565b6104b4565b34801561019957600080fd5b506100f860085481565b3480156101af57600080fd5b506100f8600e5481565b3480156101c557600080fd5b506100f860095481565b3480156101db57600080fd5b5061020b6101ea366004610cb9565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104d6565b34801561023a57600080fd5b506100f8600b5481565b34801561025057600080fd5b506100f8600a5481565b34801561026657600080fd5b5061012b610275366004610d20565b610723565b34801561028657600080fd5b506100f8600d5481565b6000546001600160a01b031633146102a757600080fd5b6001600160a01b038216600090815260076020526040902054156102ce576102ce82610823565b6000811180156102f457506001600160a01b038216600090815260076020526040902054155b1561035a57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561038d565b8015801561037f57506001600160a01b03821660009081526007602052604090205415155b1561038d5761038d8261094e565b6001600160a01b0382166000908152600760205260409020546008546103be9183916103b891610a63565b90610aae565b6008556001600160a01b03821660009081526007602052604090208190556103e581610b12565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461041f57600080fd5b61042881610823565b50565b6001600160a01b03811660009081526007602052604081205461045057506000919050565b6001600160a01b03821660009081526007602052604081205461047290610b12565b6001600160a01b0384166000908152600760205260409020600101549091508082116104a2575060009392505050565b6104ac8282610a63565b949350505050565b6000546001600160a01b031633146104cb57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104ed57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561053157600080fd5b505afa158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610d39565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906105af576105af610eea565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105df576105df610eea565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061062590600090869030904290600401610d74565b6000604051808303818588803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106e193508692506001600160a01b03909116906370a082319060240160206040518083038186803b1580156106a357600080fd5b505afa1580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db9190610d39565b90610a63565b6009549091506106f19082610aae565b600955600854600c5461071b916107129161070c9085610b2f565b90610bae565b600b5490610aae565b600b55505050565b6000546001600160a01b0316331461073a57600080fd5b60045480610746575050565b6000805a905060005b848310801561075d57508381105b1561081c5783600f5410610771576000600f555b6107a36004600f548154811061078957610789610eea565b6000918252602090912001546001600160a01b0316610bf0565b156107da576107da6004600f54815481106107c0576107c0610eea565b6000918252602090912001546001600160a01b0316610823565b6107ef6107e85a8490610a63565b8490610aae565b92505a600f8054919350600061080483610ea3565b9190505550808061081490610ea3565b91505061074f565b5050505050565b6001600160a01b0381166000908152600760205260409020546108435750565b600061084e8261042b565b9050801561094a57600a546108639082610aae565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190610cfe565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109209082610aae565b6001600160a01b03831660009081526007602052604090206002810191909155546103e590610b12565b5050565b6004805461095e90600190610e8c565b8154811061096e5761096e610eea565b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109ac576109ac610eea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109f890600190610e8c565b81548110610a0857610a08610eea565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a3e57610a3e610ed4565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610aa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c35565b90505b92915050565b600080610abb8385610e33565b905083811015610aa55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610aa8600c5461070c600b5485610b2f90919063ffffffff16565b600082610b3e57506000610aa8565b6000610b4a8385610e6d565b905082610b578583610e4b565b14610aa55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b09565b6000610aa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c6f565b600d546001600160a01b03821660009081526006602052604081205490914291610c1a9190610e33565b108015610aa85750600e54610c2e8361042b565b1192915050565b60008184841115610c595760405162461bcd60e51b8152600401610b099190610dde565b506000610c668486610e8c565b95945050505050565b60008183610c905760405162461bcd60e51b8152600401610b099190610dde565b506000610c668486610e4b565b80356001600160a01b0381168114610cb457600080fd5b919050565b600060208284031215610ccb57600080fd5b610aa582610c9d565b60008060408385031215610ce757600080fd5b610cf083610c9d565b946020939093013593505050565b600060208284031215610d1057600080fd5b81518015158114610aa557600080fd5b600060208284031215610d3257600080fd5b5035919050565b600060208284031215610d4b57600080fd5b5051919050565b60008060408385031215610d6557600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610dbe5784516001600160a01b031683529383019391830191600101610d99565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610e0b57858101830151858201604001528201610def565b81811115610e1d576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e4657610e46610ebe565b500190565b600082610e6857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e8757610e87610ebe565b500290565b600082821015610e9e57610e9e610ebe565b500390565b6000600019821415610eb757610eb7610ebe565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220ee9758b529db9416879e3b674955e4ce3d167227966d0dc42e50008a882503cb64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104355760003560e01c80637affa29b11610229578063d806d12f1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610c8d578063fb5f27fb14610cad578063fe575a8714610cc3578063fe9fbb8014610cf3578063ffb54a9914610d1357600080fd5b8063f2fde38b14610bf8578063f429389014610c18578063f708a64f14610c2d578063f74c9f4714610c4d578063f84ba65d14610c6d57600080fd5b8063e1dcc71f116100fd578063e1dcc71f14610b64578063e3aa51bc14610b83578063f0b37c0414610ba3578063f0fc6bca14610bc3578063f1f3bca314610bd857600080fd5b8063d806d12f14610ac9578063dd62ed3e14610ade578063df20fd4914610b24578063df4a76c514610b4457600080fd5b8063a9059cbb116101b1578063ba876bb911610180578063ba876bb914610a47578063bf56b37114610a67578063cdba31fd14610a7d578063cf4be39414610a93578063d51ed1c814610aa957600080fd5b8063a9059cbb146109dc578063ac45ed1c146109fc578063b210b06d14610a12578063b6a5d7de14610a2757600080fd5b8063893d20e8116101f8578063893d20e81461091957806395d89b411461094b5780639d1944f51461097c578063a4b45c001461099c578063a8aa1b31146109bc57600080fd5b80637affa29b146108a357806382334b94146108c357806382bf293c146108e357806382d201161461090357600080fd5b80632f54bf6e1161033a5780634f7b4d49116102c2578063658d4b7f11610286578063658d4b7f146107f95780636ddd17131461081957806370a0823114610838578063722b62ad1461086e57806378109e541461088d57600080fd5b80634f7b4d491461077457806350db71fb1461078957806353148416146107a9578063571ac8b0146107bf578063617fe0ed146107df57600080fd5b806337bc957e1161030957806337bc957e146106f95780633bb8a8d41461070f578063409d056614610729578063455a43961461073f5780634dfc855a1461075f57600080fd5b80632f54bf6e146106725780632f5620d1146106a1578063313ce567146106c157806333477327146106e357600080fd5b806318160ddd116103bd57806328fd31981161038c57806328fd3198146105e75780632b112e49146106075780632d48e8961461061c5780632d5945671461063c5780632e4a9bd71461065c57600080fd5b806318160ddd14610572578063201e7991146105875780632375ce40146105a757806323b872dd146105c757600080fd5b806310075a691161040457806310075a69146104fa5780631107b3a5146105105780631161ae391461052657806312835c5e1461054657806313374e7a1461055c57600080fd5b80630445b6671461044157806306fdde031461046a578063095ea7b3146104a85780630d295980146104d857600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b50610457602a5481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b5060408051808201909152600c81526b42616279204f7074696d757360a01b60208201525b6040516104619190612fe9565b3480156104b457600080fd5b506104c86104c3366004612d77565b610d2d565b6040519015158152602001610461565b3480156104e457600080fd5b506104f86104f3366004612da3565b610d9a565b005b34801561050657600080fd5b5061045760175481565b34801561051c57600080fd5b50610457601a5481565b34801561053257600080fd5b506104c8610541366004612eb1565b610de5565b34801561055257600080fd5b50610457601e5481565b34801561056857600080fd5b50610457601d5481565b34801561057e57600080fd5b50600954610457565b34801561059357600080fd5b506104f86105a2366004612eb1565b610df9565b3480156105b357600080fd5b506104f86105c2366004612ed3565b610e29565b3480156105d357600080fd5b506104c86105e2366004612d01565b610e7e565b3480156105f357600080fd5b50610457610602366004612cab565b610f40565b34801561061357600080fd5b50610457610fbe565b34801561062857600080fd5b506104f8610637366004612eb1565b611010565b34801561064857600080fd5b506104f8610657366004612e2a565b61109f565b34801561066857600080fd5b5061045760155481565b34801561067e57600080fd5b506104c861068d366004612cab565b6000546001600160a01b0391821691161490565b3480156106ad57600080fd5b506104f86106bc366004612dda565b6110eb565b3480156106cd57600080fd5b5060125b60405160ff9091168152602001610461565b3480156106ef57600080fd5b50610457600a5481565b34801561070557600080fd5b50610457601b5481565b34801561071b57600080fd5b506031546104c89060ff1681565b34801561073557600080fd5b5061045760165481565b34801561074b57600080fd5b506104f861075a366004612d42565b611151565b34801561076b57600080fd5b506104c86111a1565b34801561078057600080fd5b506104f86111cd565b34801561079557600080fd5b506104f86107a4366004612d42565b6111f9565b3480156107b557600080fd5b50610457601f5481565b3480156107cb57600080fd5b506104c86107da366004612cab565b611249565b3480156107eb57600080fd5b506039546104c89060ff1681565b34801561080557600080fd5b506104f8610814366004612d42565b611257565b34801561082557600080fd5b50603e546104c890610100900460ff1681565b34801561084457600080fd5b50610457610853366004612cab565b6001600160a01b03166000908152600d602052604090205490565b34801561087a57600080fd5b506039546106d190610100900460ff1681565b34801561089957600080fd5b50610457600c5481565b3480156108af57600080fd5b506104f86108be366004612e5c565b6112a7565b3480156108cf57600080fd5b506104f86108de366004612e8e565b6112f3565b3480156108ef57600080fd5b506104f86108fe366004612e5c565b611377565b34801561090f57600080fd5b5061045760145481565b34801561092557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610461565b34801561095757600080fd5b50604080518082019091526008815267424f5054494d555360c01b602082015261049b565b34801561098857600080fd5b506104f8610997366004612e5c565b6113c2565b3480156109a857600080fd5b506104f86109b7366004612cc8565b6113fb565b3480156109c857600080fd5b50603c54610933906001600160a01b031681565b3480156109e857600080fd5b506104c86109f7366004612d77565b61144e565b348015610a0857600080fd5b50610457601c5481565b348015610a1e57600080fd5b506104f861145b565b348015610a3357600080fd5b506104f8610a42366004612cab565b611487565b348015610a5357600080fd5b506104f8610a62366004612f2d565b6114d8565b348015610a7357600080fd5b50610457603d5481565b348015610a8957600080fd5b5061045760185481565b348015610a9f57600080fd5b50610457600b5481565b348015610ab557600080fd5b50610457610ac4366004612e5c565b61153b565b348015610ad557600080fd5b5061045761157c565b348015610aea57600080fd5b50610457610af9366004612cc8565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b3057600080fd5b506104f8610b3f366004612dbe565b6115ef565b348015610b5057600080fd5b506104f8610b5f366004612e5c565b61164a565b348015610b7057600080fd5b506031546104c890610100900460ff1681565b348015610b8f57600080fd5b506104f8610b9e366004612e5c565b611690565b348015610baf57600080fd5b506104f8610bbe366004612cab565b6116be565b348015610bcf57600080fd5b506104f8611709565b348015610be457600080fd5b50610457610bf3366004612da3565b611762565b348015610c0457600080fd5b506104f8610c13366004612cab565b6117bf565b348015610c2457600080fd5b506104f8611855565b348015610c3957600080fd5b506104f8610c48366004612d42565b6118b8565b348015610c5957600080fd5b506104f8610c68366004612f2d565b6119bc565b348015610c7957600080fd5b506104f8610c88366004612d42565b611a19565b348015610c9957600080fd5b50603b54610933906001600160a01b031681565b348015610cb957600080fd5b5061045760195481565b348015610ccf57600080fd5b506104c8610cde366004612cab565b60136020526000908152604090205460ff1681565b348015610cff57600080fd5b506104c8610d0e366004612cab565b611a69565b348015610d1f57600080fd5b50603e546104c89060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d889086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610dc49061303e565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610df18361153b565b119392505050565b610e0233611a69565b610e1e5760405162461bcd60e51b8152600401610dc49061305e565b602b91909155602c55565b610e3233611a69565b610e4e5760405162461bcd60e51b8152600401610dc49061305e565b6002610e5a83856130d7565b11158015610e6757508183115b610e7057600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f2b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f06918490611a87565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f36848484611ac1565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610f8657600080fd5b505afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190612e75565b6005546001600160a01b03166000908152600d602052604081205461100b906004546001600160a01b03166000908152600d60205260409020546110059060095490611f0f565b90611f0f565b905090565b61101933611a69565b6110355760405162461bcd60e51b8152600401610dc49061305e565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050505050565b6110a833611a69565b6110c45760405162461bcd60e51b8152600401610dc49061305e565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110f433611a69565b6111105760405162461bcd60e51b8152600401610dc49061305e565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b61115a33611a69565b6111765760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000426111bb602854602754611f5190919063ffffffff16565b11156111c75750600190565b50600090565b6111d633611a69565b6111f25760405162461bcd60e51b8152600401610dc49061305e565b6000602755565b61120233611a69565b61121e5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610d9482600019610d2d565b61126033611a69565b61127c5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6112b033611a69565b6112cc5760405162461bcd60e51b8152600401610dc49061305e565b6112ed6127106112e783600954611fb090919063ffffffff16565b9061202f565b600a5550565b600061130783670de0b6b3a76400006130f9565b9050600061131682606461202f565b6004549091506113309082906001600160a01b0316612071565b82156113715742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610dc49061303e565b6113bc6127106112e783600954611fb090919063ffffffff16565b600c5550565b6113cb33611a69565b6113e75760405162461bcd60e51b8152600401610dc49061305e565b620b71b081106113f657600080fd5b603855565b61140433611a69565b6114205760405162461bcd60e51b8152600401610dc49061305e565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f39338484611ac1565b61146433611a69565b6114805760405162461bcd60e51b8152600401610dc49061305e565b6000602f55565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610dc49061303e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6114e133611a69565b6114fd5760405162461bcd60e51b8152600401610dc49061305e565b601a869055601b859055601c849055601d839055601e82905561152e82611528858188818c8c611f51565b90611f51565b601f556026555050505050565b6000610d94611548610fbe565b603c546001600160a01b03166000908152600d60205260409020546112e790611575906002905b90611fb0565b8590611fb0565b60008061159a42611005603054602f54611f5190919063ffffffff16565b905060006115c1602554611005602e546112e7602d54602554611fb090919063ffffffff16565b90506115e86115df6030546112e78585611fb090919063ffffffff16565b60255490611f51565b9250505090565b6115f833611a69565b6116145760405162461bcd60e51b8152600401610dc49061305e565b603e805461ff00191661010084151502179055600954612710906116399083906130f9565b61164391906130d7565b602a555050565b61165333611a69565b61166f5760405162461bcd60e51b8152600401610dc49061305e565b61168a6127106112e783600954611fb090919063ffffffff16565b600b5550565b61169933611a69565b6116b55760405162461bcd60e51b8152600401610dc49061305e565b42602755602855565b6000546001600160a01b031633146116e85760405162461bcd60e51b8152600401610dc49061303e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561174e57600080fd5b505af1158015611371573d6000803e3d6000fd5b600043602954603d5461177591906130bf565b1061178857602654610d94906001611f0f565b8180156117aa5750426117a8603054602f54611f5190919063ffffffff16565b115b156117b757610d9461157c565b505060255490565b6000546001600160a01b031633146117e95760405162461bcd60e51b8152600401610dc49061303e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61185e33611a69565b61187a5760405162461bcd60e51b8152600401610dc49061305e565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118b4573d6000803e3d6000fd5b5050565b6118c133611a69565b6118dd5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03821630148015906119045750603c546001600160a01b03838116911614155b61190d57600080fd5b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561197357603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611069565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611069565b6119c533611a69565b6119e15760405162461bcd60e51b8152600401610dc49061305e565b60148690556015859055601684905560178390556018829055611a0c82611528858188818c8c611f51565b6019556026555050505050565b611a2233611a69565b611a3e5760405162461bcd60e51b8152600401610dc49061305e565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611aab5760405162461bcd60e51b8152600401610dc49190612fe9565b506000611ab88486613118565b95945050505050565b603e5460009062010000900460ff1615611ae757611ae0848484612180565b9050610f39565b6001600160a01b03841660009081526001602052604090205460ff16158015611b2957506001600160a01b03831660009081526001602052604090205460ff16155b15611b8057603e5460ff16611b805760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610dc4565b6001600160a01b03831660009081526013602052604090205460ff16158015611bc257506001600160a01b03841660009081526013602052604090205460ff16155b611c075760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610dc4565b603c546001600160a01b03848116911614611c2181612266565b611c2c8585856122ba565b611c36858561242c565b611c428584868461250e565b6000611c4c6111a1565b9050611c56612646565b15611c6357611c636126a0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611cb5918690611a87565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611cea5784611cf6565b611cf687868585612b68565b6001600160a01b0387166000908152600d6020526040902054909150611d1c9082611f51565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611dc0576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611dad57600080fd5b505af1925050508015611dbe575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611e51576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e3e57600080fd5b505af1925050508015611e4f575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611e899160040190815260200190565b600060405180830381600087803b158015611ea357600080fd5b505af1925050508015611eb4575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611efa91815260200190565b60405180910390a35060019695505050505050565b6000610f3983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b600080611f5e83856130bf565b905083811015610f395760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dc4565b600082611fbf57506000610d94565b6000611fcb83856130f9565b905082611fd885836130d7565b14610f395760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dc4565b6000610f3983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c68565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906120c3576120c3613145565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120f7576120f7613145565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de9590859061213d90600090869088904290600401612fb4565b6000604051808303818588803b15801561215657600080fd5b505af115801561216a573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d909152918220546121d1918490611a87565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122009083611f51565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122549086815260200190565b60405180910390a35060019392505050565b801561229357601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff161580156122f157506000546001600160a01b03838116911614155b801561230657506001600160a01b0382163014155b801561232057506004546001600160a01b03838116911614155b801561233a5750603c546001600160a01b03838116911614155b801561235457506008546001600160a01b03838116911614155b801561236e57506007546001600160a01b03838116911614155b801561238857506006546001600160a01b03838116911614155b15612427576001600160a01b0382166000908152600d6020526040902054600c546123b383836130bf565b11156113715760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610dc4565b505050565b603c546001600160a01b03838116911614801561244b575060395460ff165b801561247057506001600160a01b03811660009081526011602052604090205460ff16155b156118b4576001600160a01b0381166000908152603a602052604090205442116124dc5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610dc4565b6039546124f190610100900460ff16426130bf565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113715780156125ba57600b548311158061255257506001600160a01b03841660009081526010602052604090205460ff165b8061257557506001600160a01b03821660009081526010602052604090205460ff165b6125b55760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dc4565b611371565b600a54831115806125e357506001600160a01b03841660009081526010602052604090205460ff165b8061260657506001600160a01b03821660009081526010602052604090205460ff165b6113715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dc4565b603c546000906001600160a01b0316331480159061266d5750603e5462010000900460ff16155b80156126805750603e54610100900460ff165b801561100b575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c546000916126c391610de5565b6126cf576020546126d2565b60005b905060006126f660026112e76025546112e786602a54611fb090919063ffffffff16565b9050600061270f82602a54611f0f90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061274957612749613145565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061277a5761277a613145565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906127c4908690600090879030904290600401613083565b600060405180830381600087803b1580156127de57600080fd5b505af11580156127f2573d6000803e3d6000fd5b50505050600061280b8247611f0f90919063ffffffff16565b9050600061282661281d88600261202f565b60255490611f0f565b9050600061283b60026112e78481878d611fb0565b90506000612858836112e760225487611fb090919063ffffffff16565b90506000612875846112e760235488611fb090919063ffffffff16565b90506000612892856112e760245489611fb090919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128e457600080fd5b505af1935050505080156128f6575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612949576040519150601f19603f3d011682016040523d82523d6000602084013e61294e565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146129a7576040519150601f19603f3d011682016040523d82523d6000602084013e6129ac565b606091505b5050905081612a0e5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610dc4565b80612a665760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610dc4565b8b15612b4d57603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015612ad757600080fd5b505af1158015612aeb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b109190612eff565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612bc3578315612ba357612b9c6026546112e760026112e7600361156f6025548c611fb090919063ffffffff16565b9050612be1565b612b9c6026546112e760026112e76025548a611fb090919063ffffffff16565b612bde6026546112e760255488611fb090919063ffffffff16565b90505b306000908152600d6020526040902054612bfb9082611f51565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c4c9085815260200190565b60405180910390a3612c5e8582611f0f565b9695505050505050565b60008183612c895760405162461bcd60e51b8152600401610dc49190612fe9565b506000611ab884866130d7565b80358015158114612ca657600080fd5b919050565b600060208284031215612cbd57600080fd5b8135610f398161315b565b60008060408385031215612cdb57600080fd5b8235612ce68161315b565b91506020830135612cf68161315b565b809150509250929050565b600080600060608486031215612d1657600080fd5b8335612d218161315b565b92506020840135612d318161315b565b929592945050506040919091013590565b60008060408385031215612d5557600080fd5b8235612d608161315b565b9150612d6e60208401612c96565b90509250929050565b60008060408385031215612d8a57600080fd5b8235612d958161315b565b946020939093013593505050565b600060208284031215612db557600080fd5b610f3982612c96565b60008060408385031215612dd157600080fd5b612d9583612c96565b600080600080600060a08688031215612df257600080fd5b612dfb86612c96565b9450602086013593506040860135925060608601359150612e1e60808701612c96565b90509295509295909350565b60008060408385031215612e3d57600080fd5b612e4683612c96565b9150602083013560ff81168114612cf657600080fd5b600060208284031215612e6e57600080fd5b5035919050565b600060208284031215612e8757600080fd5b5051919050565b60008060408385031215612ea157600080fd5b82359150612d6e60208401612c96565b60008060408385031215612ec457600080fd5b50508035926020909101359150565b600080600060608486031215612ee857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f1457600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215612f4657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b83811015612fa95781516001600160a01b031687529582019590820190600101612f84565b509495945050505050565b848152608060208201526000612fcd6080830186612f70565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b8181101561301657858101830151858201604001528201612ffa565b81811115613028576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a0604082015260006130a260a0830186612f70565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130d2576130d261312f565b500190565b6000826130f457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131135761311361312f565b500290565b60008282101561312a5761312a61312f565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610de257600080fdfea264697066735822122035cc5cd6aefacdb2cc90743d5b63c9e1951975ac9e6022ed14cb956cb7a60e4064736f6c63430008070033

Deployed Bytecode Sourcemap

12303:24281:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14640:56;;;;;;;;;;;;;;;;;;;13504:25:1;;;13492:2;13477:18;14640:56:0;;;;;;;;17383:80;;;;;;;;;;-1:-1:-1;17455:5:0;;;;;;;;;;;;-1:-1:-1;;;17455:5:0;;;;17383:80;;;;;;;:::i;17805:216::-;;;;;;;;;;-1:-1:-1;17805:216:0;;;;;:::i;:::-;;:::i;:::-;;;7907:14:1;;7900:22;7882:41;;7870:2;7855:18;17805:216:0;7742:187:1;25728:113:0;;;;;;;;;;-1:-1:-1;25728:113:0;;;;;:::i;:::-;;:::i;:::-;;13863:34;;;;;;;;;;;;;;;;13996:35;;;;;;;;;;;;;;;;36309:150;;;;;;;;;;-1:-1:-1;36309:150:0;;;;;:::i;:::-;;:::i;14163:29::-;;;;;;;;;;;;;;;;14121:35;;;;;;;;;;;;;;;;17113:88;;;;;;;;;;-1:-1:-1;17186:12:0;;17113:88;;34695:183;;;;;;;;;;-1:-1:-1;34695:183:0;;;;;:::i;:::-;;:::i;31069:342::-;;;;;;;;;;-1:-1:-1;31069:342:0;;;;;:::i;:::-;;:::i;18323:368::-;;;;;;;;;;-1:-1:-1;18323:368:0;;;;;:::i;:::-;;:::i;35537:146::-;;;;;;;;;;-1:-1:-1;35537:146:0;;;;;:::i;:::-;;:::i;35906:142::-;;;;;;;;;;;;;:::i;35157:183::-;;;;;;;;;;-1:-1:-1;35157:183:0;;;;;:::i;:::-;;:::i;26192:165::-;;;;;;;;;;-1:-1:-1;26192:165:0;;;;;:::i;:::-;;:::i;13782:32::-;;;;;;;;;;;;;;;;3888:103;;;;;;;;;;-1:-1:-1;3888:103:0;;;;;:::i;:::-;3943:4;3978:5;-1:-1:-1;;;;;3967:16:0;;;3978:5;;3967:16;;3888:103;30577:445;;;;;;;;;;-1:-1:-1;30577:445:0;;;;;:::i;:::-;;:::i;17207:80::-;;;;;;;;;;-1:-1:-1;12988:2:0;17207:80;;;14552:4:1;14540:17;;;14522:36;;14510:2;14495:18;17207:80:0;14380:184:1;13118:59:0;;;;;;;;;;;;;;;;14038:33;;;;;;;;;;;;;;;;15043:38;;;;;;;;;;-1:-1:-1;15043:38:0;;;;;;;;13821:35;;;;;;;;;;;;;;;;26406:125;;;;;;;;;;-1:-1:-1;26406:125:0;;;;;:::i;:::-;;:::i;21868:207::-;;;;;;;;;;;;;:::i;26054:83::-;;;;;;;;;;;;;:::i;32791:130::-;;;;;;;;;;-1:-1:-1;32791:130:0;;;;;:::i;:::-;;:::i;14199:31::-;;;;;;;;;;;;;;;;18029:122;;;;;;;;;;-1:-1:-1;18029:122:0;;;;;:::i;:::-;;:::i;15425:38::-;;;;;;;;;;-1:-1:-1;15425:38:0;;;;;;;;32473:120;;;;;;;;;;-1:-1:-1;32473:120:0;;;;;:::i;:::-;;:::i;15722:30::-;;;;;;;;;;-1:-1:-1;15722:30:0;;;;;;;;;;;17553:105;;;;;;;;;;-1:-1:-1;17553:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17637:18:0;17619:7;17637:18;;;:9;:18;;;;;;;17553:105;15470:39;;;;;;;;;;-1:-1:-1;15470:39:0;;;;;;;;;;;13265:63;;;;;;;;;;;;;;;;31704:158;;;;;;;;;;-1:-1:-1;31704:158:0;;;;;:::i;:::-;;:::i;29009:431::-;;;;;;;;;;-1:-1:-1;29009:431:0;;;;;:::i;:::-;;:::i;18770:156::-;;;;;;;;;;-1:-1:-1;18770:156:0;;;;;:::i;:::-;;:::i;13740:34::-;;;;;;;;;;;;;;;;17469:78;;;;;;;;;;-1:-1:-1;17521:7:0;17539:5;-1:-1:-1;;;;;17539:5:0;17469:78;;;-1:-1:-1;;;;;6304:32:1;;;6286:51;;6274:2;6259:18;17469:78:0;6140:203:1;17293:84:0;;;;;;;;;;-1:-1:-1;17367:7:0;;;;;;;;;;;;-1:-1:-1;;;17367:7:0;;;;17293:84;;35724:136;;;;;;;;;;-1:-1:-1;35724:136:0;;;;;:::i;:::-;;:::i;34212:228::-;;;;;;;;;;-1:-1:-1;34212:228:0;;;;;:::i;:::-;;:::i;15627:19::-;;;;;;;;;;-1:-1:-1;15627:19:0;;;;-1:-1:-1;;;;;15627:19:0;;;18159:156;;;;;;;;;;-1:-1:-1;18159:156:0;;;;;:::i;:::-;;:::i;14078:36::-;;;;;;;;;;;;;;;;29488:105;;;;;;;;;;;;;:::i;3546:102::-;;;;;;;;;;-1:-1:-1;3546:102:0;;;;;:::i;:::-;;:::i;33560:594::-;;;;;;;;;;-1:-1:-1;33560:594:0;;;;;:::i;:::-;;:::i;15653:25::-;;;;;;;;;;;;;;;;13904:28;;;;;;;;;;;;;;;;13191:60;;;;;;;;;;;;;;;;36090:167;;;;;;;;;;-1:-1:-1;36090:167:0;;;;;:::i;:::-;;:::i;24169:391::-;;;;;;;;;;;;;:::i;17664:133::-;;;;;;;;;;-1:-1:-1;17664:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17766:19:0;;;17748:7;17766:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17664:133;34478:180;;;;;;;;;;-1:-1:-1;34478:180:0;;;;;:::i;:::-;;:::i;31895:162::-;;;;;;;;;;-1:-1:-1;31895:162:0;;;;;:::i;:::-;;:::i;15088:41::-;;;;;;;;;;-1:-1:-1;15088:41:0;;;;;;;;;;;25870:145;;;;;;;;;;-1:-1:-1;25870:145:0;;;;;:::i;:::-;;:::i;3723:105::-;;;;;;;;;;-1:-1:-1;3723:105:0;;;;;:::i;:::-;;:::i;35392:90::-;;;;;;;;;;;;;:::i;23784:315::-;;;;;;;;;;-1:-1:-1;23784:315:0;;;;;:::i;:::-;;:::i;4295:189::-;;;;;;;;;;-1:-1:-1;4295:189:0;;;;;:::i;:::-;;:::i;34922:180::-;;;;;;;;;;;;;:::i;32094:347::-;;;;;;;;;;-1:-1:-1;32094:347:0;;;;;:::i;:::-;;:::i;32954:572::-;;;;;;;;;;-1:-1:-1;32954:572:0;;;;;:::i;:::-;;:::i;32628:128::-;;;;;;;;;;-1:-1:-1;32628:128:0;;;;;:::i;:::-;;:::i;15596:24::-;;;;;;;;;;-1:-1:-1;15596:24:0;;;;-1:-1:-1;;;;;15596:24:0;;;13939:30;;;;;;;;;;;;;;;;13664:46;;;;;;;;;;-1:-1:-1;13664:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4061:115;;;;;;;;;;-1:-1:-1;4061:115:0;;;;;:::i;:::-;;:::i;15685:30::-;;;;;;;;;;-1:-1:-1;15685:30:0;;;;;;;;17805:216;17909:10;17880:4;17897:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17897:32:0;;;;;;;;;;:41;;;17954:37;17880:4;;17897:32;;17954:37;;;;17932:6;13504:25:1;;13492:2;13477:18;;13358:177;17954:37:0;;;;;;;;-1:-1:-1;18009:4:0;17805:216;;;;;:::o;25728:113::-;3943:4;3978:5;-1:-1:-1;;;;;3978:5:0;3270:10;3967:16;3254:38;;;;-1:-1:-1;;;3254:38:0;;;;;;;:::i;:::-;;;;;;;;;25793:11:::1;:21:::0;;-1:-1:-1;;25793:21:0::1;::::0;::::1;;;::::0;;31652:12;31639:10;:25;25728:113;:::o;25825:8::-:1;25728:113:::0;:::o;36309:150::-;36389:4;36445:6;36413:29;36433:8;36413:19;:29::i;:::-;:38;;36309:150;-1:-1:-1;;;36309:150:0:o;34695:183::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;34793:15:::1;:25:::0;;;;34829:26:::1;:41:::0;34695:183::o;31069:342::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;31229:1:::1;31202:23;31214:11:::0;31202:9;:23:::1;:::i;:::-;:28;;:55;;;;;31246:11;31234:9;:23;31202:55;31194:64;;;::::0;::::1;;31269:26;:38:::0;;;;31318:28:::1;:42:::0;31371:23:::1;:32:::0;31069:342::o;18323:368::-;-1:-1:-1;;;;;18443:19:0;;18423:4;18443:19;;;:11;:19;;;;;;;;18463:10;18443:31;;;;;;;;-1:-1:-1;;18443:52:0;18440:186;;18545:69;;;;;;;;;;;-1:-1:-1;;;18545:69:0;;;;;;;;-1:-1:-1;;;;;18545:19:0;;-1:-1:-1;18545:19:0;;;:11;:19;;;;;18565:10;18545:31;;;;;;;;;;:69;;18581:6;;18545:35;:69::i;:::-;-1:-1:-1;;;;;18511:19:0;;;;;;:11;:19;;;;;;;;18531:10;18511:31;;;;;;;:103;18440:186;18643:40;18657:6;18665:9;18676:6;18643:13;:40::i;:::-;18636:47;;18323:368;;;;;;:::o;35537:146::-;35633:11;;:42;;-1:-1:-1;;;35633:42:0;;-1:-1:-1;;;;;6304:32:1;;;35633:42:0;;;6286:51:1;35606:7:0;;35633:11;;:29;;6259:18:1;;35633:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35906:142::-;36034:4;;-1:-1:-1;;;;;36034:4:0;35959:7;17637:18;;;:9;:18;;;;;;35986:54;;36013:4;;-1:-1:-1;;;;;36013:4:0;17619:7;17637:18;;;:9;:18;;;;;;35986:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;35979:61;;35906:142;:::o;35157:183::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;35267:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;35267:65:0;;::::1;::::0;::::1;14301:25:1::0;;;14342:18;;;14335:34;;;-1:-1:-1;;;;;35267:11:0;;::::1;::::0;:35:::1;::::0;14274:18:1;;35267:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35157:183:::0;;:::o;26192:165::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;26277:18:::1;:28:::0;;-1:-1:-1;;26316:33:0;26277:28;::::1;;-1:-1:-1::0;;26316:33:0;;;;;26277:28:::1;;26316:33:::0;;;::::1;::::0;;;::::1;;::::0;;26192:165::o;30577:445::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;30732:18:::1;:29:::0;;30772:14:::1;:21:::0;;;;-1:-1:-1;30804:22:0::1;:26:::0;30841:17:::1;:27:::0;;;;30879:22:::1;:32:::0;;;;30945:12:::1;30922:20;:35:::0;-1:-1:-1;;30968:46:0;;;30732:29;::::1;;-1:-1:-1::0;;30968:46:0;;;;;30732:29:::1;30968:46:::0;::::1;;::::0;;;::::1;;::::0;;30577:445::o;26406:125::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26491:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;26491:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26406:125::o;21868:207::-;21912:4;21969:15;21931:35;21952:13;;21931:16;;:20;;:35;;;;:::i;:::-;:53;21928:140;;;-1:-1:-1;22007:4:0;;21868:207::o;21928:140::-;-1:-1:-1;22051:5:0;;21868:207::o;26054:83::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;26128:1:::1;26109:16;:20:::0;26054:83::o;32791:130::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32880:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32880:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32791:130::o;18029:122::-;18084:4;18108:35;18116:7;-1:-1:-1;;18108:7:0;:35::i;32473:120::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32557:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32557:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32473:120::o;31704:158::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;31810:44:::1;31848:5;31810:33;31827:15;31810:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;31792:15;:62:::0;-1:-1:-1;31704:158:0:o;29009:431::-;29106:26;29135:19;:6;29145:8;29135:19;:::i;:::-;29106:48;-1:-1:-1;29165:19:0;29187:27;29106:48;29210:3;29187:22;:27::i;:::-;29248:4;;29165:49;;-1:-1:-1;29225:28:0;;29165:49;;-1:-1:-1;;;;;29248:4:0;29225:9;:28::i;:::-;29267:24;29264:169;;;29338:15;29307:28;:46;29397:23;;29373:48;;13504:25:1;;;29373:48:0;;13492:2:1;13477:18;29373:48:0;;;;;;;29264:169;29095:345;;29009:431;;:::o;18770:156::-;3943:4;3978:5;-1:-1:-1;;;;;3978:5:0;3270:10;3967:16;3254:38;;;;-1:-1:-1;;;3254:38:0;;;;;;;:::i;:::-;18873:43:::1;18910:5;18873:32;18890:14;18873:12;;:16;;:32;;;;:::i;:43::-;18855:15;:61:::0;-1:-1:-1;18770:156:0:o;35724:136::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;35814:6:::1;35808:3;:12;35800:21;;;::::0;::::1;;35832:14;:20:::0;35724:136::o;34212:228::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;34331:21:::1;:46:::0;;-1:-1:-1;;;;;34331:46:0;;::::1;-1:-1:-1::0;;;;;;34331:46:0;;::::1;;::::0;;;34388:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;34212:228::o;18159:156::-;18239:4;18263:44;18277:10;18289:9;18300:6;18263:13;:44::i;29488:105::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;29584:1:::1;29553:28;:32:::0;29488:105::o;3546:102::-;3943:4;3978:5;-1:-1:-1;;;;;3978:5:0;3270:10;3967:16;3254:38;;;;-1:-1:-1;;;3254:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3610:23:0::1;;::::0;;;3636:4:::1;3610:23;::::0;;;;;;;:30;;-1:-1:-1;;3610:30:0::1;::::0;;::::1;::::0;;3546:102::o;33560:594::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;33765:16:::1;:36:::0;;;33812:14:::1;:32:::0;;;33855:17:::1;:38:::0;;;33904:16:::1;:36:::0;;;33951:10:::1;:24:::0;;;34001:102:::1;33964:11:::0;34001:85:::1;33923:17:::0;34001:85;33875:18;34001:85;33784:17;33829:15;34001:21:::1;:38::i;:::-;:42:::0;::::1;:62::i;:102::-;33986:12;:117:::0;34114:14:::1;:32:::0;-1:-1:-1;;;;;33560:594:0:o;36090:167::-;36158:7;36185:64;36226:22;:20;:22::i;:::-;36208:4;;-1:-1:-1;;;;;36208:4:0;17619:7;17637:18;;;:9;:18;;;;;;36185:36;;36198:22;;36218:1;;36198:15;:19;;:22::i;:::-;36185:8;;:12;:36::i;24169:391::-;24218:7;24238:21;24262:78;24324:15;24262:57;24295:23;;24262:28;;:32;;:57;;;;:::i;:78::-;24238:102;;24351:19;24373:88;24452:8;;24373:74;24418:28;;24373:40;24386:26;;24373:8;;:12;;:40;;;;:::i;:88::-;24351:110;;24479:73;24492:59;24527:23;;24492:30;24508:13;24492:11;:15;;:30;;;;:::i;:59::-;24479:8;;;:12;:73::i;:::-;24472:80;;;;24169:391;:::o;34478:180::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;34570:11:::1;:22:::0;;-1:-1:-1;;34570:22:0::1;;::::0;::::1;;;;::::0;;34619:12:::1;::::0;34644:5:::1;::::0;34619:22:::1;::::0;34634:7;;34619:22:::1;:::i;:::-;:30;;;;:::i;:::-;34603:13;:46:::0;-1:-1:-1;;34478:180:0:o;31895:162::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;32004:45:::1;32043:5;32004:34;32021:16;32004:12;;:16;;:34;;;;:::i;:45::-;31985:16;:64:::0;-1:-1:-1;31895:162:0:o;25870:145::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;25957:15:::1;25938:16;:34:::0;25983:13:::1;:24:::0;25870:145::o;3723:105::-;3943:4;3978:5;-1:-1:-1;;;;;3978:5:0;3270:10;3967:16;3254:38;;;;-1:-1:-1;;;3254:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3789:23:0::1;3815:5;3789:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;3789:31:0::1;::::0;;3723:105::o;35392:90::-;35437:11;;:37;;-1:-1:-1;;;35437:37:0;;35463:10;35437:37;;;6286:51:1;-1:-1:-1;;;;;35437:11:0;;;;:25;;6259:18:1;;35437:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23784:315;23840:7;23890:12;23876:10;;23863;;:23;;;;:::i;:::-;:39;23860:76;;23912:14;;:21;;23931:1;23912:18;:21::i;23860:76::-;23949:7;:86;;;;;24020:15;23960:57;23993:23;;23960:28;;:32;;:57;;;;:::i;:::-;:75;23949:86;23946:120;;;24045:18;:16;:18::i;23946:120::-;-1:-1:-1;;24083:8:0;;;23784:315::o;4295:189::-;3943:4;3978:5;-1:-1:-1;;;;;3978:5:0;3270:10;3967:16;3254:38;;;;-1:-1:-1;;;3254:38:0;;;;;;;:::i;:::-;4375:5:::1;:15:::0;;-1:-1:-1;;;;;;4375:15:0::1;-1:-1:-1::0;;;;;4375:15:0;::::1;::::0;;::::1;::::0;;4401:23;;;-1:-1:-1;4401:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;4401:30:0::1;::::0;;::::1;::::0;;;4447:29;;6286:51:1;;;4447:29:0::1;::::0;6259:18:1;4447:29:0::1;;;;;;;4295:189:::0;:::o;34922:180::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;35044:20:::1;::::0;35036:58:::1;::::0;35004:21:::1;::::0;-1:-1:-1;;;;;35044:20:0::1;::::0;35036:58;::::1;;;::::0;35004:21;;34975:26:::1;35036:58:::0;34975:26;35036:58;35004:21;35044:20;35036:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34964:138;34922:180::o:0;32094:347::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32191:23:0;::::1;32209:4;32191:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;32228:4:0::1;::::0;-1:-1:-1;;;;;32218:14:0;;::::1;32228:4:::0;::::1;32218:14;;32191:41;32183:50;;;::::0;::::1;;-1:-1:-1::0;;;;;32244:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32244:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;32288:146:::1;;32313:11;::::0;:31:::1;::::0;-1:-1:-1;;;32313:31:0;;-1:-1:-1;;;;;6764:32:1;;;32313:31:0::1;::::0;::::1;6746:51:1::0;32313:11:0::1;6813:18:1::0;;;6806:34;32313:11:0;;::::1;::::0;:20:::1;::::0;6719:18:1;;32313:31:0::1;6564:282:1::0;32288:146:0::1;32375:11;::::0;-1:-1:-1;;;;;32404:17:0;;::::1;32375:11;32404:17:::0;;;:9:::1;:17;::::0;;;;;;;32375:47;;-1:-1:-1;;;32375:47:0;;::::1;::::0;::::1;6746:51:1::0;;;;6813:18;;;6806:34;32375:11:0;::::1;::::0;:20:::1;::::0;6719:18:1;;32375:47:0::1;6564:282:1::0;32954:572:0;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;33153:15:::1;:34:::0;;;33198:13:::1;:30:::0;;;33239:16:::1;:36:::0;;;33286:15:::1;:34:::0;;;33331:9:::1;:22:::0;;;33378:97:::1;33343:10:::0;33378:81:::1;33304:16:::0;33378:81;33258:17;33378:81;33171:16;33214:14;33378:20:::1;:36::i;:97::-;33364:11;:111:::0;33486:14:::1;:32:::0;-1:-1:-1;;;;;32954:572:0:o;32628:128::-;3431:24;3444:10;3431:12;:24::i;:::-;3423:48;;;;-1:-1:-1;;;3423:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32716:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;32716:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32628:128::o;4061:115::-;-1:-1:-1;;;;;4145:23:0;4121:4;4145:23;;;:14;:23;;;;;;;;;4061:115::o;948:192::-;1034:7;1070:12;1062:6;;;;1054:29;;;;-1:-1:-1;;;1054:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1094:9:0;1106:5;1110:1;1106;:5;:::i;:::-;1094:17;948:192;-1:-1:-1;;;;;948:192:0:o;18965:1825::-;19077:6;;19057:4;;19077:6;;;;;19074:63;;;19093:41;19108:6;19116:9;19127:6;19093:14;:41::i;:::-;19086:48;;;;19074:63;-1:-1:-1;;;;;19193:22:0;;;;;;:14;:22;;;;;;;;19192:23;:53;;;;-1:-1:-1;;;;;;19220:25:0;;;;;;:14;:25;;;;;;;;19219:26;19192:53;19189:130;;;19269:11;;;;19261:46;;;;-1:-1:-1;;;19261:46:0;;12517:2:1;19261:46:0;;;12499:21:1;12556:2;12536:18;;;12529:30;12595:25;12575:18;;;12568:53;12638:18;;19261:46:0;12315:347:1;19261:46:0;-1:-1:-1;;;;;19384:24:0;;;;;;:13;:24;;;;;;;;19383:25;:51;;;;-1:-1:-1;;;;;;19413:21:0;;;;;;:13;:21;;;;;;;;19412:22;19383:51;19375:86;;;;-1:-1:-1;;;19375:86:0;;12869:2:1;19375:86:0;;;12851:21:1;12908:2;12888:18;;;12881:30;-1:-1:-1;;;12927:18:1;;;12920:52;12989:18;;19375:86:0;12667:346:1;19375:86:0;19540:4;;-1:-1:-1;;;;;19527:17:0;;;19540:4;;19527:17;19591:22;19527:17;19591:14;:22::i;:::-;19655:41;19670:6;19678:9;19689:6;19655:14;:41::i;:::-;19737:35;19754:6;19762:9;19737:16;:35::i;:::-;19810:47;19823:6;19831;19839:9;19850:6;19810:12;:47::i;:::-;19911:14;19928:13;:11;:13::i;:::-;19911:30;;20004:16;:14;:16::i;:::-;20001:35;;;20023:10;:8;:10::i;:::-;20095:53;;;;;;;;;;;-1:-1:-1;;;20095:53:0;;;;;;;;-1:-1:-1;;;;;20095:17:0;;-1:-1:-1;20095:17:0;;;:9;:17;;;;;;;;:53;;20117:6;;20095:21;:53::i;:::-;-1:-1:-1;;;;;20075:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23699:11;:19;;;;;;;;23698:20;20186:75;;20255:6;20186:75;;;20210:42;20218:6;20226;20234;20242:9;20210:7;:42::i;:::-;-1:-1:-1;;;;;20295:20:0;;;;;;:9;:20;;;;;;20161:100;;-1:-1:-1;20295:40:0;;20161:100;20295:24;:40::i;:::-;-1:-1:-1;;;;;20272:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20381:24;;;;;:16;:24;;;;;;;20377:119;;20426:11;;-1:-1:-1;;;;;20455:17:0;;;20426:11;20455:17;;;:9;:17;;;;;;;;20426:47;;-1:-1:-1;;;20426:47:0;;;;;6746:51:1;;;;6813:18;;;6806:34;20426:11:0;;;:20;;6719:18:1;;20426:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20422:63;;-1:-1:-1;;;;;20512:27:0;;;;;;:16;:27;;;;;;;;20508:129;;20560:11;;-1:-1:-1;;;;;20592:20:0;;;20560:11;20592:20;;;:9;:20;;;;;;;;20560:53;;-1:-1:-1;;;20560:53:0;;;;;6746:51:1;;;;6813:18;;;6806:34;20560:11:0;;;:20;;6719:18:1;;20560:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20556:69;;20653:11;;20673:14;;20653:35;;-1:-1:-1;;;;;;20653:35:0;;-1:-1:-1;;;;;20653:11:0;;;;:19;;:35;;;;13504:25:1;;;13492:2;13477:18;;13358:177;20653:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20649:51;20734:9;-1:-1:-1;;;;;20717:43:0;20726:6;-1:-1:-1;;;;;20717:43:0;;20745:14;20717:43;;;;13504:25:1;;13492:2;13477:18;;13358:177;20717:43:0;;;;;;;;-1:-1:-1;20778:4:0;;18965:1825;-1:-1:-1;;;;;;18965:1825:0:o;806:136::-;864:7;891:43;895:1;898;891:43;;;;;;;;;;;;;;;;;:3;:43::i;619:181::-;677:7;;709:5;713:1;709;:5;:::i;:::-;697:17;;738:1;733;:6;;725:46;;;;-1:-1:-1;;;725:46:0;;9825:2:1;725:46:0;;;9807:21:1;9864:2;9844:18;;;9837:30;9903:29;9883:18;;;9876:57;9950:18;;725:46:0;9623:351:1;1146:250:0;1204:7;1228:6;1224:47;;-1:-1:-1;1258:1:0;1251:8;;1224:47;1283:9;1295:5;1299:1;1295;:5;:::i;:::-;1283:17;-1:-1:-1;1328:1:0;1319:5;1323:1;1283:17;1319:5;:::i;:::-;:10;1311:56;;;;-1:-1:-1;;;1311:56:0;;10947:2:1;1311:56:0;;;10929:21:1;10986:2;10966:18;;;10959:30;11025:34;11005:18;;;10998:62;-1:-1:-1;;;11076:18:1;;;11069:31;11117:19;;1311:56:0;10745:397:1;1402:132:0;1460:7;1487:39;1491:1;1494;1487:39;;;;;;;;;;;;;;;;;:3;:39::i;30175:361::-;15799:6;:13;;-1:-1:-1;;15799:13:0;;;;;30275:16:::1;::::0;;15799:6;30275:16;;;;;::::1;::::0;;-1:-1:-1;;30275:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30312:4:0::1;::::0;30302:7;;;;-1:-1:-1;;;;;;30312:4:0::1;::::0;30302:7;;-1:-1:-1;30312:4:0::1;::::0;30302:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;30302:14:0::1;;;-1:-1:-1::0;;;;;30302:14:0::1;;;::::0;::::1;30345:4;30327;30332:1;30327:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30327:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30363:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;30363:165:0;;:6;::::1;::::0;:57:::1;::::0;30428:6;;30363:165:::1;::::0;:6:::1;::::0;30466:4;;30485:2;;30502:15:::1;::::0;30363:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15817:6:0;:14;;-1:-1:-1;;15817:14:0;;;-1:-1:-1;;;;;;30175:361:0:o;20827:330::-;20957:53;;;;;;;;;;;-1:-1:-1;;;20957:53:0;;;;;;;;-1:-1:-1;;;;;20957:17:0;;20920:4;20957:17;;;:9;:17;;;;;;;:53;;20979:6;;20957:21;:53::i;:::-;-1:-1:-1;;;;;20937:17:0;;;;;;;:9;:17;;;;;;:73;;;;21044:20;;;;;;;:32;;21069:6;21044:24;:32::i;:::-;-1:-1:-1;;;;;21021:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21092:35;;;;;;;;;;21120:6;13504:25:1;;13492:2;13477:18;;13358:177;21092:35:0;;;;;;;;-1:-1:-1;21145:4:0;20827:330;;;;;:::o;21216:606::-;21276:6;21273:542;;;21313:16;;21298:12;:31;21357:14;;21344:10;:27;21402:17;;21386:13;:33;21449:16;;21434:12;:31;21489:10;;21480:6;:19;21525:12;;21514:8;:23;25728:113;:::o;21273:542::-;21585:15;;21570:12;:30;21628:13;;21615:10;:26;21672:16;;21656:13;:32;21718:15;;21703:12;:30;21757:9;;21748:6;:18;21792:11;;21781:8;:22;21216:606;:::o;23032:531::-;-1:-1:-1;;;;;23137:22:0;;;;;;:14;:22;;;;;;;;23136:23;:45;;;;-1:-1:-1;23176:5:0;;-1:-1:-1;;;;;23163:18:0;;;23176:5;;23163:18;;23136:45;:75;;;;-1:-1:-1;;;;;;23185:26:0;;23206:4;23185:26;;23136:75;:106;;;;-1:-1:-1;23237:4:0;;-1:-1:-1;;;;;23216:26:0;;;23237:4;;23216:26;;23136:106;:127;;;;-1:-1:-1;23259:4:0;;-1:-1:-1;;;;;23246:17:0;;;23259:4;;23246:17;;23136:127;:164;;;;-1:-1:-1;23280:20:0;;-1:-1:-1;;;;;23267:33:0;;;23280:20;;23267:33;;23136:164;:202;;;;-1:-1:-1;23317:21:0;;-1:-1:-1;;;;;23304:34:0;;;23317:21;;23304:34;;23136:202;:222;;;;-1:-1:-1;23355:3:0;;-1:-1:-1;;;;;23342:16:0;;;23355:3;;23342:16;;23136:222;23132:424;;;-1:-1:-1;;;;;17637:18:0;;23374;17637;;;:9;:18;;;;;;23463:15;;23439:19;23452:6;17637:18;23439:19;:::i;:::-;23438:40;;23430:114;;;;-1:-1:-1;;;23430:114:0;;11752:2:1;23430:114:0;;;11734:21:1;11791:2;11771:18;;;11764:30;11830:34;11810:18;;;11803:62;11901:32;11881:18;;;11874:60;11951:19;;23430:114:0;11550:426:1;23132:424:0;23032:531;;;:::o;22622:378::-;22717:4;;-1:-1:-1;;;;;22707:14:0;;;22717:4;;22707:14;:49;;;;-1:-1:-1;22738:18:0;;;;22707:49;:94;;;;-1:-1:-1;;;;;;22774:27:0;;;;;;:16;:27;;;;;;;;22773:28;22707:94;22703:290;;;-1:-1:-1;;;;;22826:24:0;;;;;;:13;:24;;;;;;22853:15;-1:-1:-1;22818:82:0;;;;-1:-1:-1;;;22818:82:0;;10590:2:1;22818:82:0;;;10572:21:1;10629:2;10609:18;;;10602:30;10668;10648:18;;;10641:58;10716:18;;22818:82:0;10388:352:1;22818:82:0;22960:21;;22942:39;;22960:21;;;;;22942:15;:39;:::i;:::-;-1:-1:-1;;;;;22915:24:0;;;;;;:13;:24;;;;;:66;22622:378;;:::o;22109:478::-;22237:5;;-1:-1:-1;;;;;22224:18:0;;;22237:5;;22224:18;22220:360;;22261:6;22258:311;;;22305:16;;22295:6;:26;;:53;;;-1:-1:-1;;;;;;22325:23:0;;;;;;:15;:23;;;;;;;;22295:53;:83;;;-1:-1:-1;;;;;;22352:26:0;;;;;;:15;:26;;;;;;;;22295:83;22287:113;;;;-1:-1:-1;;;22287:113:0;;9479:2:1;22287:113:0;;;9461:21:1;9518:2;9498:18;;;9491:30;-1:-1:-1;;;9537:18:1;;;9530:47;9594:18;;22287:113:0;9277:341:1;22287:113:0;22258:311;;;22459:15;;22449:6;:25;;:52;;;-1:-1:-1;;;;;;22478:23:0;;;;;;:15;:23;;;;;;;;22449:52;:82;;;-1:-1:-1;;;;;;22505:26:0;;;;;;:15;:26;;;;;;;;22449:82;22441:112;;;;-1:-1:-1;;;22441:112:0;;9479:2:1;22441:112:0;;;9461:21:1;9518:2;9498:18;;;9491:30;-1:-1:-1;;;9537:18:1;;;9530:47;9594:18;;22441:112:0;9277:341:1;25500:197:0;25587:4;;25549;;-1:-1:-1;;;;;25587:4:0;25573:10;:18;;;;:38;;-1:-1:-1;25605:6:0;;;;;;;25604:7;25573:38;:62;;;;-1:-1:-1;25624:11:0;;;;;;;25573:62;:116;;;;-1:-1:-1;;25676:13:0;;25666:4;25648:24;;;;:9;:24;;;;;;:41;;;25500:197::o;26585:2037::-;15799:6;:13;;-1:-1:-1;;15799:13:0;;;;;26680:15:::1;::::0;26697:26:::1;::::0;15799:13;;26664:60:::1;::::0;:15:::1;:60::i;:::-;:79;;26731:12;;26664:79;;;26727:1;26664:79;26634:109;;26754:23;26780:59;26837:1;26780:52;26823:8;;26780:38;26798:19;26780:13;;:17;;:38;;;;:::i;:59::-;26754:85;;26850:20;26873:34;26891:15;26873:13;;:17;;:34;;;;:::i;:::-;26944:16;::::0;;26958:1:::1;26944:16:::0;;;;;::::1;::::0;;26850:57;;-1:-1:-1;26920:21:0::1;::::0;26944:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26944:16:0::1;26920:40;;26989:4;26971;26976:1;26971:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26971:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27015:4:::1;::::0;27005:7;;27015:4;::::1;::::0;27005;;27015;;27005:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;27005:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27090:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27090:188:0;;27056:21:::1;::::0;27090:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27162:12;;27032:21:::1;::::0;27205:4;;27232::::1;::::0;27252:15:::1;::::0;27090:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27289:17;27309:40;27335:13;27309:21;:25;;:40;;;;:::i;:::-;27289:60:::0;-1:-1:-1;27360:19:0::1;27382:40;27395:26;:19:::0;27419:1:::1;27395:23;:26::i;:::-;27382:8;::::0;;:12:::1;:40::i;:::-;27360:62:::0;-1:-1:-1;27433:26:0::1;27462:58;27518:1;27462:51;27360:62:::0;27462:51;:9;27476:19;27462:13:::1;:34::i;:58::-;27433:87;;27531:27;27561:45;27594:11;27561:28;27575:13;;27561:9;:13;;:28;;;;:::i;:45::-;27531:75;;27617:26;27646:44;27678:11;27646:27;27660:12;;27646:9;:13;;:27;;;;:::i;:44::-;27617:73;;27701:20;27724:38;27750:11;27724:21;27738:6;;27724:9;:13;;:21;;;;:::i;:38::-;27701:61;;27782:11;;;;;;;;;-1:-1:-1::0;;;;;27782:11:0::1;-1:-1:-1::0;;;;;27782:19:0::1;;27809;27782:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;27912:20:0::1;::::0;27904:77:::1;::::0;27854:21:::1;::::0;-1:-1:-1;;;;;27912:20:0::1;::::0;27971:5:::1;::::0;27946:18;;27854:21;27904:77;27854:21;27904:77;27946:18;27912:20;27971:5;27904:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28045:3:0::1;::::0;28037:54:::1;::::0;27853:128;;-1:-1:-1;27993:15:0::1;::::0;-1:-1:-1;;;;;28045:3:0;;::::1;::::0;28081:5:::1;::::0;28062:12;;27993:15;28037:54;27993:15;28037:54;28062:12;28045:3;28081:5;28037:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27992:99;;;28111:16;28103:69;;;::::0;-1:-1:-1;;;28103:69:0;;10181:2:1;28103:69:0::1;::::0;::::1;10163:21:1::0;10220:2;10200:18;;;10193:30;10259:34;10239:18;;;10232:62;-1:-1:-1;;;10310:18:1;;;10303:38;10358:19;;28103:69:0::1;9979:404:1::0;28103:69:0::1;28191:10;28183:57;;;::::0;-1:-1:-1;;;28183:57:0;;11349:2:1;28183:57:0::1;::::0;::::1;11331:21:1::0;11388:2;11368:18;;;11361:30;11427:34;11407:18;;;11400:62;-1:-1:-1;;;11478:18:1;;;11471:32;11520:19;;28183:57:0::1;11147:398:1::0;28183:57:0::1;28256:19:::0;;28253:362:::1;;28291:6;::::0;28465:21:::1;::::0;28291:244:::1;::::0;-1:-1:-1;;;28291:244:0;;28367:4:::1;28291:244;::::0;::::1;7471:34:1::0;7521:18;;;7514:34;;;28291:6:0::1;7564:18:1::0;;;7557:34;;;7607:18;;;7600:34;-1:-1:-1;;;;;28465:21:0;;::::1;7650:19:1::0;;;7643:44;28505:15:0::1;7703:19:1::0;;;7696:35;28291:6:0;::::1;::::0;:22:::1;::::0;28321:18;;7405:19:1;;28291:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28555:48:0::1;::::0;;14301:25:1;;;14357:2;14342:18;;14335:34;;;28555:48:0::1;::::0;-1:-1:-1;14274:18:1;28555:48:0::1;;;;;;;28253:362;-1:-1:-1::0;;15817:6:0;:14;;-1:-1:-1;;15817:14:0;;;-1:-1:-1;;;;;;;;;;;26585:2037:0:o;24619:834::-;24715:7;24735:17;24812:9;24808:460;;;24840:6;24837:335;;;24943:54;24982:14;;24943:34;24975:1;24943:27;24968:1;24943:20;24954:8;;24943:6;:10;;:20;;;;:::i;:54::-;24931:66;;24808:460;;24837:335;25109:47;25141:14;;25109:27;25134:1;25109:20;25120:8;;25109:6;:10;;:20;;;;:::i;24808:460::-;25216:40;25241:14;;25216:20;25227:8;;25216:6;:10;;:20;;;;:::i;:40::-;25204:52;;24808:460;25325:4;25307:24;;;;:9;:24;;;;;;:39;;25336:9;25307:28;:39::i;:::-;25298:4;25280:24;;;;:9;:24;;;;;;;:66;;;;25362:42;;-1:-1:-1;;;;;25362:42:0;;;;;;;25394:9;13504:25:1;;13492:2;13477:18;;13358:177;25362:42:0;;;;;;;;25424:21;:6;25435:9;25424:10;:21::i;:::-;25417:28;24619:834;-1:-1:-1;;;;;;24619:834:0:o;1540:345::-;1626:7;1728:12;1721:5;1713:28;;;;-1:-1:-1;;;1713:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1752:9:0;1764:5;1768:1;1764;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:26;2551:9;2535:26;:::i;2623:454::-;2712:6;2720;2728;2736;2744;2797:3;2785:9;2776:7;2772:23;2768:33;2765:53;;;2814:1;2811;2804:12;2765:53;2837:26;2853:9;2837:26;:::i;:::-;2827:36;;2910:2;2899:9;2895:18;2882:32;2872:42;;2961:2;2950:9;2946:18;2933:32;2923:42;;3012:2;3001:9;2997:18;2984:32;2974:42;;3035:36;3066:3;3055:9;3051:19;3035:36;:::i;:::-;3025:46;;2623:454;;;;;;;;:::o;3082:337::-;3145:6;3153;3206:2;3194:9;3185:7;3181:23;3177:32;3174:52;;;3222:1;3219;3212:12;3174:52;3245:26;3261:9;3245:26;:::i;:::-;3235:36;;3321:2;3310:9;3306:18;3293:32;3365:4;3358:5;3354:16;3347:5;3344:27;3334:55;;3385:1;3382;3375:12;3424:180;3483:6;3536:2;3524:9;3515:7;3511:23;3507:32;3504:52;;;3552:1;3549;3542:12;3504:52;-1:-1:-1;3575:23:1;;3424:180;-1:-1:-1;3424:180:1:o;3609:184::-;3679:6;3732:2;3720:9;3711:7;3707:23;3703:32;3700:52;;;3748:1;3745;3738:12;3700:52;-1:-1:-1;3771:16:1;;3609:184;-1:-1:-1;3609:184:1:o;3798:248::-;3863:6;3871;3924:2;3912:9;3903:7;3899:23;3895:32;3892:52;;;3940:1;3937;3930:12;3892:52;3976:9;3963:23;3953:33;;4005:35;4036:2;4025:9;4021:18;4005:35;:::i;4051:248::-;4119:6;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;-1:-1:-1;;4219:23:1;;;4289:2;4274:18;;;4261:32;;-1:-1:-1;4051:248:1:o;4304:316::-;4381:6;4389;4397;4450:2;4438:9;4429:7;4425:23;4421:32;4418:52;;;4466:1;4463;4456:12;4418:52;-1:-1:-1;;4489:23:1;;;4559:2;4544:18;;4531:32;;-1:-1:-1;4610:2:1;4595:18;;;4582:32;;4304:316;-1:-1:-1;4304:316:1:o;4625:306::-;4713:6;4721;4729;4782:2;4770:9;4761:7;4757:23;4753:32;4750:52;;;4798:1;4795;4788:12;4750:52;4827:9;4821:16;4811:26;;4877:2;4866:9;4862:18;4856:25;4846:35;;4921:2;4910:9;4906:18;4900:25;4890:35;;4625:306;;;;;:::o;4936:523::-;5040:6;5048;5056;5064;5072;5080;5133:3;5121:9;5112:7;5108:23;5104:33;5101:53;;;5150:1;5147;5140:12;5101:53;-1:-1:-1;;5173:23:1;;;5243:2;5228:18;;5215:32;;-1:-1:-1;5294:2:1;5279:18;;5266:32;;5345:2;5330:18;;5317:32;;-1:-1:-1;5396:3:1;5381:19;;5368:33;;-1:-1:-1;5448:3:1;5433:19;5420:33;;-1:-1:-1;4936:523:1;-1:-1:-1;4936:523:1:o;5464:461::-;5517:3;5555:5;5549:12;5582:6;5577:3;5570:19;5608:4;5637:2;5632:3;5628:12;5621:19;;5674:2;5667:5;5663:14;5695:1;5705:195;5719:6;5716:1;5713:13;5705:195;;;5784:13;;-1:-1:-1;;;;;5780:39:1;5768:52;;5840:12;;;;5875:15;;;;5816:1;5734:9;5705:195;;;-1:-1:-1;5916:3:1;;5464:461;-1:-1:-1;;;;;5464:461:1:o;8160:510::-;8431:6;8420:9;8413:25;8474:3;8469:2;8458:9;8454:18;8447:31;8394:4;8495:57;8547:3;8536:9;8532:19;8524:6;8495:57;:::i;:::-;-1:-1:-1;;;;;8588:32:1;;;;8583:2;8568:18;;8561:60;-1:-1:-1;8652:2:1;8637:18;8630:34;8487:65;8160:510;-1:-1:-1;;8160:510:1:o;8675:597::-;8787:4;8816:2;8845;8834:9;8827:21;8877:6;8871:13;8920:6;8915:2;8904:9;8900:18;8893:34;8945:1;8955:140;8969:6;8966:1;8963:13;8955:140;;;9064:14;;;9060:23;;9054:30;9030:17;;;9049:2;9026:26;9019:66;8984:10;;8955:140;;;9113:6;9110:1;9107:13;9104:91;;;9183:1;9178:2;9169:6;9158:9;9154:22;9150:31;9143:42;9104:91;-1:-1:-1;9256:2:1;9235:15;-1:-1:-1;;9231:29:1;9216:45;;;;9263:2;9212:54;;8675:597;-1:-1:-1;;;8675:597:1:o;11981:329::-;12183:2;12165:21;;;12222:1;12202:18;;;12195:29;-1:-1:-1;;;12255:2:1;12240:18;;12233:36;12301:2;12286:18;;11981:329::o;13018:335::-;13220:2;13202:21;;;13259:2;13239:18;;;13232:30;-1:-1:-1;;;13293:2:1;13278:18;;13271:41;13344:2;13329:18;;13018:335::o;13540:582::-;13839:6;13828:9;13821:25;13882:6;13877:2;13866:9;13862:18;13855:34;13925:3;13920:2;13909:9;13905:18;13898:31;13802:4;13946:57;13998:3;13987:9;13983:19;13975:6;13946:57;:::i;:::-;-1:-1:-1;;;;;14039:32:1;;;;14034:2;14019:18;;14012:60;-1:-1:-1;14103:3:1;14088:19;14081:35;13938:65;13540:582;-1:-1:-1;;;13540:582:1:o;14569:128::-;14609:3;14640:1;14636:6;14633:1;14630:13;14627:39;;;14646:18;;:::i;:::-;-1:-1:-1;14682:9:1;;14569:128::o;14702:217::-;14742:1;14768;14758:132;;14812:10;14807:3;14803:20;14800:1;14793:31;14847:4;14844:1;14837:15;14875:4;14872:1;14865:15;14758:132;-1:-1:-1;14904:9:1;;14702:217::o;14924:168::-;14964:7;15030:1;15026;15022:6;15018:14;15015:1;15012:21;15007:1;15000:9;14993:17;14989:45;14986:71;;;15037:18;;:::i;:::-;-1:-1:-1;15077:9:1;;14924:168::o;15097:125::-;15137:4;15165:1;15162;15159:8;15156:34;;;15170:18;;:::i;:::-;-1:-1:-1;15207:9:1;;15097:125::o;15227:127::-;15288:10;15283:3;15279:20;15276:1;15269:31;15319:4;15316:1;15309:15;15343:4;15340:1;15333:15;15359:127;15420:10;15415:3;15411:20;15408:1;15401:31;15451:4;15448:1;15441:15;15475:4;15472:1;15465:15;15623:131;-1:-1:-1;;;;;15698:31:1;;15688:42;;15678:70;;15744:1;15741;15734:12

Swarm Source

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