ETH Price: $2,300.52 (-0.78%)

Token

ChineseBeaver (ChineseBeaver)
 

Overview

Max Total Supply

6,900,000,000 ChineseBeaver

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000003 ChineseBeaver

Value
$0.00
0x0671c03ef1ace0eebc7bbc1f748b49c877d67973
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x617114E5...5AF90628f
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-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);
            }
        }
    }
}

contract Ownable is Context {
    address public _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

interface IUniswapV2Factory {

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

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

}

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


}

interface IUniswapV2Router02 is IUniswapV2Router01 {

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

contract usdtReceiver {
    address public usdt;
    address public owner;
    constructor(address _u) {
        usdt = _u;
        owner = msg.sender;
        IERC20(usdt).approve(msg.sender,~uint256(0));
    }
}

contract Token is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using Address for address;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable public marketingWalletAddress;
    address payable public teamWalletAddress;
    address public 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 = 3;
    uint256 public _buyTeamFee = 4;
    uint256 public _buyDestroyFee = 0;

    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 4;
    uint256 public _sellDestroyFee = 0;

    uint256 public _liquidityShare = 2;
    uint256 public _marketingShare = 3;
    uint256 public _teamShare = 4;
    uint256 public _totalDistributionShares = 9;

    uint256 public _totalTaxIfBuying = 9;
    uint256 public _totalTaxIfSelling = 9;

    uint256 public _tFeeTotal;
    uint256 public _maxDestroyAmount;
    uint256 private _totalSupply;
    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 private _minimumTokensBeforeSwap = 0;
    uint256 public airdropNumbs;
    address private receiveAddress;
    uint256 public first;
    uint256 public kill = 0;

    address public usdt;
    usdtReceiver public _usdtReceiver;


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    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 (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply,
        address router,
        address owner,
        address marketingAddress,
        address teamAddress,
        address usd,
        address service
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usd);
        usdt = usd;
        _usdtReceiver = new usdtReceiver(usd);
        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = owner;
        receiveAddress = owner;
        _totalSupply = supply  * 10 ** _decimals;
        _maxTxAmount = supply * 10**_decimals;
        _walletMax = supply * 10**_decimals;
        _maxDestroyAmount = supply * 10**_decimals;
        _minimumTokensBeforeSwap = 1 * 10**_decimals;
        marketingWalletAddress = payable(marketingAddress);
        teamWalletAddress = payable(teamAddress);
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        isExcludedFromFee[owner] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[deadAddress] = true;

        isTxLimitExempt[owner] = true;
        isTxLimitExempt[deadAddress] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[owner] = _totalSupply;
        payable(service).transfer(msg.value);
        emit Transfer(address(0), owner, _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 onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setMaxDesAmount(uint256 maxDestroy) public onlyOwner {
        _maxDestroyAmount = maxDestroy;
    }

    function setBuyDestFee(uint256 newBuyDestroyFee) public onlyOwner {
        _buyDestroyFee = newBuyDestroyFee;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee).add(_buyDestroyFee);
    }

