Token Fantom Node Capital

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
1,000,000 FNC

Holders:
30 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

The first node/farming capital community token to make node/farming purchases using treasury and making buybacks and burns from own native token through the profit made from those investments.


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

Contract Source Code Verified (Exact Match)

Contract Name:
FantomNodeCapital

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-07
*/

//SPDX-License-Identifier: Unlicensed

/*
    -This is the new Fantom Node Capital v2 token contract.
    -It is a migration from the old contract: 0xb0c96020aac0003e61c609bd51e1629389e43674 - Fantom Node Capital - $FNC
    -If you still have $FNC that you were unable to migrate, please contact us via our socials with proof that you still own $FNC:
        -Twitter: @FantomNode
        -Telegram: @FantomNodeCapital
    -Buy, Sell and Transfer Taxes: 2% USDC Rewards tax + 2% Auto-Liquidity tax + 6% Treasury tax = 10% Total!
    -Total Supply(fixed): 1,000,000 $FNC!
    -USDC Rewards distributed every hour once you have earned 1 USDC!

    ***IMPORTANT NOTICE***
    If you did not send your $FNC v1 to the address we announced on Twitter, Telegram and Discord between 07/09/2022-07/10/2022, then half of your holdings will be burnt!
    Therefore please immediately send all your $FNC v1 tokens to us if you don't want to lose your $FNC! You can reach us on our socials above!
 */

