Token Crobird Coin

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000,000 CROBIRD

Holders:
22 addresses
Contract:
0xEaDB878C3AB1e1A4E9B116B11Af67905B7BE98C40xEaDB878C3AB1e1A4E9B116B11Af67905B7BE98C4

Decimals:
9

Social Profiles:
Not Available, Update ?

Balance
1,800,000,000 CROBIRD

Value
$0.00
0x7dae8fbcc37f67cb1ca02b959fa97c1473bd3a63
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CROBIRDCOIN

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-09
*/

/**
https://t.me/crobirdportal/4
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

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

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

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

        return c;
    }
}

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


/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

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

    address WCRO = 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Crobird Coin";
    string constant _symbol = "CROBIRD";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 100000000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 2) / 100;  
    uint256 public _maxWalletSize = (_totalSupply * 5) / 100;  

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

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

    uint256 liquidityFee = 5;
    uint256 teamFee = 0;
    uint256 marketingFee = 5;
    uint256 totalFee = 10;
    uint256 feeDenominator = 100;
    
    address private marketingFeeReceiver = 0x7Be91E5F347c7103D891E9E8371660d2EC8E49e6;
    address private teamFeeReceiver = 0x7Be91E5F347c7103D891E9E8371660d2EC8E49e6;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000 * 3; // 0.3%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30);
        pair = IDEXFactory(router.factory()).createPair(WCRO, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        address _owner = owner;
        isFeeExempt[_owner] = true;
        isTxLimitExempt[_owner] = true;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, amount);
        
        if (recipient != pair && recipient != DEAD) {
            require(isTxLimitExempt[recipient] || _balances[recipient] + amount <= _maxWalletSize, "Transfer amount exceeds the bag size.");
        }
        
        if(shouldSwapBack()){ swapBack(); }

        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }

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

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

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

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

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

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

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

        return amount.sub(feeAmount);
    }

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

    function swapBack() internal swapping {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 amountToLiquify = contractTokenBalance.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WCRO;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));
        uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBdevelopment = amountBNB.mul(teamFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);


        (bool MarketingSuccess, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        require(MarketingSuccess, "receiver rejected ETH transfer");
        (bool developmentSuccess, /* bytes memory data */) = payable(teamFeeReceiver).call{value: amountBNBdevelopment, gas: 30000}("");
        require(developmentSuccess, "receiver rejected ETH transfer");

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

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

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

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

    function launch() internal {
        launchedAt = block.number;
    }

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

   function setMaxWallet(uint256 amount) external onlyOwner() {
        require(amount >= _totalSupply / 1000 );
        _maxWalletSize = amount;
    }    

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

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

    function setFees(uint256 _liquidityFee, uint256 _teamFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        teamFee = _teamFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_teamFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
    }

    function setFeeReceiver(address _marketingFeeReceiver, address _teamFeeReceiver) external authorized {
        marketingFeeReceiver = _marketingFeeReceiver;
        teamFeeReceiver = _teamFeeReceiver;
    }

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

    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }

    function transferForeignToken(address _token) public authorized {
        require(_token != address(this), "Can't let you take all native token");
        uint256 _contractBalance = IBEP20(_token).balanceOf(address(this));
        payable(marketingFeeReceiver).transfer(_contractBalance);
    }
        
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountBNB, 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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_teamFeeReceiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"transferForeignToken","outputs":[],"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"}]