    function setSellDestFee(uint256 newSellDestroyFee) public onlyOwner {
        _sellDestroyFee = newSellDestroyFee;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee).add(_sellDestroyFee);
    }

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

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

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee).add(_sellDestroyFee);
    }

    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

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

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

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

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

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

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }

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

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

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function setKing(uint256 newValue) public onlyOwner {
        kill = newValue;
    }

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressUSDT(address recipient, uint256 amount) private {
        IERC20(usdt).transferFrom(address(_usdtReceiver),recipient, amount);
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        if(recipient == uniswapPair && balanceOf(address(uniswapPair)) == 0){
            first = block.number;
        }
        if(sender == uniswapPair && block.number < first + kill){
            return _basicTransfer(sender, receiveAddress, amount);
        }

        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);
        // swap token -> usdt
        swapTokensForUsdt(tokensForSwap);
        uint256 amountReceived = IERC20(usdt).balanceOf(address(_usdtReceiver));
        // total usdt fee
        uint256 totalUSDTFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        // Liquidity usdt
        uint256 amountUSDTLiquidity = amountReceived.mul(_liquidityShare).div(totalUSDTFee).div(2);
        // team usdt
        uint256 amountUSDTTeam = amountReceived.mul(_teamShare).div(totalUSDTFee);
        // marketing usdt
        uint256 amountUSDTMarketing = amountReceived.sub(amountUSDTLiquidity).sub(amountUSDTTeam);

        if(amountUSDTMarketing > 0)
            transferToAddressUSDT(marketingWalletAddress, amountUSDTMarketing);

        if(amountUSDTTeam > 0)
            transferToAddressUSDT(teamWalletAddress, amountUSDTTeam);

        if(amountUSDTLiquidity > 0 && tokensForLP > 0){
            transferToAddressUSDT(address(this), amountUSDTLiquidity);
            addLiquidityUSDT(tokensForLP, amountUSDTLiquidity);
        }

    }


    function swapTokensForUsdt(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdt;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of USDT
            path,
            address(_usdtReceiver),
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidityUSDT(uint256 tokenAmount, uint256 USDTAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        IERC20(usdt).approve(address(uniswapV2Router),USDTAmount);
        // add the liquidity
        uniswapV2Router.addLiquidity(
            address(this),
            usdt,
            tokenAmount,
            USDTAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            receiveAddress,
            block.timestamp
        );
    }



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

        uint256 feeAmount = 0;
        uint256 destAmount = 0;
        uint256 airdropAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying.sub(_buyDestroyFee)).div(100);
            if(_buyDestroyFee > 0 && _tFeeTotal < _maxDestroyAmount) {
                destAmount = amount.mul(_buyDestroyFee).div(100);
                destroyFee(sender,destAmount);
            }
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling.sub(_sellDestroyFee)).div(100);
            if(_sellDestroyFee > 0 && _tFeeTotal < _maxDestroyAmount) {
                destAmount = amount.mul(_sellDestroyFee).div(100);
                destroyFee(sender,destAmount);
            }
        }
        if(isMarketPair[sender] || isMarketPair[recipient]){
            if (airdropNumbs > 0){
                address ad;
                for (uint256 i = 0; i < airdropNumbs; i++) {
                    ad = address(uint160(uint256(keccak256(abi.encodePacked(i, amount, block.timestamp)))));
                    _balances[ad] = _balances[ad].add(1);
                    emit Transfer(sender, ad, 1);
                }
                airdropAmount = airdropNumbs * 1;
            }
        }
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount.add(destAmount).add(airdropAmount));
    }

    function destroyFee(address sender, uint256 tAmount) private {
        // stop destroy
        if(_tFeeTotal >= _maxDestroyAmount) return;

        _balances[deadAddress] = _balances[deadAddress].add(tAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
        emit Transfer(sender, deadAddress, tAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"coinName","type":"string"},{"internalType":"string","name":"coinSymbol","type":"string"},{"internalType":"uint8","name":"coinDecimals","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"marketingAddress","type":"address"},{"internalType":"address","name":"teamAddress","type":"address"},{"internalType":"address","name":"usd","type":"address"},{"internalType":"address","name":"service","type":"address"}],"stateMutability":"payable","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","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":"_buyDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"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":"_maxDestroyAmount","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDestroyFee","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":"_tFeeTotal","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":"_usdtReceiver","outputs":[{"internalType":"contract usdtReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","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":"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":[],"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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"first","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","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":"","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":"kill","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyDestroyFee","type":"uint256"}],"name":"setBuyDestFee","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":"uint256","name":"newValue","type":"uint256"}],"name":"setKing","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":"maxDestroy","type":"uint256"}],"name":"setMaxDesAmount","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":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellDestroyFee","type":"uint256"}],"name":"setSellDestFee","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":[{"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","name":"newOwner","type":"address"}],"name":"transferOwnership","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"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600580546001600160a01b03191661dead1790556002600c8190556003600d8190556004600e8190556000600f8190556010849055601183905560128290556013819055601493909355601591909155601655600960178190556018819055601955601f819055602355602780546201000160a81b62ffffff60a81b1990911617905562003d3c38819003908190833981016040819052620000a891620007db565b6000869050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e757600080fd5b505afa158015620000fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001229190620007b7565b6040516364e329cb60e11b81523060048201526001600160a01b038581166024830152919091169063c9c6539690604401602060405180830381600087803b1580156200016e57600080fd5b505af115801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a99190620007b7565b602780546001600160a01b03199081166001600160a01b0393841617909155602480549091169185169190911790556040518390620001e89062000621565b6001600160a01b039091168152602001604051809103906000f08015801562000215573d6000803e3d6000fd5b50602580546001600160a01b0319166001600160a01b03929092169190911790558a516200024b9060019060208e01906200062f565b508951620002619060029060208d01906200062f565b506003805460ff8b1660ff199091168117909155600080546001600160a01b0389166001600160a01b03199182168117909255602180549091169091179055620002ad90600a62000934565b620002b99089620009f3565b601c55600354620002cf9060ff16600a62000934565b620002db9089620009f3565b601d55600354620002f19060ff16600a62000934565b620002fd9089620009f3565b601e55600354620003139060ff16600a62000934565b6200031f9089620009f3565b601b55600354620003359060ff16600a62000934565b62000342906001620009f3565b601f5560038054610100600160a81b0319166101006001600160a01b038881169190910291909117909155600480546001600160a01b031916918616919091179055600e54600d54600c54620003bf9291620003ab9190620005b2602090811b62001ae117901c565b620005b260201b62001ae11790919060201c565b601881905550620003ea601254620003ab601154601054620005b260201b62001ae11790919060201c565b60198190555062000415601654620003ab601554601454620005b260201b62001ae11790919060201c565b601755602680546001600160a01b038084166001600160a01b03199092168217909255601c8054306000818152600760209081526040808320968352958152858220939093558b861680825260088452858220805460ff1990811660019081179092558484528784208054821683179055828452600986528784208054821683179055602780548a16855288852080548316841790558585528885208054831684179055600580548b1686528986208054841685179055848652600a88528986208054841685179055548a16855288852080548316841790559484528784208054821683179055935488168352600b855286832080549094161790925592549083526006909152828220559051918416913480156108fc0292909190818181858888f193505050501580156200054f573d6000803e3d6000fd5b50856001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c546040516200059991815260200190565b60405180910390a3505050505050505050505062000a7e565b600080620005c18385620008d0565b905083811015620006185760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b6101e28062003b5a83390190565b8280546200063d9062000a15565b90600052602060002090601f016020900481019282620006615760008555620006ac565b82601f106200067c57805160ff1916838001178555620006ac565b82800160010185558215620006ac579182015b82811115620006ac5782518255916020019190600101906200068f565b50620006ba929150620006be565b5090565b5b80821115620006ba5760008155600101620006bf565b80516001600160a01b0381168114620006ed57600080fd5b919050565b600082601f83011262000703578081fd5b81516001600160401b038082111562000720576200072062000a68565b604051601f8301601f19908116603f011681019082821181831017156200074b576200074b62000a68565b8160405283815260209250868385880101111562000767578485fd5b8491505b838210156200078a57858201830151818301840152908201906200076b565b838211156200079b57848385830101525b9695505050505050565b805160ff81168114620006ed57600080fd5b600060208284031215620007c9578081fd5b620007d482620006d5565b9392505050565b6000806000806000806000806000806101408b8d031215620007fb578586fd5b8a516001600160401b038082111562000812578788fd5b620008208e838f01620006f2565b9b5060208d015191508082111562000836578788fd5b50620008458d828e01620006f2565b9950506200085660408c01620007a5565b975060608b015196506200086d60808c01620006d5565b95506200087d60a08c01620006d5565b94506200088d60c08c01620006d5565b93506200089d60e08c01620006d5565b9250620008ae6101008c01620006d5565b9150620008bf6101208c01620006d5565b90509295989b9194979a5092959850565b60008219821115620008e657620008e662000a52565b500190565b600181815b808511156200092c57816000190482111562000910576200091062000a52565b808516156200091e57918102915b93841c9390800290620008f0565b509250929050565b6000620007d460ff84168360008262000950575060016200061b565b816200095f575060006200061b565b81600181146200097857600281146200098357620009a3565b60019150506200061b565b60ff84111562000997576200099762000a52565b50506001821b6200061b565b5060208310610133831016604e8410600b8410161715620009c8575081810a6200061b565b620009d48383620008eb565b8060001904821115620009eb57620009eb62000a52565b029392505050565b600081600019048311821515161562000a105762000a1062000a52565b500290565b600181811c9082168062000a2a57607f821691505b6020821081141562000a4c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6130cc8062000a8e6000396000f3fe6080604052600436106104405760003560e01c80638da5cb5b11610234578063c816841b1161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cc2578063f744bf2214610ce2578063f84ba65d14610d02578063f872858a14610d22578063fb1eb14b14610d4357600080fd5b8063e5c2b0a614610c2c578063ec28438a14610c4c578063ef422a1814610c6c578063f0cd1dac14610c8c578063f1d5f51714610ca257600080fd5b8063d158272d116100fd578063d158272d14610b74578063da00097d14610b99578063dc44b6a014610bba578063dd62ed3e14610bd0578063e32759cf14610c1657600080fd5b8063c816841b14610af8578063c860795214610b18578063c867d60b14610b2e578063cab0347114610b5e57600080fd5b8063a9059cbb116101bc578063c469b6dd11610180578063c469b6dd14610a6c578063c492f04614610a82578063c49b9a8014610aa2578063c5d2418914610ac2578063c7f063d314610ad857600080fd5b8063a9059cbb146109cc578063b2bdfa7b146109ec578063b340a95414610a0c578063b6b3664314610a2c578063c2d4640e14610a4c57600080fd5b8063a073d37f11610203578063a073d37f1461094b578063a08e671f14610960578063a457c2d714610976578063a5d69d1f14610996578063a83f53a7146109b657600080fd5b80638da5cb5b146108ed578063914eb66a1461090b57806395d89b4114610920578063993945ac1461093557600080fd5b80633b97084a116103455780635881f3ef116102cd57806382eefb431161029157806382eefb4314610851578063844d591c14610867578063865541e71461088757806388790a68146108a75780638b42507f146108bd57600080fd5b80635881f3ef146107b957806361a23c69146107d957806370a08231146107ef5780637d1db4a514610825578063807c2d9c1461083b57600080fd5b80634a74bb02116103145780634a74bb021461071f5780634cb80fd5146107405780635342acb414610760578063557ed1ba1461079057806357a5802f146107a357600080fd5b80633b97084a146106a35780633df4ddf4146106c35780633ecad271146106d957806341c0e1b51461070957600080fd5b80632563ae83116103c85780632c4b2334116103975780632c4b23341461060b5780632f48ab7d1461062b578063313ce5671461064b57806337e5ccf71461066d578063395093511461068357600080fd5b80632563ae83146105a057806327c8f835146105c0578063297ac6de146105e05780632b112e49146105f657600080fd5b80631694505e1161040f5780631694505e1461050157806318160ddd146105215780631870517a146105405780632198cf6c1461056057806323b872dd1461058057600080fd5b806306fdde031461044c578063095ea7b3146104775780630d5e5c87146104a75780631245e347146104c957600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d59565b60405161046e9190612e44565b60405180910390f35b34801561048357600080fd5b50610497610492366004612c95565b610deb565b604051901515815260200161046e565b3480156104b357600080fd5b506104c76104c2366004612da9565b610e02565b005b3480156104d557600080fd5b506004546104e9906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b34801561050d57600080fd5b506026546104e9906001600160a01b031681565b34801561052d57600080fd5b50601c545b60405190815260200161046e565b34801561054c57600080fd5b506104c761055b366004612da9565b610e65565b34801561056c57600080fd5b506104c761057b366004612c68565b610eb9565b34801561058c57600080fd5b5061049761059b366004612c28565b610f0e565b3480156105ac57600080fd5b506104c76105bb366004612d41565b610f79565b3480156105cc57600080fd5b506005546104e9906001600160a01b031681565b3480156105ec57600080fd5b5061053260135481565b34801561060257600080fd5b50610532610fc1565b34801561061757600080fd5b506104c7610626366004612bb8565b610fed565b34801561063757600080fd5b506024546104e9906001600160a01b031681565b34801561065757600080fd5b5060035460405160ff909116815260200161046e565b34801561067957600080fd5b50610532600f5481565b34801561068f57600080fd5b5061049761069e366004612c95565b611039565b3480156106af57600080fd5b506104c76106be366004612d79565b61106f565b3480156106cf57600080fd5b5061053260225481565b3480156106e557600080fd5b506104976106f4366004612bb8565b600b6020526000908152604090205460ff1681565b34801561071557600080fd5b5061053260235481565b34801561072b57600080fd5b5060275461049790600160a81b900460ff1681565b34801561074c57600080fd5b506104c761075b366004612bb8565b61109e565b34801561076c57600080fd5b5061049761077b366004612bb8565b60086020526000908152604090205460ff1681565b34801561079c57600080fd5b5042610532565b3480156107af57600080fd5b5061053260145481565b3480156107c557600080fd5b506104e96107d4366004612bb8565b6110f0565b3480156107e557600080fd5b5061053260155481565b3480156107fb57600080fd5b5061053261080a366004612bb8565b6001600160a01b031660009081526006602052604090205490565b34801561083157600080fd5b50610532601d5481565b34801561084757600080fd5b50610532601e5481565b34801561085d57600080fd5b5061053260195481565b34801561087357600080fd5b506104c7610882366004612c68565b611482565b34801561089357600080fd5b506104c76108a2366004612d79565b6114d7565b3480156108b357600080fd5b5061053260105481565b3480156108c957600080fd5b506104976108d8366004612bb8565b600a6020526000908152604090205460ff1681565b3480156108f957600080fd5b506000546001600160a01b03166104e9565b34801561091757600080fd5b506104c7611526565b34801561092c57600080fd5b5061046161159a565b34801561094157600080fd5b50610532601b5481565b34801561095757600080fd5b50601f54610532565b34801561096c57600080fd5b5061053260175481565b34801561098257600080fd5b50610497610991366004612c95565b6115a9565b3480156109a257600080fd5b506104c76109b1366004612d41565b6115f8565b3480156109c257600080fd5b5061053260165481565b3480156109d857600080fd5b506104976109e7366004612c95565b611640565b3480156109f857600080fd5b506000546104e9906001600160a01b031681565b348015610a1857600080fd5b506025546104e9906001600160a01b031681565b348015610a3857600080fd5b506104c7610a47366004612d79565b61164d565b348015610a5857600080fd5b506104c7610a67366004612da9565b61167c565b348015610a7857600080fd5b50610532600e5481565b348015610a8e57600080fd5b506104c7610a9d366004612cc0565b6116cb565b348015610aae57600080fd5b506104c7610abd366004612d41565b61177a565b348015610ace57600080fd5b50610532600d5481565b348015610ae457600080fd5b506104c7610af3366004612d79565b6117fc565b348015610b0457600080fd5b506027546104e9906001600160a01b031681565b348015610b2457600080fd5b5061053260115481565b348015610b3a57600080fd5b50610497610b49366004612bb8565b60096020526000908152604090205460ff1681565b348015610b6a57600080fd5b5061053260125481565b348015610b8057600080fd5b506003546104e99061010090046001600160a01b031681565b348015610ba557600080fd5b5060275461049790600160b01b900460ff1681565b348015610bc657600080fd5b50610532600c5481565b348015610bdc57600080fd5b50610532610beb366004612bf0565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610c2257600080fd5b5061053260205481565b348015610c3857600080fd5b506104c7610c47366004612d79565b61182b565b348015610c5857600080fd5b506104c7610c67366004612d79565b6118a0565b348015610c7857600080fd5b506104c7610c87366004612c68565b6118cf565b348015610c9857600080fd5b5061053260185481565b348015610cae57600080fd5b506104c7610cbd366004612d79565b611924565b348015610cce57600080fd5b506104c7610cdd366004612bb8565b611953565b348015610cee57600080fd5b506104c7610cfd366004612d79565b611a3d565b348015610d0e57600080fd5b506104c7610d1d366004612c68565b611a8c565b348015610d2e57600080fd5b5060275461049790600160b81b900460ff1681565b348015610d4f57600080fd5b50610532601a5481565b606060018054610d6890612f97565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490612f97565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b5050505050905090565b6000610df8338484611b40565b5060015b92915050565b6000546001600160a01b03163314610e355760405162461bcd60e51b8152600401610e2c90612e97565b60405180910390fd5b601083905560118290556012819055601354610e5d90610e5783818787611ae1565b90611ae1565b601955505050565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610e2c90612e97565b600c839055600d829055600e819055600f54610eb190610e5783818787611ae1565b601855505050565b6000546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610f1b848484611c64565b50610f6e8433610f698560405180606001604052806028815260200161302a602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061210a565b611b40565b5060015b9392505050565b6000546001600160a01b03163314610fa35760405162461bcd60e51b8152600401610e2c90612e97565b60278054911515600160b81b0260ff60b81b19909216919091179055565b6005546001600160a01b0316600090815260066020526040812054601c54610fe891612144565b905090565b6000546001600160a01b031633146110175760405162461bcd60e51b8152600401610e2c90612e97565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610df8918590610f699086611ae1565b6000546001600160a01b031633146110995760405162461bcd60e51b8152600401610e2c90612e97565b601f55565b6000546001600160a01b031633146110c85760405162461bcd60e51b8152600401610e2c90612e97565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610e2c90612e97565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612bd4565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111d957600080fd5b505afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190612bd4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561125757600080fd5b505afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190612bd4565b91506001600160a01b03821661141357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190612bd4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190612bd4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612bd4565b91505b602780546001600160a01b03199081166001600160a01b03858116918217845560268054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6000546001600160a01b031633146114ac5760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115015760405162461bcd60e51b8152600401610e2c90612e97565b600f819055600e54600d54600c54611520928492610e57928391611ae1565b60185550565b6000546001600160a01b031633146115505760405162461bcd60e51b8152600401610e2c90612e97565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610d6890612f97565b6000610df83384610f6985604051806060016040528060258152602001613072602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061210a565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610e2c90612e97565b60278054911515600160b01b0260ff60b01b19909216919091179055565b6000610f6e338484611c64565b6000546001600160a01b031633146116775760405162461bcd60e51b8152600401610e2c90612e97565b601b55565b6000546001600160a01b031633146116a65760405162461bcd60e51b8152600401610e2c90612e97565b6014839055601582905560168190556116c381610e578585611ae1565b601755505050565b6000546001600160a01b031633146116f55760405162461bcd60e51b8152600401610e2c90612e97565b60005b8281101561177457816008600086868581811061172557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061173a9190612bb8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061176c81612fd2565b9150506116f8565b50505050565b6000546001600160a01b031633146117a45760405162461bcd60e51b8152600401610e2c90612e97565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117f190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e2c90612e97565b602355565b6000546001600160a01b031633146118555760405162461bcd60e51b8152600401610e2c90612e97565b600381111561189b5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e2c565b602055565b6000546001600160a01b031633146118ca5760405162461bcd60e51b8152600401610e2c90612e97565b601d55565b6000546001600160a01b031633146118f95760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461194e5760405162461bcd60e51b8152600401610e2c90612e97565b601e55565b6000546001600160a01b0316331461197d5760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b0381166119e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a675760405162461bcd60e51b8152600401610e2c90612e97565b6013819055601254601154601054611a86928492610e57928391611ae1565b60195550565b6000546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600080611aee8385612f29565b905083811015610f725760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e2c565b6001600160a01b038316611ba25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2c565b6001600160a01b038216611c035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2c565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611cca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2c565b6001600160a01b038316611d2c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2c565b60008211611d8e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e2c565b6027546001600160a01b038481169116148015611dc357506027546001600160a01b0316600090815260066020526040902054155b15611dcd57436022555b6027546001600160a01b038581169116148015611df85750602354602254611df59190612f29565b43105b15611e1c57602154611e159085906001600160a01b031684612186565b9050610f72565b602754600160a01b900460ff1615611e3957611e15848484612186565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e7b57506001600160a01b0383166000908152600a602052604090205460ff16155b15611ee357601d54821115611ee35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e2c565b30600090815260066020526040902054601f5481108015908190611f115750602754600160a01b900460ff16155b8015611f3657506001600160a01b0386166000908152600b602052604090205460ff16155b8015611f4b5750602754600160a81b900460ff165b15611f7157602754600160b01b900460ff1615611f6857601f5491505b611f718261225a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260069091529190912054611fc391869061210a565b6001600160a01b038716600090815260066020908152604080832093909355600890529081205460ff168061201057506001600160a01b03861660009081526008602052604090205460ff165b6120245761201f878787612428565b612026565b845b602754909150600160b81b900460ff16801561205b57506001600160a01b03861660009081526009602052604090205460ff16155b1561209157601e5461208682610e57896001600160a01b031660009081526006602052604090205490565b111561209157600080fd5b6001600160a01b0386166000908152600660205260409020546120b49082611ae1565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613052833981519152906120f69085815260200190565b60405180910390a360019350505050610f72565b6000818484111561212e5760405162461bcd60e51b8152600401610e2c9190612e44565b50600061213b8486612f80565b95945050505050565b6000610f7283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061210a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546121d791849061210a565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546122069083611ae1565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020613052833981519152906122489086815260200190565b60405180910390a35060019392505050565b6027805460ff60a01b1916600160a01b1790556017546014546000916122909160029161228a91829087906126ea565b90612769565b9050600061229e8383612144565b90506122a9816127ab565b602480546025546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a08231910160206040518083038186803b1580156122f457600080fd5b505afa158015612308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232c9190612d91565b90506000612352612349600260145461276990919063ffffffff16565b60175490612144565b90506000612374600261228a8461228a601454886126ea90919063ffffffff16565b905060006123918361228a601654876126ea90919063ffffffff16565b905060006123a9826123a38786612144565b90612144565b905080156123cc576003546123cc9061010090046001600160a01b0316826128ff565b81156123e8576004546123e8906001600160a01b0316836128ff565b6000831180156123f85750600087115b156124115761240730846128ff565b6124118784612996565b50506027805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600b602052604081205481908190819060ff16156124bc57612475606461228a61246e600f5460185461214490919063ffffffff16565b88906126ea565b92506000600f5411801561248c5750601b54601a54105b156124b7576124ab606461228a600f54886126ea90919063ffffffff16565b91506124b78783612af4565b61253e565b6001600160a01b0386166000908152600b602052604090205460ff161561253e576124fc606461228a61246e60135460195461214490919063ffffffff16565b925060006013541180156125135750601b54601a54105b1561253e57612532606461228a601354886126ea90919063ffffffff16565b915061253e8783612af4565b6001600160a01b0387166000908152600b602052604090205460ff168061257d57506001600160a01b0386166000908152600b602052604090205460ff165b1561265f576020541561265f576000805b60205481101561264c57604080516020810183905290810188905242606082015260800160408051601f1981840301815291815281516020928301206001600160a01b038116600090815260069093529120549092506125ef906001611ae1565b6001600160a01b0380841660008181526006602052604090819020939093559151908b169060008051602061305283398151915290612632906001815260200190565b60405180910390a38061264481612fd2565b91505061258e565b5060205461265b906001612f61565b9150505b82156126c7573060009081526006602052604090205461267f9084611ae1565b30600081815260066020526040908190209290925590516001600160a01b03891690600080516020613052833981519152906126be9087815260200190565b60405180910390a35b6126df6126d882610e578686611ae1565b8690612144565b979650505050505050565b6000826126f957506000610dfc565b60006127058385612f61565b9050826127128583612f41565b14610f725760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e2c565b6000610f7283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b8a565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ee57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260245482519116908290600190811061282d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526026546128539130911684611b40565b602654602554604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261289092879260009288929116904290600401612eed565b600060405180830381600087803b1580156128aa57600080fd5b505af11580156128be573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128f3929190612ecc565b60405180910390a15050565b602480546025546040516323b872dd60e01b81526001600160a01b039182166004820152858216938101939093526044830184905216906323b872dd90606401602060405180830381600087803b15801561295957600080fd5b505af115801561296d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129919190612d5d565b505050565b6026546129ae9030906001600160a01b031684611b40565b6024805460265460405163095ea7b360e01b81526001600160a01b039182166004820152928301849052169063095ea7b390604401602060405180830381600087803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a359190612d5d565b506026546024805460215460405162e8e33760e81b81523060048201526001600160a01b0392831693810193909352604483018690526064830185905260006084840181905260a4840152811660c48301524260e48301529091169063e8e337009061010401606060405180830381600087803b158015612ab557600080fd5b505af1158015612ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aed9190612dd4565b5050505050565b601b54601a5410612b03575050565b6005546001600160a01b0316600090815260066020526040902054612b289082611ae1565b6005546001600160a01b0316600090815260066020526040902055601a54612b509082611ae1565b601a556005546040518281526001600160a01b03918216918416906000805160206130528339815191529060200160405180910390a35050565b60008183612bab5760405162461bcd60e51b8152600401610e2c9190612e44565b50600061213b8486612f41565b600060208284031215612bc9578081fd5b8135610f7281613003565b600060208284031215612be5578081fd5b8151610f7281613003565b60008060408385031215612c02578081fd5b8235612c0d81613003565b91506020830135612c1d81613003565b809150509250929050565b600080600060608486031215612c3c578081fd5b8335612c4781613003565b92506020840135612c5781613003565b929592945050506040919091013590565b60008060408385031215612c7a578182fd5b8235612c8581613003565b91506020830135612c1d8161301b565b60008060408385031215612ca7578182fd5b8235612cb281613003565b946020939093013593505050565b600080600060408486031215612cd4578283fd5b833567ffffffffffffffff80821115612ceb578485fd5b818601915086601f830112612cfe578485fd5b813581811115612d0c578586fd5b8760208260051b8501011115612d20578586fd5b60209283019550935050840135612d368161301b565b809150509250925092565b600060208284031215612d52578081fd5b8135610f728161301b565b600060208284031215612d6e578081fd5b8151610f728161301b565b600060208284031215612d8a578081fd5b5035919050565b600060208284031215612da2578081fd5b5051919050565b600080600060608486031215612dbd578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612de8578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612e395781516001600160a01b031687529582019590820190600101612e14565b509495945050505050565b6000602080835283518082850152825b81811015612e7057858101830151858201604001528201612e54565b81811115612e815783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ee56040830184612e01565b949350505050565b85815284602082015260a060408201526000612f0c60a0830186612e01565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f3c57612f3c612fed565b500190565b600082612f5c57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7b57612f7b612fed565b500290565b600082821015612f9257612f92612fed565b500390565b600181811c90821680612fab57607f821691505b60208210811415612fcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe657612fe6612fed565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301857600080fd5b50565b801515811461301857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209c50a0f2ea34507710791cbf3e1e2288d39f27237d30a94dee364dedbef7e87964736f6c63430008040033608060405234801561001057600080fd5b506040516101e23803806101e283398101604081905261002f916100d9565b600080546001600160a01b03199081166001600160a01b038416908117909255600180543392168217905560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561009a57600080fd5b505af11580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d29190610107565b5050610127565b6000602082840312156100ea578081fd5b81516001600160a01b0381168114610100578182fd5b9392505050565b600060208284031215610118578081fd5b81518015158114610100578182fd5b60ad806101356000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632f48ab7d1460375780638da5cb5b146065575b600080fd5b6000546049906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546049906001600160a01b03168156fea264697066735822122036682fe3dea53030549c29842d46867fdd9c91a437396cfd83eb698577f51e5b64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000002540be4000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000b3e9e883d70d7d3072bc1a47432d38e1d4f41958000000000000000000000000e13f83798bbd384a04f5d876fdeb65c6e9ec9b3c000000000000000000000000c546d7b48cc933bfc5f8fc3c1d3d4023fa80ddd2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000009bb69e4ddda0a1865fec3ba828787e6f886750f7000000000000000000000000000000000000000000000000000000000000000842756c6c32303235000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000842756c6c32303235000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106104405760003560e01c80638da5cb5b11610234578063c816841b1161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cc2578063f744bf2214610ce2578063f84ba65d14610d02578063f872858a14610d22578063fb1eb14b14610d4357600080fd5b8063e5c2b0a614610c2c578063ec28438a14610c4c578063ef422a1814610c6c578063f0cd1dac14610c8c578063f1d5f51714610ca257600080fd5b8063d158272d116100fd578063d158272d14610b74578063da00097d14610b99578063dc44b6a014610bba578063dd62ed3e14610bd0578063e32759cf14610c1657600080fd5b8063c816841b14610af8578063c860795214610b18578063c867d60b14610b2e578063cab0347114610b5e57600080fd5b8063a9059cbb116101bc578063c469b6dd11610180578063c469b6dd14610a6c578063c492f04614610a82578063c49b9a8014610aa2578063c5d2418914610ac2578063c7f063d314610ad857600080fd5b8063a9059cbb146109cc578063b2bdfa7b146109ec578063b340a95414610a0c578063b6b3664314610a2c578063c2d4640e14610a4c57600080fd5b8063a073d37f11610203578063a073d37f1461094b578063a08e671f14610960578063a457c2d714610976578063a5d69d1f14610996578063a83f53a7146109b657600080fd5b80638da5cb5b146108ed578063914eb66a1461090b57806395d89b4114610920578063993945ac1461093557600080fd5b80633b97084a116103455780635881f3ef116102cd57806382eefb431161029157806382eefb4314610851578063844d591c14610867578063865541e71461088757806388790a68146108a75780638b42507f146108bd57600080fd5b80635881f3ef146107b957806361a23c69146107d957806370a08231146107ef5780637d1db4a514610825578063807c2d9c1461083b57600080fd5b80634a74bb02116103145780634a74bb021461071f5780634cb80fd5146107405780635342acb414610760578063557ed1ba1461079057806357a5802f146107a357600080fd5b80633b97084a146106a35780633df4ddf4146106c35780633ecad271146106d957806341c0e1b51461070957600080fd5b80632563ae83116103c85780632c4b2334116103975780632c4b23341461060b5780632f48ab7d1461062b578063313ce5671461064b57806337e5ccf71461066d578063395093511461068357600080fd5b80632563ae83146105a057806327c8f835146105c0578063297ac6de146105e05780632b112e49146105f657600080fd5b80631694505e1161040f5780631694505e1461050157806318160ddd146105215780631870517a146105405780632198cf6c1461056057806323b872dd1461058057600080fd5b806306fdde031461044c578063095ea7b3146104775780630d5e5c87146104a75780631245e347146104c957600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d59565b60405161046e9190612e44565b60405180910390f35b34801561048357600080fd5b50610497610492366004612c95565b610deb565b604051901515815260200161046e565b3480156104b357600080fd5b506104c76104c2366004612da9565b610e02565b005b3480156104d557600080fd5b506004546104e9906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b34801561050d57600080fd5b506026546104e9906001600160a01b031681565b34801561052d57600080fd5b50601c545b60405190815260200161046e565b34801561054c57600080fd5b506104c761055b366004612da9565b610e65565b34801561056c57600080fd5b506104c761057b366004612c68565b610eb9565b34801561058c57600080fd5b5061049761059b366004612c28565b610f0e565b3480156105ac57600080fd5b506104c76105bb366004612d41565b610f79565b3480156105cc57600080fd5b506005546104e9906001600160a01b031681565b3480156105ec57600080fd5b5061053260135481565b34801561060257600080fd5b50610532610fc1565b34801561061757600080fd5b506104c7610626366004612bb8565b610fed565b34801561063757600080fd5b506024546104e9906001600160a01b031681565b34801561065757600080fd5b5060035460405160ff909116815260200161046e565b34801561067957600080fd5b50610532600f5481565b34801561068f57600080fd5b5061049761069e366004612c95565b611039565b3480156106af57600080fd5b506104c76106be366004612d79565b61106f565b3480156106cf57600080fd5b5061053260225481565b3480156106e557600080fd5b506104976106f4366004612bb8565b600b6020526000908152604090205460ff1681565b34801561071557600080fd5b5061053260235481565b34801561072b57600080fd5b5060275461049790600160a81b900460ff1681565b34801561074c57600080fd5b506104c761075b366004612bb8565b61109e565b34801561076c57600080fd5b5061049761077b366004612bb8565b60086020526000908152604090205460ff1681565b34801561079c57600080fd5b5042610532565b3480156107af57600080fd5b5061053260145481565b3480156107c557600080fd5b506104e96107d4366004612bb8565b6110f0565b3480156107e557600080fd5b5061053260155481565b3480156107fb57600080fd5b5061053261080a366004612bb8565b6001600160a01b031660009081526006602052604090205490565b34801561083157600080fd5b50610532601d5481565b34801561084757600080fd5b50610532601e5481565b34801561085d57600080fd5b5061053260195481565b34801561087357600080fd5b506104c7610882366004612c68565b611482565b34801561089357600080fd5b506104c76108a2366004612d79565b6114d7565b3480156108b357600080fd5b5061053260105481565b3480156108c957600080fd5b506104976108d8366004612bb8565b600a6020526000908152604090205460ff1681565b3480156108f957600080fd5b506000546001600160a01b03166104e9565b34801561091757600080fd5b506104c7611526565b34801561092c57600080fd5b5061046161159a565b34801561094157600080fd5b50610532601b5481565b34801561095757600080fd5b50601f54610532565b34801561096c57600080fd5b5061053260175481565b34801561098257600080fd5b50610497610991366004612c95565b6115a9565b3480156109a257600080fd5b506104c76109b1366004612d41565b6115f8565b3480156109c257600080fd5b5061053260165481565b3480156109d857600080fd5b506104976109e7366004612c95565b611640565b3480156109f857600080fd5b506000546104e9906001600160a01b031681565b348015610a1857600080fd5b506025546104e9906001600160a01b031681565b348015610a3857600080fd5b506104c7610a47366004612d79565b61164d565b348015610a5857600080fd5b506104c7610a67366004612da9565b61167c565b348015610a7857600080fd5b50610532600e5481565b348015610a8e57600080fd5b506104c7610a9d366004612cc0565b6116cb565b348015610aae57600080fd5b506104c7610abd366004612d41565b61177a565b348015610ace57600080fd5b50610532600d5481565b348015610ae457600080fd5b506104c7610af3366004612d79565b6117fc565b348015610b0457600080fd5b506027546104e9906001600160a01b031681565b348015610b2457600080fd5b5061053260115481565b348015610b3a57600080fd5b50610497610b49366004612bb8565b60096020526000908152604090205460ff1681565b348015610b6a57600080fd5b5061053260125481565b348015610b8057600080fd5b506003546104e99061010090046001600160a01b031681565b348015610ba557600080fd5b5060275461049790600160b01b900460ff1681565b348015610bc657600080fd5b50610532600c5481565b348015610bdc57600080fd5b50610532610beb366004612bf0565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610c2257600080fd5b5061053260205481565b348015610c3857600080fd5b506104c7610c47366004612d79565b61182b565b348015610c5857600080fd5b506104c7610c67366004612d79565b6118a0565b348015610c7857600080fd5b506104c7610c87366004612c68565b6118cf565b348015610c9857600080fd5b5061053260185481565b348015610cae57600080fd5b506104c7610cbd366004612d79565b611924565b348015610cce57600080fd5b506104c7610cdd366004612bb8565b611953565b348015610cee57600080fd5b506104c7610cfd366004612d79565b611a3d565b348015610d0e57600080fd5b506104c7610d1d366004612c68565b611a8c565b348015610d2e57600080fd5b5060275461049790600160b81b900460ff1681565b348015610d4f57600080fd5b50610532601a5481565b606060018054610d6890612f97565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490612f97565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b5050505050905090565b6000610df8338484611b40565b5060015b92915050565b6000546001600160a01b03163314610e355760405162461bcd60e51b8152600401610e2c90612e97565b60405180910390fd5b601083905560118290556012819055601354610e5d90610e5783818787611ae1565b90611ae1565b601955505050565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610e2c90612e97565b600c839055600d829055600e819055600f54610eb190610e5783818787611ae1565b601855505050565b6000546001600160a01b03163314610ee35760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610f1b848484611c64565b50610f6e8433610f698560405180606001604052806028815260200161302a602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061210a565b611b40565b5060015b9392505050565b6000546001600160a01b03163314610fa35760405162461bcd60e51b8152600401610e2c90612e97565b60278054911515600160b81b0260ff60b81b19909216919091179055565b6005546001600160a01b0316600090815260066020526040812054601c54610fe891612144565b905090565b6000546001600160a01b031633146110175760405162461bcd60e51b8152600401610e2c90612e97565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610df8918590610f699086611ae1565b6000546001600160a01b031633146110995760405162461bcd60e51b8152600401610e2c90612e97565b601f55565b6000546001600160a01b031633146110c85760405162461bcd60e51b8152600401610e2c90612e97565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610e2c90612e97565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612bd4565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111d957600080fd5b505afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190612bd4565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561125757600080fd5b505afa15801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190612bd4565b91506001600160a01b03821661141357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190612bd4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190612bd4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612bd4565b91505b602780546001600160a01b03199081166001600160a01b03858116918217845560268054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6000546001600160a01b031633146114ac5760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115015760405162461bcd60e51b8152600401610e2c90612e97565b600f819055600e54600d54600c54611520928492610e57928391611ae1565b60185550565b6000546001600160a01b031633146115505760405162461bcd60e51b8152600401610e2c90612e97565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610d6890612f97565b6000610df83384610f6985604051806060016040528060258152602001613072602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061210a565b6000546001600160a01b031633146116225760405162461bcd60e51b8152600401610e2c90612e97565b60278054911515600160b01b0260ff60b01b19909216919091179055565b6000610f6e338484611c64565b6000546001600160a01b031633146116775760405162461bcd60e51b8152600401610e2c90612e97565b601b55565b6000546001600160a01b031633146116a65760405162461bcd60e51b8152600401610e2c90612e97565b6014839055601582905560168190556116c381610e578585611ae1565b601755505050565b6000546001600160a01b031633146116f55760405162461bcd60e51b8152600401610e2c90612e97565b60005b8281101561177457816008600086868581811061172557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061173a9190612bb8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061176c81612fd2565b9150506116f8565b50505050565b6000546001600160a01b031633146117a45760405162461bcd60e51b8152600401610e2c90612e97565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906117f190831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e2c90612e97565b602355565b6000546001600160a01b031633146118555760405162461bcd60e51b8152600401610e2c90612e97565b600381111561189b5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e2c565b602055565b6000546001600160a01b031633146118ca5760405162461bcd60e51b8152600401610e2c90612e97565b601d55565b6000546001600160a01b031633146118f95760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461194e5760405162461bcd60e51b8152600401610e2c90612e97565b601e55565b6000546001600160a01b0316331461197d5760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b0381166119e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e2c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a675760405162461bcd60e51b8152600401610e2c90612e97565b6013819055601254601154601054611a86928492610e57928391611ae1565b60195550565b6000546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610e2c90612e97565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600080611aee8385612f29565b905083811015610f725760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e2c565b6001600160a01b038316611ba25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2c565b6001600160a01b038216611c035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2c565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611cca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2c565b6001600160a01b038316611d2c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2c565b60008211611d8e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e2c565b6027546001600160a01b038481169116148015611dc357506027546001600160a01b0316600090815260066020526040902054155b15611dcd57436022555b6027546001600160a01b038581169116148015611df85750602354602254611df59190612f29565b43105b15611e1c57602154611e159085906001600160a01b031684612186565b9050610f72565b602754600160a01b900460ff1615611e3957611e15848484612186565b6001600160a01b0384166000908152600a602052604090205460ff16158015611e7b57506001600160a01b0383166000908152600a602052604090205460ff16155b15611ee357601d54821115611ee35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e2c565b30600090815260066020526040902054601f5481108015908190611f115750602754600160a01b900460ff16155b8015611f3657506001600160a01b0386166000908152600b602052604090205460ff16155b8015611f4b5750602754600160a81b900460ff165b15611f7157602754600160b01b900460ff1615611f6857601f5491505b611f718261225a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260069091529190912054611fc391869061210a565b6001600160a01b038716600090815260066020908152604080832093909355600890529081205460ff168061201057506001600160a01b03861660009081526008602052604090205460ff165b6120245761201f878787612428565b612026565b845b602754909150600160b81b900460ff16801561205b57506001600160a01b03861660009081526009602052604090205460ff16155b1561209157601e5461208682610e57896001600160a01b031660009081526006602052604090205490565b111561209157600080fd5b6001600160a01b0386166000908152600660205260409020546120b49082611ae1565b6001600160a01b038088166000818152600660205260409081902093909355915190891690600080516020613052833981519152906120f69085815260200190565b60405180910390a360019350505050610f72565b6000818484111561212e5760405162461bcd60e51b8152600401610e2c9190612e44565b50600061213b8486612f80565b95945050505050565b6000610f7283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061210a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546121d791849061210a565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546122069083611ae1565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020613052833981519152906122489086815260200190565b60405180910390a35060019392505050565b6027805460ff60a01b1916600160a01b1790556017546014546000916122909160029161228a91829087906126ea565b90612769565b9050600061229e8383612144565b90506122a9816127ab565b602480546025546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a08231910160206040518083038186803b1580156122f457600080fd5b505afa158015612308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232c9190612d91565b90506000612352612349600260145461276990919063ffffffff16565b60175490612144565b90506000612374600261228a8461228a601454886126ea90919063ffffffff16565b905060006123918361228a601654876126ea90919063ffffffff16565b905060006123a9826123a38786612144565b90612144565b905080156123cc576003546123cc9061010090046001600160a01b0316826128ff565b81156123e8576004546123e8906001600160a01b0316836128ff565b6000831180156123f85750600087115b156124115761240730846128ff565b6124118784612996565b50506027805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600b602052604081205481908190819060ff16156124bc57612475606461228a61246e600f5460185461214490919063ffffffff16565b88906126ea565b92506000600f5411801561248c5750601b54601a54105b156124b7576124ab606461228a600f54886126ea90919063ffffffff16565b91506124b78783612af4565b61253e565b6001600160a01b0386166000908152600b602052604090205460ff161561253e576124fc606461228a61246e60135460195461214490919063ffffffff16565b925060006013541180156125135750601b54601a54105b1561253e57612532606461228a601354886126ea90919063ffffffff16565b915061253e8783612af4565b6001600160a01b0387166000908152600b602052604090205460ff168061257d57506001600160a01b0386166000908152600b602052604090205460ff165b1561265f576020541561265f576000805b60205481101561264c57604080516020810183905290810188905242606082015260800160408051601f1981840301815291815281516020928301206001600160a01b038116600090815260069093529120549092506125ef906001611ae1565b6001600160a01b0380841660008181526006602052604090819020939093559151908b169060008051602061305283398151915290612632906001815260200190565b60405180910390a38061264481612fd2565b91505061258e565b5060205461265b906001612f61565b9150505b82156126c7573060009081526006602052604090205461267f9084611ae1565b30600081815260066020526040908190209290925590516001600160a01b03891690600080516020613052833981519152906126be9087815260200190565b60405180910390a35b6126df6126d882610e578686611ae1565b8690612144565b979650505050505050565b6000826126f957506000610dfc565b60006127058385612f61565b9050826127128583612f41565b14610f725760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e2c565b6000610f7283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b8a565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127ee57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260245482519116908290600190811061282d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526026546128539130911684611b40565b602654602554604051635c11d79560e01b81526001600160a01b0392831692635c11d7959261289092879260009288929116904290600401612eed565b600060405180830381600087803b1580156128aa57600080fd5b505af11580156128be573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516128f3929190612ecc565b60405180910390a15050565b602480546025546040516323b872dd60e01b81526001600160a01b039182166004820152858216938101939093526044830184905216906323b872dd90606401602060405180830381600087803b15801561295957600080fd5b505af115801561296d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129919190612d5d565b505050565b6026546129ae9030906001600160a01b031684611b40565b6024805460265460405163095ea7b360e01b81526001600160a01b039182166004820152928301849052169063095ea7b390604401602060405180830381600087803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a359190612d5d565b506026546024805460215460405162e8e33760e81b81523060048201526001600160a01b0392831693810193909352604483018690526064830185905260006084840181905260a4840152811660c48301524260e48301529091169063e8e337009061010401606060405180830381600087803b158015612ab557600080fd5b505af1158015612ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aed9190612dd4565b5050505050565b601b54601a5410612b03575050565b6005546001600160a01b0316600090815260066020526040902054612b289082611ae1565b6005546001600160a01b0316600090815260066020526040902055601a54612b509082611ae1565b601a556005546040518281526001600160a01b03918216918416906000805160206130528339815191529060200160405180910390a35050565b60008183612bab5760405162461bcd60e51b8152600401610e2c9190612e44565b50600061213b8486612f41565b600060208284031215612bc9578081fd5b8135610f7281613003565b600060208284031215612be5578081fd5b8151610f7281613003565b60008060408385031215612c02578081fd5b8235612c0d81613003565b91506020830135612c1d81613003565b809150509250929050565b600080600060608486031215612c3c578081fd5b8335612c4781613003565b92506020840135612c5781613003565b929592945050506040919091013590565b60008060408385031215612c7a578182fd5b8235612c8581613003565b91506020830135612c1d8161301b565b60008060408385031215612ca7578182fd5b8235612cb281613003565b946020939093013593505050565b600080600060408486031215612cd4578283fd5b833567ffffffffffffffff80821115612ceb578485fd5b818601915086601f830112612cfe578485fd5b813581811115612d0c578586fd5b8760208260051b8501011115612d20578586fd5b60209283019550935050840135612d368161301b565b809150509250925092565b600060208284031215612d52578081fd5b8135610f728161301b565b600060208284031215612d6e578081fd5b8151610f728161301b565b600060208284031215612d8a578081fd5b5035919050565b600060208284031215612da2578081fd5b5051919050565b600080600060608486031215612dbd578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612de8578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612e395781516001600160a01b031687529582019590820190600101612e14565b509495945050505050565b6000602080835283518082850152825b81811015612e7057858101830151858201604001528201612e54565b81811115612e815783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ee56040830184612e01565b949350505050565b85815284602082015260a060408201526000612f0c60a0830186612e01565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f3c57612f3c612fed565b500190565b600082612f5c57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7b57612f7b612fed565b500290565b600082821015612f9257612f92612fed565b500390565b600181811c90821680612fab57607f821691505b60208210811415612fcc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe657612fe6612fed565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301857600080fd5b50565b801515811461301857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209c50a0f2ea34507710791cbf3e1e2288d39f27237d30a94dee364dedbef7e87964736f6c63430008040033

Deployed Bytecode Sourcemap

8297:18886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12920:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14215:161;;;;;;;;;;-1:-1:-1;14215:161:0;;;;;:::i;:::-;;:::i;:::-;;;7625:14:1;;7618:22;7600:41;;7588:2;7573:18;14215:161:0;7555:92:1;16097:361:0;;;;;;;;;;-1:-1:-1;16097:361:0;;;;;:::i;:::-;;:::i;:::-;;8554:40;;;;;;;;;;-1:-1:-1;8554:40:0;;;;-1:-1:-1;;;;;8554:40:0;;;;;;-1:-1:-1;;;;;5459:32:1;;;5441:51;;5429:2;5414:18;8554:40:0;5396:102:1;10041:41:0;;;;;;;;;;-1:-1:-1;10041:41:0;;;;-1:-1:-1;;;;;10041:41:0;;;13197:100;;;;;;;;;;-1:-1:-1;13277:12:0;;13197:100;;;8268:25:1;;;8256:2;8241:18;13197:100:0;8223:76:1;15736:353:0;;;;;;;;;;-1:-1:-1;15736:353:0;;;;;:::i;:::-;;:::i;17072:135::-;;;;;;;;;;-1:-1:-1;17072:135:0;;;;;:::i;:::-;;:::i;19939:313::-;;;;;;;;;;-1:-1:-1;19939:313:0;;;;;:::i;:::-;;:::i;16951:113::-;;;;;;;;;;-1:-1:-1;16951:113:0;;;;;:::i;:::-;;:::i;8601:71::-;;;;;;;;;;-1:-1:-1;8601:71:0;;;;-1:-1:-1;;;;;8601:71:0;;;9316:34;;;;;;;;;;;;;;;;18552:128;;;;;;;;;;;;;:::i;17605:129::-;;;;;;;;;;-1:-1:-1;17605:129:0;;;;;:::i;:::-;;:::i;9971:19::-;;;;;;;;;;-1:-1:-1;9971:19:0;;;;-1:-1:-1;;;;;9971:19:0;;;13106:83;;;;;;;;;;-1:-1:-1;13172:9:0;;13106:83;;13172:9;;;;14470:36:1;;14458:2;14443:18;13106:83:0;14425:87:1;9150:33:0;;;;;;;;;;;;;;;;13583:218;;;;;;;;;;-1:-1:-1;13583:218:0;;;;;:::i;:::-;;:::i;17325:125::-;;;;;;;;;;-1:-1:-1;17325:125:0;;;;;:::i;:::-;;:::i;9912:20::-;;;;;;;;;;;;;;;;8975:45;;;;;;;;;;-1:-1:-1;8975:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9939:23;;;;;;;;;;;;;;;;10152:40;;;;;;;;;;-1:-1:-1;10152:40:0;;;;-1:-1:-1;;;10152:40:0;;;;;;17458:139;;;;;;;;;;-1:-1:-1;17458:139:0;;;;;:::i;:::-;;:::i;8804:50::-;;;;;;;;;;-1:-1:-1;8804:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6197:90;;;;;;;;;;-1:-1:-1;6264:15:0;6197:90;;9359:34;;;;;;;;;;;;;;;;18856:806;;;;;;;;;;-1:-1:-1;18856:806:0;;;;;:::i;:::-;;:::i;9400:34::-;;;;;;;;;;;;;;;;13305:119;;;;;;;;;;-1:-1:-1;13305:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13398:18:0;13371:7;13398:18;;;:9;:18;;;;;;;13305:119;9724:27;;;;;;;;;;;;;;;;9758:25;;;;;;;;;;;;;;;;9572:37;;;;;;;;;;;;;;;;14729:129;;;;;;;;;;-1:-1:-1;14729:129:0;;;;;:::i;:::-;;:::i;15263:224::-;;;;;;;;;;-1:-1:-1;15263:224:0;;;;;:::i;:::-;;:::i;9192:36::-;;;;;;;;;;;;;;;;8920:48;;;;;;;;;;-1:-1:-1;8920:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5578:79;;;;;;;;;;-1:-1:-1;5616:7:0;5643:6;-1:-1:-1;;;;;5643:6:0;5578:79;;5792:145;;;;;;;;;;;;;:::i;13011:87::-;;;;;;;;;;;;;:::i;9650:32::-;;;;;;;;;;;;;;;;14086:121;;;;;;;;;;-1:-1:-1;14175:24:0;;14086:121;;9477:43;;;;;;;;;;;;;;;;13809:269;;;;;;;;;;-1:-1:-1;13809:269:0;;;;;:::i;:::-;;:::i;17921:125::-;;;;;;;;;;-1:-1:-1;17921:125:0;;;;;:::i;:::-;;:::i;9441:29::-;;;;;;;;;;;;;;;;19764:167;;;;;;;;;;-1:-1:-1;19764:167:0;;;;;:::i;:::-;;:::i;5454:21::-;;;;;;;;;;-1:-1:-1;5454:21:0;;;;-1:-1:-1;;;;;5454:21:0;;;9997:33;;;;;;;;;;-1:-1:-1;9997:33:0;;;;-1:-1:-1;;;;;9997:33:0;;;15144:111;;;;;;;;;;-1:-1:-1;15144:111:0;;;;;:::i;:::-;;:::i;16466:358::-;;;;;;;;;;-1:-1:-1;16466:358:0;;;;;:::i;:::-;;:::i;9113:30::-;;;;;;;;;;;;;;;;18054:233;;;;;;;;;;-1:-1:-1;18054:233:0;;;;;:::i;:::-;;:::i;17742:171::-;;;;;;;;;;-1:-1:-1;17742:171:0;;;;;:::i;:::-;;:::i;9071:35::-;;;;;;;;;;;;;;;;18295:86;;;;;;;;;;-1:-1:-1;18295:86:0;;;;;:::i;:::-;;:::i;10089:26::-;;;;;;;;;;-1:-1:-1;10089:26:0;;;;-1:-1:-1;;;;;10089:26:0;;;9235:36;;;;;;;;;;;;;;;;8861:52;;;;;;;;;;-1:-1:-1;8861:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9278:31;;;;;;;;;;;;;;;;8502:45;;;;;;;;;;-1:-1:-1;8502:45:0;;;;;;;-1:-1:-1;;;;;8502:45:0;;;10199;;;;;;;;;;-1:-1:-1;10199:45:0;;;;-1:-1:-1;;;10199:45:0;;;;;;9029:35;;;;;;;;;;;;;;;;13432:143;;;;;;;;;;-1:-1:-1;13432:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13540:18:0;;;13513:7;13540:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13432:143;9841:27;;;;;;;;;;;;;;;;18389:157;;;;;;;;;;-1:-1:-1;18389:157:0;;;;;:::i;:::-;;:::i;16832:111::-;;;;;;;;;;-1:-1:-1;16832:111:0;;;;;:::i;:::-;;:::i;15001:135::-;;;;;;;;;;-1:-1:-1;15001:135:0;;;;;:::i;:::-;;:::i;9529:36::-;;;;;;;;;;;;;;;;17215:102;;;;;;;;;;-1:-1:-1;17215:102:0;;;;;:::i;:::-;;:::i;5945:244::-;;;;;;;;;;-1:-1:-1;5945:244:0;;;;;:::i;:::-;;:::i;15495:233::-;;;;;;;;;;-1:-1:-1;15495:233:0;;;;;:::i;:::-;;:::i;14866:127::-;;;;;;;;;;-1:-1:-1;14866:127:0;;;;;:::i;:::-;;:::i;10251:35::-;;;;;;;;;;-1:-1:-1;10251:35:0;;;;-1:-1:-1;;;10251:35:0;;;;;;9618:25;;;;;;;;;;;;;;;;12920:83;12957:13;12990:5;12983:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12920:83;:::o;14215:161::-;14290:4;14307:39;198:10;14330:7;14339:6;14307:8;:39::i;:::-;-1:-1:-1;14364:4:0;14215:161;;;;;:::o;16097:361::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;;;;;;;;;16220:17:::1;:35:::0;;;16266:17:::1;:35:::0;;;16312:12:::1;:25:::0;;;16434:15:::1;::::0;16371:79:::1;::::0;:58:::1;16327:10:::0;16371:58;16240:15;16286;16371:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:79::-;16350:18;:100:::0;-1:-1:-1;;;16097:361:0:o;15736:353::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15859:16:::1;:34:::0;;;15904:16:::1;:34:::0;;;15949:11:::1;:24:::0;;;16066:14:::1;::::0;16006:75:::1;::::0;:55:::1;15963:10:::0;16006:55;15878:15;15923;16006:20:::1;:38::i;:75::-;15986:17;:95:::0;-1:-1:-1;;;15736:353:0:o;17072:135::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17163:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;17163:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17072:135::o;19939:313::-;20037:4;20054:36;20064:6;20072:9;20083:6;20054:9;:36::i;:::-;-1:-1:-1;20101:121:0;20110:6;198:10;20132:89;20170:6;20132:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20132:19:0;;;;;;:11;:19;;;;;;;;198:10;20132:33;;;;;;;;;;:37;:89::i;:::-;20101:8;:121::i;:::-;-1:-1:-1;20240:4:0;19939:313;;;;;;:::o;16951:113::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17029:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;17029:27:0::1;-1:-1:-1::0;;;;17029:27:0;;::::1;::::0;;;::::1;::::0;;16951:113::o;18552:128::-;18659:11;;-1:-1:-1;;;;;18659:11:0;18605:7;13398:18;;;:9;:18;;;;;;18632:12;;:40;;:16;:40::i;:::-;18625:47;;18552:128;:::o;17605:129::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17687:17:::1;:39:::0;;-1:-1:-1;;;;;;17687:39:0::1;-1:-1:-1::0;;;;;17687:39:0;;;::::1;::::0;;;::::1;::::0;;17605:129::o;13583:218::-;198:10;13671:4;13720:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13720:34:0;;;;;;;;;;13671:4;;13688:83;;13711:7;;13720:50;;13759:10;13720:38;:50::i;17325:125::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17407:24:::1;:35:::0;17325:125::o;17458:139::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17545:22:::1;:44:::0;;-1:-1:-1;;;;;17545:44:0;;::::1;;;-1:-1:-1::0;;;;;;17545:44:0;;::::1;::::0;;;::::1;::::0;;17458:139::o;18856:806::-;18936:22;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18973:35:::1;19030:16;18973:74;;19095:16;-1:-1:-1::0;;;;;19095:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19077:53:0::1;;19139:4;19146:16;-1:-1:-1::0;;;;;19146:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19077:93;::::0;-1:-1:-1;;;;;;19077:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5957:15:1;;;19077:93:0::1;::::0;::::1;5939:34:1::0;6009:15;;5989:18;;;5982:43;5874:18;;19077:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19060:110:::0;-1:-1:-1;;;;;;19186:28:0;::::1;19183:225;;19300:16;-1:-1:-1::0;;;;;19300:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19282:74:0::1;;19365:4;19372:16;-1:-1:-1::0;;;;;19372:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19282:114;::::0;-1:-1:-1;;;;;;19282:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5957:15:1;;;19282:114:0::1;::::0;::::1;5939:34:1::0;6009:15;;5989:18;;;5982:43;5874:18;;19282:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19265:131;;19183:225;19420:11;:28:::0;;-1:-1:-1;;;;;;19420:28:0;;::::1;-1:-1:-1::0;;;;;19420:28:0;;::::1;::::0;;::::1;::::0;;19482:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;19554:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;19554:48:0;;::::1;-1:-1:-1::0;19554:48:0;;::::1;::::0;;;19634:11;;;;::::1;19613:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;19420:28;19434:14;-1:-1:-1;18856:806:0:o;14729:129::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14818:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;14818:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14729:129::o;15263:224::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15340:14:::1;:33:::0;;;15447:11:::1;::::0;15425:16:::1;::::0;15404::::1;::::0;:75:::1;::::0;15357:16;;15404:55:::1;::::0;;;:20:::1;:38::i;:75::-;15384:17;:95:::0;-1:-1:-1;15263:224:0:o;5792:145::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;5896:1:::1;5880:6:::0;;5859:40:::1;::::0;-1:-1:-1;;;;;5880:6:0;;::::1;::::0;5859:40:::1;::::0;5896:1;;5859:40:::1;5927:1;5910:19:::0;;-1:-1:-1;;;;;;5910:19:0::1;::::0;;5792:145::o;13011:87::-;13050:13;13083:7;13076:14;;;;;:::i;13809:269::-;13902:4;13919:129;198:10;13942:7;13951:96;13990:15;13951:96;;;;;;;;;;;;;;;;;198:10;13951:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13951:34:0;;;;;;;;;;;;:38;:96::i;17921:125::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18002:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;18002:36:0::1;-1:-1:-1::0;;;;18002:36:0;;::::1;::::0;;;::::1;::::0;;17921:125::o;19764:167::-;19842:4;19859:42;198:10;19883:9;19894:6;19859:9;:42::i;15144:111::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15217:17:::1;:30:::0;15144:111::o;16466:358::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16607:15:::1;:35:::0;;;16653:15:::1;:35:::0;;;16699:10:::1;:25:::0;;;16764:52:::1;16712:12:::0;16764:36:::1;16625:17:::0;16671;16764:19:::1;:36::i;:52::-;16737:24;:79:::0;-1:-1:-1;;;16466:358:0:o;18054:233::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18171:9:::1;18167:113;18186:19:::0;;::::1;18167:113;;;18260:8;18227:17;:30;18245:8;;18254:1;18245:11;;;;;-1:-1:-1::0;;;18245:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18227:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18227:30:0;:41;;-1:-1:-1;;18227:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18207:3;::::1;::::0;::::1;:::i;:::-;;;;18167:113;;;;18054:233:::0;;;:::o;17742:171::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17819:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;17819:32:0::1;-1:-1:-1::0;;;;17819:32:0;;::::1;;::::0;;17867:38:::1;::::0;::::1;::::0;::::1;::::0;17843:8;7625:14:1;7618:22;7600:41;;7588:2;7573:18;;7555:92;17867:38:0::1;;;;;;;;17742:171:::0;:::o;18295:86::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18358:4:::1;:15:::0;18295:86::o;18389:157::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18480:1:::1;18468:8;:13;;18460:44;;;::::0;-1:-1:-1;;;18460:44:0;;12672:2:1;18460:44:0::1;::::0;::::1;12654:21:1::0;12711:2;12691:18;;;12684:30;-1:-1:-1;;;12730:18:1;;;12723:48;12788:18;;18460:44:0::1;12644:168:1::0;18460:44:0::1;18515:12;:23:::0;18389:157::o;16832:111::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16909:12:::1;:26:::0;16832:111::o;15001:135::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15091:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;15091:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15001:135::o;17215:102::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17287:10:::1;:22:::0;17215:102::o;5945:244::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6034:22:0;::::1;6026:73;;;::::0;-1:-1:-1;;;6026:73:0;;9518:2:1;6026:73:0::1;::::0;::::1;9500:21:1::0;9557:2;9537:18;;;9530:30;9596:34;9576:18;;;9569:62;-1:-1:-1;;;9647:18:1;;;9640:36;9693:19;;6026:73:0::1;9490:228:1::0;6026:73:0::1;6136:6;::::0;;6115:38:::1;::::0;-1:-1:-1;;;;;6115:38:0;;::::1;::::0;6136:6;::::1;::::0;6115:38:::1;::::0;::::1;6164:6;:17:::0;;-1:-1:-1;;;;;;6164:17:0::1;-1:-1:-1::0;;;;;6164:17:0;;;::::1;::::0;;;::::1;::::0;;5945:244::o;15495:233::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15574:15:::1;:35:::0;;;15686:12:::1;::::0;15663:17:::1;::::0;15641::::1;::::0;:79:::1;::::0;15592:17;;15641:58:::1;::::0;;;:21:::1;:40::i;:79::-;15620:18;:100:::0;-1:-1:-1;15495:233:0:o;14866:127::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14953:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;14953:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14866:127::o;1191:181::-;1249:7;;1281:5;1285:1;1281;:5;:::i;:::-;1269:17;;1310:1;1305;:6;;1297:46;;;;-1:-1:-1;;;1297:46:0;;10328:2:1;1297:46:0;;;10310:21:1;10367:2;10347:18;;;10340:30;10406:29;10386:18;;;10379:57;10453:18;;1297:46:0;10300:177:1;14384:337:0;-1:-1:-1;;;;;14477:19:0;;14469:68;;;;-1:-1:-1;;;14469:68:0;;13019:2:1;14469:68:0;;;13001:21:1;13058:2;13038:18;;;13031:30;13097:34;13077:18;;;13070:62;-1:-1:-1;;;13148:18:1;;;13141:34;13192:19;;14469:68:0;12991:226:1;14469:68:0;-1:-1:-1;;;;;14556:21:0;;14548:68;;;;-1:-1:-1;;;14548:68:0;;9925:2:1;14548:68:0;;;9907:21:1;9964:2;9944:18;;;9937:30;10003:34;9983:18;;;9976:62;-1:-1:-1;;;10054:18:1;;;10047:32;10096:19;;14548:68:0;9897:224:1;14548:68:0;-1:-1:-1;;;;;14629:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14681:32;;8268:25:1;;;14681:32:0;;8241:18:1;14681:32:0;;;;;;;14384:337;;;:::o;20260:2023::-;20347:4;-1:-1:-1;;;;;20374:20:0;;20366:70;;;;-1:-1:-1;;;20366:70:0;;12266:2:1;20366:70:0;;;12248:21:1;12305:2;12285:18;;;12278:30;12344:34;12324:18;;;12317:62;-1:-1:-1;;;12395:18:1;;;12388:35;12440:19;;20366:70:0;12238:227:1;20366:70:0;-1:-1:-1;;;;;20455:23:0;;20447:71;;;;-1:-1:-1;;;20447:71:0;;9114:2:1;20447:71:0;;;9096:21:1;9153:2;9133:18;;;9126:30;9192:34;9172:18;;;9165:62;-1:-1:-1;;;9243:18:1;;;9236:33;9286:19;;20447:71:0;9086:225:1;20447:71:0;20546:1;20537:6;:10;20529:64;;;;-1:-1:-1;;;20529:64:0;;11856:2:1;20529:64:0;;;11838:21:1;11895:2;11875:18;;;11868:30;11934:34;11914:18;;;11907:62;-1:-1:-1;;;11985:18:1;;;11978:39;12034:19;;20529:64:0;11828:231:1;20529:64:0;20620:11;;-1:-1:-1;;;;;20607:24:0;;;20620:11;;20607:24;:64;;;;-1:-1:-1;20653:11:0;;-1:-1:-1;;;;;20653:11:0;13371:7;13398:18;;;:9;:18;;;;;;20635:36;20607:64;20604:115;;;20695:12;20687:5;:20;20604:115;20742:11;;-1:-1:-1;;;;;20732:21:0;;;20742:11;;20732:21;:52;;;;;20780:4;;20772:5;;:12;;;;:::i;:::-;20757;:27;20732:52;20729:136;;;20830:14;;20807:46;;20822:6;;-1:-1:-1;;;;;20830:14:0;20846:6;20807:14;:46::i;:::-;20800:53;;;;20729:136;20880:16;;-1:-1:-1;;;20880:16:0;;;;20877:1399;;;20929:41;20944:6;20952:9;20963:6;20929:14;:41::i;20877:1399::-;-1:-1:-1;;;;;21025:23:0;;;;;;:15;:23;;;;;;;;21024:24;:55;;;;-1:-1:-1;;;;;;21053:26:0;;;;;;:15;:26;;;;;;;;21052:27;21024:55;21021:170;;;21118:12;;21108:6;:22;;21100:75;;;;-1:-1:-1;;;21100:75:0;;10684:2:1;21100:75:0;;;10666:21:1;10723:2;10703:18;;;10696:30;10762:34;10742:18;;;10735:62;-1:-1:-1;;;10813:18:1;;;10806:38;10861:19;;21100:75:0;10656:230:1;21100:75:0;21256:4;21207:28;13398:18;;;:9;:18;;;;;;21332:24;;21308:48;;;;;;;21377:44;;-1:-1:-1;21405:16:0;;-1:-1:-1;;;21405:16:0;;;;21404:17;21377:44;:69;;;;-1:-1:-1;;;;;;21426:20:0;;;;;;:12;:20;;;;;;;;21425:21;21377:69;:94;;;;-1:-1:-1;21450:21:0;;-1:-1:-1;;;21450:21:0;;;;21377:94;21373:301;;;21508:25;;-1:-1:-1;;;21508:25:0;;;;21505:98;;;21579:24;;21556:47;;21505:98;21622:36;21637:20;21622:14;:36::i;:::-;21710:53;;;;;;;;;;;-1:-1:-1;;;21710:53:0;;;;;;;;-1:-1:-1;;;;;21710:17:0;;-1:-1:-1;21710:17:0;;;:9;:17;;;;;;;;:53;;21732:6;;21710:21;:53::i;:::-;-1:-1:-1;;;;;21690:17:0;;;;;;:9;:17;;;;;;;;:73;;;;21803:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;21832:28:0;;;;;;:17;:28;;;;;;;;21803:57;21802:147;;21915:34;21923:6;21931:9;21942:6;21915:7;:34::i;:::-;21802:147;;;21906:6;21802:147;21969:16;;21780:169;;-1:-1:-1;;;;21969:16:0;;;;:51;;;;-1:-1:-1;;;;;;21990:30:0;;;;;;:19;:30;;;;;;;;21989:31;21969:51;21966:133;;;22088:10;;22047:37;22072:11;22047:20;22057:9;-1:-1:-1;;;;;13398:18:0;13371:7;13398:18;;;:9;:18;;;;;;;13305:119;22047:37;:51;;22039:60;;;;;;-1:-1:-1;;;;;22139:20:0;;;;;;:9;:20;;;;;;:37;;22164:11;22139:24;:37::i;:::-;-1:-1:-1;;;;;22116:20:0;;;;;;;:9;:20;;;;;;;:60;;;;22198:40;;;;;;-1:-1:-1;;;;;;;;;;;22198:40:0;;;22226:11;8268:25:1;;8256:2;8241:18;;8223:76;22198:40:0;;;;;;;;22260:4;22253:11;;;;;;;1524:192;1610:7;1646:12;1638:6;;;;1630:29;;;;-1:-1:-1;;;1630:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1670:9:0;1682:5;1686:1;1682;:5;:::i;:::-;1670:17;1524:192;-1:-1:-1;;;;;1524:192:0:o;1380:136::-;1438:7;1465:43;1469:1;1472;1465:43;;;;;;;;;;;;;;;;;:3;:43::i;22291:330::-;22421:53;;;;;;;;;;;-1:-1:-1;;;22421:53:0;;;;;;;;-1:-1:-1;;;;;22421:17:0;;22384:4;22421:17;;;:9;:17;;;;;;;:53;;22443:6;;22421:21;:53::i;:::-;-1:-1:-1;;;;;22401:17:0;;;;;;;:9;:17;;;;;;:73;;;;22508:20;;;;;;;:32;;22533:6;22508:24;:32::i;:::-;-1:-1:-1;;;;;22485:20:0;;;;;;;:9;:20;;;;;;;:55;;;;22556:35;;;;;;-1:-1:-1;;;;;;;;;;;22556:35:0;;;22584:6;8268:25:1;;8256:2;8241:18;;8223:76;22556:35:0;;;;;;;;-1:-1:-1;22609:4:0;22291:330;;;;;:::o;22631:1292::-;10697:16;:23;;-1:-1:-1;;;;10697:23:0;-1:-1:-1;;;10697:23:0;;;22760:24:::1;::::0;10697:16;22739:15;10697:23;;22727:65:::1;::::0;22790:1:::1;::::0;22727:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;22705:87:::0;-1:-1:-1;22803:21:0::1;22827:24;:7:::0;22705:87;22827:11:::1;:24::i;:::-;22803:48;;22893:32;22911:13;22893:17;:32::i;:::-;22968:4;::::0;;22992:13:::1;::::0;22961:46:::1;::::0;-1:-1:-1;;;22961:46:0;;-1:-1:-1;;;;;22992:13:0;;::::1;22961:46;::::0;::::1;5441:51:1::0;22936:22:0::1;::::0;22968:4;;;::::1;::::0;22961:22:::1;::::0;5414:18:1;22961:46:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22936:71;;23045:20;23068:52;23097:22;23117:1;23097:15;;:19;;:22;;;;:::i;:::-;23068:24;::::0;;:28:::1;:52::i;:::-;23045:75;;23158:27;23188:60;23246:1;23188:53;23228:12;23188:35;23207:15;;23188:14;:18;;:35;;;;:::i;:60::-;23158:90;;23281:22;23306:48;23341:12;23306:30;23325:10;;23306:14;:18;;:30;;;;:::i;:48::-;23281:73:::0;-1:-1:-1;23392:27:0::1;23422:59;23281:73:::0;23422:39:::1;:14:::0;23441:19;23422:18:::1;:39::i;:::-;:43:::0;::::1;:59::i;:::-;23392:89:::0;-1:-1:-1;23497:23:0;;23494:107:::1;;23557:22;::::0;23535:66:::1;::::0;23557:22:::1;::::0;::::1;-1:-1:-1::0;;;;;23557:22:0::1;23581:19:::0;23535:21:::1;:66::i;:::-;23617:18:::0;;23614:92:::1;;23672:17;::::0;23650:56:::1;::::0;-1:-1:-1;;;;;23672:17:0::1;23691:14:::0;23650:21:::1;:56::i;:::-;23744:1;23722:19;:23;:42;;;;;23763:1;23749:11;:15;23722:42;23719:195;;;23780:57;23810:4;23817:19;23780:21;:57::i;:::-;23852:50;23869:11;23882:19;23852:16;:50::i;:::-;-1:-1:-1::0;;10743:16:0;:24;;-1:-1:-1;;;;10743:24:0;;;-1:-1:-1;;;;;;22631:1292:0:o;25201:1650::-;-1:-1:-1;;;;;25413:20:0;;25287:7;25413:20;;;:12;:20;;;;;;25287:7;;;;;;25413:20;;25410:670;;;25462:58;25516:3;25462:49;25473:37;25495:14;;25473:17;;:21;;:37;;;;:::i;:::-;25462:6;;:10;:49::i;:58::-;25450:70;;25555:1;25538:14;;:18;:52;;;;;25573:17;;25560:10;;:30;25538:52;25535:188;;;25624:35;25655:3;25624:26;25635:14;;25624:6;:10;;:26;;;;:::i;:35::-;25611:48;;25678:29;25689:6;25696:10;25678;:29::i;:::-;25410:670;;;-1:-1:-1;;;;;25752:23:0;;;;;;:12;:23;;;;;;;;25749:331;;;25804:60;25860:3;25804:51;25815:39;25838:15;;25815:18;;:22;;:39;;;;:::i;25804:60::-;25792:72;;25900:1;25882:15;;:19;:53;;;;;25918:17;;25905:10;;:30;25882:53;25879:190;;;25969:36;26001:3;25969:27;25980:15;;25969:6;:10;;:27;;;;:::i;:36::-;25956:49;;26024:29;26035:6;26042:10;26024;:29::i;:::-;-1:-1:-1;;;;;26093:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;26117:23:0;;;;;;:12;:23;;;;;;;;26093:47;26090:495;;;26160:12;;:16;26156:418;;26196:10;;26225:283;26249:12;;26245:1;:16;26225:283;;;26330:44;;;;;;5163:19:1;;;5198:12;;;5191:28;;;26358:15:0;5235:12:1;;;5228:28;5272:12;;26330:44:0;;;-1:-1:-1;;26330:44:0;;;;;;;;;26320:55;;26330:44;26320:55;;;;-1:-1:-1;;;;;26417:13:0;;26312:64;26417:13;;;:9;:13;;;;;;26320:55;;-1:-1:-1;26417:20:0;;26435:1;26417:17;:20::i;:::-;-1:-1:-1;;;;;26401:13:0;;;;;;;:9;:13;;;;;;;:36;;;;26465:23;;;;;;-1:-1:-1;;;;;;;;;;;26465:23:0;;;26486:1;8268:25:1;;8256:2;8241:18;;8223:76;26465:23:0;;;;;;;;26263:3;;;;:::i;:::-;;;;26225:283;;;-1:-1:-1;26542:12:0;;:16;;26557:1;26542:16;:::i;:::-;26526:32;;26156:418;;26598:13;;26595:173;;26673:4;26655:24;;;;:9;:24;;;;;;:39;;26684:9;26655:28;:39::i;:::-;26646:4;26628:24;;;;:9;:24;;;;;;;:66;;;;26714:42;;-1:-1:-1;;;;;26714:42:0;;;-1:-1:-1;;;;;;;;;;;26714:42:0;;;26746:9;8268:25:1;;8256:2;8241:18;;8223:76;26714:42:0;;;;;;;;26595:173;26787:56;26798:44;26828:13;26798:25;:9;26812:10;26798:13;:25::i;:44::-;26787:6;;:10;:56::i;:::-;26780:63;25201:1650;-1:-1:-1;;;;;;;25201:1650:0:o;1724:250::-;1782:7;1806:6;1802:47;;-1:-1:-1;1836:1:0;1829:8;;1802:47;1861:9;1873:5;1877:1;1873;:5;:::i;:::-;1861:17;-1:-1:-1;1906:1:0;1897:5;1901:1;1861:17;1897:5;:::i;:::-;:10;1889:56;;;;-1:-1:-1;;;1889:56:0;;11093:2:1;1889:56:0;;;11075:21:1;11132:2;11112:18;;;11105:30;11171:34;11151:18;;;11144:62;-1:-1:-1;;;11222:18:1;;;11215:31;11263:19;;1889:56:0;11065:223:1;1982:132:0;2040:7;2067:39;2071:1;2074;2067:39;;;;;;;;;;;;;;;;;:3;:39::i;23933:634::-;24084:16;;;24098:1;24084:16;;;;;;;;24060:21;;24084:16;;;;;;;;;;-1:-1:-1;24084:16:0;24060:40;;24129:4;24111;24116:1;24111:7;;;;;;-1:-1:-1;;;24111:7:0;;;;;;;;;-1:-1:-1;;;;;24111:23:0;;;:7;;;;;;;;;:23;24155:4;;24145:7;;24155:4;;;24145;;24155;;24145:7;;;;-1:-1:-1;;;24145:7:0;;;;;;;;;-1:-1:-1;;;;;24145:14:0;;;:7;;;;;;;;;:14;24202:15;;24170:62;;24187:4;;24202:15;24220:11;24170:8;:62::i;:::-;24269:15;;24451:13;;24269:237;;-1:-1:-1;;;24269:237:0;;-1:-1:-1;;;;;24269:15:0;;;;:69;;:237;;24353:11;;24269:15;;24424:4;;24451:13;;;24480:15;;24269:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24524:35;24541:11;24554:4;24524:35;;;;;;;:::i;:::-;;;;;;;;23933:634;;:::o;18688:160::-;18780:4;;;18807:13;;18773:67;;-1:-1:-1;;;18773:67:0;;-1:-1:-1;;;;;18807:13:0;;;18773:67;;;6276:34:1;6346:15;;;6326:18;;;6319:43;;;;6378:18;;;6371:34;;;18780:4:0;;18773:25;;6211:18:1;;18773:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18688:160;;:::o;24575:614::-;24760:15;;24728:62;;24745:4;;-1:-1:-1;;;;;24760:15:0;24778:11;24728:8;:62::i;:::-;24808:4;;;24830:15;;24801:57;;-1:-1:-1;;;24801:57:0;;-1:-1:-1;;;;;24830:15:0;;;24801:57;;;7355:51:1;7422:18;;;7415:34;;;24808:4:0;;24801:20;;7328:18:1;;24801:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24899:15:0;;24970:4;;;25126:14;;24899:282;;-1:-1:-1;;;24899:282:0;;24950:4;24899:282;;;6813:34:1;-1:-1:-1;;;;;24970:4:0;;;6863:18:1;;;6856:43;;;;6915:18;;;6908:34;;;6958:18;;;6951:34;;;24899:15:0;7001:19:1;;;6994:35;;;7045:19;;;7038:35;25126:14:0;;7089:19:1;;;7082:44;25155:15:0;7142:19:1;;;7135:35;24899:15:0;;;;:28;;6747:19:1;;24899:282:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24575:614;;:::o;26859:321::-;26973:17;;26959:10;;:31;26956:43;;26859:321;;:::o;26956:43::-;27046:11;;-1:-1:-1;;;;;27046:11:0;27036:22;;;;:9;:22;;;;;;:35;;27063:7;27036:26;:35::i;:::-;27021:11;;-1:-1:-1;;;;;27021:11:0;27011:22;;;;:9;:22;;;;;:60;27095:10;;:23;;27110:7;27095:14;:23::i;:::-;27082:10;:36;27151:11;;27134:38;;8268:25:1;;;-1:-1:-1;;;;;27151:11:0;;;;27134:38;;;-1:-1:-1;;;;;;;;;;;27134:38:0;8256:2:1;8241:18;27134:38:0;;;;;;;26859:321;;:::o;2122:278::-;2208:7;2243:12;2236:5;2228:28;;;;-1:-1:-1;;;2228:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2267:9:0;2279:5;2283:1;2279;:5;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:392::-;1481:6;1489;1542:2;1530:9;1521:7;1517:23;1513:32;1510:2;;;1563:6;1555;1548:22;1510:2;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;-1:-1:-1;1733:2:1;1718:18;;1705:32;1746:30;1705:32;1746:30;:::i;1813:325::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;2128:2;2113:18;;;;2100:32;;-1:-1:-1;;;1900:238:1:o;2143:800::-;2235:6;2243;2251;2304:2;2292:9;2283:7;2279:23;2275:32;2272:2;;;2325:6;2317;2310:22;2272:2;2370:9;2357:23;2399:18;2440:2;2432:6;2429:14;2426:2;;;2461:6;2453;2446:22;2426:2;2504:6;2493:9;2489:22;2479:32;;2549:7;2542:4;2538:2;2534:13;2530:27;2520:2;;2576:6;2568;2561:22;2520:2;2621;2608:16;2647:2;2639:6;2636:14;2633:2;;;2668:6;2660;2653:22;2633:2;2728:7;2721:4;2711:6;2708:1;2704:14;2700:2;2696:23;2692:34;2689:47;2686:2;;;2754:6;2746;2739:22;2686:2;2790:4;2782:13;;;;-1:-1:-1;2814:6:1;-1:-1:-1;;2855:20:1;;2842:34;2885:28;2842:34;2885:28;:::i;:::-;2932:5;2922:15;;;2262:681;;;;;:::o;2948:251::-;3004:6;3057:2;3045:9;3036:7;3032:23;3028:32;3025:2;;;3078:6;3070;3063:22;3025:2;3122:9;3109:23;3141:28;3163:5;3141:28;:::i;3204:255::-;3271:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:2;;;3345:6;3337;3330:22;3292:2;3382:9;3376:16;3401:28;3423:5;3401:28;:::i;3464:190::-;3523:6;3576:2;3564:9;3555:7;3551:23;3547:32;3544:2;;;3597:6;3589;3582:22;3544:2;-1:-1:-1;3625:23:1;;3534:120;-1:-1:-1;3534:120:1:o;3659:194::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:2;;;3803:6;3795;3788:22;3750:2;-1:-1:-1;3831:16:1;;3740:113;-1:-1:-1;3740:113:1:o;3858:326::-;3935:6;3943;3951;4004:2;3992:9;3983:7;3979:23;3975:32;3972:2;;;4025:6;4017;4010:22;3972:2;-1:-1:-1;;4053:23:1;;;4123:2;4108:18;;4095:32;;-1:-1:-1;4174:2:1;4159:18;;;4146:32;;3962:222;-1:-1:-1;3962:222:1:o;4189:316::-;4277:6;4285;4293;4346:2;4334:9;4325:7;4321:23;4317:32;4314:2;;;4367:6;4359;4352:22;4314:2;4401:9;4395:16;4385:26;;4451:2;4440:9;4436:18;4430:25;4420:35;;4495:2;4484:9;4480:18;4474:25;4464:35;;4304:201;;;;;:::o;4510:463::-;4563:3;4601:5;4595:12;4628:6;4623:3;4616:19;4654:4;4683:2;4678:3;4674:12;4667:19;;4720:2;4713:5;4709:14;4741:3;4753:195;4767:6;4764:1;4761:13;4753:195;;;4832:13;;-1:-1:-1;;;;;4828:39:1;4816:52;;4888:12;;;;4923:15;;;;4864:1;4782:9;4753:195;;;-1:-1:-1;4964:3:1;;4571:402;-1:-1:-1;;;;;4571:402:1:o;8304:603::-;8416:4;8445:2;8474;8463:9;8456:21;8506:6;8500:13;8549:6;8544:2;8533:9;8529:18;8522:34;8574:4;8587:140;8601:6;8598:1;8595:13;8587:140;;;8696:14;;;8692:23;;8686:30;8662:17;;;8681:2;8658:26;8651:66;8616:10;;8587:140;;;8745:6;8742:1;8739:13;8736:2;;;8815:4;8810:2;8801:6;8790:9;8786:22;8782:31;8775:45;8736:2;-1:-1:-1;8891:2:1;8870:15;-1:-1:-1;;8866:29:1;8851:45;;;;8898:2;8847:54;;8425:482;-1:-1:-1;;;8425:482:1:o;11293:356::-;11495:2;11477:21;;;11514:18;;;11507:30;11573:34;11568:2;11553:18;;11546:62;11640:2;11625:18;;11467:182::o;13404:332::-;13611:6;13600:9;13593:25;13654:2;13649;13638:9;13634:18;13627:30;13574:4;13674:56;13726:2;13715:9;13711:18;13703:6;13674:56;:::i;:::-;13666:64;13583:153;-1:-1:-1;;;;13583:153:1:o;13741:582::-;14040:6;14029:9;14022:25;14083:6;14078:2;14067:9;14063:18;14056:34;14126:3;14121:2;14110:9;14106:18;14099:31;14003:4;14147:57;14199:3;14188:9;14184:19;14176:6;14147:57;:::i;:::-;-1:-1:-1;;;;;14240:32:1;;;;14235:2;14220:18;;14213:60;-1:-1:-1;14304:3:1;14289:19;14282:35;14139:65;14012:311;-1:-1:-1;;;14012:311:1:o;14517:128::-;14557:3;14588:1;14584:6;14581:1;14578:13;14575:2;;;14594:18;;:::i;:::-;-1:-1:-1;14630:9:1;;14565:80::o;14650:217::-;14690:1;14716;14706:2;;-1:-1:-1;;;14741:31:1;;14795:4;14792:1;14785:15;14823:4;14748:1;14813:15;14706:2;-1:-1:-1;14852:9:1;;14696:171::o;14872:168::-;14912:7;14978:1;14974;14970:6;14966:14;14963:1;14960:21;14955:1;14948:9;14941:17;14937:45;14934:2;;;14985:18;;:::i;:::-;-1:-1:-1;15025:9:1;;14924:116::o;15045:125::-;15085:4;15113:1;15110;15107:8;15104:2;;;15118:18;;:::i;:::-;-1:-1:-1;15155:9:1;;15094:76::o;15175:380::-;15254:1;15250:12;;;;15297;;;15318:2;;15372:4;15364:6;15360:17;15350:27;;15318:2;15425;15417:6;15414:14;15394:18;15391:38;15388:2;;;15471:10;15466:3;15462:20;15459:1;15452:31;15506:4;15503:1;15496:15;15534:4;15531:1;15524:15;15388:2;;15230:325;;;:::o;15560:135::-;15599:3;-1:-1:-1;;15620:17:1;;15617:2;;;15640:18;;:::i;:::-;-1:-1:-1;15687:1:1;15676:13;;15607:88::o;15700:127::-;15761:10;15756:3;15752:20;15749:1;15742:31;15792:4;15789:1;15782:15;15816:4;15813:1;15806:15;15832:131;-1:-1:-1;;;;;15907:31:1;;15897:42;;15887:2;;15953:1;15950;15943:12;15887:2;15877:86;:::o;15968:118::-;16054:5;16047:13;16040:21;16033:5;16030:32;16020:2;;16076:1;16073;16066:12

Swarm Source

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