ETH Price: $3,095.89 (+0.92%)
Gas: 16 Gwei

Token

Caishen (CaiFu)
 

Overview

Max Total Supply

8,888,888,888 CaiFu

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
27,600,000.00000000022512516 CaiFu

Value
$0.00
0xdad1d161bc45457b4d79ab46fe0c764b194d68c8
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:
Caishen

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-09
*/

/*
Caishen is here to bless every holder giving 
out red packets filled with $USDC . 
Come prosper together!

TG:      https://t.me/CaishenPortal
Twitter: https://twitter.com/CaishenCaifuETH
Website: http://www.caishencaifu.com

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;


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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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

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

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

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

    IERC20 RWRD = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); // ANGBAO (USDC)  
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // 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 = 45 * 60;
    uint256 public minDistribution = 1 * (10 ** 13);

    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); //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D Uniswap
        _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 = RWRD.balanceOf(address(this));

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

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

        uint256 amount = RWRD.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);
            RWRD.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 Caishen is IERC20, Auth {
    using SafeMath for uint256;

    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV = 0x13D59228C3A3f2cC65Cc5063549874d75839004c; // DEPLOYER

    string constant _name = "Caishen";
    string constant _symbol = "CaiFu";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 8_888_888_888 * 1e18;

    uint256 public _maxTxAmount = 88_888_888 * 1e18; // 1% max txn
    uint256 public _maxWalletToken = 88_888_888 * 1e18; // 1% max wallet

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


    bool public blacklistMode = true;
    mapping (address => bool) public isBlacklisted;
    uint256 private launchBlock;
    uint256 private deadBlocks;
    bool public swapEnabled = false;
    

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    uint256 public liquidityFee    = 0;
    uint256 public reflectionFee   = 2;
    uint256 public marketingFee    = 5;
    uint256 public devFee          = 5;
    uint256 public totalFee        = marketingFee + reflectionFee + liquidityFee + devFee;
    uint256 public feeDenominator  = 100;

    uint256 public sellMultiplier  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingActive = false;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;


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

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //uniswap 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint).max;

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(DEV)] = true;
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(DEV)] = true;

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

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

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = address(0x7C3540e94d44c3bdc837D00B096481565E6feDD3);
        devFeeReceiver = address(DEV);

        _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 approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint).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(uint).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

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

    event BoughtEarly(address indexed sniper);

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

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingActive,"Trading not open yet");
        }

        // Blacklist
        if(blacklistMode){
            require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");    
        }

        if(block.number <= launchBlock + deadBlocks && sender == address(pair) &&  
            recipient != address(router) && recipient != address(this) && recipient != address(pair)){
                    isBlacklisted[recipient] = true;
                    emit BoughtEarly(recipient);
        }


        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != devFeeReceiver  && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        checkTxLimit(sender, amount);

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

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

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount,(recipient == pair)) : 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;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

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

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

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        

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

        return amount.sub(feeAmount);
    }

    function blockBots(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != address(router) && 
               blockee != address(pair))
                isBlacklisted[blockee] = shouldBlock;
        }
    }

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

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

    function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;        
    }

    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
        deadBlocks = _deadBlocks;
    }

    // enable cooldown between trades
    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] = 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 tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHDev, gas: 30000}("");
        
        // Supress warning msg
        tmpSuccess = false;

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


    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 enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }


    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 _devFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(devFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/2, "Fees cannot be more than 50%");
    }

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

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



/* Airdrop */
/*
    function multiTransfer(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

    require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

    uint256 SCCC = tokens * addresses.length;

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens);
        if(!isDividendExempt[addresses[i]]) {
            try distributor.setShare(addresses[i], _balances[addresses[i]]) {} catch {} 
        }
    }

    // Dividend tracker
    if(!isDividendExempt[from]) {
        try distributor.setShare(from, _balances[from]) {} catch {}
    }
}*/