pragma solidity ^0.7.4;

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

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

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

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IBEP20 REWARDS = IBEP20(0x04068DA6C83AFCFA0e13ba15A6696662335D5B75);
    address NATIVE = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;
    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 ** 12;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 10 ** 6;

    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(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        _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 = REWARDS.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = NATIVE;
        path[1] = address(REWARDS);

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

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

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

contract FantomNodeCapital is IBEP20, Auth {
    using SafeMath for uint256;

    address REWARDS = 0x04068DA6C83AFCFA0e13ba15A6696662335D5B75;
    address NATIVE = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83; 
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Fantom Node Capital";
    string constant _symbol = "FNC";
    uint8 constant _decimals = 4;
    uint256 _totalSupply = 1 * 10**6 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply * 2 / 100;
    uint256 public _maxWalletToken = ( _totalSupply * 2 ) / 100;

    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) isMaxWalletExempt;
    mapping (address => bool) isUtilityContract;
    mapping (address => bool) isBlacklisted;

    uint256 liquidityFee    = 2;
    uint256 reflectionFee   = 2;
    uint256 marketingFee    = 6;
    uint256 public totalFee = 10;
    uint256 feeDenominator  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 30;
    mapping (address => uint) private cooldownTimer;

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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        pair = IDEXFactory(router.factory()).createPair(NATIVE, address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxWalletExempt[msg.sender] =  true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = 0x0B8a7B0361f228b8d67e9E159dd7a7C6C82B3dA1;
        marketingFeeReceiver = 0x0B8a7B0361f228b8d67e9E159dd7a7C6C82B3dA1;

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

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    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 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] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "You don't have enough allowance.");
        }

        return _transferFrom(sender, recipient, amount);
    }

     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent ) / 100;
    }

    function setIsUtilityContract(address _address, bool _trueorfalse) external onlyOwner(){
        isUtilityContract[_address] = _trueorfalse;
        isMaxWalletExempt[_address] = _trueorfalse;
        isTxLimitExempt[_address] = _trueorfalse;
        isFeeExempt[_address] = _trueorfalse;
        isDividendExempt[_address] = _trueorfalse;
    }

    function setIsMaxWalletExepmt(address _address, bool _trueorfalse) external onlyOwner(){
        isMaxWalletExempt[_address] = _trueorfalse;
    }

    function setIsBlacklisted(address _address, bool _trueorfalse) external onlyOwner(){
        isBlacklisted[_address] = _trueorfalse;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
            require(!isBlacklisted[sender],"Sender is blacklisted!");
            require(!isBlacklisted[recipient], "Recipient is blacklisted!");
        }

        if (!authorizations[sender] && !isMaxWalletExempt[recipient] && !isUtilityContract[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Recipient can't hold more than Max Wallet!");}
        
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for cooldown between buys.");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "You don't have enough tokens.");

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

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

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

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

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "You don't have enough tokens.");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "You can't transfer more than Tx Limit.");
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if(isUtilityContract[recipient]){
            return false;
        }else{
            return !isFeeExempt[sender];
        }
    }

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

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

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountNATIVE = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountNATIVE * amountPercentage / 100);
    }

    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    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] = NATIVE;

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalNATIVEFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountNATIVELiquidity = amountNATIVE.mul(dynamicLiquidityFee).div(totalNATIVEFee).div(2);
        uint256 amountNATIVEReflection = amountNATIVE.mul(reflectionFee).div(totalNATIVEFee);
        uint256 amountNATIVEMarketing = amountNATIVE.mul(marketingFee).div(totalNATIVEFee);

        try distributor.deposit{value: amountNATIVEReflection}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountNATIVEMarketing, gas: 30000}("");
        tmpSuccess = false;

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

    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }

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

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

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

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

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

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

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

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

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

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

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

    event AutoLiquify(uint256 amountNATIVE, uint256 amountFNC);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountNATIVE","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountFNC","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","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":"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":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_trueorfalse","type":"bool"}],"name":"setIsBlacklisted","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":"_address","type":"address"},{"internalType":"bool","name":"_trueorfalse","type":"bool"}],"name":"setIsMaxWalletExepmt","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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_trueorfalse","type":"bool"}],"name":"setIsUtilityContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","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":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b03199081167304068da6c83afcfa0e13ba15a6696662335d5b75179091556003805482167321be370d5312f44cb42ce377bc9b8a0cef1a4c8317905560048054821661dead1790556005805490911690556402540be400600655630bebc20060075560646404a817c800046008556002601281905560135560066014819055600a601581905560646016819055601991909155601a55601e805460ff199081169091556207a120601f55602080548216600190811761ff001916611e001790915560228054909216179055546127109004602355348015620000f057600080fd5b50600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff1916909217909155601b805490921673f491e7b69e4244ad4002bc14e878a34207e38c291791829055825163c45a015560e01b815292516001600160a01b03929092169263c45a01559260048083019392829003018186803b1580156200018057600080fd5b505afa15801562000195573d6000803e3d6000fd5b505050506040513d6020811015620001ac57600080fd5b5051600354604080516364e329cb60e11b81526001600160a01b0392831660048201523060248201529051919092169163c9c653969160448083019260209291908290030181600087803b1580156200020457600080fd5b505af115801562000219573d6000803e3d6000fd5b505050506040513d60208110156200023057600080fd5b5051601c80546001600160a01b0319166001600160a01b03928316179055306000908152600a60209081526040808320601b80548616855292529182902060001990555490519116906200028490620003fb565b6001600160a01b03909116815260405190819003602001906000f080158015620002b2573d6000803e3d6000fd5b50601e8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600b60209081526040808320805460ff199081166001908117909255600c84528285208054821683179055600f84528285208054821683179055600d8452828520805482168317905560048054881686528386208054831684179055308087528487208054841685179055601c5489168752600e865284872080548416851790558652838620805483168417905554909616845281842080549096161790945560178054730b8a7b0361f228b8d67e9e159dd7a7c6c82b3da16001600160a01b031991821681179092556018805490911690911790556006548383526009825284832081905584519081529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a362000409565b610eb18062002d1883390190565b6128ff80620004196000396000f3fe6080604052600436106102b15760003560e01c8063722b62ad11610175578063bf56b371116100dc578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610aae578063f887ea4014610ae9578063fe9fbb8014610afe578063ffb54a9914610b31576102b8565b8063f0b37c0414610a0d578063f2fde38b14610a40578063f708a64f14610a73576102b8565b8063bf56b37114610937578063ca33e64c1461094c578063d51ed1c814610961578063dd62ed3e1461098b578063df20fd49146109c6578063e96fada2146109f8576102b8565b80639d1944f51161012e5780639d1944f514610816578063a0e3849214610840578063a4b45c001461087b578063a8aa1b31146108b6578063a9059cbb146108cb578063b6a5d7de14610904576102b8565b8063722b62ad1461076757806378109e541461077c5780637d1db4a51461079157806382bf293c146107a6578063893d20e8146107d057806395d89b4114610801576102b8565b80632b112e49116102195780635c85974f116101d25780635c85974f14610669578063617fe0ed14610693578063658d4b7f146106a85780636ddd1713146106e35780636fcba377146106f857806370a0823114610734576102b8565b80632b112e49146105565780632d48e8961461056b5780632d5945671461059b5780632f54bf6e146105d0578063313ce5671461060357806350db71fb1461062e576102b8565b80631161ae391161026b5780631161ae391461045f57806318160ddd1461048f5780631da1db5e146104a45780631df4ccfc146104ce578063201e7991146104e357806323b872dd14610513576102b8565b8062abe20f146102bd5780630445b667146102fa578063051e7ddc1461032157806306fdde031461035c578063095ea7b3146103e65780630d29598014610433576102b8565b366102b857005b600080fd5b3480156102c957600080fd5b506102f8600480360360408110156102e057600080fd5b506001600160a01b0381351690602001351515610b46565b005b34801561030657600080fd5b5061030f610bf4565b60408051918252519081900360200190f35b34801561032d57600080fd5b506102f86004803603604081101561034457600080fd5b506001600160a01b0381351690602001351515610bfa565b34801561036857600080fd5b50610371610c68565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ab578181015183820152602001610393565b50505050905090810190601f1680156103d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103f257600080fd5b5061041f6004803603604081101561040957600080fd5b506001600160a01b038135169060200135610c95565b604080519115158252519081900360200190f35b34801561043f57600080fd5b506102f86004803603602081101561045657600080fd5b50351515610cfc565b34801561046b57600080fd5b5061041f6004803603604081101561048257600080fd5b5080359060200135610d52565b34801561049b57600080fd5b5061030f610d66565b3480156104b057600080fd5b506102f8600480360360208110156104c757600080fd5b5035610d6c565b3480156104da57600080fd5b5061030f610df2565b3480156104ef57600080fd5b506102f86004803603604081101561050657600080fd5b5080359060200135610df8565b34801561051f57600080fd5b5061041f6004803603606081101561053657600080fd5b506001600160a01b03813581169160208101359091169060400135610e4b565b34801561056257600080fd5b5061030f610f10565b34801561057757600080fd5b506102f86004803603604081101561058e57600080fd5b5080359060200135610f59565b3480156105a757600080fd5b506102f8600480360360408110156105be57600080fd5b5080351515906020013560ff16611020565b3480156105dc57600080fd5b5061041f600480360360208110156105f357600080fd5b50356001600160a01b0316611089565b34801561060f57600080fd5b5061061861109d565b6040805160ff9092168252519081900360200190f35b34801561063a57600080fd5b506102f86004803603604081101561065157600080fd5b506001600160a01b03813516906020013515156110a2565b34801561067557600080fd5b506102f86004803603602081101561068c57600080fd5b5035611115565b34801561069f57600080fd5b5061041f611162565b3480156106b457600080fd5b506102f8600480360360408110156106cb57600080fd5b506001600160a01b038135169060200135151561116b565b3480156106ef57600080fd5b5061041f6111de565b34801561070457600080fd5b506102f86004803603608081101561071b57600080fd5b50803590602081013590604081013590606001356111e7565b34801561074057600080fd5b5061030f6004803603602081101561075757600080fd5b50356001600160a01b0316611271565b34801561077357600080fd5b5061061861128c565b34801561078857600080fd5b5061030f61129a565b34801561079d57600080fd5b5061030f6112a0565b3480156107b257600080fd5b506102f8600480360360208110156107c957600080fd5b50356112a6565b3480156107dc57600080fd5b506107e56112fe565b604080516001600160a01b039092168252519081900360200190f35b34801561080d57600080fd5b5061037161130d565b34801561082257600080fd5b506102f86004803603602081101561083957600080fd5b503561132a565b34801561084c57600080fd5b506102f86004803603604081101561086357600080fd5b506001600160a01b0381351690602001351515611386565b34801561088757600080fd5b506102f86004803603604081101561089e57600080fd5b506001600160a01b03813581169160200135166113f4565b3480156108c257600080fd5b506107e561146a565b3480156108d757600080fd5b5061041f600480360360408110156108ee57600080fd5b506001600160a01b038135169060200135611479565b34801561091057600080fd5b506102f86004803603602081101561092757600080fd5b50356001600160a01b0316611486565b34801561094357600080fd5b5061030f6114f0565b34801561095857600080fd5b506107e56114f6565b34801561096d57600080fd5b5061030f6004803603602081101561098457600080fd5b5035611505565b34801561099757600080fd5b5061030f600480360360408110156109ae57600080fd5b506001600160a01b0381358116916020013516611545565b3480156109d257600080fd5b506102f8600480360360408110156109e957600080fd5b50803515159060200135611570565b348015610a0457600080fd5b506107e56115cf565b348015610a1957600080fd5b506102f860048036036020811015610a3057600080fd5b50356001600160a01b03166115de565b348015610a4c57600080fd5b506102f860048036036020811015610a6357600080fd5b50356001600160a01b0316611642565b348015610a7f57600080fd5b506102f860048036036040811015610a9657600080fd5b506001600160a01b03813516906020013515156116f3565b348015610aba57600080fd5b506102f860048036036040811015610ad157600080fd5b506001600160a01b0381351690602001351515611877565b348015610af557600080fd5b506107e56118ea565b348015610b0a57600080fd5b5061041f60048036036020811015610b2157600080fd5b50356001600160a01b03166118f9565b348015610b3d57600080fd5b5061041f611917565b610b4f33611089565b610b89576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f83528184208054861682179055600c83528184208054861682179055600b83528184208054861682179055600e9092529091208054909216179055565b60235481565b610c0333611089565b610c3d576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60408051808201909152601381527211985b9d1bdb48139bd9194810d85c1a5d185b606a1b602082015290565b336000818152600a602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610d0533611089565b610d3f576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601e805460ff1916911515919091179055565b600082610d5e83611505565b119392505050565b60065490565b610d7533611089565b610daf576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60185460405147916001600160a01b03169060648484020480156108fc02916000818181858888f19350505050158015610ded573d6000803e3d6000fd5b505050565b60155481565b610e01336118f9565b610e40576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601991909155601a55565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914610efb5760408051808201825260208082527f596f7520646f6e2774206861766520656e6f75676820616c6c6f77616e63652e818301526001600160a01b0387166000908152600a82528381203382529091529190912054610ed6918490611920565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610f068484846119b7565b90505b9392505050565b600554600090610f5490610f2c906001600160a01b0316611271565b600454610f4e90610f45906001600160a01b0316611271565b6006549061202a565b9061202a565b905090565b610f62336118f9565b610fa1576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601e60019054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561100457600080fd5b505af1158015611018573d6000803e3d6000fd5b505050505050565b61102933611089565b611063576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6020805460ff19169215159290921761ff00191661010060ff9290921691909102179055565b6000546001600160a01b0390811691161490565b600490565b6110ab336118f9565b6110ea576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b61111e336118f9565b61115d576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600755565b60205460ff1681565b611174336118f9565b6111b3576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60225460ff1681565b6111f0336118f9565b61122f576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6012849055601383905560148290556112528261124c868661206c565b9061206c565b6015556016819055600481046015541061126b57600080fd5b50505050565b6001600160a01b031660009081526009602052604090205490565b602054610100900460ff1681565b60085481565b60075481565b6112af33611089565b6112e9576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60648160065402816112f757fe5b0460085550565b6000546001600160a01b031690565b604080518082019091526003815262464e4360e81b602082015290565b611333336118f9565b611372576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620b71b0811061138157600080fd5b601f55565b61138f33611089565b6113c9576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6113fd336118f9565b61143c576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b601c546001600160a01b031681565b6000610f093384846119b7565b61148f33611089565b6114c9576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b601d5481565b6017546001600160a01b031681565b6000610cf6611512610f10565b601c5461153f9061153890600290611532906001600160a01b0316611271565b906120c6565b85906120c6565b9061211f565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b611579336118f9565b6115b8576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6022805460ff191692151592909217909155602355565b6018546001600160a01b031681565b6115e733611089565b611621576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b61164b33611089565b611685576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b6116fc336118f9565b61173b576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03821630148015906117625750601c546001600160a01b03838116911614155b61176b57600080fd5b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561180d57601e5460408051630a5b654b60e11b81526001600160a01b038581166004830152600060248301819052925161010090940416926314b6ca969260448084019391929182900301818387803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b50505050611873565b601e546001600160a01b03838116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b15801561100457600080fd5b5050565b611880336118f9565b6118bf576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b601b546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b601e5460ff1681565b600081848411156119af5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561197457818101518382015260200161195c565b50505050905090810190601f1680156119a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60245460009060ff16156119d7576119d0848484612161565b9050610f09565b6001600160a01b03841660009081526001602052604090205460ff16158015611a1957506001600160a01b03831660009081526001602052604090205460ff16155b15611b4157601e5460ff16611a6c576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b6001600160a01b03841660009081526011602052604090205460ff1615611ad3576040805162461bcd60e51b815260206004820152601660248201527553656e64657220697320626c61636b6c69737465642160501b604482015290519081900360640190fd5b6001600160a01b03831660009081526011602052604090205460ff1615611b41576040805162461bcd60e51b815260206004820152601960248201527f526563697069656e7420697320626c61636b6c69737465642100000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526001602052604090205460ff16158015611b8357506001600160a01b0383166000908152600f602052604090205460ff16155b8015611ba857506001600160a01b03841660009081526010602052604090205460ff16155b8015611bbd57506001600160a01b0383163014155b8015611bd757506004546001600160a01b03848116911614155b8015611bf15750601c546001600160a01b03848116911614155b8015611c0b57506018546001600160a01b03848116911614155b8015611c2557506017546001600160a01b03848116911614155b15611c7c576000611c3584611271565b90506008548382011115611c7a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612833602a913960400191505060405180910390fd5b505b601c546001600160a01b038581169116148015611c9b575060205460ff165b8015611cc057506001600160a01b0383166000908152600d602052604090205460ff16155b15611d46576001600160a01b0383166000908152602160205260409020544211611d1b5760405162461bcd60e51b815260040180806020018281038252602681526020018061285d6026913960400191505060405180910390fd5b602080546001600160a01b03851660009081526021909252604090912061010090910460ff16420190555b611d50848361224b565b611d586122af565b15611d6557611d656122fe565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b038716600090815260099091529190912054611dc0918490611920565b6001600160a01b038516600090815260096020526040812091909155611de685856126df565b611df05782611dfa565b611dfa858461272b565b6001600160a01b038516600090815260096020526040902054909150611e20908261206c565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600e909152205460ff16611ecc57601e546001600160a01b03868116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611eb957600080fd5b505af1925050508015611eca575060015b505b6001600160a01b0384166000908152600e602052604090205460ff16611f6557601e546001600160a01b03858116600081815260096020526040808220548151630a5b654b60e11b81526004810194909452602484015251610100909404909216926314b6ca969260448084019391929182900301818387803b158015611f5257600080fd5b505af1925050508015611f63575060015b505b601e60019054906101000a90046001600160a01b03166001600160a01b031663ffb2c479601f546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fc257600080fd5b505af1925050508015611fd3575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b6000610f0983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611920565b600082820183811015610f09576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826120d557506000610cf6565b828202828482816120e257fe5b0414610f095760405162461bcd60e51b81526004018080602001828103825260218152602001806128a96021913960400191505060405180910390fd5b6000610f0983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127cd565b604080518082018252601d81527f596f7520646f6e2774206861766520656e6f75676820746f6b656e732e0000006020808301919091526001600160a01b03861660009081526009909152918220546121bb918490611920565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546121ea908361206c565b6001600160a01b0380851660008181526009602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b6007548111158061227457506001600160a01b0382166000908152600c602052604090205460ff165b6118735760405162461bcd60e51b81526004018080602001828103825260268152602001806128836026913960400191505060405180910390fd5b601c546000906001600160a01b031633148015906122d0575060245460ff16155b80156122de575060225460ff165b8015610f5457505060235430600090815260096020526040902054101590565b6024805460ff19166001179055601954601a5460009161231d91610d52565b6123295760125461232c565b60005b90506000612350600261153f60155461153f866023546120c690919063ffffffff16565b905060006123698260235461202a90919063ffffffff16565b604080516002808252606080830184529394509091602083019080368337019050509050308160008151811061239b57fe5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106123c657fe5b6001600160a01b03928316602091820292909201810191909152601b5460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b83811015612460578181015183820152602001612448565b505050509050019650505050505050600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b5050505060006124b6824761202a90919063ffffffff16565b905060006124d16124c888600261211f565b6015549061202a565b905060006124e6600261153f8481878d6120c6565b905060006125038361153f601354876120c690919063ffffffff16565b905060006125208461153f601454886120c690919063ffffffff16565b9050601e60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561257257600080fd5b505af193505050508015612584575060015b506018546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146125d7576040519150601f19603f3d011682016040523d82523d6000602084013e6125dc565b606091505b5060009250508a1590506126c857601b546017546040805163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991879160c48082019260609290919082900301818588803b15801561265f57600080fd5b505af1158015612673573d6000803e3d6000fd5b50505050506040513d606081101561268a57600080fd5b505060408051858152602081018c905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b50506024805460ff19169055505050505050505050565b6001600160a01b03811660009081526010602052604081205460ff161561270857506000610cf6565b506001600160a01b0382166000908152600b602052604090205460ff1615610cf6565b60008061274960165461153f601554866120c690919063ffffffff16565b30600090815260096020526040902054909150612766908261206c565b30600081815260096020908152604091829020939093558051848152905191926001600160a01b038816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a36127c5838261202a565b949350505050565b6000818361281c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561197457818101518382015260200161195c565b50600083858161282857fe5b049594505050505056fe526563697069656e742063616e277420686f6c64206d6f7265207468616e204d61782057616c6c657421506c65617365207761697420666f7220636f6f6c646f776e206265747765656e20627579732e596f752063616e2774207472616e73666572206d6f7265207468616e205478204c696d69742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c3f9da03a0e7f6aa53646ab13793fcf03a565411be8d64d4de113352c32b933464736f6c634300070400336080604052600180546001600160a01b03199081167304068da6c83afcfa0e13ba15a6696662335d5b7517909155600280549091167321be370d5312f44cb42ce377bc9b8a0cef1a4c8317905564e8d4a51000600c55610e10600d55620f4240600e5534801561006e57600080fd5b50604051610eb1380380610eb18339818101604052602081101561009157600080fd5b50516001600160a01b0381166100bb5773f491e7b69e4244ad4002bc14e878a34207e38c296100bd565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610dba806100f76000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610254578063f0fc6bca14610269578063ffb2c4791461027e578063ffd49c84146102a8576100dd565b8063ce7c2ac2146101e6578063d0e30db014610237578063e2d2e2191461023f576100dd565b80632d48e896116100bb5780632d48e896146101775780633a98ef39146101a75780634fab0ae8146101bc578063997664d7146101d1576100dd565b806311ce023d146100e257806314b6ca961461010957806328fd319814610144575b600080fd5b3480156100ee57600080fd5b506100f76102bd565b60408051918252519081900360200190f35b34801561011557600080fd5b506101426004803603604081101561012c57600080fd5b506001600160a01b0381351690602001356102c3565b005b34801561015057600080fd5b506100f76004803603602081101561016757600080fd5b50356001600160a01b03166103e8565b34801561018357600080fd5b506101426004803603604081101561019a57600080fd5b5080359060200135610474565b3480156101b357600080fd5b506100f7610496565b3480156101c857600080fd5b506100f761049c565b3480156101dd57600080fd5b506100f76104a2565b3480156101f257600080fd5b506102196004803603602081101561020957600080fd5b50356001600160a01b03166104a8565b60408051938452602084019290925282820152519081900360600190f35b6101426104c9565b34801561024b57600080fd5b506100f7610759565b34801561026057600080fd5b506100f761075f565b34801561027557600080fd5b50610142610765565b34801561028a57600080fd5b50610142600480360360208110156102a157600080fd5b5035610770565b3480156102b457600080fd5b506100f7610852565b600c5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b038216600090815260076020526040902054156103015761030182610858565b60008111801561032757506001600160a01b038216600090815260076020526040902054155b1561033a5761033582610980565b61036d565b8015801561035f57506001600160a01b03821660009081526007602052604090205415155b1561036d5761036d826109e1565b6001600160a01b03821660009081526007602052604090205460085461039e91839161039891610ace565b90610b19565b6008556001600160a01b03821660009081526007602052604090208190556103c581610b73565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461040d5750600061046f565b6001600160a01b03821660009081526007602052604081205461042f90610b73565b6001600160a01b0384166000908152600760205260409020600101549091508082116104605760009250505061046f565b61046a8282610ace565b925050505b919050565b6000546001600160a01b0316331461048b57600080fd5b600d91909155600e55565b60085481565b600e5481565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b031633146104e057600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b5051604080516002808252606080830184529394509091602083019080368337505060025482519293506001600160a01b03169183915060009061059557fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106105bf57fe5b6001600160a01b0392831660209182029290920181019190915260035460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b83811015610651578181015183820152602001610639565b50505050905001955050505050506000604051808303818588803b15801561067857600080fd5b505af115801561068c573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061071794508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b505190610ace565b6009549091506107279082610b19565b600955600854600c5461075191610748916107429085610b90565b90610be9565b600b5490610b19565b600b55505050565b600b5481565b600a5481565b61076e33610858565b565b6000546001600160a01b0316331461078757600080fd5b60045480610795575061084f565b6000805a905060005b84831080156107ac57508381105b1561084a5783600f54106107c0576000600f555b6107ec6004600f54815481106107d257fe5b6000918252602090912001546001600160a01b0316610c2b565b1561081d5761081d6004600f548154811061080357fe5b6000918252602090912001546001600160a01b0316610858565b61083261082b5a8490610ace565b8490610b19565b92505a600f805460019081019091559092500161079e565b505050505b50565b600d5481565b6001600160a01b03811660009081526007602052604090205461087a5761084f565b6000610885826103e8565b9050801561097c57600a5461089a9082610b19565b600a556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156108f357600080fd5b505af1158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b50506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109529082610b19565b6001600160a01b03831660009081526007602052604090206002810191909155546103c590610b73565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b6004805460001981019081106109f357fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610a7957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610aa957fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b1083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c67565b90505b92915050565b600082820183811015610b10576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610b13600c54610742600b5485610b9090919063ffffffff16565b600082610b9f57506000610b13565b82820282848281610bac57fe5b0414610b105760405162461bcd60e51b8152600401808060200182810382526021815260200180610d646021913960400191505060405180910390fd5b6000610b1083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cfe565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610b135750600e54610c60836103e8565b1192915050565b60008184841115610cf65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbb578181015183820152602001610ca3565b50505050905090810190601f168015610ce85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610d4d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cbb578181015183820152602001610ca3565b506000838581610d5957fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220fbc35714bd190142d1804952768c9a4381ad560f0cabb95518981a98beb2ecc964736f6c63430007040033