6080604052600280546001600160a01b0319908116735c7f8a570d578ed84e63fdfa7b1ee72deae1ae231790915560038054821661dead179055600480549091169055620000506009600a620003cd565b620000619064174876e8006200048e565b600555606460055460026200007791906200048e565b62000083919062000361565b600655606460055460056200009991906200048e565b620000a5919062000361565b6007556005600c8190556000600d55600e819055600a600f55606460105560118054737be91e5f347c7103d891e9e8371660d2ec8e49e66001600160a01b031991821681179092556012805490911690911790556016805460ff191660011790555462000116906103e89062000361565b620001239060036200048e565b6017553480156200013357600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff19169092179091556013805473145677fc4d9b8f19b5d56d1820c48e0443049a30931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b158015620001b557600080fd5b505afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f091906200032f565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027891906200032f565b601480546001600160a01b0319166001600160a01b0392831617905530600090815260096020908152604080832060135485168452825280832060001990558254909316808352600a8252838320805460ff199081166001908117909255600b845285852080549091169091179055600554600883528484208190559351938452928392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620004c6565b6000602082840312156200034257600080fd5b81516001600160a01b03811681146200035a57600080fd5b9392505050565b6000826200037f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620003c5578160001904821115620003a957620003a9620004b0565b80851615620003b757918102915b93841c939080029062000389565b509250929050565b60006200035a60ff841683600082620003e95750600162000488565b81620003f85750600062000488565b81600181146200041157600281146200041c576200043c565b600191505062000488565b60ff841115620004305762000430620004b0565b50506001821b62000488565b5060208310610133831016604e8410600b841016171562000461575081810a62000488565b6200046d838362000384565b8060001904821115620004845762000484620004b0565b0290505b92915050565b6000816000190483118215151615620004ab57620004ab620004b0565b500290565b634e487b7160e01b600052601160045260246000fd5b611cee80620004d66000396000f3fe6080604052600436106102135760003560e01c80638f9a55c011610118578063df20fd49116100a0578063f2fde38b1161006f578063f2fde38b14610667578063f429389014610687578063f84ba65d1461069c578063f887ea40146106bc578063fe9fbb80146106dc57600080fd5b8063df20fd49146105e7578063e66db25e14610607578063f0b37c0414610627578063f1f3bca31461064757600080fd5b8063b6a5d7de116100e7578063b6a5d7de1461052b578063bf56b3711461054b578063d51ed1c814610561578063dc93cf7014610581578063dd62ed3e146105a157600080fd5b80638f9a55c0146104a557806395d89b41146104bb578063a8aa1b31146104eb578063a9059cbb1461050b57600080fd5b8063571ac8b01161019b5780636ddd17131161016a5780636ddd1713146103ed5780636fcba3771461040757806370a08231146104275780637d1db4a51461045d578063893d20e81461047357600080fd5b8063571ac8b01461036b5780635c85974f1461038b5780635d0044ca146103ad578063658d4b7f146103cd57600080fd5b806318160ddd116101e257806318160ddd146102d657806323b872dd146102eb5780632b112e491461030b5780632f54bf6e14610320578063313ce5671461034f57600080fd5b80630445b6671461021f57806306fdde0314610248578063095ea7b3146102865780631161ae39146102b657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023560175481565b6040519081526020015b60405180910390f35b34801561025457600080fd5b5060408051808201909152600c81526b21b937b134b9321021b7b4b760a11b60208201525b60405161023f9190611af9565b34801561029257600080fd5b506102a66102a13660046119e2565b6106fc565b604051901515815260200161023f565b3480156102c257600080fd5b506102a66102d1366004611a77565b610769565b3480156102e257600080fd5b50600554610235565b3480156102f757600080fd5b506102a661030636600461196c565b61077d565b34801561031757600080fd5b5061023561083f565b34801561032c57600080fd5b506102a661033b366004611916565b6000546001600160a01b0391821691161490565b34801561035b57600080fd5b506040516009815260200161023f565b34801561037757600080fd5b506102a6610386366004611916565b610891565b34801561039757600080fd5b506103ab6103a6366004611a45565b61089f565b005b3480156103b957600080fd5b506103ab6103c8366004611a45565b6108ee565b3480156103d957600080fd5b506103ab6103e83660046119ad565b610939565b3480156103f957600080fd5b506016546102a69060ff1681565b34801561041357600080fd5b506103ab610422366004611ac7565b610989565b34801561043357600080fd5b50610235610442366004611916565b6001600160a01b031660009081526008602052604090205490565b34801561046957600080fd5b5061023560065481565b34801561047f57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161023f565b3480156104b157600080fd5b5061023560075481565b3480156104c757600080fd5b5060408051808201909152600781526610d493d092549160ca1b6020820152610279565b3480156104f757600080fd5b5060145461048d906001600160a01b031681565b34801561051757600080fd5b506102a66105263660046119e2565b6109dc565b34801561053757600080fd5b506103ab610546366004611916565b6109e9565b34801561055757600080fd5b5061023560155481565b34801561056d57600080fd5b5061023561057c366004611a45565b610a3a565b34801561058d57600080fd5b506103ab61059c366004611916565b610a7e565b3480156105ad57600080fd5b506102356105bc366004611933565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156105f357600080fd5b506103ab610602366004611a29565b610bc2565b34801561061357600080fd5b506103ab610622366004611933565b610bfe565b34801561063357600080fd5b506103ab610642366004611916565b610c51565b34801561065357600080fd5b50610235610662366004611a0e565b610c9c565b34801561067357600080fd5b506103ab610682366004611916565b610cdd565b34801561069357600080fd5b506103ab610d73565b3480156106a857600080fd5b506103ab6106b73660046119ad565b610dd6565b3480156106c857600080fd5b5060135461048d906001600160a01b031681565b3480156106e857600080fd5b506102a66106f7366004611916565b610e26565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107579086815260200190565b60405180910390a35060015b92915050565b60008261077583610a3a565b119392505050565b6001600160a01b03831660009081526009602090815260408083203384529091528120546000191461082a576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610805918490610e44565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610835848484610e7e565b90505b9392505050565b6004546001600160a01b031660009081526008602052604081205461088c906003546001600160a01b03166000908152600860205260409020546108869060055490611100565b90611100565b905090565b6000610763826000196106fc565b6108a833610e26565b6108cd5760405162461bcd60e51b81526004016108c490611b6e565b60405180910390fd5b6103e86005546108dd9190611c1c565b8110156108e957600080fd5b600655565b6000546001600160a01b031633146109185760405162461bcd60e51b81526004016108c490611b4e565b6103e86005546109289190611c1c565b81101561093457600080fd5b600755565b61094233610e26565b61095e5760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61099233610e26565b6109ae5760405162461bcd60e51b81526004016108c490611b6e565b600c849055600d839055600e8290556109d1826109cb8686611142565b90611142565b600f55601055505050565b6000610838338484610e7e565b6000546001600160a01b03163314610a135760405162461bcd60e51b81526004016108c490611b4e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610763610a4761083f565b6014546001600160a01b0316600090815260086020526040902054610a7890610a719060026111a1565b85906111a1565b90611220565b610a8733610e26565b610aa35760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b038116301415610b085760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b60648201526084016108c4565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190611a5e565b6011546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610bbd573d6000803e3d6000fd5b505050565b610bcb33610e26565b610be75760405162461bcd60e51b81526004016108c490611b6e565b6016805460ff191692151592909217909155601755565b610c0733610e26565b610c235760405162461bcd60e51b81526004016108c490611b6e565b601180546001600160a01b039384166001600160a01b03199182161790915560128054929093169116179055565b6000546001600160a01b03163314610c7b5760405162461bcd60e51b81526004016108c490611b4e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000436015546001610cae9190611c04565b10610cc157601054610763906001611100565b8115610cd557600f54610763906001611142565b5050600f5490565b6000546001600160a01b03163314610d075760405162461bcd60e51b81526004016108c490611b4e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610d7c33610e26565b610d985760405162461bcd60e51b81526004016108c490611b6e565b60115460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610dd2573d6000803e3d6000fd5b5050565b610ddf33610e26565b610dfb5760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115610e685760405162461bcd60e51b81526004016108c49190611af9565b506000610e758486611c5d565b95945050505050565b60185460009060ff1615610e9e57610e97848484611262565b9050610838565b610ea88483611348565b6014546001600160a01b03848116911614801590610ed457506003546001600160a01b03848116911614155b15610f7f576001600160a01b0383166000908152600b602052604090205460ff1680610f2557506007546001600160a01b038416600090815260086020526040902054610f22908490611c04565b11155b610f7f5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016108c4565b610f876113b1565b15610f9457610f94611400565b601554158015610fb157506014546001600160a01b038481169116145b15610fe1576001600160a01b038416600090815260086020526040902054610fd857600080fd5b610fe143601555565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611033918490610e44565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16156110685782611073565b611073858585611821565b6001600160a01b0385166000908152600860205260409020549091506110999082611142565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110ed9085815260200190565b60405180910390a3506001949350505050565b600061083883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e44565b60008061114f8385611c04565b9050838110156108385760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108c4565b6000826111b057506000610763565b60006111bc8385611c3e565b9050826111c98583611c1c565b146108385760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108c4565b600061083883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118d3565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526008909152918220546112b3918490610e44565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546112e29083611142565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113369086815260200190565b60405180910390a35060019392505050565b6006548111158061137157506001600160a01b0382166000908152600b602052604090205460ff165b610dd25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108c4565b6014546000906001600160a01b031633148015906113d2575060185460ff16155b80156113e0575060165460ff165b801561088c57505060175430600090815260086020526040902054101590565b6018805460ff1916600117905530600090815260086020526040812054905060006114416002610a78600f54610a78600c54876111a190919063ffffffff16565b9050600061144f8383611100565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061148957611489611c8a565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106114ba576114ba611c8a565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81524792919091169063791ac94790611504908690600090879030904290600401611b93565b600060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b50505050600061154b824761110090919063ffffffff16565b905060006115716115686002600c5461122090919063ffffffff16565b600f5490611100565b905060006115936002610a7884610a78600c54886111a190919063ffffffff16565b905060006115b083610a78600d54876111a190919063ffffffff16565b905060006115cd84610a78600e54886111a190919063ffffffff16565b6011546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611624576040519150601f19603f3d011682016040523d82523d6000602084013e611629565b606091505b505090508061167a5760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e73666572000060448201526064016108c4565b6012546040516000916001600160a01b03169061753090869084818181858888f193505050503d80600081146116cc576040519150601f19603f3d011682016040523d82523d6000602084013e6116d1565b606091505b50509050806117225760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e73666572000060448201526064016108c4565b8a156118095760135460115460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b15801561179357600080fd5b505af11580156117a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117cc9190611a99565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506018805460ff1916905550505050505050505050565b60105460145460009182916118539190610a789061184c906001600160a01b03898116911614610c9c565b86906111a1565b306000908152600860205260409020549091506118709082611142565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118c19085815260200190565b60405180910390a3610e758382611100565b600081836118f45760405162461bcd60e51b81526004016108c49190611af9565b506000610e758486611c1c565b8035801515811461191157600080fd5b919050565b60006020828403121561192857600080fd5b813561083881611ca0565b6000806040838503121561194657600080fd5b823561195181611ca0565b9150602083013561196181611ca0565b809150509250929050565b60008060006060848603121561198157600080fd5b833561198c81611ca0565b9250602084013561199c81611ca0565b929592945050506040919091013590565b600080604083850312156119c057600080fd5b82356119cb81611ca0565b91506119d960208401611901565b90509250929050565b600080604083850312156119f557600080fd5b8235611a0081611ca0565b946020939093013593505050565b600060208284031215611a2057600080fd5b61083882611901565b60008060408385031215611a3c57600080fd5b611a0083611901565b600060208284031215611a5757600080fd5b5035919050565b600060208284031215611a7057600080fd5b5051919050565b60008060408385031215611a8a57600080fd5b50508035926020909101359150565b600080600060608486031215611aae57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215611add57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015611b2657858101830151858201604001528201611b0a565b81811115611b38576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611be35784516001600160a01b031683529383019391830191600101611bbe565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611c1757611c17611c74565b500190565b600082611c3957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c5857611c58611c74565b500290565b600082821015611c6f57611c6f611c74565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cb557600080fd5b5056fea264697066735822122052f7b71034dabf7a03059130f479af20d408c8f505fe304982928ad9804c856764736f6c63430008050033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638f9a55c011610118578063df20fd49116100a0578063f2fde38b1161006f578063f2fde38b14610667578063f429389014610687578063f84ba65d1461069c578063f887ea40146106bc578063fe9fbb80146106dc57600080fd5b8063df20fd49146105e7578063e66db25e14610607578063f0b37c0414610627578063f1f3bca31461064757600080fd5b8063b6a5d7de116100e7578063b6a5d7de1461052b578063bf56b3711461054b578063d51ed1c814610561578063dc93cf7014610581578063dd62ed3e146105a157600080fd5b80638f9a55c0146104a557806395d89b41146104bb578063a8aa1b31146104eb578063a9059cbb1461050b57600080fd5b8063571ac8b01161019b5780636ddd17131161016a5780636ddd1713146103ed5780636fcba3771461040757806370a08231146104275780637d1db4a51461045d578063893d20e81461047357600080fd5b8063571ac8b01461036b5780635c85974f1461038b5780635d0044ca146103ad578063658d4b7f146103cd57600080fd5b806318160ddd116101e257806318160ddd146102d657806323b872dd146102eb5780632b112e491461030b5780632f54bf6e14610320578063313ce5671461034f57600080fd5b80630445b6671461021f57806306fdde0314610248578063095ea7b3146102865780631161ae39146102b657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023560175481565b6040519081526020015b60405180910390f35b34801561025457600080fd5b5060408051808201909152600c81526b21b937b134b9321021b7b4b760a11b60208201525b60405161023f9190611af9565b34801561029257600080fd5b506102a66102a13660046119e2565b6106fc565b604051901515815260200161023f565b3480156102c257600080fd5b506102a66102d1366004611a77565b610769565b3480156102e257600080fd5b50600554610235565b3480156102f757600080fd5b506102a661030636600461196c565b61077d565b34801561031757600080fd5b5061023561083f565b34801561032c57600080fd5b506102a661033b366004611916565b6000546001600160a01b0391821691161490565b34801561035b57600080fd5b506040516009815260200161023f565b34801561037757600080fd5b506102a6610386366004611916565b610891565b34801561039757600080fd5b506103ab6103a6366004611a45565b61089f565b005b3480156103b957600080fd5b506103ab6103c8366004611a45565b6108ee565b3480156103d957600080fd5b506103ab6103e83660046119ad565b610939565b3480156103f957600080fd5b506016546102a69060ff1681565b34801561041357600080fd5b506103ab610422366004611ac7565b610989565b34801561043357600080fd5b50610235610442366004611916565b6001600160a01b031660009081526008602052604090205490565b34801561046957600080fd5b5061023560065481565b34801561047f57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161023f565b3480156104b157600080fd5b5061023560075481565b3480156104c757600080fd5b5060408051808201909152600781526610d493d092549160ca1b6020820152610279565b3480156104f757600080fd5b5060145461048d906001600160a01b031681565b34801561051757600080fd5b506102a66105263660046119e2565b6109dc565b34801561053757600080fd5b506103ab610546366004611916565b6109e9565b34801561055757600080fd5b5061023560155481565b34801561056d57600080fd5b5061023561057c366004611a45565b610a3a565b34801561058d57600080fd5b506103ab61059c366004611916565b610a7e565b3480156105ad57600080fd5b506102356105bc366004611933565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156105f357600080fd5b506103ab610602366004611a29565b610bc2565b34801561061357600080fd5b506103ab610622366004611933565b610bfe565b34801561063357600080fd5b506103ab610642366004611916565b610c51565b34801561065357600080fd5b50610235610662366004611a0e565b610c9c565b34801561067357600080fd5b506103ab610682366004611916565b610cdd565b34801561069357600080fd5b506103ab610d73565b3480156106a857600080fd5b506103ab6106b73660046119ad565b610dd6565b3480156106c857600080fd5b5060135461048d906001600160a01b031681565b3480156106e857600080fd5b506102a66106f7366004611916565b610e26565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107579086815260200190565b60405180910390a35060015b92915050565b60008261077583610a3a565b119392505050565b6001600160a01b03831660009081526009602090815260408083203384529091528120546000191461082a576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610805918490610e44565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610835848484610e7e565b90505b9392505050565b6004546001600160a01b031660009081526008602052604081205461088c906003546001600160a01b03166000908152600860205260409020546108869060055490611100565b90611100565b905090565b6000610763826000196106fc565b6108a833610e26565b6108cd5760405162461bcd60e51b81526004016108c490611b6e565b60405180910390fd5b6103e86005546108dd9190611c1c565b8110156108e957600080fd5b600655565b6000546001600160a01b031633146109185760405162461bcd60e51b81526004016108c490611b4e565b6103e86005546109289190611c1c565b81101561093457600080fd5b600755565b61094233610e26565b61095e5760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61099233610e26565b6109ae5760405162461bcd60e51b81526004016108c490611b6e565b600c849055600d839055600e8290556109d1826109cb8686611142565b90611142565b600f55601055505050565b6000610838338484610e7e565b6000546001600160a01b03163314610a135760405162461bcd60e51b81526004016108c490611b4e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610763610a4761083f565b6014546001600160a01b0316600090815260086020526040902054610a7890610a719060026111a1565b85906111a1565b90611220565b610a8733610e26565b610aa35760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b038116301415610b085760405162461bcd60e51b815260206004820152602360248201527f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60448201526235b2b760e91b60648201526084016108c4565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190611a5e565b6011546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610bbd573d6000803e3d6000fd5b505050565b610bcb33610e26565b610be75760405162461bcd60e51b81526004016108c490611b6e565b6016805460ff191692151592909217909155601755565b610c0733610e26565b610c235760405162461bcd60e51b81526004016108c490611b6e565b601180546001600160a01b039384166001600160a01b03199182161790915560128054929093169116179055565b6000546001600160a01b03163314610c7b5760405162461bcd60e51b81526004016108c490611b4e565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000436015546001610cae9190611c04565b10610cc157601054610763906001611100565b8115610cd557600f54610763906001611142565b5050600f5490565b6000546001600160a01b03163314610d075760405162461bcd60e51b81526004016108c490611b4e565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610d7c33610e26565b610d985760405162461bcd60e51b81526004016108c490611b6e565b60115460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610dd2573d6000803e3d6000fd5b5050565b610ddf33610e26565b610dfb5760405162461bcd60e51b81526004016108c490611b6e565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115610e685760405162461bcd60e51b81526004016108c49190611af9565b506000610e758486611c5d565b95945050505050565b60185460009060ff1615610e9e57610e97848484611262565b9050610838565b610ea88483611348565b6014546001600160a01b03848116911614801590610ed457506003546001600160a01b03848116911614155b15610f7f576001600160a01b0383166000908152600b602052604090205460ff1680610f2557506007546001600160a01b038416600090815260086020526040902054610f22908490611c04565b11155b610f7f5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016108c4565b610f876113b1565b15610f9457610f94611400565b601554158015610fb157506014546001600160a01b038481169116145b15610fe1576001600160a01b038416600090815260086020526040902054610fd857600080fd5b610fe143601555565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611033918490610e44565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16156110685782611073565b611073858585611821565b6001600160a01b0385166000908152600860205260409020549091506110999082611142565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110ed9085815260200190565b60405180910390a3506001949350505050565b600061083883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e44565b60008061114f8385611c04565b9050838110156108385760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108c4565b6000826111b057506000610763565b60006111bc8385611c3e565b9050826111c98583611c1c565b146108385760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108c4565b600061083883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118d3565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526008909152918220546112b3918490610e44565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546112e29083611142565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113369086815260200190565b60405180910390a35060019392505050565b6006548111158061137157506001600160a01b0382166000908152600b602052604090205460ff165b610dd25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108c4565b6014546000906001600160a01b031633148015906113d2575060185460ff16155b80156113e0575060165460ff165b801561088c57505060175430600090815260086020526040902054101590565b6018805460ff1916600117905530600090815260086020526040812054905060006114416002610a78600f54610a78600c54876111a190919063ffffffff16565b9050600061144f8383611100565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061148957611489611c8a565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106114ba576114ba611c8a565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b81524792919091169063791ac94790611504908690600090879030904290600401611b93565b600060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b50505050600061154b824761110090919063ffffffff16565b905060006115716115686002600c5461122090919063ffffffff16565b600f5490611100565b905060006115936002610a7884610a78600c54886111a190919063ffffffff16565b905060006115b083610a78600d54876111a190919063ffffffff16565b905060006115cd84610a78600e54886111a190919063ffffffff16565b6011546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114611624576040519150601f19603f3d011682016040523d82523d6000602084013e611629565b606091505b505090508061167a5760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e73666572000060448201526064016108c4565b6012546040516000916001600160a01b03169061753090869084818181858888f193505050503d80600081146116cc576040519150601f19603f3d011682016040523d82523d6000602084013e6116d1565b606091505b50509050806117225760405162461bcd60e51b815260206004820152601e60248201527f72656365697665722072656a656374656420455448207472616e73666572000060448201526064016108c4565b8a156118095760135460115460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b15801561179357600080fd5b505af11580156117a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117cc9190611a99565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506018805460ff1916905550505050505050505050565b60105460145460009182916118539190610a789061184c906001600160a01b03898116911614610c9c565b86906111a1565b306000908152600860205260409020549091506118709082611142565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118c19085815260200190565b60405180910390a3610e758382611100565b600081836118f45760405162461bcd60e51b81526004016108c49190611af9565b506000610e758486611c1c565b8035801515811461191157600080fd5b919050565b60006020828403121561192857600080fd5b813561083881611ca0565b6000806040838503121561194657600080fd5b823561195181611ca0565b9150602083013561196181611ca0565b809150509250929050565b60008060006060848603121561198157600080fd5b833561198c81611ca0565b9250602084013561199c81611ca0565b929592945050506040919091013590565b600080604083850312156119c057600080fd5b82356119cb81611ca0565b91506119d960208401611901565b90509250929050565b600080604083850312156119f557600080fd5b8235611a0081611ca0565b946020939093013593505050565b600060208284031215611a2057600080fd5b61083882611901565b60008060408385031215611a3c57600080fd5b611a0083611901565b600060208284031215611a5757600080fd5b5035919050565b600060208284031215611a7057600080fd5b5051919050565b60008060408385031215611a8a57600080fd5b50508035926020909101359150565b600080600060608486031215611aae57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215611add57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015611b2657858101830151858201604001528201611b0a565b81811115611b38576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611be35784516001600160a01b031683529383019391830191600101611bbe565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115611c1757611c17611c74565b500190565b600082611c3957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611c5857611c58611c74565b500290565b600082821015611c6f57611c6f611c74565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611cb557600080fd5b5056fea264697066735822122052f7b71034dabf7a03059130f479af20d408c8f505fe304982928ad9804c856764736f6c63430008050033