event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","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":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","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":"reflectionFee","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":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","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":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","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":[{"internalType":"uint256","name":"Multiplier","type":"uint256"}],"name":"set_sell_multiplier","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217825560038054821661dead1790556004805482169055600580549091167313d59228c3a3f2cc65cc5063549874d75839004c1781556b1cb8b7702ae75fb695e000006006556a4986f44622f73835e000006007819055600855600b805460ff19908116600117909155600f80549091169055600060148190556015839055601682905560178290559091620000c09083620004a8565b620000cc9190620004a8565b620000d89190620004a8565b60185560646019819055601a8190556014601e908155601f919091556021805460ff60a01b191690556207a1206023556024805461ffff1916610a00179055600654612710916200012a9190620004c4565b620001369190620004de565b6026553480156200014657600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff19169092179091558054737a250d5630b4cf539739df2c5dacb4c659f2488d921682178155825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f1919062000501565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000269919062000501565b602180546001600160a01b0319166001600160a01b03928316179055306000908152600a602090815260408083208254851684528252918290206000199055549051911690620002b99062000484565b6001600160a01b039091168152602001604051809103906000f080158015620002e6573d6000803e3d6000fd5b50602280546001600160a01b039283166001600160a01b031991821617909155336000818152601060209081526040808320805460ff1990811660019081179092556005805489168652838620805483168417905586865260118552838620805483168417905580548916865283862080548316841790558686526012855283862080548316841790558054891686528386208054831684179055600380548a168752848720805484168517905530808852858820805485168617905582548b16885285882080548516861790556021548b1688526013875285882080548516861790558752848720805484168517905581548a168752848720805484169055548916865283862080549092169092179055601b8054871686179055601c80548716737c3540e94d44c3bdc837d00b096481565e6fedd317905554601d8054909616961695909517909355600654828252600990935283812083905592519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200047691815260200190565b60405180910390a362000533565b61100a80620030b983390190565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004be57620004be62000492565b92915050565b8082028115828204841417620004be57620004be62000492565b600082620004fc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200051457600080fd5b81516001600160a01b03811681146200052c57600080fd5b9392505050565b612b7680620005436000396000f3fe6080604052600436106103b15760003560e01c806382aa7c68116101e7578063ca33e64c1161010d578063f0b37c04116100a0578063f887ea401161006f578063f887ea4014610b26578063fe575a8714610b46578063fe9fbb8014610b76578063fed0d2a114610b9657600080fd5b8063f0b37c0414610aa6578063f2fde38b14610ac6578063f708a64f14610ae6578063f84ba65d14610b0657600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a00578063df20fd4914610a46578063e96fada214610a66578063ec72d65f14610a8657600080fd5b8063ca33e64c14610980578063d478a06c146109a0578063d51ed1c8146109c0578063dab84ee7146109e057600080fd5b80639d1944f511610185578063b6a5d7de11610154578063b6a5d7de146108ff578063bbc0c7421461091f578063bd9ab53714610940578063bfe109281461096057600080fd5b80639d1944f51461087f578063a4b45c001461089f578063a8aa1b31146108bf578063a9059cbb146108df57600080fd5b8063896648c1116101c1578063896648c1146108015780638e2eee841461081b57806395d89b411461083b57806398118cb41461086957600080fd5b806382aa7c681461079957806383ad7994146107b9578063893d20e8146107cf57600080fd5b80632f54bf6e116102d7578063658d4b7f1161026a57806370a082311161023957806370a0823114610718578063722b62ad1461074e57806378109e541461076d5780637d1db4a51461078357600080fd5b8063658d4b7f146106b25780636827e764146106d25780636b67c4df146106e85780636ddd1713146106fe57600080fd5b8063571ac8b0116102a6578063571ac8b0146106385780635c85974f146106585780635e562f3b14610678578063617fe0ed1461069857600080fd5b80632f54bf6e146105a7578063313ce567146105d657806344a33fd2146105f857806350db71fb1461061857600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd146105325780632b112e49146105525780632d48e896146105675780632d5945671461058757600080fd5b806318160ddd146104c75780631da1db5e146104dc5780631df4ccfc146104fc578063201e79911461051257600080fd5b806309302dc61161038b57806309302dc614610441578063095ea7b3146104615780631161ae3914610491578063180b0d7e146104b157600080fd5b80630445b667146103bd57806304a66b48146103e657806306fdde031461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360265481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506104066104013660046126e2565b610bac565b005b34801561041457600080fd5b5060408051808201909152600781526621b0b4b9b432b760c91b60208201525b6040516103dd919061271d565b34801561044d57600080fd5b5061040661045c36600461276b565b610c6e565b34801561046d57600080fd5b5061048161047c36600461279c565b610cb9565b60405190151581526020016103dd565b34801561049d57600080fd5b506104816104ac3660046127c8565b610d26565b3480156104bd57600080fd5b506103d360195481565b3480156104d357600080fd5b506006546103d3565b3480156104e857600080fd5b506104066104f736600461276b565b610d3a565b34801561050857600080fd5b506103d360185481565b34801561051e57600080fd5b5061040661052d3660046127c8565b610db3565b34801561053e57600080fd5b5061048161054d3660046127ea565b610de3565b34801561055e57600080fd5b506103d3610ea5565b34801561057357600080fd5b506104066105823660046127c8565b610ef7565b34801561059357600080fd5b506104066105a2366004612840565b610f86565b3480156105b357600080fd5b506104816105c236600461287d565b6000546001600160a01b0391821691161490565b3480156105e257600080fd5b5060125b60405160ff90911681526020016103dd565b34801561060457600080fd5b5061040661061336600461276b565b610fd7565b34801561062457600080fd5b5061040661063336600461289a565b61100d565b34801561064457600080fd5b5061048161065336600461287d565b61105d565b34801561066457600080fd5b5061040661067336600461276b565b61106b565b34801561068457600080fd5b506104066106933660046128cf565b611095565b3480156106a457600080fd5b506024546104819060ff1681565b3480156106be57600080fd5b506104066106cd36600461289a565b6110d2565b3480156106de57600080fd5b506103d360175481565b3480156106f457600080fd5b506103d360165481565b34801561070a57600080fd5b50600f546104819060ff1681565b34801561072457600080fd5b506103d361073336600461287d565b6001600160a01b031660009081526009602052604090205490565b34801561075a57600080fd5b506024546105e690610100900460ff1681565b34801561077957600080fd5b506103d360085481565b34801561078f57600080fd5b506103d360075481565b3480156107a557600080fd5b506104066107b436600461276b565b611122565b3480156107c557600080fd5b506103d360155481565b3480156107db57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103dd565b34801561080d57600080fd5b50600b546104819060ff1681565b34801561082757600080fd5b506104066108363660046128ea565b6111c0565b34801561084757600080fd5b50604080518082019091526005815264436169467560d81b6020820152610434565b34801561087557600080fd5b506103d360145481565b34801561088b57600080fd5b5061040661089a36600461276b565b61125f565b3480156108ab57600080fd5b506104066108ba36600461296e565b611298565b3480156108cb57600080fd5b506021546107e9906001600160a01b031681565b3480156108eb57600080fd5b506104816108fa36600461279c565b6112fe565b34801561090b57600080fd5b5061040661091a36600461287d565b61130b565b34801561092b57600080fd5b5060215461048190600160a01b900460ff1681565b34801561094c57600080fd5b5061040661095b36600461276b565b61135c565b34801561096c57600080fd5b506022546107e9906001600160a01b031681565b34801561098c57600080fd5b50601b546107e9906001600160a01b031681565b3480156109ac57600080fd5b506104066109bb3660046128ea565b6113a7565b3480156109cc57600080fd5b506103d36109db36600461276b565b611485565b3480156109ec57600080fd5b50601d546107e9906001600160a01b031681565b348015610a0c57600080fd5b506103d3610a1b36600461296e565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610a5257600080fd5b50610406610a6136600461299c565b6114cc565b348015610a7257600080fd5b50601c546107e9906001600160a01b031681565b348015610a9257600080fd5b50610406610aa136600461276b565b611508565b348015610ab257600080fd5b50610406610ac136600461287d565b611537565b348015610ad257600080fd5b50610406610ae136600461287d565b611582565b348015610af257600080fd5b50610406610b0136600461289a565b611618565b348015610b1257600080fd5b50610406610b2136600461289a565b611720565b348015610b3257600080fd5b506020546107e9906001600160a01b031681565b348015610b5257600080fd5b50610481610b6136600461287d565b600c6020526000908152604090205460ff1681565b348015610b8257600080fd5b50610481610b9136600461287d565b611770565b348015610ba257600080fd5b506103d3601a5481565b610bb533611770565b610bda5760405162461bcd60e51b8152600401610bd1906129b8565b60405180910390fd5b6014859055601584905560168390556017829055610c0482610bfe8581898961178e565b9061178e565b6018556019819055610c176002826129f3565b60185410610c675760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20353025000000006044820152606401610bd1565b5050505050565b6000546001600160a01b03163314610c985760405162461bcd60e51b8152600401610bd190612a15565b6103e881600654610ca99190612a35565b610cb391906129f3565b60085550565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d149086815260200190565b60405180910390a35060015b92915050565b600082610d3283611485565b119392505050565b610d4333611770565b610d5f5760405162461bcd60e51b8152600401610bd1906129b8565b601c5447906001600160a01b03166108fc6064610d7c8585612a35565b610d8691906129f3565b6040518115909202916000818181858888f19350505050158015610dae573d6000803e3d6000fd5b505050565b610dbc33611770565b610dd85760405162461bcd60e51b8152600401610bd1906129b8565b601e91909155601f55565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914610e90576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610e6b9184906117ed565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610e9b848484611827565b90505b9392505050565b6004546001600160a01b0316600090815260096020526040812054610ef2906003546001600160a01b0316600090815260096020526040902054610eec9060065490611f46565b90611f46565b905090565b610f0033611770565b610f1c5760405162461bcd60e51b8152600401610bd1906129b8565b6022546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610fb05760405162461bcd60e51b8152600401610bd190612a15565b6024805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610fe033611770565b610ffc5760405162461bcd60e51b8152600401610bd1906129b8565b47336108fc6064610d7c8585612a35565b61101633611770565b6110325760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610d2082600019610cb9565b61107433611770565b6110905760405162461bcd60e51b8152600401610bd1906129b8565b600755565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610bd190612a15565b600b805460ff1916911515919091179055565b6110db33611770565b6110f75760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610bd190612a15565b602154600160a01b900460ff16156111975760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610bd1565b6021805460ff60a01b1916600160a01b17905543600d55600f805460ff19166001179055600e55565b6000546001600160a01b031633146111ea5760405162461bcd60e51b8152600401610bd190612a15565b60005b828110156112595781600c600086868581811061120c5761120c612a4c565b9050602002016020810190611221919061287d565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561125281612a62565b90506111ed565b50505050565b61126833611770565b6112845760405162461bcd60e51b8152600401610bd1906129b8565b620b71b0811061129357600080fd5b602355565b6112a133611770565b6112bd5760405162461bcd60e51b8152600401610bd1906129b8565b601b80546001600160a01b03199081166001600160a01b0394851617909155601c8054821692841692909217909155600554601d8054919093169116179055565b6000610e9e338484611827565b6000546001600160a01b031633146113355760405162461bcd60e51b8152600401610bd190612a15565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146113865760405162461bcd60e51b8152600401610bd190612a15565b6103e8816006546113979190612a35565b6113a191906129f3565b60075550565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610bd190612a15565b60005b828110156112595760008484838181106113f0576113f0612a4c565b9050602002016020810190611405919061287d565b90506001600160a01b038116301480159061142e57506020546001600160a01b03828116911614155b801561144857506021546001600160a01b03828116911614155b15611472576001600160a01b0381166000908152600c60205260409020805460ff19168415151790555b508061147d81612a62565b9150506113d4565b6000610d20611492610ea5565b6021546001600160a01b03166000908152600960205260409020546114c6906114bf906002905b90611f88565b8590611f88565b9061200a565b6114d533611770565b6114f15760405162461bcd60e51b8152600401610bd1906129b8565b600f805460ff191692151592909217909155602655565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610bd190612a15565b601a55565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610bd190612a15565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610bd190612a15565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61162133611770565b61163d5760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b038216301480159061166457506021546001600160a01b03838116911614155b61166d57600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556116d357602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610f50565b6022546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610f50565b5050565b61172933611770565b6117455760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008061179b8385612a7b565b905083811015610e9e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd1565b600081848411156118115760405162461bcd60e51b8152600401610bd1919061271d565b50600061181e8486612a8e565b95945050505050565b60275460009060ff16156118475761184084848461204c565b9050610e9e565b6001600160a01b03841660009081526001602052604090205460ff1615801561188957506001600160a01b03831660009081526001602052604090205460ff16155b156118de57602154600160a01b900460ff166118de5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bd1565b600b5460ff1615611965576001600160a01b0384166000908152600c602052604090205460ff1615801561192b57506001600160a01b0383166000908152600c602052604090205460ff16155b6119655760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610bd1565b600e54600d546119759190612a7b565b431115801561199157506021546001600160a01b038581169116145b80156119ab57506020546001600160a01b03848116911614155b80156119c057506001600160a01b0383163014155b80156119da57506021546001600160a01b03848116911614155b15611a29576001600160a01b0383166000818152600c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b6001600160a01b03841660009081526001602052604090205460ff16158015611a5b57506001600160a01b0383163014155b8015611a7557506003546001600160a01b03848116911614155b8015611a8f57506021546001600160a01b03848116911614155b8015611aa95750601c546001600160a01b03848116911614155b8015611ac35750601d546001600160a01b03848116911614155b8015611add5750601b546001600160a01b03848116911614155b15611b7e576001600160a01b038316600090815260096020526040902054600854611b088483612a7b565b1115611b7c5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610bd1565b505b6021546001600160a01b038581169116148015611b9d575060245460ff165b8015611bc257506001600160a01b03831660009081526012602052604090205460ff16155b15611c6b576001600160a01b0383166000908152602560205260409020544211611c3c5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610bd1565b602454611c5190610100900460ff1642612a7b565b6001600160a01b0384166000908152602560205260409020555b611c758483612132565b611c7d61219b565b15611c8a57611c8a6121ea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611cdc9184906117ed565b6001600160a01b038516600090815260096020908152604080832093909355601090529081205460ff1615611d115782611d2f565b602154611d2f90869085906001600160a01b038881169116146125e8565b6001600160a01b038516600090815260096020526040902054909150611d55908261178e565b6001600160a01b0380861660009081526009602090815260408083209490945591881681526013909152205460ff16611df9576022546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611de657600080fd5b505af1925050508015611df7575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611e8a576022546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e7757600080fd5b505af1925050508015611e88575060015b505b6022546023546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611ec29160040190815260200190565b600060405180830381600087803b158015611edc57600080fd5b505af1925050508015611eed575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f3391815260200190565b60405180910390a3506001949350505050565b6000610e9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ed565b600082600003611f9a57506000610d20565b6000611fa68385612a35565b905082611fb385836129f3565b14610e9e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd1565b6000610e9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126b4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260099091529182205461209d9184906117ed565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546120cc908361178e565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121209086815260200190565b60405180910390a35060019392505050565b6007548111158061215b57506001600160a01b03821660009081526011602052604090205460ff165b61171c5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bd1565b6021546000906001600160a01b031633148015906121bc575060275460ff16155b80156121ca5750600f5460ff165b8015610ef257505060265430600090815260096020526040902054101590565b6027805460ff19166001179055601e54601f5460009161220991610d26565b61221557601454612218565b60005b9050600061223c60026114c66018546114c686602654611f8890919063ffffffff16565b9050600061225582602654611f4690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061228f5761228f612a4c565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122c0576122c0612a4c565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac9479061230c908690600090879030904290600401612aa1565b600060405180830381600087803b15801561232657600080fd5b505af115801561233a573d6000803e3d6000fd5b5050505060006123538247611f4690919063ffffffff16565b9050600061236e61236588600261200a565b60185490611f46565b9050600061238360026114c68481878d611f88565b905060006123a0836114c660155487611f8890919063ffffffff16565b905060006123bd846114c660165488611f8890919063ffffffff16565b905060006123da856114c660175489611f8890919063ffffffff16565b9050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242c57600080fd5b505af19350505050801561243e575060015b50601c546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612491576040519150601f19603f3d011682016040523d82523d6000602084013e612496565b606091505b5050601d546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146124eb576040519150601f19603f3d011682016040523d82523d6000602084013e6124f0565b606091505b5060009250508b1590506125d057602054601b5460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af115801561256e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125939190612b12565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff1916905550505050505050505050565b600080826125f75760646125fb565b601a545b9050600061262a60195460646126119190612a35565b6114c6846114b96018548a611f8890919063ffffffff16565b30600090815260096020526040902054909150612647908261178e565b30600081815260096020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126989085815260200190565b60405180910390a36126aa8582611f46565b9695505050505050565b600081836126d55760405162461bcd60e51b8152600401610bd1919061271d565b50600061181e84866129f3565b600080600080600060a086880312156126fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561274a5785810183015185820160400152820161272e565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561277d57600080fd5b5035919050565b6001600160a01b038116811461279957600080fd5b50565b600080604083850312156127af57600080fd5b82356127ba81612784565b946020939093013593505050565b600080604083850312156127db57600080fd5b50508035926020909101359150565b6000806000606084860312156127ff57600080fd5b833561280a81612784565b9250602084013561281a81612784565b929592945050506040919091013590565b8035801515811461283b57600080fd5b919050565b6000806040838503121561285357600080fd5b61285c8361282b565b9150602083013560ff8116811461287257600080fd5b809150509250929050565b60006020828403121561288f57600080fd5b8135610e9e81612784565b600080604083850312156128ad57600080fd5b82356128b881612784565b91506128c66020840161282b565b90509250929050565b6000602082840312156128e157600080fd5b610e9e8261282b565b6000806000604084860312156128ff57600080fd5b833567ffffffffffffffff8082111561291757600080fd5b818601915086601f83011261292b57600080fd5b81358181111561293a57600080fd5b8760208260051b850101111561294f57600080fd5b602092830195509350612965918601905061282b565b90509250925092565b6000806040838503121561298157600080fd5b823561298c81612784565b9150602083013561287281612784565b600080604083850312156129af57600080fd5b6127ba8361282b565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082612a1057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610d2057610d206129dd565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7457612a746129dd565b5060010190565b80820180821115610d2057610d206129dd565b81810381811115610d2057610d206129dd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612af15784516001600160a01b031683529383019391830191600101612acc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b2757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a0dfcfd4d55859cb0326da82a749dfb653df4268a79de3df7226b015116aa3ff64736f6c634300081100336080604052600180546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610a8c600d556509184e72a000600e5534801561007b57600080fd5b5060405161100a38038061100a83398101604081905261009a916100f4565b6001600160a01b0381166100c257737a250d5630b4cf539739df2c5dacb4c659f2488d6100c4565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610124565b60006020828403121561010657600080fd5b81516001600160a01b038116811461011d57600080fd5b9392505050565b610ed7806101336000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610c74565b610285565b005b34801561013957600080fd5b506100f8610148366004610c9e565b6103fd565b34801561015957600080fd5b5061012b610168366004610cb9565b610488565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610c9e565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104aa565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b6106d9565b34801561025b57600080fd5b5061012b61026a366004610cdb565b6106e4565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c3826107e8565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b156103825761038282610906565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610a1b565b90610a66565b6008556001600160a01b03821660009081526007602052604090208190556103da81610aca565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b038116600090815260076020526040812054810361042457506000919050565b6001600160a01b03821660009081526007602052604081205461044690610aca565b6001600160a01b038416600090815260076020526040902060010154909150808211610476575060009392505050565b6104808282610a1b565b949350505050565b6000546001600160a01b0316331461049f57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104c157600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190610cf4565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061057457610574610d0d565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105a4576105a4610d0d565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105ea90600090869030904290600401610d23565b6000604051808303818588803b15801561060357600080fd5b505af1158015610617573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061069793508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190610cf4565b90610a1b565b6009549091506106a79082610a66565b600955600854600c546106d1916106c8916106c29085610ae7565b90610b69565b600b5490610a66565b600b55505050565b6106e2336107e8565b565b6000546001600160a01b031633146106fb57600080fd5b600454600081900361070b575050565b6000805a905060005b848310801561072257508381105b156107e15783600f5410610736576000600f555b6107686004600f548154811061074e5761074e610d0d565b6000918252602090912001546001600160a01b0316610bab565b1561079f5761079f6004600f548154811061078557610785610d0d565b6000918252602090912001546001600160a01b03166107e8565b6107b46107ad5a8490610a1b565b8490610a66565b92505a600f805491935060006107c983610da3565b919050555080806107d990610da3565b915050610714565b5050505050565b6001600160a01b038116600090815260076020526040812054900361080a5750565b6000610815826103fd565b9050801561090257600a5461082a9082610a66565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190610dbc565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108d89082610a66565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610aca565b5050565b6004805461091690600190610dde565b8154811061092657610926610d0d565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061096457610964610d0d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109b090600190610dde565b815481106109c0576109c0610d0d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806109f6576109f6610df1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a5d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bf0565b90505b92915050565b600080610a738385610e07565b905083811015610a5d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a60600c546106c2600b5485610ae790919063ffffffff16565b600082600003610af957506000610a60565b6000610b058385610e1a565b905082610b128583610e31565b14610a5d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac1565b6000610a5d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c2a565b600d546001600160a01b03821660009081526006602052604081205490914291610bd59190610e07565b108015610a605750600e54610be9836103fd565b1192915050565b60008184841115610c145760405162461bcd60e51b8152600401610ac19190610e53565b506000610c218486610dde565b95945050505050565b60008183610c4b5760405162461bcd60e51b8152600401610ac19190610e53565b506000610c218486610e31565b80356001600160a01b0381168114610c6f57600080fd5b919050565b60008060408385031215610c8757600080fd5b610c9083610c58565b946020939093013593505050565b600060208284031215610cb057600080fd5b610a5d82610c58565b60008060408385031215610ccc57600080fd5b50508035926020909101359150565b600060208284031215610ced57600080fd5b5035919050565b600060208284031215610d0657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d6d5784516001600160a01b031683529383019391830191600101610d48565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610db557610db5610d8d565b5060010190565b600060208284031215610dce57600080fd5b81518015158114610a5d57600080fd5b81810381811115610a6057610a60610d8d565b634e487b7160e01b600052603160045260246000fd5b80820180821115610a6057610a60610d8d565b8082028115828204841417610a6057610a60610d8d565b600082610e4e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610e8057858101830151858201604001528201610e64565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220eb098cc274c204d7bbf0fea038b46af063781559d5d2bd9e040ba4152ec19a2364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806382aa7c68116101e7578063ca33e64c1161010d578063f0b37c04116100a0578063f887ea401161006f578063f887ea4014610b26578063fe575a8714610b46578063fe9fbb8014610b76578063fed0d2a114610b9657600080fd5b8063f0b37c0414610aa6578063f2fde38b14610ac6578063f708a64f14610ae6578063f84ba65d14610b0657600080fd5b8063dd62ed3e116100dc578063dd62ed3e14610a00578063df20fd4914610a46578063e96fada214610a66578063ec72d65f14610a8657600080fd5b8063ca33e64c14610980578063d478a06c146109a0578063d51ed1c8146109c0578063dab84ee7146109e057600080fd5b80639d1944f511610185578063b6a5d7de11610154578063b6a5d7de146108ff578063bbc0c7421461091f578063bd9ab53714610940578063bfe109281461096057600080fd5b80639d1944f51461087f578063a4b45c001461089f578063a8aa1b31146108bf578063a9059cbb146108df57600080fd5b8063896648c1116101c1578063896648c1146108015780638e2eee841461081b57806395d89b411461083b57806398118cb41461086957600080fd5b806382aa7c681461079957806383ad7994146107b9578063893d20e8146107cf57600080fd5b80632f54bf6e116102d7578063658d4b7f1161026a57806370a082311161023957806370a0823114610718578063722b62ad1461074e57806378109e541461076d5780637d1db4a51461078357600080fd5b8063658d4b7f146106b25780636827e764146106d25780636b67c4df146106e85780636ddd1713146106fe57600080fd5b8063571ac8b0116102a6578063571ac8b0146106385780635c85974f146106585780635e562f3b14610678578063617fe0ed1461069857600080fd5b80632f54bf6e146105a7578063313ce567146105d657806344a33fd2146105f857806350db71fb1461061857600080fd5b806318160ddd1161034f57806323b872dd1161031e57806323b872dd146105325780632b112e49146105525780632d48e896146105675780632d5945671461058757600080fd5b806318160ddd146104c75780631da1db5e146104dc5780631df4ccfc146104fc578063201e79911461051257600080fd5b806309302dc61161038b57806309302dc614610441578063095ea7b3146104615780631161ae3914610491578063180b0d7e146104b157600080fd5b80630445b667146103bd57806304a66b48146103e657806306fdde031461040857600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360265481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506104066104013660046126e2565b610bac565b005b34801561041457600080fd5b5060408051808201909152600781526621b0b4b9b432b760c91b60208201525b6040516103dd919061271d565b34801561044d57600080fd5b5061040661045c36600461276b565b610c6e565b34801561046d57600080fd5b5061048161047c36600461279c565b610cb9565b60405190151581526020016103dd565b34801561049d57600080fd5b506104816104ac3660046127c8565b610d26565b3480156104bd57600080fd5b506103d360195481565b3480156104d357600080fd5b506006546103d3565b3480156104e857600080fd5b506104066104f736600461276b565b610d3a565b34801561050857600080fd5b506103d360185481565b34801561051e57600080fd5b5061040661052d3660046127c8565b610db3565b34801561053e57600080fd5b5061048161054d3660046127ea565b610de3565b34801561055e57600080fd5b506103d3610ea5565b34801561057357600080fd5b506104066105823660046127c8565b610ef7565b34801561059357600080fd5b506104066105a2366004612840565b610f86565b3480156105b357600080fd5b506104816105c236600461287d565b6000546001600160a01b0391821691161490565b3480156105e257600080fd5b5060125b60405160ff90911681526020016103dd565b34801561060457600080fd5b5061040661061336600461276b565b610fd7565b34801561062457600080fd5b5061040661063336600461289a565b61100d565b34801561064457600080fd5b5061048161065336600461287d565b61105d565b34801561066457600080fd5b5061040661067336600461276b565b61106b565b34801561068457600080fd5b506104066106933660046128cf565b611095565b3480156106a457600080fd5b506024546104819060ff1681565b3480156106be57600080fd5b506104066106cd36600461289a565b6110d2565b3480156106de57600080fd5b506103d360175481565b3480156106f457600080fd5b506103d360165481565b34801561070a57600080fd5b50600f546104819060ff1681565b34801561072457600080fd5b506103d361073336600461287d565b6001600160a01b031660009081526009602052604090205490565b34801561075a57600080fd5b506024546105e690610100900460ff1681565b34801561077957600080fd5b506103d360085481565b34801561078f57600080fd5b506103d360075481565b3480156107a557600080fd5b506104066107b436600461276b565b611122565b3480156107c557600080fd5b506103d360155481565b3480156107db57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103dd565b34801561080d57600080fd5b50600b546104819060ff1681565b34801561082757600080fd5b506104066108363660046128ea565b6111c0565b34801561084757600080fd5b50604080518082019091526005815264436169467560d81b6020820152610434565b34801561087557600080fd5b506103d360145481565b34801561088b57600080fd5b5061040661089a36600461276b565b61125f565b3480156108ab57600080fd5b506104066108ba36600461296e565b611298565b3480156108cb57600080fd5b506021546107e9906001600160a01b031681565b3480156108eb57600080fd5b506104816108fa36600461279c565b6112fe565b34801561090b57600080fd5b5061040661091a36600461287d565b61130b565b34801561092b57600080fd5b5060215461048190600160a01b900460ff1681565b34801561094c57600080fd5b5061040661095b36600461276b565b61135c565b34801561096c57600080fd5b506022546107e9906001600160a01b031681565b34801561098c57600080fd5b50601b546107e9906001600160a01b031681565b3480156109ac57600080fd5b506104066109bb3660046128ea565b6113a7565b3480156109cc57600080fd5b506103d36109db36600461276b565b611485565b3480156109ec57600080fd5b50601d546107e9906001600160a01b031681565b348015610a0c57600080fd5b506103d3610a1b36600461296e565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610a5257600080fd5b50610406610a6136600461299c565b6114cc565b348015610a7257600080fd5b50601c546107e9906001600160a01b031681565b348015610a9257600080fd5b50610406610aa136600461276b565b611508565b348015610ab257600080fd5b50610406610ac136600461287d565b611537565b348015610ad257600080fd5b50610406610ae136600461287d565b611582565b348015610af257600080fd5b50610406610b0136600461289a565b611618565b348015610b1257600080fd5b50610406610b2136600461289a565b611720565b348015610b3257600080fd5b506020546107e9906001600160a01b031681565b348015610b5257600080fd5b50610481610b6136600461287d565b600c6020526000908152604090205460ff1681565b348015610b8257600080fd5b50610481610b9136600461287d565b611770565b348015610ba257600080fd5b506103d3601a5481565b610bb533611770565b610bda5760405162461bcd60e51b8152600401610bd1906129b8565b60405180910390fd5b6014859055601584905560168390556017829055610c0482610bfe8581898961178e565b9061178e565b6018556019819055610c176002826129f3565b60185410610c675760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20353025000000006044820152606401610bd1565b5050505050565b6000546001600160a01b03163314610c985760405162461bcd60e51b8152600401610bd190612a15565b6103e881600654610ca99190612a35565b610cb391906129f3565b60085550565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d149086815260200190565b60405180910390a35060015b92915050565b600082610d3283611485565b119392505050565b610d4333611770565b610d5f5760405162461bcd60e51b8152600401610bd1906129b8565b601c5447906001600160a01b03166108fc6064610d7c8585612a35565b610d8691906129f3565b6040518115909202916000818181858888f19350505050158015610dae573d6000803e3d6000fd5b505050565b610dbc33611770565b610dd85760405162461bcd60e51b8152600401610bd1906129b8565b601e91909155601f55565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914610e90576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610e6b9184906117ed565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610e9b848484611827565b90505b9392505050565b6004546001600160a01b0316600090815260096020526040812054610ef2906003546001600160a01b0316600090815260096020526040902054610eec9060065490611f46565b90611f46565b905090565b610f0033611770565b610f1c5760405162461bcd60e51b8152600401610bd1906129b8565b6022546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610fb05760405162461bcd60e51b8152600401610bd190612a15565b6024805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610fe033611770565b610ffc5760405162461bcd60e51b8152600401610bd1906129b8565b47336108fc6064610d7c8585612a35565b61101633611770565b6110325760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610d2082600019610cb9565b61107433611770565b6110905760405162461bcd60e51b8152600401610bd1906129b8565b600755565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610bd190612a15565b600b805460ff1916911515919091179055565b6110db33611770565b6110f75760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610bd190612a15565b602154600160a01b900460ff16156111975760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610bd1565b6021805460ff60a01b1916600160a01b17905543600d55600f805460ff19166001179055600e55565b6000546001600160a01b031633146111ea5760405162461bcd60e51b8152600401610bd190612a15565b60005b828110156112595781600c600086868581811061120c5761120c612a4c565b9050602002016020810190611221919061287d565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561125281612a62565b90506111ed565b50505050565b61126833611770565b6112845760405162461bcd60e51b8152600401610bd1906129b8565b620b71b0811061129357600080fd5b602355565b6112a133611770565b6112bd5760405162461bcd60e51b8152600401610bd1906129b8565b601b80546001600160a01b03199081166001600160a01b0394851617909155601c8054821692841692909217909155600554601d8054919093169116179055565b6000610e9e338484611827565b6000546001600160a01b031633146113355760405162461bcd60e51b8152600401610bd190612a15565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146113865760405162461bcd60e51b8152600401610bd190612a15565b6103e8816006546113979190612a35565b6113a191906129f3565b60075550565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610bd190612a15565b60005b828110156112595760008484838181106113f0576113f0612a4c565b9050602002016020810190611405919061287d565b90506001600160a01b038116301480159061142e57506020546001600160a01b03828116911614155b801561144857506021546001600160a01b03828116911614155b15611472576001600160a01b0381166000908152600c60205260409020805460ff19168415151790555b508061147d81612a62565b9150506113d4565b6000610d20611492610ea5565b6021546001600160a01b03166000908152600960205260409020546114c6906114bf906002905b90611f88565b8590611f88565b9061200a565b6114d533611770565b6114f15760405162461bcd60e51b8152600401610bd1906129b8565b600f805460ff191692151592909217909155602655565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610bd190612a15565b601a55565b6000546001600160a01b031633146115615760405162461bcd60e51b8152600401610bd190612a15565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146115ac5760405162461bcd60e51b8152600401610bd190612a15565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61162133611770565b61163d5760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b038216301480159061166457506021546001600160a01b03838116911614155b61166d57600080fd5b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556116d357602254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610f50565b6022546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610f50565b5050565b61172933611770565b6117455760405162461bcd60e51b8152600401610bd1906129b8565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008061179b8385612a7b565b905083811015610e9e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd1565b600081848411156118115760405162461bcd60e51b8152600401610bd1919061271d565b50600061181e8486612a8e565b95945050505050565b60275460009060ff16156118475761184084848461204c565b9050610e9e565b6001600160a01b03841660009081526001602052604090205460ff1615801561188957506001600160a01b03831660009081526001602052604090205460ff16155b156118de57602154600160a01b900460ff166118de5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bd1565b600b5460ff1615611965576001600160a01b0384166000908152600c602052604090205460ff1615801561192b57506001600160a01b0383166000908152600c602052604090205460ff16155b6119655760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610bd1565b600e54600d546119759190612a7b565b431115801561199157506021546001600160a01b038581169116145b80156119ab57506020546001600160a01b03848116911614155b80156119c057506001600160a01b0383163014155b80156119da57506021546001600160a01b03848116911614155b15611a29576001600160a01b0383166000818152600c6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b6001600160a01b03841660009081526001602052604090205460ff16158015611a5b57506001600160a01b0383163014155b8015611a7557506003546001600160a01b03848116911614155b8015611a8f57506021546001600160a01b03848116911614155b8015611aa95750601c546001600160a01b03848116911614155b8015611ac35750601d546001600160a01b03848116911614155b8015611add5750601b546001600160a01b03848116911614155b15611b7e576001600160a01b038316600090815260096020526040902054600854611b088483612a7b565b1115611b7c5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610bd1565b505b6021546001600160a01b038581169116148015611b9d575060245460ff165b8015611bc257506001600160a01b03831660009081526012602052604090205460ff16155b15611c6b576001600160a01b0383166000908152602560205260409020544211611c3c5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610bd1565b602454611c5190610100900460ff1642612a7b565b6001600160a01b0384166000908152602560205260409020555b611c758483612132565b611c7d61219b565b15611c8a57611c8a6121ea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611cdc9184906117ed565b6001600160a01b038516600090815260096020908152604080832093909355601090529081205460ff1615611d115782611d2f565b602154611d2f90869085906001600160a01b038881169116146125e8565b6001600160a01b038516600090815260096020526040902054909150611d55908261178e565b6001600160a01b0380861660009081526009602090815260408083209490945591881681526013909152205460ff16611df9576022546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611de657600080fd5b505af1925050508015611df7575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611e8a576022546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e7757600080fd5b505af1925050508015611e88575060015b505b6022546023546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611ec29160040190815260200190565b600060405180830381600087803b158015611edc57600080fd5b505af1925050508015611eed575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f3391815260200190565b60405180910390a3506001949350505050565b6000610e9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ed565b600082600003611f9a57506000610d20565b6000611fa68385612a35565b905082611fb385836129f3565b14610e9e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd1565b6000610e9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126b4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260099091529182205461209d9184906117ed565b6001600160a01b0380861660009081526009602052604080822093909355908516815220546120cc908361178e565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121209086815260200190565b60405180910390a35060019392505050565b6007548111158061215b57506001600160a01b03821660009081526011602052604090205460ff165b61171c5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610bd1565b6021546000906001600160a01b031633148015906121bc575060275460ff16155b80156121ca5750600f5460ff165b8015610ef257505060265430600090815260096020526040902054101590565b6027805460ff19166001179055601e54601f5460009161220991610d26565b61221557601454612218565b60005b9050600061223c60026114c66018546114c686602654611f8890919063ffffffff16565b9050600061225582602654611f4690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061228f5761228f612a4c565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122c0576122c0612a4c565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac9479061230c908690600090879030904290600401612aa1565b600060405180830381600087803b15801561232657600080fd5b505af115801561233a573d6000803e3d6000fd5b5050505060006123538247611f4690919063ffffffff16565b9050600061236e61236588600261200a565b60185490611f46565b9050600061238360026114c68481878d611f88565b905060006123a0836114c660155487611f8890919063ffffffff16565b905060006123bd846114c660165488611f8890919063ffffffff16565b905060006123da856114c660175489611f8890919063ffffffff16565b9050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242c57600080fd5b505af19350505050801561243e575060015b50601c546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114612491576040519150601f19603f3d011682016040523d82523d6000602084013e612496565b606091505b5050601d546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146124eb576040519150601f19603f3d011682016040523d82523d6000602084013e6124f0565b606091505b5060009250508b1590506125d057602054601b5460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af115801561256e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125939190612b12565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff1916905550505050505050505050565b600080826125f75760646125fb565b601a545b9050600061262a60195460646126119190612a35565b6114c6846114b96018548a611f8890919063ffffffff16565b30600090815260096020526040902054909150612647908261178e565b30600081815260096020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126989085815260200190565b60405180910390a36126aa8582611f46565b9695505050505050565b600081836126d55760405162461bcd60e51b8152600401610bd1919061271d565b50600061181e84866129f3565b600080600080600060a086880312156126fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561274a5785810183015185820160400152820161272e565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561277d57600080fd5b5035919050565b6001600160a01b038116811461279957600080fd5b50565b600080604083850312156127af57600080fd5b82356127ba81612784565b946020939093013593505050565b600080604083850312156127db57600080fd5b50508035926020909101359150565b6000806000606084860312156127ff57600080fd5b833561280a81612784565b9250602084013561281a81612784565b929592945050506040919091013590565b8035801515811461283b57600080fd5b919050565b6000806040838503121561285357600080fd5b61285c8361282b565b9150602083013560ff8116811461287257600080fd5b809150509250929050565b60006020828403121561288f57600080fd5b8135610e9e81612784565b600080604083850312156128ad57600080fd5b82356128b881612784565b91506128c66020840161282b565b90509250929050565b6000602082840312156128e157600080fd5b610e9e8261282b565b6000806000604084860312156128ff57600080fd5b833567ffffffffffffffff8082111561291757600080fd5b818601915086601f83011261292b57600080fd5b81358181111561293a57600080fd5b8760208260051b850101111561294f57600080fd5b602092830195509350612965918601905061282b565b90509250925092565b6000806040838503121561298157600080fd5b823561298c81612784565b9150602083013561287281612784565b600080604083850312156129af57600080fd5b6127ba8361282b565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082612a1057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610d2057610d206129dd565b634e487b7160e01b600052603260045260246000fd5b600060018201612a7457612a746129dd565b5060010190565b80820180821115610d2057610d206129dd565b81810381811115610d2057610d206129dd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612af15784516001600160a01b031683529383019391830191600101612acc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b2757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a0dfcfd4d55859cb0326da82a749dfb653df4268a79de3df7226b015116aa3ff64736f6c63430008110033