Deployed ByteCode Sourcemap

12347:13719:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17009:351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17009:351:0;;;;;;;;;;:::i;:::-;;14198:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17368:148;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17368:148:0;;;;;;;;;;:::i;15655:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16077:216;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16077:216:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21240:94;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21240:94:0;;;;:::i;25846:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25846:150:0;;;;;;;:::i;15385:88::-;;;;;;;;;;;;;:::i;21009:223::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21009:223:0;;:::i;13562:28::-;;;;;;;;;;;;;:::i;24991:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24991:183:0;;;;;;;:::i;16469:374::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16469:374:0;;;;;;;;;;;;;;;;;:::i;25521:142::-;;;;;;;;;;;;;:::i;25182:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25182:183:0;;;;;;;:::i;21342:164::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21342:164:0;;;;;;;;;;;:::i;4204:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4204:103:0;-1:-1:-1;;;;;4204:103:0;;:::i;15479:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24022:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24022:130:0;;;;;;;;;;:::i;23299:96::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23299:96:0;;:::i;14015:37::-;;;;;;;;;;;;;:::i;23758:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23758:120:0;;;;;;;;;;:::i;14161:30::-;;;;;;;;;;;;;:::i;24160:423::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24160:423:0;;;;;;;;;;;;;;;;;:::i;15825:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15825:105:0;-1:-1:-1;;;;;15825:105:0;;:::i;14059:39::-;;;;;;;;;;;;;:::i;12939:59::-;;;;;;;;;;;;;:::i;12880:52::-;;;;;;;;;;;;;:::i;16852:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16852:149:0;;:::i;15741:78::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15741:78:0;;;;;;;;;;;;;;15565:84;;;;;;;;;;;;;:::i;25373:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25373:136:0;;:::i;17524:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17524:140:0;;;;;;;;;;:::i;24591:228::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24591:228:0;;;;;;;;;;:::i;13837:19::-;;;;;;;;;;;;;:::i;16305:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16305:156:0;;;;;;;;:::i;3877:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3877:94:0;-1:-1:-1;;;;;3877:94:0;;:::i;13865:25::-;;;;;;;;;;;;;:::i;13635:36::-;;;;;;;;;;;;;:::i;25671:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25671:167:0;;:::i;15936:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15936:133:0;;;;;;;;;;:::i;24827:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24827:156:0;;;;;;;;;:::i;13678:35::-;;;;;;;;;;;;;:::i;4047:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4047:97:0;-1:-1:-1;;;;;4047:97:0;;:::i;4604:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4604:173:0;-1:-1:-1;;;;;4604:173:0;;:::i;23403:347::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23403:347:0;;;;;;;;;;:::i;23886:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23886:128:0;;;;;;;;;;:::i;13806:24::-;;;;;;;;;;;;;:::i;4378:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4378:107:0;-1:-1:-1;;;;;4378:107:0;;:::i;13897:31::-;;;;;;;;;;;;;:::i;17009:351::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17107:27:0;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;17107:42:0;;::::1;::::0;::::1;::::0;;;17160:17:::1;:27:::0;;;;;:42;;;::::1;::::0;::::1;::::0;;17213:15:::1;:25:::0;;;;;:40;;;::::1;::::0;::::1;::::0;;17264:11:::1;:21:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;17311:16:::1;:26:::0;;;;;;:41;;;;::::1;;::::0;;17009:351::o;14198:51::-;;;;:::o;17368:148::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17466:27:0;;;::::1;;::::0;;;:17:::1;:27;::::0;;;;:42;;-1:-1:-1;;17466:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17368:148::o;15655:80::-;15727:5;;;;;;;;;;;;-1:-1:-1;;;15727:5:0;;;;15655:80;:::o;16077:216::-;16181:10;16152:4;16169:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16169:32:0;;;;;;;;;;;:41;;;16226:37;;;;;;;16152:4;;16169:32;;16181:10;;16226:37;;;;;;;;-1:-1:-1;16281:4:0;16077:216;;;;;:::o;21240:94::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;21305:11:::1;:21:::0;;-1:-1:-1;;21305:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21240:94::o;25846:150::-;25926:4;25982:6;25950:29;25970:8;25950:19;:29::i;:::-;:38;;25846:150;-1:-1:-1;;;25846:150:0:o;15385:88::-;15458:12;;15385:88;:::o;21009:223::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;21155:20:::1;::::0;21147:77:::1;::::0;21115:21:::1;::::0;-1:-1:-1;;;;;21155:20:0::1;::::0;21220:3:::1;21186:31:::0;;::::1;:37;21147:77:::0;::::1;;;::::0;::::1;::::0;;;21186:37;21155:20;21147:77;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;3625:1;21009:223:::0;:::o;13562:28::-;;;;:::o;24991:183::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;25089:15:::1;:25:::0;;;;25125:26:::1;:41:::0;24991:183::o;16469:374::-;-1:-1:-1;;;;;16589:19:0;;16569:4;16589:19;;;:11;:19;;;;;;;;16609:10;16589:31;;;;;;;;-1:-1:-1;;16589:46:0;16586:190;;16685:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16685:19:0;;-1:-1:-1;16685:19:0;;;:11;:19;;;;;16705:10;16685:31;;;;;;;;;;:79;;16721:6;;16685:35;:79::i;:::-;-1:-1:-1;;;;;16651:19:0;;;;;;:11;:19;;;;;;;;16671:10;16651:31;;;;;;;:113;16586:190;16795:40;16809:6;16817:9;16828:6;16795:13;:40::i;:::-;16788:47;;16469:374;;;;;;:::o;25521:142::-;25649:4;;25574:7;;25601:54;;25639:15;;-1:-1:-1;;;;;25649:4:0;25639:9;:15::i;:::-;25628:4;;25601:33;;25618:15;;-1:-1:-1;;;;;25628:4:0;25618:9;:15::i;:::-;25601:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;25594:61;;25521:142;:::o;25182:183::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;25292:11:::1;;;;;;;;;-1:-1:-1::0;;;;;25292:11:0::1;-1:-1:-1::0;;;;;25292:35:0::1;;25328:10;25340:16;25292:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25182:183:::0;;:::o;21342:164::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;21426:18:::1;:28:::0;;-1:-1:-1;;21426:28:0::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;21465:33:0::1;21426:28;;21465:33:::0;;;::::1;::::0;;;::::1;;::::0;;21342:164::o;4204:103::-;4259:4;4294:5;-1:-1:-1;;;;;4294:5:0;;;4283:16;;;;4204:103::o;15479:80::-;12813:1;15479:80;:::o;24022:130::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24111:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;24111:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24022:130::o;23299:96::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;23366:12:::1;:21:::0;23299:96::o;14015:37::-;;;;;;:::o;23758:120::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23842:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;23842:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23758:120::o;14161:30::-;;;;;;:::o;24160:423::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;24303:12:::1;:28:::0;;;24342:13:::1;:30:::0;;;24383:12:::1;:28:::0;;;24433:52:::1;24398:13:::0;24433:33:::1;24318:13:::0;24358:14;24433:17:::1;:33::i;:::-;:37:::0;::::1;:52::i;:::-;24422:8;:63:::0;24496:14:::1;:32:::0;;;24573:1:::1;24513:15:::0;24558:16:::1;24547:8;;:27;24539:36;;;::::0;::::1;;24160:423:::0;;;;:::o;15825:105::-;-1:-1:-1;;;;;15909:18:0;15891:7;15909:18;;;:9;:18;;;;;;;15825:105::o;14059:39::-;;;;;;;;;:::o;12939:59::-;;;;:::o;12880:52::-;;;;:::o;16852:149::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;16990:3:::1;16971:14;16956:12;;:29;16955:38;;;;;;16937:15;:56:::0;-1:-1:-1;16852:149:0:o;15741:78::-;15793:7;15811:5;-1:-1:-1;;;;;15811:5:0;15741:78;:::o;15565:84::-;15639:7;;;;;;;;;;;;-1:-1:-1;;;15639:7:0;;;;15565:84;:::o;25373:136::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;25463:6:::1;25457:3;:12;25449:21;;;::::0;::::1;;25481:14;:20:::0;25373:136::o;17524:140::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17618:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:38;;-1:-1:-1;;17618:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17524:140::o;24591:228::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;24710:21:::1;:46:::0;;-1:-1:-1;;;;;24710:46:0;;::::1;-1:-1:-1::0;;;;;;24710:46:0;;::::1;;::::0;;;24767:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;24591:228::o;13837:19::-;;;-1:-1:-1;;;;;13837:19:0;;:::o;16305:156::-;16385:4;16409:44;16423:10;16435:9;16446:6;16409:13;:44::i;3877:94::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3937:19:0::1;;::::0;;;3959:4:::1;3937:19;::::0;;;;;;;:26;;-1:-1:-1;;3937:26:0::1;::::0;;::::1;::::0;;3877:94::o;13865:25::-;;;;:::o;13635:36::-;;;-1:-1:-1;;;;;13635:36:0;;:::o;25671:167::-;25739:7;25766:64;25807:22;:20;:22::i;:::-;25789:4;;25766:36;;25779:22;;25799:1;;25779:15;;-1:-1:-1;;;;;25789:4:0;25779:9;:15::i;:::-;:19;;:22::i;:::-;25766:8;;:12;:36::i;:::-;:40;;:64::i;15936:133::-;-1:-1:-1;;;;;16038:19:0;;;16020:7;16038:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15936:133::o;24827:156::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;24919:11:::1;:22:::0;;-1:-1:-1;;24919:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;24952:13:::1;:23:::0;24827:156::o;13678:35::-;;;-1:-1:-1;;;;;13678:35:0;;:::o;4047:97::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4109:19:0::1;4131:5;4109:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4109:27:0::1;::::0;;4047:97::o;4604:173::-;3593:19;3601:10;3593:7;:19::i;:::-;3585:38;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;-1:-1:-1;;;3585:38:0;;;;;;;;;;;;;;;4680:5:::1;:11:::0;;-1:-1:-1;;;;;;4680:11:0::1;-1:-1:-1::0;;;;;4680:11:0;::::1;::::0;;::::1;::::0;;4702:19;;;-1:-1:-1;4702:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;4702:26:0::1;::::0;;::::1;::::0;;;4744:25;;;;;;;::::1;::::0;;;;;;;;;::::1;4604:173:::0;:::o;23403:347::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23500:23:0;::::1;23518:4;23500:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;23537:4:0::1;::::0;-1:-1:-1;;;;;23527:14:0;;::::1;23537:4:::0;::::1;23527:14;;23500:41;23492:50;;;::::0;::::1;;-1:-1:-1::0;;;;;23553:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23553:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23597:146:::1;;23622:11;::::0;:31:::1;::::0;;-1:-1:-1;;;23622:31:0;;-1:-1:-1;;;;;23622:31:0;;::::1;;::::0;::::1;::::0;23651:1:::1;23622:31:::0;;;;;;;;:11:::1;::::0;;::::1;;::::0;:20:::1;::::0;:31;;;;;23651:1;;23622:31;;;;;;23651:1;23622:11;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23597:146;;;23684:11;::::0;-1:-1:-1;;;;;23713:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;23684:47;;-1:-1:-1;;;23684:47:0;;::::1;::::0;::::1;::::0;;;;;;;;;:11:::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;:47;;;;;23713:17;;23684:47;;;;;;23713:17;23684:11;:47;::::1;;::::0;::::1;;;;::::0;::::1;23597:146;23403:347:::0;;:::o;23886:128::-;3762:24;3775:10;3762:12;:24::i;:::-;3754:48;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;-1:-1:-1;;;3754:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23974:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;23974:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23886:128::o;13806:24::-;;;-1:-1:-1;;;;;13806:24:0;;:::o;4378:107::-;-1:-1:-1;;;;;4458:19:0;4434:4;4458:19;;;:14;:19;;;;;;;;;4378:107::o;13897:31::-;;;;;;:::o;1386:192::-;1472:7;1508:12;1500:6;;;;1492:29;;;;-1:-1:-1;;;1492:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1544:5:0;;;1386:192::o;17672:1995::-;17786:6;;17764:4;;17786:6;;17783:63;;;17802:41;17817:6;17825:9;17836:6;17802:14;:41::i;:::-;17795:48;;;;17783:63;-1:-1:-1;;;;;17862:22:0;;;;;;:14;:22;;;;;;;;17861:23;:53;;;;-1:-1:-1;;;;;;17889:25:0;;;;;;:14;:25;;;;;;;;17888:26;17861:53;17858:276;;;17938:11;;;;17930:43;;;;;-1:-1:-1;;;17930:43:0;;;;;;;;;;;;-1:-1:-1;;;17930:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17997:21:0;;;;;;:13;:21;;;;;;;;17996:22;17988:56;;;;;-1:-1:-1;;;17988:56:0;;;;;;;;;;;;-1:-1:-1;;;17988:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18068:24:0;;;;;;:13;:24;;;;;;;;18067:25;18059:63;;;;;-1:-1:-1;;;18059:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18151:22:0;;;;;;:14;:22;;;;;;;;18150:23;:56;;;;-1:-1:-1;;;;;;18178:28:0;;;;;;:17;:28;;;;;;;;18177:29;18150:56;:86;;;;-1:-1:-1;;;;;;18211:25:0;;;;;;:17;:25;;;;;;;;18210:26;18150:86;:116;;;;-1:-1:-1;;;;;;18240:26:0;;18261:4;18240:26;;18150:116;:146;;;;-1:-1:-1;18291:4:0;;-1:-1:-1;;;;;18270:26:0;;;18291:4;;18270:26;;18150:146;:167;;;;-1:-1:-1;18313:4:0;;-1:-1:-1;;;;;18300:17:0;;;18313:4;;18300:17;;18150:167;:204;;;;-1:-1:-1;18334:20:0;;-1:-1:-1;;;;;18321:33:0;;;18334:20;;18321:33;;18150:204;:242;;;;-1:-1:-1;18371:21:0;;-1:-1:-1;;;;;18358:34:0;;;18371:21;;18358:34;;18150:242;18146:414;;;18408:18;18429:20;18439:9;18429;:20::i;:::-;18408:41;;18497:15;;18486:6;18473:10;:19;18472:40;;18464:94;;;;-1:-1:-1;;;18464:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18146:414;;18594:4;;-1:-1:-1;;;;;18584:14:0;;;18594:4;;18584:14;:49;;;;-1:-1:-1;18615:18:0;;;;18584:49;:94;;;;-1:-1:-1;;;;;;18651:27:0;;;;;;:16;:27;;;;;;;;18650:28;18584:94;18580:300;;;-1:-1:-1;;;;;18703:24:0;;;;;;:13;:24;;;;;;18730:15;-1:-1:-1;18695:92:0;;;;-1:-1:-1;;;18695:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18847:21;;;-1:-1:-1;;;;;18802:24:0;;;;;;:13;:24;;;;;;;18847:21;;;;;;18829:15;:39;18802:66;;18580:300;18892:28;18905:6;18913;18892:12;:28::i;:::-;18936:16;:14;:16::i;:::-;18933:35;;;18955:10;:8;:10::i;:::-;19000:62;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19000:17:0;;-1:-1:-1;19000:17:0;;;:9;:17;;;;;;;;:62;;19022:6;;19000:21;:62::i;:::-;-1:-1:-1;;;;;18980:17:0;;;;;;:9;:17;;;;;:82;;;;19100:32;18990:6;19122:9;19100:13;:32::i;:::-;:67;;19161:6;19100:67;;;19135:23;19143:6;19151;19135:7;:23::i;:::-;-1:-1:-1;;;;;19201:20:0;;;;;;:9;:20;;;;;;19075:92;;-1:-1:-1;19201:40:0;;19075:92;19201:24;:40::i;:::-;-1:-1:-1;;;;;19178:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;19258:24;;;;;:16;:24;;;;;;;19254:119;;19303:11;;-1:-1:-1;;;;;19332:17:0;;;;;;;:9;:17;;;;;;;19303:47;;-1:-1:-1;;;19303:47:0;;;;;;;;;;;;;;:11;;;;;;;;:20;;:47;;;;;19332:17;;19303:47;;;;;;19332:17;19303:11;:47;;;;;;;;;;;;;;;;;;;;;;;;;19299:63;;-1:-1:-1;;;;;19389:27:0;;;;;;:16;:27;;;;;;;;19385:129;;19437:11;;-1:-1:-1;;;;;19469:20:0;;;;;;;:9;:20;;;;;;;19437:53;;-1:-1:-1;;;19437:53:0;;;;;;;;;;;;;;:11;;;;;;;;:20;;:53;;;;;19469:20;;19437:53;;;;;;19469:20;19437:11;:53;;;;;;;;;;;;;;;;;;;;;;;;;19433:69;;19530:11;;;;;;;;;-1:-1:-1;;;;;19530:11:0;-1:-1:-1;;;;;19530:19:0;;19550:14;;19530:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19526:51;19611:9;-1:-1:-1;;;;;19594:43:0;19603:6;-1:-1:-1;;;;;19594:43:0;;19622:14;19594:43;;;;;;;;;;;;;;;;;;-1:-1:-1;19655:4:0;;17672:1995;-1:-1:-1;;;;17672:1995:0:o;1244:136::-;1302:7;1329:43;1333:1;1336;1329:43;;;;;;;;;;;;;;;;;:3;:43::i;1057:181::-;1115:7;1147:5;;;1171:6;;;;1163:46;;;;;-1:-1:-1;;;1163:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1584:250;1642:7;1666:6;1662:47;;-1:-1:-1;1696:1:0;1689:8;;1662:47;1733:5;;;1737:1;1733;:5;:1;1757:5;;;;;:10;1749:56;;;;-1:-1:-1;;;1749:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:132;1898:7;1925:39;1929:1;1932;1925:39;;;;;;;;;;;;;;;;;:3;:39::i;19679:339::-;19809:62;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19809:17:0;;19772:4;19809:17;;;:9;:17;;;;;;;:62;;19831:6;;19809:21;:62::i;:::-;-1:-1:-1;;;;;19789:17:0;;;;;;;:9;:17;;;;;;:82;;;;19905:20;;;;;;;:32;;19930:6;19905:24;:32::i;:::-;-1:-1:-1;;;;;19882:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;19953:35;;;;;;;19882:20;;19953:35;;;;;;;;;;;;;-1:-1:-1;20006:4:0;19679:339;;;;;:::o;20026:187::-;20123:12;;20113:6;:22;;:49;;;-1:-1:-1;;;;;;20139:23:0;;;;;;:15;:23;;;;;;;;20113:49;20105:100;;;;-1:-1:-1;;;20105:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20804:197;20891:4;;20853;;-1:-1:-1;;;;;20891:4:0;20877:10;:18;;;;:38;;-1:-1:-1;20909:6:0;;;;20908:7;20877:38;:62;;;;-1:-1:-1;20928:11:0;;;;20877:62;:116;;;;-1:-1:-1;;20980:13:0;;20970:4;20952:24;;;;:9;:24;;;;;;:41;;;20804:197::o;21514:1777::-;14296:6;:13;;-1:-1:-1;;14296:13:0;14305:4;14296:13;;;21609:15:::1;::::0;21626:26:::1;::::0;14296:6;;21593:60:::1;::::0;:15:::1;:60::i;:::-;:79;;21660:12;;21593:79;;;21656:1;21593:79;21563:109;;21683:23;21709:59;21766:1;21709:52;21752:8;;21709:38;21727:19;21709:13;;:17;;:38;;;;:::i;:59::-;21683:85;;21779:20;21802:34;21820:15;21802:13;;:17;;:34;;;;:::i;:::-;21873:16;::::0;;21887:1:::1;21873:16:::0;;;21849:21:::1;21873:16:::0;;::::1;::::0;;21779:57;;-1:-1:-1;21873:16:0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21873:16:0::1;21849:40;;21918:4;21900;21905:1;21900:7;;;;;;;;-1:-1:-1::0;;;;;21900:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21944:6:::1;::::0;21934:7;;21944:6;::::1;::::0;21934:4;;21944:6;;21934:7;::::1;;;;;-1:-1:-1::0;;;;;21934:16:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:16;;;;22021:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;22021:188:0;;::::1;::::0;::::1;::::0;;;21963:21:::1;22021:188:::0;;;;;;22163:4:::1;22021:188:::0;;;;;;22183:15:::1;22021:188:::0;;;;;;;;;;;;;;;;;;;;;21987:21:::1;::::0;22021:6;;;::::1;::::0;:57:::1;::::0;22093:12;;21963:21;;22136:4;;22021:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;21963:21;22021:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22222:20;22245:40;22271:13;22245:21;:25;;:40;;;;:::i;:::-;22222:63:::0;-1:-1:-1;22298:22:0::1;22323:40;22336:26;:19:::0;22360:1:::1;22336:23;:26::i;:::-;22323:8;::::0;;:12:::1;:40::i;:::-;22298:65:::0;-1:-1:-1;22384:29:0::1;22416:64;22478:1;22416:57;22298:65:::0;22416:57;:12;22433:19;22416:16:::1;:37::i;:64::-;22384:96;;22491:30;22524:51;22560:14;22524:31;22541:13;;22524:12;:16;;:31;;;;:::i;:51::-;22491:84;;22586:29;22618:50;22653:14;22618:30;22635:12;;22618;:16;;:30;;;;:::i;:50::-;22586:82;;22685:11;;;;;;;;;-1:-1:-1::0;;;;;22685:11:0::1;-1:-1:-1::0;;;;;22685:19:0::1;;22712:22;22685:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22681:68:::0;22788:20:::1;::::0;22780:80:::1;::::0;22760:15:::1;::::0;-1:-1:-1;;;;;22788:20:0::1;::::0;22850:5:::1;::::0;22822:21;;22760:15;22780:80;22760:15;22780:80;22822:21;22788:20;22850:5;22780:80:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22884:5:0::1;::::0;-1:-1:-1;;22905:19:0;;;-1:-1:-1;22902:382:0::1;;22940:6;::::0;23117:21:::1;::::0;22940:247:::1;::::0;;-1:-1:-1;;;22940:247:0;;23019:4:::1;22940:247;::::0;::::1;::::0;;;;;;;:6:::1;:247:::0;;;;;;;;;;-1:-1:-1;;;;;23117:21:0;;::::1;22940:247:::0;;;;23157:15:::1;22940:247:::0;;;;;;:6;;;::::1;::::0;:22:::1;::::0;22970:21;;22940:247;;;;;::::1;::::0;;;;;;;;;22970:21;22940:6;:247;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;22940:247:0;23221:51;;;;;22940:247:::1;23221:51:::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;22902:382;-1:-1:-1::0;;14314:6:0;:14;;-1:-1:-1;;14314:14:0;;;-1:-1:-1;;;;;;;;;21514:1777:0:o;20221:234::-;-1:-1:-1;;;;;20322:28:0;;20302:4;20322:28;;;:17;:28;;;;;;;;20319:129;;;-1:-1:-1;20373:5:0;20366:12;;20319:129;-1:-1:-1;;;;;;20417:19:0;;;;;;:11;:19;;;;;;;;20416:20;20409:27;;20463:333;20530:7;20550:17;20570:40;20595:14;;20570:20;20581:8;;20570:6;:10;;:20;;;;:::i;:40::-;20668:4;20650:24;;;;:9;:24;;;;;;20550:60;;-1:-1:-1;20650:39:0;;20550:60;20650:28;:39::i;:::-;20641:4;20623:24;;;;:9;:24;;;;;;;;;:66;;;;20705:42;;;;;;;20641:4;;-1:-1:-1;;;;;20705:42:0;;;;;;;;;;;;;20767:21;:6;20778:9;20767:10;:21::i;:::-;20760:28;20463:333;-1:-1:-1;;;;20463:333:0:o;1978:345::-;2064:7;2166:12;2159:5;2151:28;;;;-1:-1:-1;;;2151:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:9;2206:1;2202;:5;;;;;;;1978:345;-1:-1:-1;;;;;1978:345:0:o

Swarm Source

ipfs://fbc35714bd190142d1804952768c9a4381ad560f0cabb95518981a98beb2ecc9
Loading