Deployed ByteCode Sourcemap

5501:10702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6759:54;;;;;;;;;;;;;;;;;;;9310:25:1;;;9298:2;9283:18;6759:54:0;;;;;;;;7710:80;;;;;;;;;;-1:-1:-1;7782:5:0;;;;;;;;;;;;-1:-1:-1;;;7782:5:0;;;;7710:80;;;;;;;:::i;8132:216::-;;;;;;;;;;-1:-1:-1;8132:216:0;;;;;:::i;:::-;;:::i;:::-;;;5362:14:1;;5355:22;5337:41;;5325:2;5310:18;8132:216:0;5292:92:1;15982:150:0;;;;;;;;;;-1:-1:-1;15982:150:0;;;;;:::i;:::-;;:::i;7440:88::-;;;;;;;;;;-1:-1:-1;7513:12:0;;7440:88;;8650:370;;;;;;;;;;-1:-1:-1;8650:370:0;;;;;:::i;:::-;;:::i;15657:142::-;;;;;;;;;;;;;:::i;3396:103::-;;;;;;;;;;-1:-1:-1;3396:103:0;;;;;:::i;:::-;3451:4;3486:5;-1:-1:-1;;;;;3475:16:0;;;3486:5;;3475:16;;3396:103;7534:80;;;;;;;;;;-1:-1:-1;7534:80:0;;5888:1;10726:36:1;;10714:2;10699:18;7534:80:0;10681:87:1;8356:122:0;;;;;;;;;;-1:-1:-1;8356:122:0;;;;;:::i;:::-;;:::i;13835:145::-;;;;;;;;;;-1:-1:-1;13835:145:0;;;;;:::i;:::-;;:::i;:::-;;13987:151;;;;;;;;;;-1:-1:-1;13987:151:0;;;;;:::i;:::-;;:::i;14150:120::-;;;;;;;;;;-1:-1:-1;14150:120:0;;;;;:::i;:::-;;:::i;6722:30::-;;;;;;;;;;-1:-1:-1;6722:30:0;;;;;;;;14414:352;;;;;;;;;;-1:-1:-1;14414:352:0;;;;;:::i;:::-;;:::i;7880:105::-;;;;;;;;;;-1:-1:-1;7880:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;7964:18:0;7946:7;7964:18;;;:9;:18;;;;;;;7880:105;5960:54;;;;;;;;;;;;;;;;7796:78;;;;;;;;;;-1:-1:-1;7848:7:0;7866:5;-1:-1:-1;;;;;7866:5:0;7796:78;;;-1:-1:-1;;;;;4325:32:1;;;4307:51;;4295:2;4280:18;7796:78:0;4262:102:1;6023:56:0;;;;;;;;;;;;;;;;7620:84;;;;;;;;;;-1:-1:-1;7694:7:0;;;;;;;;;;;;-1:-1:-1;;;7694:7:0;;;;7620:84;;6660:19;;;;;;;;;;-1:-1:-1;6660:19:0;;;;-1:-1:-1;;;;;6660:19:0;;;8486:156;;;;;;;;;;-1:-1:-1;8486:156:0;;;;;:::i;:::-;;:::i;3069:94::-;;;;;;;;;;-1:-1:-1;3069:94:0;;;;;:::i;:::-;;:::i;6688:25::-;;;;;;;;;;;;;;;;15807:167;;;;;;;;;;-1:-1:-1;15807:167:0;;;;;:::i;:::-;;:::i;15343:298::-;;;;;;;;;;-1:-1:-1;15343:298:0;;;;;:::i;:::-;;:::i;7991:133::-;;;;;;;;;;-1:-1:-1;7991:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8093:19:0;;;8075:7;8093:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;7991:133;14991:156;;;;;;;;;;-1:-1:-1;14991:156:0;;;;;:::i;:::-;;:::i;14774:209::-;;;;;;;;;;-1:-1:-1;14774:209:0;;;;;:::i;:::-;;:::i;3239:97::-;;;;;;;;;;-1:-1:-1;3239:97:0;;;;;:::i;:::-;;:::i;10620:225::-;;;;;;;;;;-1:-1:-1;10620:225:0;;;;;:::i;:::-;;:::i;3796:173::-;;;;;;;;;;-1:-1:-1;3796:173:0;;;;;:::i;:::-;;:::i;15155:180::-;;;;;;;;;;;;;:::i;14278:128::-;;;;;;;;;;-1:-1:-1;14278:128:0;;;;;:::i;:::-;;:::i;6629:24::-;;;;;;;;;;-1:-1:-1;6629:24:0;;;;-1:-1:-1;;;;;6629:24:0;;;3570:107;;;;;;;;;;-1:-1:-1;3570:107:0;;;;;:::i;:::-;;:::i;8132:216::-;8236:10;8207:4;8224:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8224:32:0;;;;;;;;;;:41;;;8281:37;8207:4;;8224:32;;8281:37;;;;8259:6;9310:25:1;;9298:2;9283:18;;9265:76;8281:37:0;;;;;;;;-1:-1:-1;8336:4:0;8132:216;;;;;:::o;15982:150::-;16062:4;16118:6;16086:29;16106:8;16086:19;:29::i;:::-;:38;;15982:150;-1:-1:-1;;;15982:150:0:o;8650:370::-;-1:-1:-1;;;;;8770:19:0;;8750:4;8770:19;;;:11;:19;;;;;;;;8790:10;8770:31;;;;;;;;-1:-1:-1;;8770:52:0;8767:186;;8872:69;;;;;;;;;;;-1:-1:-1;;;8872:69:0;;;;;;;;-1:-1:-1;;;;;8872:19:0;;-1:-1:-1;8872:19:0;;;:11;:19;;;;;8892:10;8872:31;;;;;;;;;;:69;;8908:6;;8872:35;:69::i;:::-;-1:-1:-1;;;;;8838:19:0;;;;;;:11;:19;;;;;;;;8858:10;8838:31;;;;;;;:103;8767:186;8972:40;8986:6;8994:9;9005:6;8972:13;:40::i;:::-;8965:47;;8650:370;;;;;;:::o;15657:142::-;15785:4;;-1:-1:-1;;;;;15785:4:0;15710:7;7964:18;;;:9;:18;;;;;;15737:54;;15764:4;;-1:-1:-1;;;;;15764:4:0;7946:7;7964:18;;;:9;:18;;;;;;15737:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;15730:61;;15657:142;:::o;8356:122::-;8411:4;8435:35;8443:7;-1:-1:-1;;8435:7:0;:35::i;13835:145::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;;;;;;;;;13935:4:::1;13920:12;;:19;;;;:::i;:::-;13910:6;:29;;13902:38;;;::::0;::::1;;13951:12;:21:::0;13835:145::o;13987:151::-;3451:4;3486:5;-1:-1:-1;;;;;3486:5:0;2793:10;3475:16;2777:38;;;;-1:-1:-1;;;2777:38:0;;;;;;;:::i;:::-;14090:4:::1;14075:12;;:19;;;;:::i;:::-;14065:6;:29;;14057:39;;;::::0;::::1;;14107:14;:23:::0;13987:151::o;14150:120::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14234:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;14234:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14150:120::o;14414:352::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;14551:12:::1;:28:::0;;;14590:7:::1;:18:::0;;;14619:12:::1;:28:::0;;;14669:46:::1;14634:13:::0;14669:27:::1;14566:13:::0;14600:8;14669:17:::1;:27::i;:::-;:31:::0;::::1;:46::i;:::-;14658:8;:57:::0;14726:14:::1;:32:::0;-1:-1:-1;;;14414:352:0:o;8486:156::-;8566:4;8590:44;8604:10;8616:9;8627:6;8590:13;:44::i;3069:94::-;3451:4;3486:5;-1:-1:-1;;;;;3486:5:0;2793:10;3475:16;2777:38;;;;-1:-1:-1;;;2777:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3129:19:0::1;;::::0;;;3151:4:::1;3129:19;::::0;;;;;;;:26;;-1:-1:-1;;3129:26:0::1;::::0;;::::1;::::0;;3069:94::o;15807:167::-;15875:7;15902:64;15943:22;:20;:22::i;:::-;15925:4;;-1:-1:-1;;;;;15925:4:0;7946:7;7964:18;;;:9;:18;;;;;;15902:36;;15915:22;;15935:1;15915:19;:22::i;:::-;15902:8;;:12;:36::i;:::-;:40;;:64::i;15343:298::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15426:23:0;::::1;15444:4;15426:23;;15418:71;;;::::0;-1:-1:-1;;;15418:71:0;;7171:2:1;15418:71:0::1;::::0;::::1;7153:21:1::0;7210:2;7190:18;;;7183:30;7249:34;7229:18;;;7222:62;-1:-1:-1;;;7300:18:1;;;7293:33;7343:19;;15418:71:0::1;7143:225:1::0;15418:71:0::1;15527:39;::::0;-1:-1:-1;;;15527:39:0;;15560:4:::1;15527:39;::::0;::::1;4307:51:1::0;15500:24:0::1;::::0;-1:-1:-1;;;;;15527:24:0;::::1;::::0;::::1;::::0;4280:18:1;;15527:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15585:20;::::0;15577:56:::1;::::0;15500:66;;-1:-1:-1;;;;;;15585:20:0::1;::::0;15577:56;::::1;;;::::0;15500:66;;15585:20:::1;15577:56:::0;15585:20;15577:56;15500:66;15585:20;15577:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15407:234;15343:298:::0;:::o;14991:156::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;15083:11:::1;:22:::0;;-1:-1:-1;;15083:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;15116:13:::1;:23:::0;14991:156::o;14774:209::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;14886:20:::1;:44:::0;;-1:-1:-1;;;;;14886:44:0;;::::1;-1:-1:-1::0;;;;;;14886:44:0;;::::1;;::::0;;;14941:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;14774:209::o;3239:97::-;3451:4;3486:5;-1:-1:-1;;;;;3486:5:0;2793:10;3475:16;2777:38;;;;-1:-1:-1;;;2777:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3301:19:0::1;3323:5;3301:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;3301:27:0::1;::::0;;3239:97::o;10620:225::-;10676:7;10717:12;10699:10;;10712:1;10699:14;;;;:::i;:::-;:30;10696:67;;10739:14;;:21;;10758:1;10739:18;:21::i;10696:67::-;10776:7;10773:39;;;10794:8;;:15;;10807:1;10794:12;:15::i;10773:39::-;-1:-1:-1;;10829:8:0;;;10620:225::o;3796:173::-;3451:4;3486:5;-1:-1:-1;;;;;3486:5:0;2793:10;3475:16;2777:38;;;;-1:-1:-1;;;2777:38:0;;;;;;;:::i;:::-;3872:5:::1;:11:::0;;-1:-1:-1;;;;;;3872:11:0::1;-1:-1:-1::0;;;;;3872:11:0;::::1;::::0;;::::1;::::0;;3894:19;;;-1:-1:-1;3894:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;3894:26:0::1;::::0;;::::1;::::0;;;3936:25;;4307:51:1;;;3936:25:0::1;::::0;4280:18:1;3936:25:0::1;;;;;;;3796:173:::0;:::o;15155:180::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;15277:20:::1;::::0;15269:58:::1;::::0;15237:21:::1;::::0;-1:-1:-1;;;;;15277:20:0::1;::::0;15269:58;::::1;;;::::0;15237:21;;15208:26:::1;15269:58:::0;15208:26;15269:58;15237:21;15277:20;15269:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15197:138;15155:180::o:0;14278:128::-;2954:24;2967:10;2954:12;:24::i;:::-;2946:48;;;;-1:-1:-1;;;2946:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14366:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;14366:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14278:128::o;3570:107::-;-1:-1:-1;;;;;3650:19:0;3626:4;3650:19;;;:14;:19;;;;;;;;;3570:107::o;453:192::-;539:7;575:12;567:6;;;;559:29;;;;-1:-1:-1;;;559:29:0;;;;;;;;:::i;:::-;-1:-1:-1;599:9:0;611:5;615:1;611;:5;:::i;:::-;599:17;453:192;-1:-1:-1;;;;;453:192:0:o;9028:942::-;9140:6;;9120:4;;9140:6;;9137:63;;;9156:41;9171:6;9179:9;9190:6;9156:14;:41::i;:::-;9149:48;;;;9137:63;9220:28;9233:6;9241;9220:12;:28::i;:::-;9286:4;;-1:-1:-1;;;;;9273:17:0;;;9286:4;;9273:17;;;;:38;;-1:-1:-1;9307:4:0;;-1:-1:-1;;;;;9294:17:0;;;9307:4;;9294:17;;9273:38;9269:198;;;-1:-1:-1;;;;;9336:26:0;;;;;;:15;:26;;;;;;;;;:77;;-1:-1:-1;9399:14:0;;-1:-1:-1;;;;;9366:20:0;;;;;;:9;:20;;;;;;:29;;9389:6;;9366:29;:::i;:::-;:47;;9336:77;9328:127;;;;-1:-1:-1;;;9328:127:0;;6419:2:1;9328:127:0;;;6401:21:1;6458:2;6438:18;;;6431:30;6497:34;6477:18;;;6470:62;-1:-1:-1;;;6548:18:1;;;6541:35;6593:19;;9328:127:0;6391:227:1;9328:127:0;9490:16;:14;:16::i;:::-;9487:35;;;9509:10;:8;:10::i;:::-;13725;;:15;;;9537:32;;-1:-1:-1;9565:4:0;;-1:-1:-1;;;;;9552:17:0;;;9565:4;;9552:17;9537:32;9534:81;;;-1:-1:-1;;;;;9580:17:0;;9600:1;9580:17;;;:9;:17;;;;;;9572:30;;;;;;9604:8;13807:12;13794:10;:25;13756:71;9604:8;9647:53;;;;;;;;;;;-1:-1:-1;;;9647:53:0;;;;;;;;-1:-1:-1;;;;;9647:17:0;;-1:-1:-1;9647:17:0;;;:9;:17;;;;;;;;:53;;9669:6;;9647:21;:53::i;:::-;-1:-1:-1;;;;;9627:17:0;;;;;;:9;:17;;;;;;;;:73;;;;10585:11;:19;;;;;;;;10584:20;9738:67;;9799:6;9738:67;;;9762:34;9770:6;9778:9;9789:6;9762:7;:34::i;:::-;-1:-1:-1;;;;;9839:20:0;;;;;;:9;:20;;;;;;9713:92;;-1:-1:-1;9839:40:0;;9713:92;9839:24;:40::i;:::-;-1:-1:-1;;;;;9816:20:0;;;;;;;:9;:20;;;;;;;:63;;;;9897:43;;;;;;;;;;9925:14;9310:25:1;;9298:2;9283:18;;9265:76;9897:43:0;;;;;;;;-1:-1:-1;9958:4:0;;9028:942;-1:-1:-1;;;;9028:942:0:o;311:136::-;369:7;396:43;400:1;403;396:43;;;;;;;;;;;;;;;;;:3;:43::i;124:181::-;182:7;;214:5;218:1;214;:5;:::i;:::-;202:17;;243:1;238;:6;;230:46;;;;-1:-1:-1;;;230:46:0;;7575:2:1;230:46:0;;;7557:21:1;7614:2;7594:18;;;7587:30;7653:29;7633:18;;;7626:57;7700:18;;230:46:0;7547:177:1;651:250:0;709:7;733:6;729:47;;-1:-1:-1;763:1:0;756:8;;729:47;788:9;800:5;804:1;800;:5;:::i;:::-;788:17;-1:-1:-1;833:1:0;824:5;828:1;788:17;824:5;:::i;:::-;:10;816:56;;;;-1:-1:-1;;;816:56:0;;8290:2:1;816:56:0;;;8272:21:1;8329:2;8309:18;;;8302:30;8368:34;8348:18;;;8341:62;-1:-1:-1;;;8419:18:1;;;8412:31;8460:19;;816:56:0;8262:223:1;907:132:0;965:7;992:39;996:1;999;992:39;;;;;;;;;;;;;;;;;:3;:39::i;9982:330::-;10112:53;;;;;;;;;;;-1:-1:-1;;;10112:53:0;;;;;;;;-1:-1:-1;;;;;10112:17:0;;10075:4;10112:17;;;:9;:17;;;;;;;:53;;10134:6;;10112:21;:53::i;:::-;-1:-1:-1;;;;;10092:17:0;;;;;;;:9;:17;;;;;;:73;;;;10199:20;;;;;;;:32;;10224:6;10199:24;:32::i;:::-;-1:-1:-1;;;;;10176:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10247:35;;;;;;;;;;10275:6;9310:25:1;;9298:2;9283:18;;9265:76;10247:35:0;;;;;;;;-1:-1:-1;10300:4:0;9982:330;;;;;:::o;10320:166::-;10417:12;;10407:6;:22;;:49;;;-1:-1:-1;;;;;;10433:23:0;;;;;;:15;:23;;;;;;;;10407:49;10399:79;;;;-1:-1:-1;;;10399:79:0;;6825:2:1;10399:79:0;;;6807:21:1;6864:2;6844:18;;;6837:30;-1:-1:-1;;;6883:18:1;;;6876:47;6940:18;;10399:79:0;6797:167:1;11233:197:0;11320:4;;11282;;-1:-1:-1;;;;;11320:4:0;11306:10;:18;;;;:38;;-1:-1:-1;11338:6:0;;;;11337:7;11306:38;:62;;;;-1:-1:-1;11357:11:0;;;;11306:62;:116;;;;-1:-1:-1;;11409:13:0;;11399:4;11381:24;;;;:9;:24;;;;;;:41;;;11233:197::o;11438:1843::-;6868:6;:13;;-1:-1:-1;;6868:13:0;6877:4;6868:13;;;11536:4:::1;-1:-1:-1::0;7964:18:0;;;:9;:18;;;;;;11487:55:::1;;11553:23;11579:59;11636:1;11579:52;11622:8;;11579:38;11604:12;;11579:20;:24;;:38;;;;:::i;:59::-;11553:85:::0;-1:-1:-1;11649:20:0::1;11672:41;:20:::0;11553:85;11672:24:::1;:41::i;:::-;11750:16;::::0;;11764:1:::1;11750:16:::0;;;;;::::1;::::0;;11649:64;;-1:-1:-1;11726:21:0::1;::::0;11750:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11750:16:0::1;11726:40;;11795:4;11777;11782:1;11777:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11777:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;11821:4:::1;::::0;11811:7;;11821:4;::::1;::::0;11811;;11821;;11811:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;11811:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;11896:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;11896:188:0;;11862:21:::1;::::0;11896:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;11968:12;;11838:21:::1;::::0;12011:4;;12038::::1;::::0;12058:15:::1;::::0;11896:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12095:17;12115:40;12141:13;12115:21;:25;;:40;;;;:::i;:::-;12095:60;;12166:19;12188:33;12201:19;12218:1;12201:12;;:16;;:19;;;;:::i;:::-;12188:8;::::0;;:12:::1;:33::i;:::-;12166:55;;12232:26;12261:51;12310:1;12261:44;12293:11;12261:27;12275:12;;12261:9;:13;;:27;;;;:::i;:51::-;12232:80;;12323:28;12354:39;12381:11;12354:22;12368:7;;12354:9;:13;;:22;;;;:::i;:39::-;12323:70;;12404:26;12433:44;12465:11;12433:27;12447:12;;12433:9;:13;;:27;;;;:::i;:44::-;12551:20;::::0;12543:77:::1;::::0;12404:73;;-1:-1:-1;12493:21:0::1;::::0;-1:-1:-1;;;;;12551:20:0;;::::1;::::0;12610:5:::1;::::0;12404:73;;12493:21;12543:77;12493:21;12543:77;12404:73;12551:20;12610:5;12543:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12492:128;;;12639:16;12631:59;;;::::0;-1:-1:-1;;;12631:59:0;;7931:2:1;12631:59:0::1;::::0;::::1;7913:21:1::0;7970:2;7950:18;;;7943:30;8009:32;7989:18;;;7982:60;8059:18;;12631:59:0::1;7903:180:1::0;12631:59:0::1;12762:15;::::0;12754:74:::1;::::0;12702:23:::1;::::0;-1:-1:-1;;;;;12762:15:0::1;::::0;12818:5:::1;::::0;12791:20;;12702:23;12754:74;12702:23;12754:74;12791:20;12762:15;12818:5;12754:74:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12701:127;;;12847:18;12839:61;;;::::0;-1:-1:-1;;;12839:61:0;;7931:2:1;12839:61:0::1;::::0;::::1;7913:21:1::0;7970:2;7950:18;;;7943:30;8009:32;7989:18;;;7982:60;8059:18;;12839:61:0::1;7903:180:1::0;12839:61:0::1;12916:19:::0;;12913:361:::1;;12951:6;::::0;13125:20:::1;::::0;12951:243:::1;::::0;-1:-1:-1;;;12951:243:0;;13027:4:::1;12951:243;::::0;::::1;4926:34:1::0;4976:18;;;4969:34;;;12951:6:0::1;5019:18:1::0;;;5012:34;;;5062:18;;;5055:34;-1:-1:-1;;;;;13125:20:0;;::::1;5105:19:1::0;;;5098:44;13164:15:0::1;5158:19:1::0;;;5151:35;12951:6:0;::::1;::::0;:22:::1;::::0;12981:18;;4860:19:1;;12951:243:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;13214:48:0::1;::::0;;10505:25:1;;;10561:2;10546:18;;10539:34;;;13214:48:0::1;::::0;-1:-1:-1;10478:18:1;13214:48:0::1;;;;;;;12913:361;-1:-1:-1::0;;6886:6:0;:14;;-1:-1:-1;;6886:14:0;;;-1:-1:-1;;;;;;;;;;11438:1843:0:o;10853:372::-;11024:14;;11013:4;;10938:7;;;;10978:61;;11024:14;10978:41;;10989:29;;-1:-1:-1;;;;;11001:16:0;;;11013:4;;11001:16;10989:11;:29::i;:::-;10978:6;;:10;:41::i;:61::-;11097:4;11079:24;;;;:9;:24;;;;;;10958:81;;-1:-1:-1;11079:39:0;;10958:81;11079:28;:39::i;:::-;11070:4;11052:24;;;;:9;:24;;;;;;;:66;;;;11134:42;;-1:-1:-1;;;;;11134:42:0;;;;;;;11166:9;9310:25:1;;9298:2;9283:18;;9265:76;11134:42:0;;;;;;;;11196:21;:6;11207:9;11196:10;:21::i;1045:345::-;1131:7;1233:12;1226:5;1218:28;;;;-1:-1:-1;;;1218:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1257:9:0;1269:5;1273:1;1269;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:2;;;836:1;833;826:12;788:2;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;778:301;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:2;;;1246:1;1243;1236:12;1198:2;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1188:352;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1188:352::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:2;;;1687:1;1684;1677:12;1639:2;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1629:231;;;;;:::o;1865:315::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:2;;;2010:1;2007;2000:12;1962:2;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1952:228:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:2;;;2310:1;2307;2300:12;2262:2;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:2;;;2512:1;2509;2502:12;2464:2;2535:26;2551:9;2535:26;:::i;2623:180::-;2682:6;2735:2;2723:9;2714:7;2710:23;2706:32;2703:2;;;2751:1;2748;2741:12;2703:2;-1:-1:-1;2774:23:1;;2693:110;-1:-1:-1;2693:110:1:o;2808:184::-;2878:6;2931:2;2919:9;2910:7;2906:23;2902:32;2899:2;;;2947:1;2944;2937:12;2899:2;-1:-1:-1;2970:16:1;;2889:103;-1:-1:-1;2889:103:1:o;2997:248::-;3065:6;3073;3126:2;3114:9;3105:7;3101:23;3097:32;3094:2;;;3142:1;3139;3132:12;3094:2;-1:-1:-1;;3165:23:1;;;3235:2;3220:18;;;3207:32;;-1:-1:-1;3084:161:1:o;3250:306::-;3338:6;3346;3354;3407:2;3395:9;3386:7;3382:23;3378:32;3375:2;;;3423:1;3420;3413:12;3375:2;3452:9;3446:16;3436:26;;3502:2;3491:9;3487:18;3481:25;3471:35;;3546:2;3535:9;3531:18;3525:25;3515:35;;3365:191;;;;;:::o;3561:385::-;3647:6;3655;3663;3671;3724:3;3712:9;3703:7;3699:23;3695:33;3692:2;;;3741:1;3738;3731:12;3692:2;-1:-1:-1;;3764:23:1;;;3834:2;3819:18;;3806:32;;-1:-1:-1;3885:2:1;3870:18;;3857:32;;3936:2;3921:18;3908:32;;-1:-1:-1;3682:264:1;-1:-1:-1;3682:264:1:o;5615:597::-;5727:4;5756:2;5785;5774:9;5767:21;5817:6;5811:13;5860:6;5855:2;5844:9;5840:18;5833:34;5885:1;5895:140;5909:6;5906:1;5903:13;5895:140;;;6004:14;;;6000:23;;5994:30;5970:17;;;5989:2;5966:26;5959:66;5924:10;;5895:140;;;6053:6;6050:1;6047:13;6044:2;;;6123:1;6118:2;6109:6;6098:9;6094:22;6090:31;6083:42;6044:2;-1:-1:-1;6196:2:1;6175:15;-1:-1:-1;;6171:29:1;6156:45;;;;6203:2;6152:54;;5736:476;-1:-1:-1;;;5736:476:1:o;8490:329::-;8692:2;8674:21;;;8731:1;8711:18;;;8704:29;-1:-1:-1;;;8764:2:1;8749:18;;8742:36;8810:2;8795:18;;8664:155::o;8824:335::-;9026:2;9008:21;;;9065:2;9045:18;;;9038:30;-1:-1:-1;;;9099:2:1;9084:18;;9077:41;9150:2;9135:18;;8998:161::o;9346:980::-;9608:4;9656:3;9645:9;9641:19;9687:6;9676:9;9669:25;9713:2;9751:6;9746:2;9735:9;9731:18;9724:34;9794:3;9789:2;9778:9;9774:18;9767:31;9818:6;9853;9847:13;9884:6;9876;9869:22;9922:3;9911:9;9907:19;9900:26;;9961:2;9953:6;9949:15;9935:29;;9982:1;9992:195;10006:6;10003:1;10000:13;9992:195;;;10071:13;;-1:-1:-1;;;;;10067:39:1;10055:52;;10162:15;;;;10127:12;;;;10103:1;10021:9;9992:195;;;-1:-1:-1;;;;;;;10243:32:1;;;;10238:2;10223:18;;10216:60;-1:-1:-1;;;10307:3:1;10292:19;10285:35;10204:3;9617:709;-1:-1:-1;;;9617:709:1:o;10773:128::-;10813:3;10844:1;10840:6;10837:1;10834:13;10831:2;;;10850:18;;:::i;:::-;-1:-1:-1;10886:9:1;;10821:80::o;10906:217::-;10946:1;10972;10962:2;;11016:10;11011:3;11007:20;11004:1;10997:31;11051:4;11048:1;11041:15;11079:4;11076:1;11069:15;10962:2;-1:-1:-1;11108:9:1;;10952:171::o;11128:168::-;11168:7;11234:1;11230;11226:6;11222:14;11219:1;11216:21;11211:1;11204:9;11197:17;11193:45;11190:2;;;11241:18;;:::i;:::-;-1:-1:-1;11281:9:1;;11180:116::o;11301:125::-;11341:4;11369:1;11366;11363:8;11360:2;;;11374:18;;:::i;:::-;-1:-1:-1;11411:9:1;;11350:76::o;11431:127::-;11492:10;11487:3;11483:20;11480:1;11473:31;11523:4;11520:1;11513:15;11547:4;11544:1;11537:15;11563:127;11624:10;11619:3;11615:20;11612:1;11605:31;11655:4;11652:1;11645:15;11679:4;11676:1;11669:15;11827:131;-1:-1:-1;;;;;11902:31:1;;11892:42;;11882:2;;11948:1;11945;11938:12;11882:2;11872:86;:::o

Swarm Source

ipfs://52f7b71034dabf7a03059130f479af20d408c8f505fe304982928ad9804c8567
Loading