Deployed Bytecode Sourcemap

11061:16599:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13172:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13172:56:0;;;;;;;;24889:511;;;;;;;;;;-1:-1:-1;24889:511:0;;;;;:::i;:::-;;:::i;:::-;;14892:80;;;;;;;;;;-1:-1:-1;14964:5:0;;;;;;;;;;;;-1:-1:-1;;;14964:5:0;;;;14892:80;;;;;;;:::i;16204:177::-;;;;;;;;;;-1:-1:-1;16204:177:0;;;;;:::i;:::-;;:::i;15314:216::-;;;;;;;;;;-1:-1:-1;15314:216:0;;;;;:::i;:::-;;:::i;:::-;;;2014:14:1;;2007:22;1989:41;;1977:2;1962:18;15314:216:0;1849:187:1;26704:150:0;;;;;;;;;;-1:-1:-1;26704:150:0;;;;;:::i;:::-;;:::i;12540:36::-;;;;;;;;;;;;;;;;14622:88;;;;;;;;;;-1:-1:-1;14695:12:0;;14622:88;;20821:218;;;;;;;;;;-1:-1:-1;20821:218:0;;;;;:::i;:::-;;:::i;12448:85::-;;;;;;;;;;;;;;;;25849:183;;;;;;;;;;-1:-1:-1;25849:183:0;;;;;:::i;:::-;;:::i;15829:367::-;;;;;;;;;;-1:-1:-1;15829:367:0;;;;;:::i;:::-;;:::i;26379:142::-;;;;;;;;;;;;;:::i;26040:183::-;;;;;;;;;;-1:-1:-1;26040:183:0;;;;;:::i;:::-;;:::i;21701:164::-;;;;;;;;;;-1:-1:-1;21701:164:0;;;;;:::i;:::-;;:::i;2984:103::-;;;;;;;;;;-1:-1:-1;2984:103:0;;;;;:::i;:::-;3039:4;3074:5;-1:-1:-1;;;;;3063:16:0;;;3074:5;;3063:16;;2984:103;14716:80;;;;;;;;;;-1:-1:-1;11563:2:0;14716:80;;;3686:4:1;3674:17;;;3656:36;;3644:2;3629:18;14716:80:0;3514:184:1;21047:215:0;;;;;;;;;;-1:-1:-1;21047:215:0;;;;;:::i;:::-;;:::i;24751:130::-;;;;;;;;;;-1:-1:-1;24751:130:0;;;;;:::i;:::-;;:::i;15538:119::-;;;;;;;;;;-1:-1:-1;15538:119:0;;;;;:::i;:::-;;:::i;16567:96::-;;;;;;;;;;-1:-1:-1;16567:96:0;;;;;:::i;:::-;;:::i;24160:99::-;;;;;;;;;;-1:-1:-1;24160:99:0;;;;;:::i;:::-;;:::i;13023:38::-;;;;;;;;;;-1:-1:-1;13023:38:0;;;;;;;;24487:120;;;;;;;;;;-1:-1:-1;24487:120:0;;;;;:::i;:::-;;:::i;12407:34::-;;;;;;;;;;;;;;;;12366;;;;;;;;;;;;;;;;12046:31;;;;;;;;;;-1:-1:-1;12046:31:0;;;;;;;;15062:105;;;;;;;;;;-1:-1:-1;15062:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;15146:18:0;15128:7;15146:18;;;:9;:18;;;;;;;15062:105;13068:39;;;;;;;;;;-1:-1:-1;13068:39:0;;;;;;;;;;;11694:50;;;;;;;;;;;;;;;;11626:47;;;;;;;;;;;;;;;;21399:255;;;;;;;;;;-1:-1:-1;21399:255:0;;;;;:::i;:::-;;:::i;12325:34::-;;;;;;;;;;;;;;;;14978:78;;;;;;;;;;-1:-1:-1;15030:7:0;15048:5;-1:-1:-1;;;;;15048:5:0;14978:78;;;-1:-1:-1;;;;;4372:32:1;;;4354:51;;4342:2;4327:18;14978:78:0;4208:203:1;11887:32:0;;;;;;;;;;-1:-1:-1;11887:32:0;;;;;;;;24267:210;;;;;;;;;;-1:-1:-1;24267:210:0;;;;;:::i;:::-;;:::i;14802:84::-;;;;;;;;;;-1:-1:-1;14876:7:0;;;;;;;;;;;;-1:-1:-1;;;14876:7:0;;;;14802:84;;12284:34;;;;;;;;;;;;;;;;26231:136;;;;;;;;;;-1:-1:-1;26231:136:0;;;;;:::i;:::-;;:::i;25408:269::-;;;;;;;;;;-1:-1:-1;25408:269:0;;;;;:::i;:::-;;:::i;12868:19::-;;;;;;;;;;-1:-1:-1;12868:19:0;;;;-1:-1:-1;;;;;12868:19:0;;;15665:156;;;;;;;;;;-1:-1:-1;15665:156:0;;;;;:::i;:::-;;:::i;2777:94::-;;;;;;;;;;-1:-1:-1;2777:94:0;;;;;:::i;:::-;;:::i;12896:33::-;;;;;;;;;;-1:-1:-1;12896:33:0;;;;-1:-1:-1;;;12896:33:0;;;;;;16387:172;;;;;;;;;;-1:-1:-1;16387:172:0;;;;;:::i;:::-;;:::i;12938:38::-;;;;;;;;;;-1:-1:-1;12938:38:0;;;;-1:-1:-1;;;;;12938:38:0;;;12630:36;;;;;;;;;;-1:-1:-1;12630:36:0;;;;-1:-1:-1;;;;;12630:36:0;;;20220:388;;;;;;;;;;-1:-1:-1;20220:388:0;;;;;:::i;:::-;;:::i;26529:167::-;;;;;;;;;;-1:-1:-1;26529:167:0;;;;;:::i;:::-;;:::i;12715:29::-;;;;;;;;;;-1:-1:-1;12715:29:0;;;;-1:-1:-1;;;;;12715:29:0;;;15173:133;;;;;;;;;;-1:-1:-1;15173:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15275:19:0;;;15257:7;15275:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15173:133;25685:156;;;;;;;;;;-1:-1:-1;25685:156:0;;;;;:::i;:::-;;:::i;12673:35::-;;;;;;;;;;-1:-1:-1;12673:35:0;;;;-1:-1:-1;;;;;12673:35:0;;;21270:121;;;;;;;;;;-1:-1:-1;21270:121:0;;;;;:::i;:::-;;:::i;2879:97::-;;;;;;;;;;-1:-1:-1;2879:97:0;;;;;:::i;:::-;;:::i;3210:173::-;;;;;;;;;;-1:-1:-1;3210:173:0;;;;;:::i;:::-;;:::i;23805:347::-;;;;;;;;;;-1:-1:-1;23805:347:0;;;;;:::i;:::-;;:::i;24615:128::-;;;;;;;;;;-1:-1:-1;24615:128:0;;;;;:::i;:::-;;:::i;12837:24::-;;;;;;;;;;-1:-1:-1;12837:24:0;;;;-1:-1:-1;;;;;12837:24:0;;;11926:46;;;;;;;;;;-1:-1:-1;11926:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3095:107;;;;;;;;;;-1:-1:-1;3095:107:0;;;;;:::i;:::-;;:::i;12585:36::-;;;;;;;;;;;;;;;;24889:511;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;;;;;;;;;25049:12:::1;:28:::0;;;25088:13:::1;:30:::0;;;25129:12:::1;:28:::0;;;25168:6:::1;:16:::0;;;25206:64:::1;25177:7:::0;25206:52:::1;25144:13:::0;25206:52;25064:13;25104:14;25206:17:::1;:33::i;:::-;:37:::0;::::1;:52::i;:64::-;25195:8;:75:::0;25281:14:::1;:32:::0;;;25343:16:::1;25358:1;25298:15:::0;25343:16:::1;:::i;:::-;25332:8;;:27;25324:68;;;::::0;-1:-1:-1;;;25324:68:0;;7374:2:1;25324:68:0::1;::::0;::::1;7356:21:1::0;7413:2;7393:18;;;7386:30;7452;7432:18;;;7425:58;7500:18;;25324:68:0::1;7172:352:1::0;25324:68:0::1;24889:511:::0;;;;;:::o;16204:177::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;16369:4:::1;16341:23;16326:12;;:38;;;;:::i;:::-;16325:48;;;;:::i;:::-;16307:15;:66:::0;-1:-1:-1;16204:177:0:o;15314:216::-;15418:10;15389:4;15406:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15406:32:0;;;;;;;;;;:41;;;15463:37;15389:4;;15406:32;;15463:37;;;;15441:6;160:25:1;;148:2;133:18;;14:177;15463:37:0;;;;;;;;-1:-1:-1;15518:4:0;15314:216;;;;;:::o;26704:150::-;26784:4;26840:6;26808:29;26828:8;26808:19;:29::i;:::-;:38;;26704:150;-1:-1:-1;;;26704:150:0:o;20821:218::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;20965:20:::1;::::0;20925:21:::1;::::0;-1:-1:-1;;;;;20965:20:0::1;20957:74;21027:3;20996:28;21008:16:::0;20925:21;20996:28:::1;:::i;:::-;:34;;;;:::i;:::-;20957:74;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20894:145;20821:218:::0;:::o;25849:183::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;25947:15:::1;:25:::0;;;;25983:26:::1;:41:::0;25849:183::o;15829:367::-;-1:-1:-1;;;;;15949:19:0;;15929:4;15949:19;;;:11;:19;;;;;;;;15969:10;15949:31;;;;;;;;-1:-1:-1;;15949:49:0;15946:183;;16048:69;;;;;;;;;;;-1:-1:-1;;;16048:69:0;;;;;;;;-1:-1:-1;;;;;16048:19:0;;-1:-1:-1;16048:19:0;;;:11;:19;;;;;16068:10;16048:31;;;;;;;;;;:69;;16084:6;;16048:35;:69::i;:::-;-1:-1:-1;;;;;16014:19:0;;;;;;:11;:19;;;;;;;;16034:10;16014:31;;;;;;;:103;15946:183;16148:40;16162:6;16170:9;16181:6;16148:13;:40::i;:::-;16141:47;;15829:367;;;;;;:::o;26379:142::-;26507:4;;-1:-1:-1;;;;;26507:4:0;26432:7;15146:18;;;:9;:18;;;;;;26459:54;;26486:4;;-1:-1:-1;;;;;26486:4:0;15128:7;15146:18;;;:9;:18;;;;;;26459:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;26452:61;;26379:142;:::o;26040:183::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;26150:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;26150:65:0;;::::1;::::0;::::1;8210:25:1::0;;;8251:18;;;8244:34;;;-1:-1:-1;;;;;26150:11:0;;::::1;::::0;:35:::1;::::0;8183:18:1;;26150:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26040:183:::0;;:::o;21701:164::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;21785:18:::1;:28:::0;;-1:-1:-1;;21824:33:0;21785:28;::::1;;-1:-1:-1::0;;21824:33:0;;;;;21785:28:::1;;21824:33:::0;;;::::1;::::0;;;::::1;;::::0;;21701:164::o;21047:215::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;21158:21:::1;21198:10;21190:64;21250:3;21219:28;21231:16:::0;21158:21;21219:28:::1;:::i;24751:130::-:0;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24840:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;24840:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24751:130::o;15538:119::-;15593:4;15617:32;15625:7;-1:-1:-1;;15617:7:0;:32::i;16567:96::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;16634:12:::1;:21:::0;16567:96::o;24160:99::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;24228:13:::1;:23:::0;;-1:-1:-1;;24228:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24160:99::o;24487:120::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24571:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24571:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24487:120::o;21399:255::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;21482:13:::1;::::0;-1:-1:-1;;;21482:13:0;::::1;;;21481:14;21473:41;;;::::0;-1:-1:-1;;;21473:41:0;;8491:2:1;21473:41:0::1;::::0;::::1;8473:21:1::0;8530:2;8510:18;;;8503:30;-1:-1:-1;;;8549:18:1;;;8542:44;8603:18;;21473:41:0::1;8289:338:1::0;21473:41:0::1;21525:13;:20:::0;;-1:-1:-1;;;;21525:20:0::1;-1:-1:-1::0;;;21525:20:0::1;::::0;;21570:12:::1;21556:11;:26:::0;21593:11:::1;:18:::0;;-1:-1:-1;;21593:18:0::1;21541:4;21593:18;::::0;;21622:10:::1;:24:::0;21399:255::o;24267:210::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;24369:9:::1;24364:106;24380:20:::0;;::::1;24364:106;;;24452:6;24422:13;:27;24436:9;;24446:1;24436:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24422:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24422:27:0;:36;;-1:-1:-1;;24422:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24402:3:::1;::::0;::::1;:::i;:::-;;;24364:106;;;;24267:210:::0;;;:::o;26231:136::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;26321:6:::1;26315:3;:12;26307:21;;;::::0;::::1;;26339:14;:20:::0;26231:136::o;25408:269::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;25528:21:::1;:46:::0;;-1:-1:-1;;;;;;25528:46:0;;::::1;-1:-1:-1::0;;;;;25528:46:0;;::::1;;::::0;;;25585:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25665:3:::1;::::0;25640:14:::1;:29:::0;;25665:3;;;::::1;25640:29:::0;::::1;;::::0;;25408:269::o;15665:156::-;15745:4;15769:44;15783:10;15795:9;15806:6;15769:13;:44::i;2777:94::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2837:19:0::1;;::::0;;;2859:4:::1;2837:19;::::0;;;;;;;:26;;-1:-1:-1;;2837:26:0::1;::::0;;::::1;::::0;;2777:94::o;16387:172::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;16547:4:::1;16518:24;16503:12;;:39;;;;:::i;:::-;16502:49;;;;:::i;:::-;16487:12;:64:::0;-1:-1:-1;16387:172:0:o;20220:388::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;20320:9:::1;20316:285;20334:17:::0;;::::1;20316:285;;;20371:15;20389:8;;20398:1;20389:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20371:29:::0;-1:-1:-1;;;;;;20418:24:0;::::1;20437:4;20418:24;::::0;::::1;::::0;:71:::1;;-1:-1:-1::0;20482:6:0::1;::::0;-1:-1:-1;;;;;20463:26:0;;::::1;20482:6:::0;::::1;20463:26;;20418:71;:116;;;;-1:-1:-1::0;20529:4:0::1;::::0;-1:-1:-1;;;;;20510:24:0;;::::1;20529:4:::0;::::1;20510:24;;20418:116;20415:174;;;-1:-1:-1::0;;;;;20553:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:36;;-1:-1:-1;;20553:36:0::1;::::0;::::1;;;::::0;;20415:174:::1;-1:-1:-1::0;20352:3:0;::::1;::::0;::::1;:::i;:::-;;;;20316:285;;26529:167:::0;26597:7;26624:64;26665:22;:20;:22::i;:::-;26647:4;;-1:-1:-1;;;;;26647:4:0;15128:7;15146:18;;;:9;:18;;;;;;26624:36;;26637:22;;26657:1;;26637:15;:19;;:22::i;:::-;26624:8;;:12;:36::i;:::-;:40;;:64::i;25685:156::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;25777:11:::1;:22:::0;;-1:-1:-1;;25777:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25810:13:::1;:23:::0;25685:156::o;21270:121::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;21348:14:::1;:27:::0;21270:121::o;2879:97::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2941:19:0::1;2963:5;2941:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;2941:27:0::1;::::0;;2879:97::o;3210:173::-;3039:4;3074:5;-1:-1:-1;;;;;3074:5:0;2636:10;3063:16;2620:38;;;;-1:-1:-1;;;2620:38:0;;;;;;;:::i;:::-;3286:5:::1;:11:::0;;-1:-1:-1;;;;;;3286:11:0::1;-1:-1:-1::0;;;;;3286:11:0;::::1;::::0;;::::1;::::0;;3308:19;;;-1:-1:-1;3308:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;3308:26:0::1;::::0;;::::1;::::0;;;3350:25;;4354:51:1;;;3350:25:0::1;::::0;4327:18:1;3350:25:0::1;;;;;;;3210:173:::0;:::o;23805:347::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23902:23:0;::::1;23920:4;23902:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;23939:4:0::1;::::0;-1:-1:-1;;;;;23929:14:0;;::::1;23939:4:::0;::::1;23929:14;;23902:41;23894:50;;;::::0;::::1;;-1:-1:-1::0;;;;;23955:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23955:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23999:146:::1;;24024:11;::::0;:31:::1;::::0;-1:-1:-1;;;24024:31:0;;-1:-1:-1;;;;;9320:32:1;;;24024:31:0::1;::::0;::::1;9302:51:1::0;24024:11:0::1;9369:18:1::0;;;9362:34;24024:11:0;;::::1;::::0;:20:::1;::::0;9275:18:1;;24024:31:0::1;9120:282:1::0;23999:146:0::1;24086:11;::::0;-1:-1:-1;;;;;24115:17:0;;::::1;24086:11;24115:17:::0;;;:9:::1;:17;::::0;;;;;;;24086:47;;-1:-1:-1;;;24086:47:0;;::::1;::::0;::::1;9302:51:1::0;;;;9369:18;;;9362:34;24086:11:0;::::1;::::0;:20:::1;::::0;9275:18:1;;24086:47:0::1;9120:282:1::0;23999:146:0::1;23805:347:::0;;:::o;24615:128::-;2718:24;2731:10;2718:12;:24::i;:::-;2710:48;;;;-1:-1:-1;;;2710:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24703:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;24703:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24615:128::o;3095:107::-;-1:-1:-1;;;;;3175:19:0;3151:4;3175:19;;;:14;:19;;;;;;;;;3095:107::o;331:181::-;389:7;;421:5;425:1;421;:5;:::i;:::-;409:17;;450:1;445;:6;;437:46;;;;-1:-1:-1;;;437:46:0;;10018:2:1;437:46:0;;;10000:21:1;10057:2;10037:18;;;10030:30;10096:29;10076:18;;;10069:57;10143:18;;437:46:0;9816:351:1;660:192:0;746:7;782:12;774:6;;;;766:29;;;;-1:-1:-1;;;766:29:0;;;;;;;;:::i;:::-;-1:-1:-1;806:9:0;818:5;822:1;818;:5;:::i;:::-;806:17;660:192;-1:-1:-1;;;;;660:192:0:o;16721:2396::-;16833:6;;16813:4;;16833:6;;16830:63;;;16849:41;16864:6;16872:9;16883:6;16849:14;:41::i;:::-;16842:48;;;;16830:63;-1:-1:-1;;;;;16909:22:0;;;;;;:14;:22;;;;;;;;16908:23;:53;;;;-1:-1:-1;;;;;;16936:25:0;;;;;;:14;:25;;;;;;;;16935:26;16908:53;16905:129;;;16985:13;;-1:-1:-1;;;16985:13:0;;;;16977:45;;;;-1:-1:-1;;;16977:45:0;;10507:2:1;16977:45:0;;;10489:21:1;10546:2;10526:18;;;10519:30;-1:-1:-1;;;10565:18:1;;;10558:50;10625:18;;16977:45:0;10305:344:1;16977:45:0;17071:13;;;;17068:122;;;-1:-1:-1;;;;;17109:21:0;;;;;;:13;:21;;;;;;;;17108:22;:51;;;;-1:-1:-1;;;;;;17135:24:0;;;;;;:13;:24;;;;;;;;17134:25;17108:51;17100:74;;;;-1:-1:-1;;;17100:74:0;;10856:2:1;17100:74:0;;;10838:21:1;10895:2;10875:18;;;10868:30;-1:-1:-1;;;10914:18:1;;;10907:41;10965:18;;17100:74:0;10654:335:1;17100:74:0;17235:10;;17221:11;;:24;;;;:::i;:::-;17205:12;:40;;:67;;;;-1:-1:-1;17267:4:0;;-1:-1:-1;;;;;17249:23:0;;;17267:4;;17249:23;17205:67;:114;;;;-1:-1:-1;17312:6:0;;-1:-1:-1;;;;;17291:28:0;;;17312:6;;17291:28;;17205:114;:144;;;;-1:-1:-1;;;;;;17323:26:0;;17344:4;17323:26;;17205:144;:174;;;;-1:-1:-1;17374:4:0;;-1:-1:-1;;;;;17353:26:0;;;17374:4;;17353:26;;17205:174;17202:294;;;-1:-1:-1;;;;;17403:24:0;;;;;;:13;:24;;;;;;:31;;-1:-1:-1;;17403:31:0;17430:4;17403:31;;;17462:22;;;17403:24;17462:22;17202:294;-1:-1:-1;;;;;17515:22:0;;;;;;:14;:22;;;;;;;;17514:23;:53;;;;-1:-1:-1;;;;;;17541:26:0;;17562:4;17541:26;;17514:53;:84;;;;-1:-1:-1;17593:4:0;;-1:-1:-1;;;;;17572:26:0;;;17593:4;;17572:26;;17514:84;:105;;;;-1:-1:-1;17615:4:0;;-1:-1:-1;;;;;17602:17:0;;;17615:4;;17602:17;;17514:105;:142;;;;-1:-1:-1;17636:20:0;;-1:-1:-1;;;;;17623:33:0;;;17636:20;;17623:33;;17514:142;:173;;;;-1:-1:-1;17673:14:0;;-1:-1:-1;;;;;17660:27:0;;;17673:14;;17660:27;;17514:173;:212;;;;-1:-1:-1;17705:21:0;;-1:-1:-1;;;;;17692:34:0;;;17705:21;;17692:34;;17514:212;17510:404;;;-1:-1:-1;;;;;15146:18:0;;17742;15146;;;:9;:18;;;;;;17831:15;;17807:19;17820:6;15146:18;17807:19;:::i;:::-;17806:40;;17798:114;;;;-1:-1:-1;;;17798:114:0;;11196:2:1;17798:114:0;;;11178:21:1;11235:2;11215:18;;;11208:30;11274:34;11254:18;;;11247:62;11345:32;11325:18;;;11318:60;11395:19;;17798:114:0;10994:426:1;17798:114:0;17727:187;17510:404;17948:4;;-1:-1:-1;;;;;17938:14:0;;;17948:4;;17938:14;:49;;;;-1:-1:-1;17969:18:0;;;;17938:49;:94;;;;-1:-1:-1;;;;;;18005:27:0;;;;;;:16;:27;;;;;;;;18004:28;17938:94;17934:299;;;-1:-1:-1;;;;;18057:24:0;;;;;;:13;:24;;;;;;18084:15;-1:-1:-1;18049:91:0;;;;-1:-1:-1;;;18049:91:0;;11627:2:1;18049:91:0;;;11609:21:1;11666:2;11646:18;;;11639:30;11705:34;11685:18;;;11678:62;-1:-1:-1;;;11756:18:1;;;11749:35;11801:19;;18049:91:0;11425:401:1;18049:91:0;18200:21;;18182:39;;18200:21;;;;;18182:15;:39;:::i;:::-;-1:-1:-1;;;;;18155:24:0;;;;;;:13;:24;;;;;:66;17934:299;18286:28;18299:6;18307;18286:12;:28::i;:::-;18330:16;:14;:16::i;:::-;18327:35;;;18349:10;:8;:10::i;:::-;18421:53;;;;;;;;;;;-1:-1:-1;;;18421:53:0;;;;;;;;-1:-1:-1;;;;;18421:17:0;;-1:-1:-1;18421:17:0;;;:9;:17;;;;;;;;:53;;18443:6;;18421:21;:53::i;:::-;-1:-1:-1;;;;;18401:17:0;;;;;;:9;:17;;;;;;;;:73;;;;19728:11;:19;;;;;;;;19727:20;18512:76;;18582:6;18512:76;;;18573:4;;18536:43;;18544:6;;18552;;-1:-1:-1;;;;;18560:17:0;;;18573:4;;18560:17;18536:7;:43::i;:::-;-1:-1:-1;;;;;18622:20:0;;;;;;:9;:20;;;;;;18487:101;;-1:-1:-1;18622:40:0;;18487:101;18622:24;:40::i;:::-;-1:-1:-1;;;;;18599:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;18708:24;;;;;:16;:24;;;;;;;18704:119;;18753:11;;-1:-1:-1;;;;;18782:17:0;;;18753:11;18782:17;;;:9;:17;;;;;;;;18753:47;;-1:-1:-1;;;18753:47:0;;;;;9302:51:1;;;;9369:18;;;9362:34;18753:11:0;;;:20;;9275:18:1;;18753:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18749:63;;-1:-1:-1;;;;;18839:27:0;;;;;;:16;:27;;;;;;;;18835:129;;18887:11;;-1:-1:-1;;;;;18919:20:0;;;18887:11;18919:20;;;:9;:20;;;;;;;;18887:53;;-1:-1:-1;;;18887:53:0;;;;;9302:51:1;;;;9369:18;;;9362:34;18887:11:0;;;:20;;9275:18:1;;18887:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18883:69;;18980:11;;19000:14;;18980:35;;-1:-1:-1;;;;;;18980:35:0;;-1:-1:-1;;;;;18980:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;18980:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18976:51;19061:9;-1:-1:-1;;;;;19044:43:0;19053:6;-1:-1:-1;;;;;19044:43:0;;19072:14;19044:43;;;;160:25:1;;148:2;133:18;;14:177;19044:43:0;;;;;;;;-1:-1:-1;19105:4:0;;16721:2396;-1:-1:-1;;;;16721:2396:0:o;518:136::-;576:7;603:43;607:1;610;603:43;;;;;;;;;;;;;;;;;:3;:43::i;858:250::-;916:7;940:1;945;940:6;936:47;;-1:-1:-1;970:1:0;963:8;;936:47;995:9;1007:5;1011:1;1007;:5;:::i;:::-;995:17;-1:-1:-1;1040:1:0;1031:5;1035:1;995:17;1031:5;:::i;:::-;:10;1023:56;;;;-1:-1:-1;;;1023:56:0;;12033:2:1;1023:56:0;;;12015:21:1;12072:2;12052:18;;;12045:30;12111:34;12091:18;;;12084:62;-1:-1:-1;;;12162:18:1;;;12155:31;12203:19;;1023:56:0;11831:397:1;1114:132:0;1172:7;1199:39;1203:1;1206;1199:39;;;;;;;;;;;;;;;;;:3;:39::i;19129:330::-;19259:53;;;;;;;;;;;-1:-1:-1;;;19259:53:0;;;;;;;;-1:-1:-1;;;;;19259:17:0;;19222:4;19259:17;;;:9;:17;;;;;;;:53;;19281:6;;19259:21;:53::i;:::-;-1:-1:-1;;;;;19239:17:0;;;;;;;:9;:17;;;;;;:73;;;;19346:20;;;;;;;:32;;19371:6;19346:24;:32::i;:::-;-1:-1:-1;;;;;19323:20:0;;;;;;;:9;:20;;;;;;;:55;;;;19394:35;;;;;;;;;;19422:6;160:25:1;;148:2;133:18;;14:177;19394:35:0;;;;;;;;-1:-1:-1;19447:4:0;19129:330;;;;;:::o;19467:166::-;19564:12;;19554:6;:22;;:49;;;-1:-1:-1;;;;;;19580:23:0;;;;;;:15;:23;;;;;;;;19554:49;19546:79;;;;-1:-1:-1;;;19546:79:0;;12435:2:1;19546:79:0;;;12417:21:1;12474:2;12454:18;;;12447:30;-1:-1:-1;;;12493:18:1;;;12486:47;12550:18;;19546:79:0;12233:341:1;20616:197:0;20703:4;;20665;;-1:-1:-1;;;;;20703:4:0;20689:10;:18;;;;:38;;-1:-1:-1;20721:6:0;;;;20720:7;20689:38;:62;;;;-1:-1:-1;20740:11:0;;;;20689:62;:116;;;;-1:-1:-1;;20792:13:0;;20782:4;20764:24;;;;:9;:24;;;;;;:41;;;20616:197::o;21873:1922::-;13275:6;:13;;-1:-1:-1;;13275:13:0;13284:4;13275:13;;;21968:15:::1;::::0;21985:26:::1;::::0;13275:6;;21952:60:::1;::::0;:15:::1;:60::i;:::-;:79;;22019:12;;21952:79;;;22015:1;21952:79;21922:109;;22042:23;22068:59;22125:1;22068:52;22111:8;;22068:38;22086:19;22068:13;;:17;;:38;;;;:::i;:59::-;22042:85;;22138:20;22161:34;22179:15;22161:13;;:17;;:34;;;;:::i;:::-;22232:16;::::0;;22246:1:::1;22232:16:::0;;;;;::::1;::::0;;22138:57;;-1:-1:-1;22208:21:0::1;::::0;22232:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22232:16:0::1;22208:40;;22277:4;22259;22264:1;22259:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22259:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22303:4:::1;::::0;22293:7;;22303:4;::::1;::::0;22293;;22303;;22293:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22293:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:14;;;;22378:6;:188:::1;::::0;-1:-1:-1;;;22378:188:0;;22344:21:::1;::::0;22378:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22450:12;;22320:21:::1;::::0;22493:4;;22520::::1;::::0;22540:15:::1;::::0;22378:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22579:17;22599:40;22625:13;22599:21;:25;;:40;;;;:::i;:::-;22579:60:::0;-1:-1:-1;22652:19:0::1;22674:40;22687:26;:19:::0;22711:1:::1;22687:23;:26::i;:::-;22674:8;::::0;;:12:::1;:40::i;:::-;22652:62:::0;-1:-1:-1;22735:26:0::1;22764:58;22820:1;22764:51;22652:62:::0;22764:51;:9;22778:19;22764:13:::1;:34::i;:58::-;22735:87;;22833:27;22863:45;22896:11;22863:28;22877:13;;22863:9;:13;;:28;;;;:::i;:45::-;22833:75;;22919:26;22948:44;22980:11;22948:27;22962:12;;22948:9;:13;;:27;;;;:::i;:44::-;22919:73;;23003:20;23026:38;23052:11;23026:21;23040:6;;23026:9;:13;;:21;;;;:::i;:38::-;23003:61;;23081:11;;;;;;;;;-1:-1:-1::0;;;;;23081:11:0::1;-1:-1:-1::0;;;;;23081:19:0::1;;23108;23081:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;23181:20:0::1;::::0;23173:77:::1;::::0;23153:15:::1;::::0;-1:-1:-1;;;;;23181:20:0::1;::::0;23240:5:::1;::::0;23215:18;;23153:15;23173:77;23153:15;23173:77;23215:18;23181:20;23240:5;23173:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23285:14:0::1;::::0;23277:65:::1;::::0;23152:98;;-1:-1:-1;;;;;;23285:14:0::1;::::0;23332:5:::1;::::0;23313:12;;23277:65:::1;::::0;;;23313:12;23285:14;23332:5;23277:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23408:5:0::1;::::0;-1:-1:-1;;23429:19:0;;;-1:-1:-1;23426:362:0::1;;23464:6;::::0;23638:21:::1;::::0;23464:244:::1;::::0;-1:-1:-1;;;23464:244:0;;23540:4:::1;23464:244;::::0;::::1;14247:34:1::0;14297:18;;;14290:34;;;23464:6:0::1;14340:18:1::0;;;14333:34;;;14383:18;;;14376:34;-1:-1:-1;;;;;23638:21:0;;::::1;14426:19:1::0;;;14419:44;23678:15:0::1;14479:19:1::0;;;14472:35;23464:6:0;::::1;::::0;:22:::1;::::0;23494:18;;14181:19:1;;23464:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23728:48:0::1;::::0;;8210:25:1;;;8266:2;8251:18;;8244:34;;;23728:48:0::1;::::0;-1:-1:-1;8183:18:1;23728:48:0::1;;;;;;;23426:362;-1:-1:-1::0;;13293:6:0;:14;;-1:-1:-1;;13293:14:0;;;-1:-1:-1;;;;;;;;;;21873:1922:0:o;19763:449::-;19843:7;19873:18;19894:6;:29;;19920:3;19894:29;;;19903:14;;19894:29;19873:50;;19934:17;19954:62;19995:14;;20012:3;19995:20;;;;:::i;:::-;19954:36;19979:10;19954:20;19965:8;;19954:6;:10;;:20;;;;:::i;:62::-;20084:4;20066:24;;;;:9;:24;;;;;;19934:82;;-1:-1:-1;20066:39:0;;19934:82;20066:28;:39::i;:::-;20057:4;20039:24;;;;:9;:24;;;;;;;:66;;;;20121:42;;-1:-1:-1;;;;;20121:42:0;;;;;;;20153:9;160:25:1;;148:2;133:18;;14:177;20121:42:0;;;;;;;;20183:21;:6;20194:9;20183:10;:21::i;:::-;20176:28;19763:449;-1:-1:-1;;;;;;19763:449:0:o;1252:189::-;1338:7;1373:12;1366:5;1358:28;;;;-1:-1:-1;;;1358:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1397:9:0;1409:5;1413:1;1409;:5;:::i;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:548::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;939:3;1124:1;1119:2;1110:6;1099:9;1095:22;1091:31;1084:42;1194:2;1187;1183:7;1178:2;1170:6;1166:15;1162:29;1151:9;1147:45;1143:54;1135:62;;;;655:548;;;;:::o;1208:180::-;1267:6;1320:2;1308:9;1299:7;1295:23;1291:32;1288:52;;;1336:1;1333;1326:12;1288:52;-1:-1:-1;1359:23:1;;1208:180;-1:-1:-1;1208:180:1:o;1393:131::-;-1:-1:-1;;;;;1468:31:1;;1458:42;;1448:70;;1514:1;1511;1504:12;1448:70;1393:131;:::o;1529:315::-;1597:6;1605;1658:2;1646:9;1637:7;1633:23;1629:32;1626:52;;;1674:1;1671;1664:12;1626:52;1713:9;1700:23;1732:31;1757:5;1732:31;:::i;:::-;1782:5;1834:2;1819:18;;;;1806:32;;-1:-1:-1;;;1529:315:1:o;2041:248::-;2109:6;2117;2170:2;2158:9;2149:7;2145:23;2141:32;2138:52;;;2186:1;2183;2176:12;2138:52;-1:-1:-1;;2209:23:1;;;2279:2;2264:18;;;2251:32;;-1:-1:-1;2041:248:1:o;2294:456::-;2371:6;2379;2387;2440:2;2428:9;2419:7;2415:23;2411:32;2408:52;;;2456:1;2453;2446:12;2408:52;2495:9;2482:23;2514:31;2539:5;2514:31;:::i;:::-;2564:5;-1:-1:-1;2621:2:1;2606:18;;2593:32;2634:33;2593:32;2634:33;:::i;:::-;2294:456;;2686:7;;-1:-1:-1;;;2740:2:1;2725:18;;;;2712:32;;2294:456::o;2755:160::-;2820:20;;2876:13;;2869:21;2859:32;;2849:60;;2905:1;2902;2895:12;2849:60;2755:160;;;:::o;2920:337::-;2983:6;2991;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;3083:26;3099:9;3083:26;:::i;:::-;3073:36;;3159:2;3148:9;3144:18;3131:32;3203:4;3196:5;3192:16;3185:5;3182:27;3172:55;;3223:1;3220;3213:12;3172:55;3246:5;3236:15;;;2920:337;;;;;:::o;3262:247::-;3321:6;3374:2;3362:9;3353:7;3349:23;3345:32;3342:52;;;3390:1;3387;3380:12;3342:52;3429:9;3416:23;3448:31;3473:5;3448:31;:::i;3703:315::-;3768:6;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3884:9;3871:23;3903:31;3928:5;3903:31;:::i;:::-;3953:5;-1:-1:-1;3977:35:1;4008:2;3993:18;;3977:35;:::i;:::-;3967:45;;3703:315;;;;;:::o;4023:180::-;4079:6;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;4171:26;4187:9;4171:26;:::i;4416:689::-;4508:6;4516;4524;4577:2;4565:9;4556:7;4552:23;4548:32;4545:52;;;4593:1;4590;4583:12;4545:52;4633:9;4620:23;4662:18;4703:2;4695:6;4692:14;4689:34;;;4719:1;4716;4709:12;4689:34;4757:6;4746:9;4742:22;4732:32;;4802:7;4795:4;4791:2;4787:13;4783:27;4773:55;;4824:1;4821;4814:12;4773:55;4864:2;4851:16;4890:2;4882:6;4879:14;4876:34;;;4906:1;4903;4896:12;4876:34;4961:7;4954:4;4944:6;4941:1;4937:14;4933:2;4929:23;4925:34;4922:47;4919:67;;;4982:1;4979;4972:12;4919:67;5013:4;5005:13;;;;-1:-1:-1;5037:6:1;-1:-1:-1;5062:37:1;;5078:20;;;-1:-1:-1;5062:37:1;:::i;:::-;5052:47;;4416:689;;;;;:::o;5110:388::-;5178:6;5186;5239:2;5227:9;5218:7;5214:23;5210:32;5207:52;;;5255:1;5252;5245:12;5207:52;5294:9;5281:23;5313:31;5338:5;5313:31;:::i;:::-;5363:5;-1:-1:-1;5420:2:1;5405:18;;5392:32;5433:33;5392:32;5433:33;:::i;5739:248::-;5804:6;5812;5865:2;5853:9;5844:7;5840:23;5836:32;5833:52;;;5881:1;5878;5871:12;5833:52;5904:26;5920:9;5904:26;:::i;6478:335::-;6680:2;6662:21;;;6719:2;6699:18;;;6692:30;-1:-1:-1;;;6753:2:1;6738:18;;6731:41;6804:2;6789:18;;6478:335::o;6818:127::-;6879:10;6874:3;6870:20;6867:1;6860:31;6910:4;6907:1;6900:15;6934:4;6931:1;6924:15;6950:217;6990:1;7016;7006:132;;7060:10;7055:3;7051:20;7048:1;7041:31;7095:4;7092:1;7085:15;7123:4;7120:1;7113:15;7006:132;-1:-1:-1;7152:9:1;;6950:217::o;7529:329::-;7731:2;7713:21;;;7770:1;7750:18;;;7743:29;-1:-1:-1;;;7803:2:1;7788:18;;7781:36;7849:2;7834:18;;7529:329::o;7863:168::-;7936:9;;;7967;;7984:15;;;7978:22;;7964:37;7954:71;;8005:18;;:::i;8632:127::-;8693:10;8688:3;8684:20;8681:1;8674:31;8724:4;8721:1;8714:15;8748:4;8745:1;8738:15;8764:135;8803:3;8824:17;;;8821:43;;8844:18;;:::i;:::-;-1:-1:-1;8891:1:1;8880:13;;8764:135::o;9686:125::-;9751:9;;;9772:10;;;9769:36;;;9785:18;;:::i;10172:128::-;10239:9;;;10260:11;;;10257:37;;;10274:18;;:::i;12711:980::-;12973:4;13021:3;13010:9;13006:19;13052:6;13041:9;13034:25;13078:2;13116:6;13111:2;13100:9;13096:18;13089:34;13159:3;13154:2;13143:9;13139:18;13132:31;13183:6;13218;13212:13;13249:6;13241;13234:22;13287:3;13276:9;13272:19;13265:26;;13326:2;13318:6;13314:15;13300:29;;13347:1;13357:195;13371:6;13368:1;13365:13;13357:195;;;13436:13;;-1:-1:-1;;;;;13432:39:1;13420:52;;13527:15;;;;13492:12;;;;13468:1;13386:9;13357:195;;;-1:-1:-1;;;;;;;13608:32:1;;;;13603:2;13588:18;;13581:60;-1:-1:-1;;;13672:3:1;13657:19;13650:35;13569:3;12711:980;-1:-1:-1;;;12711:980:1:o;14518:306::-;14606:6;14614;14622;14675:2;14663:9;14654:7;14650:23;14646:32;14643:52;;;14691:1;14688;14681:12;14643:52;14720:9;14714:16;14704:26;;14770:2;14759:9;14755:18;14749:25;14739:35;;14814:2;14803:9;14799:18;14793:25;14783:35;;14518:306;;;;;:::o

Swarm Source

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