ETH Price: $2,445.39 (+9.73%)

Token

Caishen coin (CaishenC)
 

Overview

Max Total Supply

1,000,000,000 CaishenC

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,485,849.339400778 CaishenC

Value
$0.00
0x463c51b68a69f6b167970dcb7305237891b5b05a
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:
Caishencoin

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract Caishencoin is Context, IERC20, Auth {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Caishen coin";
    string private _symbol = "CaishenC";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x442780Ab3aC7fe0cB09f775EAbD6F4b58eB23970); // Marketing Address
    address payable public teamWalletAddress = payable(0x8BA69937eDE5a34D2732c0e32CdAd6Cfad3BF4DD); // Lottery Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 2;
    uint256 public _buyMarketingFee = 2;
    uint256 public _buyTeamFee = 1;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellTeamFee = 1;

    uint256 public _liquidityShare = 2;
    uint256 public _marketingShare = 4;
    uint256 public _teamShare = 2;

    uint256 public _totalTaxIfBuying = 0;
    uint256 public _totalTaxIfSelling = 0;
    uint256 public _totalDistributionShares = 0;

    uint256 private _totalSupply = 1 * 10**9 * 10**9;
    uint256 public _maxTxAmount = 3 * 10**7 * 10**9; //1 * 10**6 * 10**9;
    uint256 public _walletMax = 3 * 10**7 * 10**9;
    uint256 private minimumTokensBeforeSwap = 25000 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;
    bool public tradingOpen = false;
    mapping(address => bool) public _isBlackListed;

    uint256 public launchedAt = 0;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () Auth(msg.sender) {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[msg.sender] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

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

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public authorized {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external authorized {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external authorized {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external authorized {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        if(tradingOpen){
            launchedAt = block.number;
        }
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external authorized {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external authorized {
       checkWalletLimit = newValue;
    }

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

    function setWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external authorized {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external authorized {
        marketingWalletAddress = payable(newAddress);
    }

    function setBlackList(address addr, bool value) external authorized {
        _isBlackListed[addr] = value;
    }

    function setTeamWalletAddress(address newAddress) external authorized {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function clearStuckBalance(uint256 amountPercentage) external authorized {
        uint256 amountBNB = address(this).balance;
        payable(marketingWalletAddress).transfer(amountBNB * amountPercentage / 100);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackListed[sender] && !_isBlackListed[recipient],"Account is blacklisted");

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

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

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

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHTeam = amountReceived.mul(_teamShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHTeam);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHTeam > 0)
            transferToAddressETH(teamWalletAddress, amountETHTeam);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","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":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600c60a09081526b21b0b4b9b432b71031b7b4b760a11b60c0526002906200002d9082620005b0565b506040805180820190915260088152674361697368656e4360c01b60208201526003906200005c9082620005b0565b506004805474442780ab3ac7fe0cb09f775eabd6f4b58eb23970096001600160a81b0319909116178155600580546001600160a01b031916738ba69937ede5a34d2732c0e32cdad6cfad3bf4dd17905561dead6080526002600c819055600d8190556001600e819055600f829055601082905560115560128190556013919091556014556000601581905560168190556017819055670de0b6b3a7640000601855666a94d74f4300006019819055601a556516bcc41e9000601b55601d805463ffffffff60a81b19166201000160a81b179055601f553480156200013f57600080fd5b50600080546001600160a01b031916339081178255815260016020818152604092839020805460ff1916909217909155815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e191906200067c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025591906200067c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c991906200067c565b601d80546001600160a01b039283166001600160a01b031991821617909155601c805492841692909116821790556018543060008181526007602090815260408083209583529481528482209390935533815260088352838120805460ff1990811660019081179092559282529390208054909116909217909155600e54600d54600c546200037b93620003679290620018106200049c821b17901c565b6200049c60201b620018101790919060201c565b601581905550620003a660115462000367601054600f546200049c60201b620018101790919060201c565b601681905550620003d1601454620003676013546012546200049c60201b620018101790919060201c565b6017553360008181526009602090815260408083208054600160ff199182168117909255601d80546001600160a01b0390811687528487208054841685179055308088528588208054851686179055888852600a87528588208054851686179055875284872080548416851790559054168552600b8452828520805490911690911790556018548484526006835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620006c9565b600080620004ab8385620006a7565b905083811015620005025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200053657607f821691505b6020821081036200055757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005ab57600081815260208120601f850160051c81016020861015620005865750805b601f850160051c820191505b81811015620005a75782815560010162000592565b5050505b505050565b81516001600160401b03811115620005cc57620005cc6200050b565b620005e481620005dd845462000521565b846200055d565b602080601f8311600181146200061c5760008415620006035750858301515b600019600386901b1c1916600185901b178555620005a7565b600085815260208120601f198616915b828110156200064d578886015182559484019460019091019084016200062c565b50858210156200066c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200068f57600080fd5b81516001600160a01b03811681146200050257600080fd5b808201808211156200050557634e487b7160e01b600052601160045260246000fd5b6080516129fd620006ec600039600081816105a40152610f5801526129fd6000f3fe6080604052600436106103d25760003560e01c8063844d591c116101fd578063c816841b11610118578063ec28438a116100ab578063f1d5f5171161007a578063f1d5f51714610b93578063f2fde38b14610bb3578063f84ba65d14610bd3578063f872858a14610bf3578063ffb54a9914610c1457600080fd5b8063ec28438a14610b1d578063ef422a1814610b3d578063f0b37c0414610b5d578063f0cd1dac14610b7d57600080fd5b8063d158272d116100e7578063d158272d14610a7b578063da00097d14610aa0578063dc44b6a014610ac1578063dd62ed3e14610ad757600080fd5b8063c816841b146109ff578063c860795214610a1f578063c867d60b14610a35578063cab0347114610a6557600080fd5b8063a83f53a711610190578063c2d4640e1161015f578063c2d4640e14610993578063c469b6dd146109b3578063c49b9a80146109c9578063c5d24189146109e957600080fd5b8063a83f53a714610927578063a9059cbb1461093d578063b6a5d7de1461095d578063bf56b3711461097d57600080fd5b8063a073d37f116101cc578063a073d37f146108bc578063a08e671f146108d1578063a457c2d7146108e7578063a5d69d1f1461090757600080fd5b8063844d591c1461084157806388790a68146108615780638b42507f1461087757806395d89b41146108a757600080fd5b8063313ce567116102ed5780635881f3ef1161028057806370a082311161024f57806370a08231146107c95780637d1db4a5146107ff578063807c2d9c1461081557806382eefb431461082b57600080fd5b80635881f3ef1461074357806361a23c691461076357806368092bd9146107795780636c9bb93b1461079957600080fd5b80634a74bb02116102bc5780634a74bb02146106bc5780634cb80fd5146106dd5780635342acb4146106fd57806357a5802f1461072d57600080fd5b8063313ce5671461062a578063395093511461064c5780633b97084a1461066c5780633ecad2711461068c57600080fd5b80631da1db5e1161036557806327c8f8351161033457806327c8f835146105925780632b112e49146105c65780632c4b2334146105db5780632f54bf6e146105fb57600080fd5b80631da1db5e146105125780632198cf6c1461053257806323b872dd146105525780632563ae831461057257600080fd5b80631245e347116103a15780631245e3471461047b5780631694505e146104b357806318160ddd146104d35780631870517a146104f257600080fd5b806306fdde03146103de5780630873321414610409578063095ea7b31461042b5780630d2959801461045b57600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610c35565b60405161040091906125ac565b60405180910390f35b34801561041557600080fd5b506104296104243660046125fa565b610cc7565b005b34801561043757600080fd5b5061044b61044636600461263b565b610d20565b6040519015158152602001610400565b34801561046757600080fd5b5061042961047636600461267c565b610d37565b34801561048757600080fd5b5060055461049b906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b3480156104bf57600080fd5b50601c5461049b906001600160a01b031681565b3480156104df57600080fd5b506018545b604051908152602001610400565b3480156104fe57600080fd5b5061042961050d3660046125fa565b610d90565b34801561051e57600080fd5b5061042961052d366004612697565b610dda565b34801561053e57600080fd5b5061042961054d3660046126b0565b610e58565b34801561055e57600080fd5b5061044b61056d3660046126e5565b610ea8565b34801561057e57600080fd5b5061042961058d36600461267c565b610f13565b34801561059e57600080fd5b5061049b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d257600080fd5b506104e4610f56565b3480156105e757600080fd5b506104296105f6366004612726565b610fa0565b34801561060757600080fd5b5061044b610616366004612726565b6000546001600160a01b0391821691161490565b34801561063657600080fd5b5060045460405160ff9091168152602001610400565b34801561065857600080fd5b5061044b61066736600461263b565b610fe7565b34801561067857600080fd5b50610429610687366004612697565b61101d565b34801561069857600080fd5b5061044b6106a7366004612726565b600b6020526000908152604090205460ff1681565b3480156106c857600080fd5b50601d5461044b90600160a81b900460ff1681565b3480156106e957600080fd5b506104296106f8366004612726565b611047565b34801561070957600080fd5b5061044b610718366004612726565b60086020526000908152604090205460ff1681565b34801561073957600080fd5b506104e460125481565b34801561074f57600080fd5b5061049b61075e366004612726565b611094565b34801561076f57600080fd5b506104e460135481565b34801561078557600080fd5b506104296107943660046126b0565b6113cc565b3480156107a557600080fd5b5061044b6107b4366004612726565b601e6020526000908152604090205460ff1681565b3480156107d557600080fd5b506104e46107e4366004612726565b6001600160a01b031660009081526006602052604090205490565b34801561080b57600080fd5b506104e460195481565b34801561082157600080fd5b506104e4601a5481565b34801561083757600080fd5b506104e460165481565b34801561084d57600080fd5b5061042961085c3660046126b0565b61141c565b34801561086d57600080fd5b506104e4600f5481565b34801561088357600080fd5b5061044b610892366004612726565b600a6020526000908152604090205460ff1681565b3480156108b357600080fd5b506103f3611471565b3480156108c857600080fd5b50601b546104e4565b3480156108dd57600080fd5b506104e460175481565b3480156108f357600080fd5b5061044b61090236600461263b565b611480565b34801561091357600080fd5b5061042961092236600461267c565b6114cf565b34801561093357600080fd5b506104e460145481565b34801561094957600080fd5b5061044b61095836600461263b565b611517565b34801561096957600080fd5b50610429610978366004612726565b611524565b34801561098957600080fd5b506104e4601f5481565b34801561099f57600080fd5b506104296109ae3660046125fa565b611575565b3480156109bf57600080fd5b506104e4600e5481565b3480156109d557600080fd5b506104296109e436600461267c565b6115bf565b3480156109f557600080fd5b506104e4600d5481565b348015610a0b57600080fd5b50601d5461049b906001600160a01b031681565b348015610a2b57600080fd5b506104e460105481565b348015610a4157600080fd5b5061044b610a50366004612726565b60096020526000908152604090205460ff1681565b348015610a7157600080fd5b506104e460115481565b348015610a8757600080fd5b5060045461049b9061010090046001600160a01b031681565b348015610aac57600080fd5b50601d5461044b90600160b01b900460ff1681565b348015610acd57600080fd5b506104e4600c5481565b348015610ae357600080fd5b506104e4610af2366004612743565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50610429610b38366004612697565b611641565b348015610b4957600080fd5b50610429610b583660046126b0565b61166b565b348015610b6957600080fd5b50610429610b78366004612726565b6116bb565b348015610b8957600080fd5b506104e460155481565b348015610b9f57600080fd5b50610429610bae366004612697565b611706565b348015610bbf57600080fd5b50610429610bce366004612726565b611730565b348015610bdf57600080fd5b50610429610bee3660046126b0565b6117c0565b348015610bff57600080fd5b50601d5461044b90600160b81b900460ff1681565b348015610c2057600080fd5b50601d5461044b90600160c01b900460ff1681565b606060028054610c449061277c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c709061277c565b8015610cbd5780601f10610c9257610100808354040283529160200191610cbd565b820191906000526020600020905b815481529060010190602001808311610ca057829003601f168201915b5050505050905090565b610cd03361186f565b610cf55760405162461bcd60e51b8152600401610cec906127b6565b60405180910390fd5b600f83905560108290556011819055610d1881610d128585611810565b90611810565b601655505050565b6000610d2d33848461188d565b5060015b92915050565b6000546001600160a01b03163314610d615760405162461bcd60e51b8152600401610cec906127db565b601d805460ff60c01b1916600160c01b8315158102919091179182905560ff91041615610d8d5743601f555b50565b610d993361186f565b610db55760405162461bcd60e51b8152600401610cec906127b6565b600c839055600d829055600e819055610dd281610d128585611810565b601555505050565b610de33361186f565b610dff5760405162461bcd60e51b8152600401610cec906127b6565b600454479061010090046001600160a01b03166108fc6064610e218585612811565b610e2b9190612830565b6040518115909202916000818181858888f19350505050158015610e53573d6000803e3d6000fd5b505050565b610e613361186f565b610e7d5760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610eb58484846119b1565b50610f088433610f038560405180606001604052806028815260200161297b602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611e9e565b61188d565b5060015b9392505050565b610f1c3361186f565b610f385760405162461bcd60e51b8152600401610cec906127b6565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260066020526040812054601854610f9b91611ed8565b905090565b610fa93361186f565b610fc55760405162461bcd60e51b8152600401610cec906127b6565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d2d918590610f039086611810565b6110263361186f565b6110425760405162461bcd60e51b8152600401610cec906127b6565b601b55565b6110503361186f565b61106c5760405162461bcd60e51b8152600401610cec906127b6565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610cec906127db565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612852565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190612852565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112069190612852565b91506001600160a01b03821661135d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112789190612852565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190612852565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612852565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6113d53361186f565b6113f15760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b606060038054610c449061277c565b6000610d2d3384610f03856040518060600160405280602581526020016129a3602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611e9e565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610cec906127db565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b6000610f083384846119b1565b6000546001600160a01b0316331461154e5760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61157e3361186f565b61159a5760405162461bcd60e51b8152600401610cec906127b6565b6012839055601382905560148190556115b781610d128585611810565b601755505050565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610cec906127db565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061163690831515815260200190565b60405180910390a150565b61164a3361186f565b6116665760405162461bcd60e51b8152600401610cec906127b6565b601955565b6116743361186f565b6116905760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116e55760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03166000908152600160205260409020805460ff19169055565b61170f3361186f565b61172b5760405162461bcd60e51b8152600401610cec906127b6565b601a55565b6000546001600160a01b0316331461175a5760405162461bcd60e51b8152600401610cec906127db565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101611636565b6117c93361186f565b6117e55760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60008061181d838561286f565b905083811015610f0c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cec565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0383166118ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cec565b6001600160a01b0382166119505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cec565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cec565b6001600160a01b038316611a795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cec565b6001600160a01b0384166000908152601e602052604090205460ff16158015611abb57506001600160a01b0383166000908152601e602052604090205460ff16155b611b005760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b6044820152606401610cec565b6001600160a01b03841660009081526001602052604090205460ff16158015611b4257506001600160a01b03831660009081526001602052604090205460ff16155b15611b9757601d54600160c01b900460ff16611b975760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610cec565b601d54600160a01b900460ff1615611bbb57611bb4848484611f1a565b9050610f0c565b6001600160a01b0384166000908152600a602052604090205460ff16158015611bfd57506001600160a01b0383166000908152600a602052604090205460ff16155b15611c6557601954821115611c655760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cec565b30600090815260066020526040902054601b5481108015908190611c935750601d54600160a01b900460ff16155b8015611cb857506001600160a01b0386166000908152600b602052604090205460ff16155b8015611ccd5750601d54600160a81b900460ff165b15611cf357601d54600160b01b900460ff1615611cea57601b5491505b611cf382612000565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260069091529190912054611d45918690611e9e565b6001600160a01b038716600090815260066020908152604080832093909355600890529081205460ff1680611d9257506001600160a01b03861660009081526008602052604090205460ff165b611da657611da187878761213b565b611da8565b845b601d54909150600160b81b900460ff168015611ddd57506001600160a01b03861660009081526009602052604090205460ff16155b15611e1357601a54611e0882610d12896001600160a01b031660009081526006602052604090205490565b1115611e1357600080fd5b6001600160a01b038616600090815260066020526040902054611e369082611810565b6001600160a01b0380881660008181526006602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e8a9085815260200190565b60405180910390a360019350505050610f0c565b60008184841115611ec25760405162461bcd60e51b8152600401610cec91906125ac565b506000611ecf8486612882565b95945050505050565b6000610f0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054611f6b918490611e9e565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611f9a9083611810565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fee9086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b179055601754601254600091612036916002916120309182908790612241565b906122c3565b905060006120448383611ed8565b905061204f81612305565b601254479060009061206f906120669060026122c3565b60175490611ed8565b905060006120916002612030846120306012548861224190919063ffffffff16565b905060006120ae836120306014548761224190919063ffffffff16565b905060006120c6826120c08786611ed8565b90611ed8565b905080156120e9576004546120e99061010090046001600160a01b031682612498565b811561210557600554612105906001600160a01b031683612498565b6000831180156121155750600087115b156121245761212487846124ce565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600b6020526040812054819060ff161561217f5761217860646120306015548661224190919063ffffffff16565b90506121bd565b6001600160a01b0384166000908152600b602052604090205460ff16156121bd576121ba60646120306016548661224190919063ffffffff16565b90505b801561223757306000908152600660205260409020546121dd9082611810565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061222e9085815260200190565b60405180910390a35b611ecf8382611ed8565b60008260000361225357506000610d31565b600061225f8385612811565b90508261226c8583612830565b14610f0c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cec565b6000610f0c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061257e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233a5761233a612895565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b79190612852565b816001815181106123ca576123ca612895565b6001600160a01b039283166020918202929092010152601c546123f0913091168461188d565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906124299085906000908690309042906004016128ef565b600060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161248c92919061292b565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e53573d6000803e3d6000fd5b601c546124e69030906001600160a01b03168461188d565b601c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612552573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612577919061294c565b5050505050565b6000818361259f5760405162461bcd60e51b8152600401610cec91906125ac565b506000611ecf8486612830565b600060208083528351808285015260005b818110156125d9578581018301518582016040015282016125bd565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561260f57600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610d8d57600080fd5b6000806040838503121561264e57600080fd5b823561265981612626565b946020939093013593505050565b8035801515811461267757600080fd5b919050565b60006020828403121561268e57600080fd5b610f0c82612667565b6000602082840312156126a957600080fd5b5035919050565b600080604083850312156126c357600080fd5b82356126ce81612626565b91506126dc60208401612667565b90509250929050565b6000806000606084860312156126fa57600080fd5b833561270581612626565b9250602084013561271581612626565b929592945050506040919091013590565b60006020828403121561273857600080fd5b8135610f0c81612626565b6000806040838503121561275657600080fd5b823561276181612626565b9150602083013561277181612626565b809150509250929050565b600181811c9082168061279057607f821691505b6020821081036127b057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561282b5761282b6127fb565b500290565b60008261284d57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561286457600080fd5b8151610f0c81612626565b80820180821115610d3157610d316127fb565b81810381811115610d3157610d316127fb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156128e45781516001600160a01b0316875295820195908201906001016128bf565b509495945050505050565b85815284602082015260a06040820152600061290e60a08301866128ab565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061294460408301846128ab565b949350505050565b60008060006060848603121561296157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220293ef0ebca20d6aec8339e9348e1c7cba6919714381fd8d4c5316a17036199b164736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063844d591c116101fd578063c816841b11610118578063ec28438a116100ab578063f1d5f5171161007a578063f1d5f51714610b93578063f2fde38b14610bb3578063f84ba65d14610bd3578063f872858a14610bf3578063ffb54a9914610c1457600080fd5b8063ec28438a14610b1d578063ef422a1814610b3d578063f0b37c0414610b5d578063f0cd1dac14610b7d57600080fd5b8063d158272d116100e7578063d158272d14610a7b578063da00097d14610aa0578063dc44b6a014610ac1578063dd62ed3e14610ad757600080fd5b8063c816841b146109ff578063c860795214610a1f578063c867d60b14610a35578063cab0347114610a6557600080fd5b8063a83f53a711610190578063c2d4640e1161015f578063c2d4640e14610993578063c469b6dd146109b3578063c49b9a80146109c9578063c5d24189146109e957600080fd5b8063a83f53a714610927578063a9059cbb1461093d578063b6a5d7de1461095d578063bf56b3711461097d57600080fd5b8063a073d37f116101cc578063a073d37f146108bc578063a08e671f146108d1578063a457c2d7146108e7578063a5d69d1f1461090757600080fd5b8063844d591c1461084157806388790a68146108615780638b42507f1461087757806395d89b41146108a757600080fd5b8063313ce567116102ed5780635881f3ef1161028057806370a082311161024f57806370a08231146107c95780637d1db4a5146107ff578063807c2d9c1461081557806382eefb431461082b57600080fd5b80635881f3ef1461074357806361a23c691461076357806368092bd9146107795780636c9bb93b1461079957600080fd5b80634a74bb02116102bc5780634a74bb02146106bc5780634cb80fd5146106dd5780635342acb4146106fd57806357a5802f1461072d57600080fd5b8063313ce5671461062a578063395093511461064c5780633b97084a1461066c5780633ecad2711461068c57600080fd5b80631da1db5e1161036557806327c8f8351161033457806327c8f835146105925780632b112e49146105c65780632c4b2334146105db5780632f54bf6e146105fb57600080fd5b80631da1db5e146105125780632198cf6c1461053257806323b872dd146105525780632563ae831461057257600080fd5b80631245e347116103a15780631245e3471461047b5780631694505e146104b357806318160ddd146104d35780631870517a146104f257600080fd5b806306fdde03146103de5780630873321414610409578063095ea7b31461042b5780630d2959801461045b57600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610c35565b60405161040091906125ac565b60405180910390f35b34801561041557600080fd5b506104296104243660046125fa565b610cc7565b005b34801561043757600080fd5b5061044b61044636600461263b565b610d20565b6040519015158152602001610400565b34801561046757600080fd5b5061042961047636600461267c565b610d37565b34801561048757600080fd5b5060055461049b906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b3480156104bf57600080fd5b50601c5461049b906001600160a01b031681565b3480156104df57600080fd5b506018545b604051908152602001610400565b3480156104fe57600080fd5b5061042961050d3660046125fa565b610d90565b34801561051e57600080fd5b5061042961052d366004612697565b610dda565b34801561053e57600080fd5b5061042961054d3660046126b0565b610e58565b34801561055e57600080fd5b5061044b61056d3660046126e5565b610ea8565b34801561057e57600080fd5b5061042961058d36600461267c565b610f13565b34801561059e57600080fd5b5061049b7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105d257600080fd5b506104e4610f56565b3480156105e757600080fd5b506104296105f6366004612726565b610fa0565b34801561060757600080fd5b5061044b610616366004612726565b6000546001600160a01b0391821691161490565b34801561063657600080fd5b5060045460405160ff9091168152602001610400565b34801561065857600080fd5b5061044b61066736600461263b565b610fe7565b34801561067857600080fd5b50610429610687366004612697565b61101d565b34801561069857600080fd5b5061044b6106a7366004612726565b600b6020526000908152604090205460ff1681565b3480156106c857600080fd5b50601d5461044b90600160a81b900460ff1681565b3480156106e957600080fd5b506104296106f8366004612726565b611047565b34801561070957600080fd5b5061044b610718366004612726565b60086020526000908152604090205460ff1681565b34801561073957600080fd5b506104e460125481565b34801561074f57600080fd5b5061049b61075e366004612726565b611094565b34801561076f57600080fd5b506104e460135481565b34801561078557600080fd5b506104296107943660046126b0565b6113cc565b3480156107a557600080fd5b5061044b6107b4366004612726565b601e6020526000908152604090205460ff1681565b3480156107d557600080fd5b506104e46107e4366004612726565b6001600160a01b031660009081526006602052604090205490565b34801561080b57600080fd5b506104e460195481565b34801561082157600080fd5b506104e4601a5481565b34801561083757600080fd5b506104e460165481565b34801561084d57600080fd5b5061042961085c3660046126b0565b61141c565b34801561086d57600080fd5b506104e4600f5481565b34801561088357600080fd5b5061044b610892366004612726565b600a6020526000908152604090205460ff1681565b3480156108b357600080fd5b506103f3611471565b3480156108c857600080fd5b50601b546104e4565b3480156108dd57600080fd5b506104e460175481565b3480156108f357600080fd5b5061044b61090236600461263b565b611480565b34801561091357600080fd5b5061042961092236600461267c565b6114cf565b34801561093357600080fd5b506104e460145481565b34801561094957600080fd5b5061044b61095836600461263b565b611517565b34801561096957600080fd5b50610429610978366004612726565b611524565b34801561098957600080fd5b506104e4601f5481565b34801561099f57600080fd5b506104296109ae3660046125fa565b611575565b3480156109bf57600080fd5b506104e4600e5481565b3480156109d557600080fd5b506104296109e436600461267c565b6115bf565b3480156109f557600080fd5b506104e4600d5481565b348015610a0b57600080fd5b50601d5461049b906001600160a01b031681565b348015610a2b57600080fd5b506104e460105481565b348015610a4157600080fd5b5061044b610a50366004612726565b60096020526000908152604090205460ff1681565b348015610a7157600080fd5b506104e460115481565b348015610a8757600080fd5b5060045461049b9061010090046001600160a01b031681565b348015610aac57600080fd5b50601d5461044b90600160b01b900460ff1681565b348015610acd57600080fd5b506104e4600c5481565b348015610ae357600080fd5b506104e4610af2366004612743565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50610429610b38366004612697565b611641565b348015610b4957600080fd5b50610429610b583660046126b0565b61166b565b348015610b6957600080fd5b50610429610b78366004612726565b6116bb565b348015610b8957600080fd5b506104e460155481565b348015610b9f57600080fd5b50610429610bae366004612697565b611706565b348015610bbf57600080fd5b50610429610bce366004612726565b611730565b348015610bdf57600080fd5b50610429610bee3660046126b0565b6117c0565b348015610bff57600080fd5b50601d5461044b90600160b81b900460ff1681565b348015610c2057600080fd5b50601d5461044b90600160c01b900460ff1681565b606060028054610c449061277c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c709061277c565b8015610cbd5780601f10610c9257610100808354040283529160200191610cbd565b820191906000526020600020905b815481529060010190602001808311610ca057829003601f168201915b5050505050905090565b610cd03361186f565b610cf55760405162461bcd60e51b8152600401610cec906127b6565b60405180910390fd5b600f83905560108290556011819055610d1881610d128585611810565b90611810565b601655505050565b6000610d2d33848461188d565b5060015b92915050565b6000546001600160a01b03163314610d615760405162461bcd60e51b8152600401610cec906127db565b601d805460ff60c01b1916600160c01b8315158102919091179182905560ff91041615610d8d5743601f555b50565b610d993361186f565b610db55760405162461bcd60e51b8152600401610cec906127b6565b600c839055600d829055600e819055610dd281610d128585611810565b601555505050565b610de33361186f565b610dff5760405162461bcd60e51b8152600401610cec906127b6565b600454479061010090046001600160a01b03166108fc6064610e218585612811565b610e2b9190612830565b6040518115909202916000818181858888f19350505050158015610e53573d6000803e3d6000fd5b505050565b610e613361186f565b610e7d5760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610eb58484846119b1565b50610f088433610f038560405180606001604052806028815260200161297b602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611e9e565b61188d565b5060015b9392505050565b610f1c3361186f565b610f385760405162461bcd60e51b8152600401610cec906127b6565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260066020526040812054601854610f9b91611ed8565b905090565b610fa93361186f565b610fc55760405162461bcd60e51b8152600401610cec906127b6565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610d2d918590610f039086611810565b6110263361186f565b6110425760405162461bcd60e51b8152600401610cec906127b6565b601b55565b6110503361186f565b61106c5760405162461bcd60e51b8152600401610cec906127b6565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610cec906127db565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612852565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190612852565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156111e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112069190612852565b91506001600160a01b03821661135d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112789190612852565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e99190612852565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612852565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6113d53361186f565b6113f15760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114465760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b606060038054610c449061277c565b6000610d2d3384610f03856040518060600160405280602581526020016129a3602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611e9e565b6000546001600160a01b031633146114f95760405162461bcd60e51b8152600401610cec906127db565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b6000610f083384846119b1565b6000546001600160a01b0316331461154e5760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61157e3361186f565b61159a5760405162461bcd60e51b8152600401610cec906127b6565b6012839055601382905560148190556115b781610d128585611810565b601755505050565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610cec906127db565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061163690831515815260200190565b60405180910390a150565b61164a3361186f565b6116665760405162461bcd60e51b8152600401610cec906127b6565b601955565b6116743361186f565b6116905760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116e55760405162461bcd60e51b8152600401610cec906127db565b6001600160a01b03166000908152600160205260409020805460ff19169055565b61170f3361186f565b61172b5760405162461bcd60e51b8152600401610cec906127b6565b601a55565b6000546001600160a01b0316331461175a5760405162461bcd60e51b8152600401610cec906127db565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101611636565b6117c93361186f565b6117e55760405162461bcd60e51b8152600401610cec906127b6565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60008061181d838561286f565b905083811015610f0c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cec565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0383166118ef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cec565b6001600160a01b0382166119505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cec565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cec565b6001600160a01b038316611a795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cec565b6001600160a01b0384166000908152601e602052604090205460ff16158015611abb57506001600160a01b0383166000908152601e602052604090205460ff16155b611b005760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d081a5cc8189b1858dadb1a5cdd195960521b6044820152606401610cec565b6001600160a01b03841660009081526001602052604090205460ff16158015611b4257506001600160a01b03831660009081526001602052604090205460ff16155b15611b9757601d54600160c01b900460ff16611b975760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610cec565b601d54600160a01b900460ff1615611bbb57611bb4848484611f1a565b9050610f0c565b6001600160a01b0384166000908152600a602052604090205460ff16158015611bfd57506001600160a01b0383166000908152600a602052604090205460ff16155b15611c6557601954821115611c655760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cec565b30600090815260066020526040902054601b5481108015908190611c935750601d54600160a01b900460ff16155b8015611cb857506001600160a01b0386166000908152600b602052604090205460ff16155b8015611ccd5750601d54600160a81b900460ff165b15611cf357601d54600160b01b900460ff1615611cea57601b5491505b611cf382612000565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260069091529190912054611d45918690611e9e565b6001600160a01b038716600090815260066020908152604080832093909355600890529081205460ff1680611d9257506001600160a01b03861660009081526008602052604090205460ff165b611da657611da187878761213b565b611da8565b845b601d54909150600160b81b900460ff168015611ddd57506001600160a01b03861660009081526009602052604090205460ff16155b15611e1357601a54611e0882610d12896001600160a01b031660009081526006602052604090205490565b1115611e1357600080fd5b6001600160a01b038616600090815260066020526040902054611e369082611810565b6001600160a01b0380881660008181526006602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e8a9085815260200190565b60405180910390a360019350505050610f0c565b60008184841115611ec25760405162461bcd60e51b8152600401610cec91906125ac565b506000611ecf8486612882565b95945050505050565b6000610f0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054611f6b918490611e9e565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611f9a9083611810565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fee9086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b179055601754601254600091612036916002916120309182908790612241565b906122c3565b905060006120448383611ed8565b905061204f81612305565b601254479060009061206f906120669060026122c3565b60175490611ed8565b905060006120916002612030846120306012548861224190919063ffffffff16565b905060006120ae836120306014548761224190919063ffffffff16565b905060006120c6826120c08786611ed8565b90611ed8565b905080156120e9576004546120e99061010090046001600160a01b031682612498565b811561210557600554612105906001600160a01b031683612498565b6000831180156121155750600087115b156121245761212487846124ce565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600b6020526040812054819060ff161561217f5761217860646120306015548661224190919063ffffffff16565b90506121bd565b6001600160a01b0384166000908152600b602052604090205460ff16156121bd576121ba60646120306016548661224190919063ffffffff16565b90505b801561223757306000908152600660205260409020546121dd9082611810565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061222e9085815260200190565b60405180910390a35b611ecf8382611ed8565b60008260000361225357506000610d31565b600061225f8385612811565b90508261226c8583612830565b14610f0c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cec565b6000610f0c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061257e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233a5761233a612895565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b79190612852565b816001815181106123ca576123ca612895565b6001600160a01b039283166020918202929092010152601c546123f0913091168461188d565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906124299085906000908690309042906004016128ef565b600060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161248c92919061292b565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e53573d6000803e3d6000fd5b601c546124e69030906001600160a01b03168461188d565b601c5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612552573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612577919061294c565b5050505050565b6000818361259f5760405162461bcd60e51b8152600401610cec91906125ac565b506000611ecf8486612830565b600060208083528351808285015260005b818110156125d9578581018301518582016040015282016125bd565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060006060848603121561260f57600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610d8d57600080fd5b6000806040838503121561264e57600080fd5b823561265981612626565b946020939093013593505050565b8035801515811461267757600080fd5b919050565b60006020828403121561268e57600080fd5b610f0c82612667565b6000602082840312156126a957600080fd5b5035919050565b600080604083850312156126c357600080fd5b82356126ce81612626565b91506126dc60208401612667565b90509250929050565b6000806000606084860312156126fa57600080fd5b833561270581612626565b9250602084013561271581612626565b929592945050506040919091013590565b60006020828403121561273857600080fd5b8135610f0c81612626565b6000806040838503121561275657600080fd5b823561276181612626565b9150602083013561277181612626565b809150509250929050565b600181811c9082168061279057607f821691505b6020821081036127b057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561282b5761282b6127fb565b500290565b60008261284d57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561286457600080fd5b8151610f0c81612626565b80820180821115610d3157610d316127fb565b81810381811115610d3157610d316127fb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156128e45781516001600160a01b0316875295820195908201906001016128bf565b509495945050505050565b85815284602082015260a06040820152600061290e60a08301866128ab565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061294460408301846128ab565b949350505050565b60008060006060848603121561296157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220293ef0ebca20d6aec8339e9348e1c7cba6919714381fd8d4c5316a17036199b164736f6c63430008100033

Deployed Bytecode Sourcemap

14888:15743:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18718:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21287:340;;;;;;;;;;-1:-1:-1;21287:340:0;;;;;:::i;:::-;;:::i;:::-;;20012:161;;;;;;;;;;-1:-1:-1;20012:161:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;20012:161:0;1344:187:1;22027:171:0;;;;;;;;;;-1:-1:-1;22027:171:0;;;;;:::i;:::-;;:::i;15267:94::-;;;;;;;;;;-1:-1:-1;15267:94:0;;;;-1:-1:-1;;;;;15267:94:0;;;;;;-1:-1:-1;;;;;2066:32:1;;;2048:51;;2036:2;2021:18;15267:94:0;1886:219:1;16586:41:0;;;;;;;;;;-1:-1:-1;16586:41:0;;;;-1:-1:-1;;;;;16586:41:0;;;18995:100;;;;;;;;;;-1:-1:-1;19075:12:0;;18995:100;;;2491:25:1;;;2479:2;2464:18;18995:100:0;2345:177:1;20947:332:0;;;;;;;;;;-1:-1:-1;20947:332:0;;;;;:::i;:::-;;:::i;23827:220::-;;;;;;;;;;-1:-1:-1;23827:220:0;;;;;:::i;:::-;;:::i;22450:136::-;;;;;;;;;;-1:-1:-1;22450:136:0;;;;;:::i;:::-;;:::i;25143:313::-;;;;;;;;;;-1:-1:-1;25143:313:0;;;;;:::i;:::-;;:::i;22328:114::-;;;;;;;;;;-1:-1:-1;22328:114:0;;;;;:::i;:::-;;:::i;15387:81::-;;;;;;;;;;;;;;;23557:128;;;;;;;;;;;;;:::i;23105:::-;;;;;;;;;;-1:-1:-1;23105:128:0;;;;;:::i;:::-;;:::i;6436:103::-;;;;;;;;;;-1:-1:-1;6436:103:0;;;;;:::i;:::-;6491:4;6526:5;-1:-1:-1;;;;;6515:16:0;;;6526:5;;6515:16;;6436:103;18904:83;;;;;;;;;;-1:-1:-1;18970:9:0;;18904:83;;18970:9;;;;4095:36:1;;4083:2;4068:18;18904:83:0;3953:184:1;19381:218:0;;;;;;;;;;-1:-1:-1;19381:218:0;;;;;:::i;:::-;;:::i;22705:123::-;;;;;;;;;;-1:-1:-1;22705:123:0;;;;;:::i;:::-;;:::i;15779:45::-;;;;;;;;;;-1:-1:-1;15779:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16701:40;;;;;;;;;;-1:-1:-1;16701:40:0;;;;-1:-1:-1;;;16701:40:0;;;;;;22836:138;;;;;;;;;;-1:-1:-1;22836:138:0;;;;;:::i;:::-;;:::i;15608:50::-;;;;;;;;;;-1:-1:-1;15608:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16080:34;;;;;;;;;;;;;;;;24059:807;;;;;;;;;;-1:-1:-1;24059:807:0;;;;;:::i;:::-;;:::i;16121:34::-;;;;;;;;;;;;;;;;22982:115;;;;;;;;;;-1:-1:-1;22982:115:0;;;;;:::i;:::-;;:::i;16880:46::-;;;;;;;;;;-1:-1:-1;16880:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19103:119;;;;;;;;;;-1:-1:-1;19103:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;19196:18:0;19169:7;19196:18;;;:9;:18;;;;;;;19103:119;16394:47;;;;;;;;;;;;;;;;16469:45;;;;;;;;;;;;;;;;16243:37;;;;;;;;;;;;;;;;20526:129;;;;;;;;;;-1:-1:-1;20526:129:0;;;;;:::i;:::-;;:::i;15954:36::-;;;;;;;;;;;;;;;;15724:48;;;;;;;;;;-1:-1:-1;15724:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18809:87;;;;;;;;;;;;;:::i;19884:120::-;;;;;;;;;;-1:-1:-1;19973:23:0;;19884:120;;16287:43;;;;;;;;;;;;;;;;19607:269;;;;;;;;;;-1:-1:-1;19607:269:0;;;;;:::i;:::-;;:::i;23420:125::-;;;;;;;;;;-1:-1:-1;23420:125:0;;;;;:::i;:::-;;:::i;16162:29::-;;;;;;;;;;;;;;;;24968:167;;;;;;;;;;-1:-1:-1;24968:167:0;;;;;:::i;:::-;;:::i;6115:88::-;;;;;;;;;;-1:-1:-1;6115:88:0;;;;;:::i;:::-;;:::i;16935:29::-;;;;;;;;;;;;;;;;21639:357;;;;;;;;;;-1:-1:-1;21639:357:0;;;;;:::i;:::-;;:::i;15917:30::-;;;;;;;;;;;;;;;;23241:171;;;;;;;;;;-1:-1:-1;23241:171:0;;;;;:::i;:::-;;:::i;15875:35::-;;;;;;;;;;;;;;;;16634:26;;;;;;;;;;-1:-1:-1;16634:26:0;;;;-1:-1:-1;;;;;16634:26:0;;;15997:36;;;;;;;;;;;;;;;;15665:52;;;;;;;;;;-1:-1:-1;15665:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16040:31;;;;;;;;;;;;;;;;15140:99;;;;;;;;;;-1:-1:-1;15140:99:0;;;;;;;-1:-1:-1;;;;;15140:99:0;;;16748:45;;;;;;;;;;-1:-1:-1;16748:45:0;;;;-1:-1:-1;;;16748:45:0;;;;;;15833:35;;;;;;;;;;;;;;;;19230:143;;;;;;;;;;-1:-1:-1;19230:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19338:18:0;;;19311:7;19338:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19230:143;22210:110;;;;;;;;;;-1:-1:-1;22210:110:0;;;;;:::i;:::-;;:::i;20803:136::-;;;;;;;;;;-1:-1:-1;20803:136:0;;;;;:::i;:::-;;:::i;6285:91::-;;;;;;;;;;-1:-1:-1;6285:91:0;;;;;:::i;:::-;;:::i;16200:36::-;;;;;;;;;;;;;;;;22594:103;;;;;;;;;;-1:-1:-1;22594:103:0;;;;;:::i;:::-;;:::i;6832:167::-;;;;;;;;;;-1:-1:-1;6832:167:0;;;;;:::i;:::-;;:::i;20663:128::-;;;;;;;;;;-1:-1:-1;20663:128:0;;;;;:::i;:::-;;:::i;16800:35::-;;;;;;;;;;-1:-1:-1;16800:35:0;;;;-1:-1:-1;;;16800:35:0;;;;;;16842:31;;;;;;;;;;-1:-1:-1;16842:31:0;;;;-1:-1:-1;;;16842:31:0;;;;;;18718:83;18755:13;18788:5;18781:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18718:83;:::o;21287:340::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;;;;;;;;;21410:17:::1;:35:::0;;;21456:17:::1;:35:::0;;;21502:12:::1;:25:::0;;;21561:58:::1;21517:10:::0;21561:40:::1;21430:15:::0;21476;21561:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:::-;21540:18;:79:::0;-1:-1:-1;;;21287:340:0:o;20012:161::-;20087:4;20104:39;198:10;20127:7;20136:6;20104:8;:39::i;:::-;-1:-1:-1;20161:4:0;20012:161;;;;;:::o;22027:171::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;22092:11:::1;:21:::0;;-1:-1:-1;;;;22092:21:0::1;-1:-1:-1::0;;;22092:21:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;22127:11:::0;::::1;;22124:67;;;22167:12;22154:10;:25:::0;22124:67:::1;22027:171:::0;:::o;20947:332::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;21069:16:::1;:34:::0;;;21114:16:::1;:34:::0;;;21159:11:::1;:24:::0;;;21216:55:::1;21173:10:::0;21216:38:::1;21088:15:::0;21133;21216:20:::1;:38::i;:55::-;21196:17;:75:::0;-1:-1:-1;;;20947:332:0:o;23827:220::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;23971:22:::1;::::0;23931:21:::1;::::0;23971:22:::1;::::0;::::1;-1:-1:-1::0;;;;;23971:22:0::1;23963:76;24035:3;24004:28;24016:16:::0;23931:21;24004:28:::1;:::i;:::-;:34;;;;:::i;:::-;23963:76;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23900:147;23827:220:::0;:::o;22450:136::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22542:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;22542:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22450:136::o;25143:313::-;25241:4;25258:36;25268:6;25276:9;25287:6;25258:9;:36::i;:::-;-1:-1:-1;25305:121:0;25314:6;198:10;25336:89;25374:6;25336:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25336:19:0;;;;;;:11;:19;;;;;;;;198:10;25336:33;;;;;;;;;;:37;:89::i;:::-;25305:8;:121::i;:::-;-1:-1:-1;25444:4:0;25143:313;;;;;;:::o;22328:114::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;22407:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;22407:27:0::1;-1:-1:-1::0;;;;22407:27:0;;::::1;::::0;;;::::1;::::0;;22328:114::o;23557:128::-;23664:11;-1:-1:-1;;;;;19196:18:0;23610:7;19196:18;;;:9;:18;;;;;;23637:12;;:40;;:16;:40::i;:::-;23630:47;;23557:128;:::o;23105:::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;23186:17:::1;:39:::0;;-1:-1:-1;;;;;;23186:39:0::1;-1:-1:-1::0;;;;;23186:39:0;;;::::1;::::0;;;::::1;::::0;;23105:128::o;19381:218::-;198:10;19469:4;19518:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19518:34:0;;;;;;;;;;19469:4;;19486:83;;19509:7;;19518:50;;19557:10;19518:38;:50::i;22705:123::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;22786:23:::1;:34:::0;22705:123::o;22836:138::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;22922:22:::1;:44:::0;;-1:-1:-1;;;;;22922:44:0;;::::1;;;-1:-1:-1::0;;;;;;22922:44:0;;::::1;::::0;;;::::1;::::0;;22836:138::o;24059:807::-;24139:22;6526:5;;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;24176:35:::1;24233:16;24176:74;;24299:16;-1:-1:-1::0;;;;;24299:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24281:53:0::1;;24343:4;24350:16;-1:-1:-1::0;;;;;24350:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24281:93;::::0;-1:-1:-1;;;;;;24281:93:0::1;::::0;;;;;;-1:-1:-1;;;;;6867:15:1;;;24281:93:0::1;::::0;::::1;6849:34:1::0;6919:15;;6899:18;;;6892:43;6784:18;;24281:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24264:110:::0;-1:-1:-1;;;;;;24390:28:0;::::1;24387:225;;24504:16;-1:-1:-1::0;;;;;24504:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24486:74:0::1;;24569:4;24576:16;-1:-1:-1::0;;;;;24576:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24486:114;::::0;-1:-1:-1;;;;;;24486:114:0::1;::::0;;;;;;-1:-1:-1;;;;;6867:15:1;;;24486:114:0::1;::::0;::::1;6849:34:1::0;6919:15;;6899:18;;;6892:43;6784:18;;24486:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24469:131;;24387:225;24624:11;:28:::0;;-1:-1:-1;;;;;;24624:28:0;;::::1;-1:-1:-1::0;;;;;24624:28:0;;::::1;::::0;;::::1;::::0;;24686:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;24758:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;24758:48:0;;::::1;-1:-1:-1::0;24758:48:0;;::::1;::::0;;;24838:11;;;;::::1;24817:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;24624:28;24638:14;-1:-1:-1;24059:807:0:o;22982:115::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23061:20:0;;;::::1;;::::0;;;:14:::1;:20;::::0;;;;:28;;-1:-1:-1;;23061:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22982:115::o;20526:129::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20615:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;20615:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20526:129::o;18809:87::-;18848:13;18881:7;18874:14;;;;;:::i;19607:269::-;19700:4;19717:129;198:10;19740:7;19749:96;19788:15;19749:96;;;;;;;;;;;;;;;;;198:10;19749:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19749:34:0;;;;;;;;;;;;:38;:96::i;23420:125::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;23501:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;23501:36:0::1;-1:-1:-1::0;;;;23501:36:0;;::::1;::::0;;;::::1;::::0;;23420:125::o;24968:167::-;25046:4;25063:42;198:10;25087:9;25098:6;25063:9;:42::i;6115:88::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6175:13:0::1;;::::0;;;6191:4:::1;6175:13;::::0;;;;;;;:20;;-1:-1:-1;;6175:20:0::1;::::0;;::::1;::::0;;6115:88::o;21639:357::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;21779:15:::1;:35:::0;;;21825:15:::1;:35:::0;;;21871:10:::1;:25:::0;;;21936:52:::1;21884:12:::0;21936:36:::1;21797:17:::0;21843;21936:19:::1;:36::i;:52::-;21909:24;:79:::0;-1:-1:-1;;;21639:357:0:o;23241:171::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;23318:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23318:32:0::1;-1:-1:-1::0;;;;23318:32:0;;::::1;;::::0;;23366:38:::1;::::0;::::1;::::0;::::1;::::0;23342:8;1509:14:1;1502:22;1484:41;;1472:2;1457:18;;1344:187;23366:38:0::1;;;;;;;;23241:171:::0;:::o;22210:110::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;22286:12:::1;:26:::0;22210:110::o;20803:136::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20894:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;20894:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20803:136::o;6285:91::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6347:13:0::1;6363:5;6347:13:::0;;;:8:::1;:13;::::0;;;;:21;;-1:-1:-1;;6347:21:0::1;::::0;;6285:91::o;22594:103::-;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;22667:10:::1;:22:::0;22594:103::o;6832:167::-;6491:4;6526:5;-1:-1:-1;;;;;6526:5:0;5839:10;6515:16;5823:38;;;;-1:-1:-1;;;5823:38:0;;;;;;;:::i;:::-;6908:5:::1;:11:::0;;-1:-1:-1;;;;;;6908:11:0::1;-1:-1:-1::0;;;;;6908:11:0;::::1;::::0;;::::1;::::0;;6930:13;;;-1:-1:-1;6930:13:0::1;::::0;;;;;;;;:20;;-1:-1:-1;;6930:20:0::1;::::0;;::::1;::::0;;;6966:25;;2048:51:1;;;6966:25:0::1;::::0;2021:18:1;6966:25:0::1;1886:219:1::0;20663:128:0;6000:24;6013:10;6000:12;:24::i;:::-;5992:48;;;;-1:-1:-1;;;5992:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20751:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;20751:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20663:128::o;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;7494:2:1;1276:46:0;;;7476:21:1;7533:2;7513:18;;;7506:30;7572:29;7552:18;;;7545:57;7619:18;;1276:46:0;7292:351:1;6610:103:0;-1:-1:-1;;;;;6692:13:0;6668:4;6692:13;;;:8;:13;;;;;;;;;6610:103::o;20181:337::-;-1:-1:-1;;;;;20274:19:0;;20266:68;;;;-1:-1:-1;;;20266:68:0;;7850:2:1;20266:68:0;;;7832:21:1;7889:2;7869:18;;;7862:30;7928:34;7908:18;;;7901:62;-1:-1:-1;;;7979:18:1;;;7972:34;8023:19;;20266:68:0;7648:400:1;20266:68:0;-1:-1:-1;;;;;20353:21:0;;20345:68;;;;-1:-1:-1;;;20345:68:0;;8255:2:1;20345:68:0;;;8237:21:1;8294:2;8274:18;;;8267:30;8333:34;8313:18;;;8306:62;-1:-1:-1;;;8384:18:1;;;8377:32;8426:19;;20345:68:0;8053:398:1;20345:68:0;-1:-1:-1;;;;;20426:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20478:32;;2491:25:1;;;20478:32:0;;2464:18:1;20478:32:0;;;;;;;20181:337;;;:::o;25464:1932::-;25551:4;-1:-1:-1;;;;;25578:20:0;;25570:70;;;;-1:-1:-1;;;25570:70:0;;8658:2:1;25570:70:0;;;8640:21:1;8697:2;8677:18;;;8670:30;8736:34;8716:18;;;8709:62;-1:-1:-1;;;8787:18:1;;;8780:35;8832:19;;25570:70:0;8456:401:1;25570:70:0;-1:-1:-1;;;;;25659:23:0;;25651:71;;;;-1:-1:-1;;;25651:71:0;;9064:2:1;25651:71:0;;;9046:21:1;9103:2;9083:18;;;9076:30;9142:34;9122:18;;;9115:62;-1:-1:-1;;;9193:18:1;;;9186:33;9236:19;;25651:71:0;8862:399:1;25651:71:0;-1:-1:-1;;;;;25742:22:0;;;;;;:14;:22;;;;;;;;25741:23;:53;;;;-1:-1:-1;;;;;;25769:25:0;;;;;;:14;:25;;;;;;;;25768:26;25741:53;25733:87;;;;-1:-1:-1;;;25733:87:0;;9468:2:1;25733:87:0;;;9450:21:1;9507:2;9487:18;;;9480:30;-1:-1:-1;;;9526:18:1;;;9519:52;9588:18;;25733:87:0;9266:346:1;25733:87:0;-1:-1:-1;;;;;25837:16:0;;;;;;:8;:16;;;;;;;;25836:17;:41;;;;-1:-1:-1;;;;;;25858:19:0;;;;;;:8;:19;;;;;;;;25857:20;25836:41;25833:115;;;25901:11;;-1:-1:-1;;;25901:11:0;;;;25893:43;;;;-1:-1:-1;;;25893:43:0;;9819:2:1;25893:43:0;;;9801:21:1;9858:2;9838:18;;;9831:30;-1:-1:-1;;;9877:18:1;;;9870:50;9937:18;;25893:43:0;9617:344:1;25893:43:0;25963:16;;-1:-1:-1;;;25963:16:0;;;;25960:1429;;;26013:41;26028:6;26036:9;26047:6;26013:14;:41::i;:::-;26006:48;;;;25960:1429;-1:-1:-1;;;;;26110:23:0;;;;;;:15;:23;;;;;;;;26109:24;:55;;;;-1:-1:-1;;;;;;26138:26:0;;;;;;:15;:26;;;;;;;;26137:27;26109:55;26106:170;;;26203:12;;26193:6;:22;;26185:75;;;;-1:-1:-1;;;26185:75:0;;10168:2:1;26185:75:0;;;10150:21:1;10207:2;10187:18;;;10180:30;10246:34;10226:18;;;10219:62;-1:-1:-1;;;10297:18:1;;;10290:38;10345:19;;26185:75:0;9966:404:1;26185:75:0;26353:4;26304:28;19196:18;;;:9;:18;;;;;;26429:23;;26405:47;;;;;;;26485:44;;-1:-1:-1;26513:16:0;;-1:-1:-1;;;26513:16:0;;;;26512:17;26485:44;:69;;;;-1:-1:-1;;;;;;26534:20:0;;;;;;:12;:20;;;;;;;;26533:21;26485:69;:94;;;;-1:-1:-1;26558:21:0;;-1:-1:-1;;;26558:21:0;;;;26485:94;26481:305;;;26617:25;;-1:-1:-1;;;26617:25:0;;;;26614:97;;;26688:23;;26665:46;;26614:97;26730:36;26745:20;26730:14;:36::i;:::-;26822:53;;;;;;;;;;;-1:-1:-1;;;26822:53:0;;;;;;;;-1:-1:-1;;;;;26822:17:0;;-1:-1:-1;26822:17:0;;;:9;:17;;;;;;;;:53;;26844:6;;26822:21;:53::i;:::-;-1:-1:-1;;;;;26802:17:0;;;;;;:9;:17;;;;;;;;:73;;;;26915:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;26944:28:0;;;;;;:17;:28;;;;;;;;26915:57;26914:148;;27028:34;27036:6;27044:9;27055:6;27028:7;:34::i;:::-;26914:148;;;27019:6;26914:148;27082:16;;26892:170;;-1:-1:-1;;;;27082:16:0;;;;:51;;;;-1:-1:-1;;;;;;27103:30:0;;;;;;:19;:30;;;;;;;;27102:31;27082:51;27079:133;;;27201:10;;27160:37;27185:11;27160:20;27170:9;-1:-1:-1;;;;;19196:18:0;19169:7;19196:18;;;:9;:18;;;;;;;19103:119;27160:37;:51;;27152:60;;;;;;-1:-1:-1;;;;;27252:20:0;;;;;;:9;:20;;;;;;:37;;27277:11;27252:24;:37::i;:::-;-1:-1:-1;;;;;27229:20:0;;;;;;;:9;:20;;;;;;;:60;;;;27311:40;;;;;;;;;;27339:11;2491:25:1;;2479:2;2464:18;;2345:177;27311:40:0;;;;;;;;27373:4;27366:11;;;;;;;1503:192;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;27404:330::-;27534:53;;;;;;;;;;;-1:-1:-1;;;27534:53:0;;;;;;;;-1:-1:-1;;;;;27534:17:0;;27497:4;27534:17;;;:9;:17;;;;;;;:53;;27556:6;;27534:21;:53::i;:::-;-1:-1:-1;;;;;27514:17:0;;;;;;;:9;:17;;;;;;:73;;;;27621:20;;;;;;;:32;;27646:6;27621:24;:32::i;:::-;-1:-1:-1;;;;;27598:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27669:35;;;;;;;;;;27697:6;2491:25:1;;2479:2;2464:18;;2345:177;27669:35:0;;;;;;;;-1:-1:-1;27722:4:0;27404:330;;;;;:::o;27742:1048::-;17387:16;:23;;-1:-1:-1;;;;17387:23:0;-1:-1:-1;;;17387:23:0;;;27879:24:::1;::::0;27858:15:::1;::::0;17387:23;;27846:65:::1;::::0;27909:1:::1;::::0;27846:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;27824:87:::0;-1:-1:-1;27922:21:0::1;27946:24;:7:::0;27824:87;27946:11:::1;:24::i;:::-;27922:48;;27983:31;28000:13;27983:16;:31::i;:::-;28135:15;::::0;28050:21:::1;::::0;28025:22:::1;::::0;28106:52:::1;::::0;28135:22:::1;::::0;28155:1:::1;28135:19;:22::i;:::-;28106:24;::::0;;:28:::1;:52::i;:::-;28084:74;;28179:26;28208:59;28265:1;28208:52;28248:11;28208:35;28227:15;;28208:14;:18;;:35;;;;:::i;:59::-;28179:88;;28278:21;28302:47;28337:11;28302:30;28321:10;;28302:14;:18;;:30;;;;:::i;:47::-;28278:71:::0;-1:-1:-1;28360:26:0::1;28389:57;28278:71:::0;28389:38:::1;:14:::0;28408:18;28389::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;28360:86:::0;-1:-1:-1;28462:22:0;;28459:104:::1;;28520:22;::::0;28499:64:::1;::::0;28520:22:::1;::::0;::::1;-1:-1:-1::0;;;;;28520:22:0::1;28544:18:::0;28499:20:::1;:64::i;:::-;28579:17:::0;;28576:89:::1;;28632:17;::::0;28611:54:::1;::::0;-1:-1:-1;;;;;28632:17:0::1;28651:13:::0;28611:20:::1;:54::i;:::-;28702:1;28681:18;:22;:41;;;;;28721:1;28707:11;:15;28681:41;28678:104;;;28737:45;28750:11;28763:18;28737:12;:45::i;:::-;-1:-1:-1::0;;17433:16:0;:24;;-1:-1:-1;;;;17433:24:0;;;-1:-1:-1;;;;;;27742:1048:0:o;30000:622::-;-1:-1:-1;;;;;30161:20:0;;30086:7;30161:20;;;:12;:20;;;;;;30086:7;;30161:20;;30158:223;;;30210:38;30244:3;30210:29;30221:17;;30210:6;:10;;:29;;;;:::i;:38::-;30198:50;;30158:223;;;-1:-1:-1;;;;;30278:23:0;;;;;;:12;:23;;;;;;;;30275:106;;;30330:39;30365:3;30330:30;30341:18;;30330:6;:10;;:30;;;;:::i;:39::-;30318:51;;30275:106;30404:13;;30401:173;;30479:4;30461:24;;;;:9;:24;;;;;;:39;;30490:9;30461:28;:39::i;:::-;30452:4;30434:24;;;;:9;:24;;;;;;;:66;;;;30520:42;;-1:-1:-1;;;;;30520:42:0;;;;;;;30552:9;2491:25:1;;2479:2;2464:18;;2345:177;30520:42:0;;;;;;;;30401:173;30593:21;:6;30604:9;30593:10;:21::i;1703:250::-;1761:7;1785:1;1790;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;10710:2:1;1868:56:0;;;10692:21:1;10749:2;10729:18;;;10722:30;10788:34;10768:18;;;10761:62;-1:-1:-1;;;10839:18:1;;;10832:31;10880:19;;1868:56:0;10508:397:1;1961:132:0;2019:7;2046:39;2050:1;2053;2046:39;;;;;;;;;;;;;;;;;:3;:39::i;28802:666::-;28952:16;;;28966:1;28952:16;;;;;;;;28928:21;;28952:16;;;;;;;;;;-1:-1:-1;28952:16:0;28928:40;;28997:4;28979;28984:1;28979:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28979:23:0;;;:7;;;;;;;;;;:23;;;;29023:15;;:22;;;-1:-1:-1;;;29023:22:0;;;;:15;;;;;:20;;:22;;;;;28979:7;;29023:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29013:4;29018:1;29013:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29013:32:0;;;:7;;;;;;;;;:32;29090:15;;29058:62;;29075:4;;29090:15;29108:11;29058:8;:62::i;:::-;29159:15;;:240;;-1:-1:-1;;;29159:240:0;;-1:-1:-1;;;;;29159:15:0;;;;:66;;:240;;29240:11;;29159:15;;29310:4;;29337;;29373:15;;29159:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29425:35;29442:11;29455:4;29425:35;;;;;;;:::i;:::-;;;;;;;;28857:611;28802:666;:::o;23693:126::-;23785:26;;-1:-1:-1;;;;;23785:18:0;;;:26;;;;;23804:6;;23785:26;;;;23804:6;23785:18;:26;;;;;;;;;;;;;;;;;;;29476:516;29656:15;;29624:62;;29641:4;;-1:-1:-1;;;;;29656:15:0;29674:11;29624:8;:62::i;:::-;29729:15;;:255;;-1:-1:-1;;;29729:255:0;;29801:4;29729:255;;;12905:34:1;12955:18;;;12948:34;;;29729:15:0;12998:18:1;;;12991:34;;;13041:18;;;13034:34;29933:10:0;13084:19:1;;;13077:44;29958:15:0;13137:19:1;;;13130:35;-1:-1:-1;;;;;29729:15:0;;;;:31;;29768:9;;12839:19:1;;29729:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29476:516;;:::o;2101:278::-;2187:7;2222:12;2215:5;2207:28;;;;-1:-1:-1;;;2207:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2246:9:0;2258:5;2262:1;2258;:5;:::i;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:316::-;644:6;652;660;713:2;701:9;692:7;688:23;684:32;681:52;;;729:1;726;719:12;681:52;-1:-1:-1;;752:23:1;;;822:2;807:18;;794:32;;-1:-1:-1;873:2:1;858:18;;;845:32;;567:316;-1:-1:-1;567:316:1:o;888:131::-;-1:-1:-1;;;;;963:31:1;;953:42;;943:70;;1009:1;1006;999:12;1024:315;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:160::-;1601:20;;1657:13;;1650:21;1640:32;;1630:60;;1686:1;1683;1676:12;1630:60;1536:160;;;:::o;1701:180::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:26;1865:9;1849:26;:::i;2527:180::-;2586:6;2639:2;2627:9;2618:7;2614:23;2610:32;2607:52;;;2655:1;2652;2645:12;2607:52;-1:-1:-1;2678:23:1;;2527:180;-1:-1:-1;2527:180:1:o;2712:315::-;2777:6;2785;2838:2;2826:9;2817:7;2813:23;2809:32;2806:52;;;2854:1;2851;2844:12;2806:52;2893:9;2880:23;2912:31;2937:5;2912:31;:::i;:::-;2962:5;-1:-1:-1;2986:35:1;3017:2;3002:18;;2986:35;:::i;:::-;2976:45;;2712:315;;;;;:::o;3032:456::-;3109:6;3117;3125;3178:2;3166:9;3157:7;3153:23;3149:32;3146:52;;;3194:1;3191;3184:12;3146:52;3233:9;3220:23;3252:31;3277:5;3252:31;:::i;:::-;3302:5;-1:-1:-1;3359:2:1;3344:18;;3331:32;3372:33;3331:32;3372:33;:::i;:::-;3032:456;;3424:7;;-1:-1:-1;;;3478:2:1;3463:18;;;;3450:32;;3032:456::o;3701:247::-;3760:6;3813:2;3801:9;3792:7;3788:23;3784:32;3781:52;;;3829:1;3826;3819:12;3781:52;3868:9;3855:23;3887:31;3912:5;3887:31;:::i;4142:388::-;4210:6;4218;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4326:9;4313:23;4345:31;4370:5;4345:31;:::i;:::-;4395:5;-1:-1:-1;4452:2:1;4437:18;;4424:32;4465:33;4424:32;4465:33;:::i;:::-;4517:7;4507:17;;;4142:388;;;;;:::o;4795:380::-;4874:1;4870:12;;;;4917;;;4938:61;;4992:4;4984:6;4980:17;4970:27;;4938:61;5045:2;5037:6;5034:14;5014:18;5011:38;5008:161;;5091:10;5086:3;5082:20;5079:1;5072:31;5126:4;5123:1;5116:15;5154:4;5151:1;5144:15;5008:161;;4795:380;;;:::o;5180:335::-;5382:2;5364:21;;;5421:2;5401:18;;;5394:30;-1:-1:-1;;;5455:2:1;5440:18;;5433:41;5506:2;5491:18;;5180:335::o;5520:329::-;5722:2;5704:21;;;5761:1;5741:18;;;5734:29;-1:-1:-1;;;5794:2:1;5779:18;;5772:36;5840:2;5825:18;;5520:329::o;5854:127::-;5915:10;5910:3;5906:20;5903:1;5896:31;5946:4;5943:1;5936:15;5970:4;5967:1;5960:15;5986:168;6026:7;6092:1;6088;6084:6;6080:14;6077:1;6074:21;6069:1;6062:9;6055:17;6051:45;6048:71;;;6099:18;;:::i;:::-;-1:-1:-1;6139:9:1;;5986:168::o;6159:217::-;6199:1;6225;6215:132;;6269:10;6264:3;6260:20;6257:1;6250:31;6304:4;6301:1;6294:15;6332:4;6329:1;6322:15;6215:132;-1:-1:-1;6361:9:1;;6159:217::o;6381:251::-;6451:6;6504:2;6492:9;6483:7;6479:23;6475:32;6472:52;;;6520:1;6517;6510:12;6472:52;6552:9;6546:16;6571:31;6596:5;6571:31;:::i;7162:125::-;7227:9;;;7248:10;;;7245:36;;;7261:18;;:::i;10375:128::-;10442:9;;;10463:11;;;10460:37;;;10477:18;;:::i;11042:127::-;11103:10;11098:3;11094:20;11091:1;11084:31;11134:4;11131:1;11124:15;11158:4;11155:1;11148:15;11174:461;11227:3;11265:5;11259:12;11292:6;11287:3;11280:19;11318:4;11347:2;11342:3;11338:12;11331:19;;11384:2;11377:5;11373:14;11405:1;11415:195;11429:6;11426:1;11423:13;11415:195;;;11494:13;;-1:-1:-1;;;;;11490:39:1;11478:52;;11550:12;;;;11585:15;;;;11526:1;11444:9;11415:195;;;-1:-1:-1;11626:3:1;;11174:461;-1:-1:-1;;;;;11174:461:1:o;11640:582::-;11939:6;11928:9;11921:25;11982:6;11977:2;11966:9;11962:18;11955:34;12025:3;12020:2;12009:9;12005:18;11998:31;11902:4;12046:57;12098:3;12087:9;12083:19;12075:6;12046:57;:::i;:::-;-1:-1:-1;;;;;12139:32:1;;;;12134:2;12119:18;;12112:60;-1:-1:-1;12203:3:1;12188:19;12181:35;12038:65;11640:582;-1:-1:-1;;;11640:582:1:o;12227:332::-;12434:6;12423:9;12416:25;12477:2;12472;12461:9;12457:18;12450:30;12397:4;12497:56;12549:2;12538:9;12534:18;12526:6;12497:56;:::i;:::-;12489:64;12227:332;-1:-1:-1;;;;12227:332:1:o;13176:306::-;13264:6;13272;13280;13333:2;13321:9;13312:7;13308:23;13304:32;13301:52;;;13349:1;13346;13339:12;13301:52;13378:9;13372:16;13362:26;;13428:2;13417:9;13413:18;13407:25;13397:35;;13472:2;13461:9;13457:18;13451:25;13441:35;;13176:306;;;;;:::o

Swarm Source

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