ETH Price: $2,357.69 (+0.21%)

Token

Hedgefund (HFUND)
 

Overview

Max Total Supply

1,000,000,000,000,000 HFUND

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
200,814,361.061445077 HFUND

Value
$0.00
0x50033da094fcf2985a1b4bb7ff6df5e8c5e625c1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HFUND

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Hedgefund HFUND

1Q Supply
50% burned (burnratio ongoing increases with each transaction)

Feestructure:
every transaction reflects 1% back to holders
2% are allocated to the treasury

Telegram: https://t.me/HedgeFund_Defi
Website: https://hedgefund-defi.com/

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.8.4;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.4;
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.4;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.8.4;

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

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

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

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

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

pragma solidity ^0.8.4;

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

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

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

pragma solidity ^0.8.4;

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

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

pragma solidity ^0.8.4;

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.8.4;

contract HFUND is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    mapping (address => uint256) public _rOwned;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isBlacklisted;

    address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD;
    bool public tradingEnabled = false;
    bool public liquidityLaunched = false;
    bool public isFirstLaunch = true;
    uint256 public lastSnipeTaxBlock;
    uint8 public snipeBlocks = 1;

    modifier whenTradingEnabled() {
    require(tradingEnabled || _msgSender() == owner(), "Trading is not yet enabled");
    _;
    }
    

    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    
    uint256 private _redisFeeOnBuy = 1;
    uint256 private _taxFeeOnBuy = 2;
    
    uint256 private _redisFeeOnSell = 1;
    uint256 private _taxFeeOnSell = 2;
    
    uint256 private _redisFee;
    uint256 private _taxFee;
    
    string private constant _name = "Hedgefund";
    string private constant _symbol = "HFUND";
    uint8 private constant _decimals = 9;
    
    address payable private _appAddress = payable(0x53Ad543ab6dF2CebcdAE3BA8703A0aB2B553B1f4);
    address payable private _marketingAddress = payable(0x53Ad543ab6dF2CebcdAE3BA8703A0aB2B553B1f4);
    address payable private _buybackAddress = payable(0x53Ad543ab6dF2CebcdAE3BA8703A0aB2B553B1f4);
    address payable private _burnAddress = payable(0x53Ad543ab6dF2CebcdAE3BA8703A0aB2B553B1f4);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_appAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_buybackAddress] = true;
        _isExcludedFromFee[_burnAddress] = true;

        emit Transfer(address(0x0000000000000000000000000000000000000000), _msgSender(), _tTotal);
    }

    function setSnipeBlocks(uint8 _blocks) external onlyOwner {
        require(!tradingEnabled);
        snipeBlocks = _blocks;
    }

    function setPresaleContract(address payable wallet) external onlyOwner{
        _PresaleAddress = wallet;
        excludeFromFees(_PresaleAddress, true);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    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 enableTrading() external onlyOwner {
    require(!tradingEnabled, "Trading is already enabled");
    lastSnipeTaxBlock = block.number + snipeBlocks;
    tradingEnabled = true;
}

    function _transfer(address from, address to, uint256 amount) private {
        if (from != owner())
        require(tradingEnabled == true);
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from], 'Blacklisted address');

        _redisFee = 0;
        _taxFee = 0;

        if (!liquidityLaunched) {
            if (to == uniswapV2Pair) {
                liquidityLaunched = true;
                // high tax ends in x blocks
            }
        }

        //antibot block
        if (from != address(_PresaleAddress)) {
            if(tradingEnabled && block.number <= lastSnipeTaxBlock && !isFirstLaunch){
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                _tokenTransfer(from,to,amount);
                if (to != address(uniswapV2Pair)) {
                    _isBlacklisted[to]=true;
                }
                return;
            }
        }

        if (tradingEnabled && isFirstLaunch){
            isFirstLaunch = false;
        }
        
        if (from != owner() && to != owner()) {
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
            
            if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                _redisFee = 0;
                _taxFee = 0;
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        uint256 devAmount = amount.mul(2).div(7);
        uint256 mktAmount = amount.mul(2).div(7);
        uint256 buybackAmount = amount.mul(2).div(7);
        uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount);
        _appAddress.transfer(devAmount);
        _marketingAddress.transfer(mktAmount);
        _buybackAddress.transfer(buybackAmount);
        _burnAddress.transfer(burnAmount);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        _transferStandard(sender, recipient, amount);
    }

    event tokensRescued(address indexed token, address indexed to, uint amount);
    function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        emit tokensRescued(_tokenAddr, _to, _amount);	
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
    
    event appAddressUpdated(address indexed previous, address indexed adr);
    function setNewAppAddress(address payable appaddr) public onlyOwner {
        emit appAddressUpdated(_appAddress, appaddr);	
        _appAddress = appaddr;
        _isExcludedFromFee[_appAddress] = true;
    }
    
    event marketingAddressUpdated(address indexed previous, address indexed adr);
    function setNewMarketingAddress(address payable markt) public onlyOwner {
        emit marketingAddressUpdated(_marketingAddress, markt);	
        _marketingAddress = markt;
        _isExcludedFromFee[_marketingAddress] = true;
    }

    event burnAddressUpdated(address indexed previous, address indexed adr);
    function setNewBurnAddress(address payable burnaddr) public onlyOwner {
        emit burnAddressUpdated(_burnAddress, burnaddr);	
        _burnAddress = burnaddr;
        _isExcludedFromFee[_burnAddress] = true;
    }

    event buybackAddressUpdated(address indexed previous, address indexed adr);
    function setNewBuybackAddress(address payable buybackaddr) public onlyOwner {
        emit buybackAddressUpdated(_buybackAddress, buybackaddr);	
        _buybackAddress = buybackaddr;
        _isExcludedFromFee[_buybackAddress] = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate);
        uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * only thing to change _rTotal
     */
    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee);
    }

    receive() external payable {}

	function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function manualswap() external {
        require(_msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
    
    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
	    require(redisFeeOnBuy < 5, "Redis cannot be more than 5.");
	    require(redisFeeOnSell < 5, "Redis cannot be more than 5.");
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }
    
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    event BlacklistAddress(address indexed account, bool value);
    function blacklistAddress(address account, bool value) public onlyOwner{
        _isBlacklisted[account] = value;
        emit BlacklistAddress(account, value);
    }

    event BlacklistMultiAddresses(address[] accounts, bool value);
    function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
        }
        emit BlacklistMultiAddresses(accounts, value);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_rOwned","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":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","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":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160b81b03191676010000000000000000000000000000000000000000dead1790556007805460ff191660011790556200005269d3c21bcecceda1000000600019620003a6565b6200006090600019620003c9565b600855600160098190556002600a819055600b91909155600c55600f80546001600160a01b03199081167353ad543ab6df2cebcdae3ba8703a0ab2b553b1f490811790925560108054821683179055601180548216831790556012805490911690911790556014805461ffff60a01b1916600160a81b179055348015620000e657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008543360009081526001602090815260409182902092909255601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca9190620003f1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e9190620003f1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b29190620003f1565b601480546001600160a01b0319166001600160a01b03928316179055600080548216815260036020526040808220805460ff1990811660019081179092553084528284208054821683179055600f54851684528284208054821683179055601054851684528284208054821683179055601154851684528284208054821683179055601254909416835291208054909216179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda10000006040516200039791815260200190565b60405180910390a35062000423565b600082620003c457634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620003eb57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200040457600080fd5b81516001600160a01b03811681146200041c57600080fd5b9392505050565b61242680620004336000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106db578063dd62ed3e146106fb578063e293d31614610741578063f2fde38b14610761578063fca419ae1461078157600080fd5b8063a9bbd11414610646578063a9f6151814610666578063aa77ed6714610686578063c0246668146106a6578063c3c8cd80146106c657600080fd5b806395d89b41116100f257806395d89b41146105985780639f3d1360146105c6578063a2a957bb146105e6578063a2fff11414610606578063a9059cbb1461062657600080fd5b8063715018a614610500578063758dbe0314610515578063768dc710146105355780638a8c523c146105655780638da5cb5b1461057a57600080fd5b806323b872dd116101bc5780634ada218b116101805780634ada218b146104745780636a1961c4146104955780636d8aa8f8146104ab5780636fc3eaec146104cb57806370a08231146104e057600080fd5b806323b872dd146103d25780632be29fa8146103f2578063313ce5671461041e578063455a43961461043257806349bd5a5e1461045457600080fd5b80631694505e116102035780631694505e14610323578063181281291461034357806318160ddd146103645780631cdd3be3146103815780631eb147d5146103b157600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b85780630cfc15f9146102e857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600981526812195919d9599d5b9960ba1b60208201525b6040516102749190611f91565b3480156102c457600080fd5b506102d86102d3366004611ff4565b6107a1565b6040519015158152602001610274565b3480156102f457600080fd5b50610315610303366004612020565b60016020526000908152604090205481565b604051908152602001610274565b34801561032f57600080fd5b50601354610260906001600160a01b031681565b34801561034f57600080fd5b506005546102d890600160b01b900460ff1681565b34801561037057600080fd5b5069d3c21bcecceda1000000610315565b34801561038d57600080fd5b506102d861039c366004612020565b60046020526000908152604090205460ff1681565b3480156103bd57600080fd5b506005546102d890600160a81b900460ff1681565b3480156103de57600080fd5b506102d86103ed36600461203d565b6107b8565b3480156103fe57600080fd5b5060075461040c9060ff1681565b60405160ff9091168152602001610274565b34801561042a57600080fd5b50600961040c565b34801561043e57600080fd5b5061045261044d36600461208c565b610821565b005b34801561046057600080fd5b50601454610260906001600160a01b031681565b34801561048057600080fd5b506005546102d890600160a01b900460ff1681565b3480156104a157600080fd5b5061031560065481565b3480156104b757600080fd5b506104526104c63660046120c5565b6108b4565b3480156104d757600080fd5b506104526108fc565b3480156104ec57600080fd5b506103156104fb366004612020565b610920565b34801561050c57600080fd5b50610452610942565b34801561052157600080fd5b50610452610530366004612020565b6109b6565b34801561054157600080fd5b506102d8610550366004612020565b60036020526000908152604090205460ff1681565b34801561057157600080fd5b50610452610a54565b34801561058657600080fd5b506000546001600160a01b0316610260565b3480156105a457600080fd5b50604080518082019091526005815264121195539160da1b60208201526102ab565b3480156105d257600080fd5b506104526105e1366004612020565b610b00565b3480156105f257600080fd5b506104526106013660046120e2565b610b9e565b34801561061257600080fd5b50610452610621366004612020565b610c7c565b34801561063257600080fd5b506102d8610641366004611ff4565b610d1a565b34801561065257600080fd5b50610452610661366004612020565b610d27565b34801561067257600080fd5b50610452610681366004612114565b610d7a565b34801561069257600080fd5b506104526106a1366004612020565b610dd1565b3480156106b257600080fd5b506104526106c136600461208c565b610e6f565b3480156106d257600080fd5b50610452610ef1565b3480156106e757600080fd5b506104526106f6366004612137565b610f1e565b34801561070757600080fd5b506103156107163660046121bd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561074d57600080fd5b5061045261075c36600461203d565b610ffa565b34801561076d57600080fd5b5061045261077c366004612020565b6110ea565b34801561078d57600080fd5b5061045261079c366004612137565b6111d4565b60006107ae3384846112a3565b5060015b92915050565b60006107c58484846113c7565b6108178433610812856040518060600160405280602881526020016123c9602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611848565b6112a3565b5060019392505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161084b906121eb565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108de5760405162461bcd60e51b815260040161084b906121eb565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461091357600080fd5b4761091d81611882565b50565b6001600160a01b0381166000908152600160205260408120546107b2906119d0565b6000546001600160a01b0316331461096c5760405162461bcd60e51b815260040161084b906121eb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109e05760405162461bcd60e51b815260040161084b906121eb565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a7e5760405162461bcd60e51b815260040161084b906121eb565b600554600160a01b900460ff1615610ad85760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c6564000000000000604482015260640161084b565b600754610ae89060ff1643612236565b6006556005805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b2a5760405162461bcd60e51b815260040161084b906121eb565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610bc85760405162461bcd60e51b815260040161084b906121eb565b60058410610c185760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e00000000604482015260640161084b565b60058310610c685760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e00000000604482015260640161084b565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610ca65760405162461bcd60e51b815260040161084b906121eb565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107ae3384846113c7565b6000546001600160a01b03163314610d515760405162461bcd60e51b815260040161084b906121eb565b600580546001600160a01b0319166001600160a01b03831690811790915561091d906001610e6f565b6000546001600160a01b03163314610da45760405162461bcd60e51b815260040161084b906121eb565b600554600160a01b900460ff1615610dbb57600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b815260040161084b906121eb565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e995760405162461bcd60e51b815260040161084b906121eb565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a8565b6000546001600160a01b03163314610f0857600080fd5b6000610f1330610920565b905061091d81611a54565b6000546001600160a01b03163314610f485760405162461bcd60e51b815260040161084b906121eb565b60005b82811015610fb9578160036000868685818110610f6a57610f6a612249565b9050602002016020810190610f7f9190612020565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610fb18161225f565b915050610f4b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610fed93929190612278565b60405180910390a1505050565b6000546001600160a01b031633146110245760405162461bcd60e51b815260040161084b906121eb565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161106991815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e491906122d1565b50505050565b6000546001600160a01b031633146111145760405162461bcd60e51b815260040161084b906121eb565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161084b906121eb565b60005b8281101561126f57816004600086868581811061122057611220612249565b90506020020160208101906112359190612020565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112678161225f565b915050611201565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf6838383604051610fed93929190612278565b6001600160a01b0383166113055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084b565b6001600160a01b0382166113665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b038481169116146113f757600554600160a01b900460ff1615156001146113f757600080fd5b6001600160a01b03831661145b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084b565b6001600160a01b0382166114bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084b565b6000811161151f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084b565b6001600160a01b03831660009081526004602052604090205460ff161561157e5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015260640161084b565b6000600d819055600e55600554600160a81b900460ff166115c3576014546001600160a01b03908116908316036115c3576005805460ff60a81b1916600160a81b1790555b6005546001600160a01b0384811691161461166357600554600160a01b900460ff1680156115f357506006544311155b80156116095750600554600160b01b900460ff16155b1561166357600954600d55600a54600e55611625838383611bce565b6014546001600160a01b0383811691161461165e576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156116855750600554600160b01b900460ff165b15611698576005805460ff60b01b191690555b6000546001600160a01b038481169116148015906116c457506000546001600160a01b03838116911614155b1561183d5760006116d430610920565b601454909150600160a01b900460ff161580156116ff57506014546001600160a01b03858116911614155b80156117145750601454600160a81b900460ff165b80156117205750600081115b156117405761172e81611a54565b47801561173e5761173e47611882565b505b6014546001600160a01b03858116911614801561176b57506013546001600160a01b03848116911614155b1561177d57600954600d55600a54600e555b6014546001600160a01b0384811691161480156117a857506013546001600160a01b03858116911614155b156117ba57600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff16806117f957506001600160a01b03831660009081526003602052604090205460ff165b8061182b57506014546001600160a01b0385811691161480159061182b57506014546001600160a01b03848116911614155b1561183b576000600d819055600e555b505b61165e838383611bce565b6000818484111561186c5760405162461bcd60e51b815260040161084b9190611f91565b50600061187984866122ee565b95945050505050565b600061189a6007611894846002611bd9565b90611c5b565b905060006118ae6007611894856002611bd9565b905060006118c26007611894866002611bd9565b905060006118dc826118d685818989611c9d565b90611c9d565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611917573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611952573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561198d573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119c8573d6000803e3d6000fd5b505050505050565b6000600854821115611a375760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161084b565b6000611a41611cdf565b9050611a4d8382611c5b565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9c57611a9c612249565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b199190612301565b81600181518110611b2c57611b2c612249565b6001600160a01b039283166020918202929092010152601354611b5291309116846112a3565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8b90859060009086903090429060040161231e565b600060405180830381600087803b158015611ba557600080fd5b505af1158015611bb9573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b61165e838383611d02565b600082600003611beb575060006107b2565b6000611bf7838561238f565b905082611c0485836123a6565b14611a4d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084b565b6000611a4d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ead565b6000611a4d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611848565b6000806000611cec611edb565b9092509050611cfb8282611c5b565b9250505090565b6000611d0c611cdf565b90506000611d51611d2d6064611894600e5487611bd990919063ffffffff16565b6118d6611d4a6064611894600d5489611bd990919063ffffffff16565b8690611c9d565b90506000611d5f8484611bd9565b90506000611d8784611d816064611894600d548a611bd990919063ffffffff16565b90611bd9565b90506000611da985611d816064611894600e548b611bd990919063ffffffff16565b90506000611dbb826118d68686611c9d565b6001600160a01b038a16600090815260016020526040902054909150611de19085611c9d565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611e109082611f1f565b6001600160a01b038916600090815260016020526040808220929092553081522054611e3c9083611f1f565b30600090815260016020526040902055611e5583611f7e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e9a91815260200190565b60405180910390a3505050505050505050565b60008183611ece5760405162461bcd60e51b815260040161084b9190611f91565b50600061187984866123a6565b600854600090819069d3c21bcecceda1000000611ef88282611c5b565b821015611f165750506008549269d3c21bcecceda100000092509050565b90939092509050565b600080611f2c8385612236565b905083811015611a4d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084b565b600854611f8b9082611c9d565b60085550565b600060208083528351808285015260005b81811015611fbe57858101830151858201604001528201611fa2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091d57600080fd5b6000806040838503121561200757600080fd5b823561201281611fdf565b946020939093013593505050565b60006020828403121561203257600080fd5b8135611a4d81611fdf565b60008060006060848603121561205257600080fd5b833561205d81611fdf565b9250602084013561206d81611fdf565b929592945050506040919091013590565b801515811461091d57600080fd5b6000806040838503121561209f57600080fd5b82356120aa81611fdf565b915060208301356120ba8161207e565b809150509250929050565b6000602082840312156120d757600080fd5b8135611a4d8161207e565b600080600080608085870312156120f857600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561212657600080fd5b813560ff81168114611a4d57600080fd5b60008060006040848603121561214c57600080fd5b833567ffffffffffffffff8082111561216457600080fd5b818601915086601f83011261217857600080fd5b81358181111561218757600080fd5b8760208260051b850101111561219c57600080fd5b602092830195509350508401356121b28161207e565b809150509250925092565b600080604083850312156121d057600080fd5b82356121db81611fdf565b915060208301356120ba81611fdf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156107b2576107b2612220565b634e487b7160e01b600052603260045260246000fd5b60006001820161227157612271612220565b5060010190565b6040808252810183905260008460608301825b868110156122bb57823561229e81611fdf565b6001600160a01b031682526020928301929091019060010161228b565b5080925050508215156020830152949350505050565b6000602082840312156122e357600080fd5b8151611a4d8161207e565b818103818111156107b2576107b2612220565b60006020828403121561231357600080fd5b8151611a4d81611fdf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561236e5784516001600160a01b031683529383019391830191600101612349565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107b2576107b2612220565b6000826123c357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220da34bf1444a1882191b23b65daec70c4cf339805988468e3666422223358265c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106db578063dd62ed3e146106fb578063e293d31614610741578063f2fde38b14610761578063fca419ae1461078157600080fd5b8063a9bbd11414610646578063a9f6151814610666578063aa77ed6714610686578063c0246668146106a6578063c3c8cd80146106c657600080fd5b806395d89b41116100f257806395d89b41146105985780639f3d1360146105c6578063a2a957bb146105e6578063a2fff11414610606578063a9059cbb1461062657600080fd5b8063715018a614610500578063758dbe0314610515578063768dc710146105355780638a8c523c146105655780638da5cb5b1461057a57600080fd5b806323b872dd116101bc5780634ada218b116101805780634ada218b146104745780636a1961c4146104955780636d8aa8f8146104ab5780636fc3eaec146104cb57806370a08231146104e057600080fd5b806323b872dd146103d25780632be29fa8146103f2578063313ce5671461041e578063455a43961461043257806349bd5a5e1461045457600080fd5b80631694505e116102035780631694505e14610323578063181281291461034357806318160ddd146103645780631cdd3be3146103815780631eb147d5146103b157600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b85780630cfc15f9146102e857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600981526812195919d9599d5b9960ba1b60208201525b6040516102749190611f91565b3480156102c457600080fd5b506102d86102d3366004611ff4565b6107a1565b6040519015158152602001610274565b3480156102f457600080fd5b50610315610303366004612020565b60016020526000908152604090205481565b604051908152602001610274565b34801561032f57600080fd5b50601354610260906001600160a01b031681565b34801561034f57600080fd5b506005546102d890600160b01b900460ff1681565b34801561037057600080fd5b5069d3c21bcecceda1000000610315565b34801561038d57600080fd5b506102d861039c366004612020565b60046020526000908152604090205460ff1681565b3480156103bd57600080fd5b506005546102d890600160a81b900460ff1681565b3480156103de57600080fd5b506102d86103ed36600461203d565b6107b8565b3480156103fe57600080fd5b5060075461040c9060ff1681565b60405160ff9091168152602001610274565b34801561042a57600080fd5b50600961040c565b34801561043e57600080fd5b5061045261044d36600461208c565b610821565b005b34801561046057600080fd5b50601454610260906001600160a01b031681565b34801561048057600080fd5b506005546102d890600160a01b900460ff1681565b3480156104a157600080fd5b5061031560065481565b3480156104b757600080fd5b506104526104c63660046120c5565b6108b4565b3480156104d757600080fd5b506104526108fc565b3480156104ec57600080fd5b506103156104fb366004612020565b610920565b34801561050c57600080fd5b50610452610942565b34801561052157600080fd5b50610452610530366004612020565b6109b6565b34801561054157600080fd5b506102d8610550366004612020565b60036020526000908152604090205460ff1681565b34801561057157600080fd5b50610452610a54565b34801561058657600080fd5b506000546001600160a01b0316610260565b3480156105a457600080fd5b50604080518082019091526005815264121195539160da1b60208201526102ab565b3480156105d257600080fd5b506104526105e1366004612020565b610b00565b3480156105f257600080fd5b506104526106013660046120e2565b610b9e565b34801561061257600080fd5b50610452610621366004612020565b610c7c565b34801561063257600080fd5b506102d8610641366004611ff4565b610d1a565b34801561065257600080fd5b50610452610661366004612020565b610d27565b34801561067257600080fd5b50610452610681366004612114565b610d7a565b34801561069257600080fd5b506104526106a1366004612020565b610dd1565b3480156106b257600080fd5b506104526106c136600461208c565b610e6f565b3480156106d257600080fd5b50610452610ef1565b3480156106e757600080fd5b506104526106f6366004612137565b610f1e565b34801561070757600080fd5b506103156107163660046121bd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561074d57600080fd5b5061045261075c36600461203d565b610ffa565b34801561076d57600080fd5b5061045261077c366004612020565b6110ea565b34801561078d57600080fd5b5061045261079c366004612137565b6111d4565b60006107ae3384846112a3565b5060015b92915050565b60006107c58484846113c7565b6108178433610812856040518060600160405280602881526020016123c9602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611848565b6112a3565b5060019392505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161084b906121eb565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108de5760405162461bcd60e51b815260040161084b906121eb565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461091357600080fd5b4761091d81611882565b50565b6001600160a01b0381166000908152600160205260408120546107b2906119d0565b6000546001600160a01b0316331461096c5760405162461bcd60e51b815260040161084b906121eb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109e05760405162461bcd60e51b815260040161084b906121eb565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a7e5760405162461bcd60e51b815260040161084b906121eb565b600554600160a01b900460ff1615610ad85760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c6564000000000000604482015260640161084b565b600754610ae89060ff1643612236565b6006556005805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b2a5760405162461bcd60e51b815260040161084b906121eb565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610bc85760405162461bcd60e51b815260040161084b906121eb565b60058410610c185760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e00000000604482015260640161084b565b60058310610c685760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e00000000604482015260640161084b565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610ca65760405162461bcd60e51b815260040161084b906121eb565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107ae3384846113c7565b6000546001600160a01b03163314610d515760405162461bcd60e51b815260040161084b906121eb565b600580546001600160a01b0319166001600160a01b03831690811790915561091d906001610e6f565b6000546001600160a01b03163314610da45760405162461bcd60e51b815260040161084b906121eb565b600554600160a01b900460ff1615610dbb57600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b815260040161084b906121eb565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610e995760405162461bcd60e51b815260040161084b906121eb565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a8565b6000546001600160a01b03163314610f0857600080fd5b6000610f1330610920565b905061091d81611a54565b6000546001600160a01b03163314610f485760405162461bcd60e51b815260040161084b906121eb565b60005b82811015610fb9578160036000868685818110610f6a57610f6a612249565b9050602002016020810190610f7f9190612020565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610fb18161225f565b915050610f4b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051610fed93929190612278565b60405180910390a1505050565b6000546001600160a01b031633146110245760405162461bcd60e51b815260040161084b906121eb565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161106991815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e491906122d1565b50505050565b6000546001600160a01b031633146111145760405162461bcd60e51b815260040161084b906121eb565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161084b906121eb565b60005b8281101561126f57816004600086868581811061122057611220612249565b90506020020160208101906112359190612020565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112678161225f565b915050611201565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf6838383604051610fed93929190612278565b6001600160a01b0383166113055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084b565b6001600160a01b0382166113665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b038481169116146113f757600554600160a01b900460ff1615156001146113f757600080fd5b6001600160a01b03831661145b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084b565b6001600160a01b0382166114bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084b565b6000811161151f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084b565b6001600160a01b03831660009081526004602052604090205460ff161561157e5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015260640161084b565b6000600d819055600e55600554600160a81b900460ff166115c3576014546001600160a01b03908116908316036115c3576005805460ff60a81b1916600160a81b1790555b6005546001600160a01b0384811691161461166357600554600160a01b900460ff1680156115f357506006544311155b80156116095750600554600160b01b900460ff16155b1561166357600954600d55600a54600e55611625838383611bce565b6014546001600160a01b0383811691161461165e576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156116855750600554600160b01b900460ff165b15611698576005805460ff60b01b191690555b6000546001600160a01b038481169116148015906116c457506000546001600160a01b03838116911614155b1561183d5760006116d430610920565b601454909150600160a01b900460ff161580156116ff57506014546001600160a01b03858116911614155b80156117145750601454600160a81b900460ff165b80156117205750600081115b156117405761172e81611a54565b47801561173e5761173e47611882565b505b6014546001600160a01b03858116911614801561176b57506013546001600160a01b03848116911614155b1561177d57600954600d55600a54600e555b6014546001600160a01b0384811691161480156117a857506013546001600160a01b03858116911614155b156117ba57600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff16806117f957506001600160a01b03831660009081526003602052604090205460ff165b8061182b57506014546001600160a01b0385811691161480159061182b57506014546001600160a01b03848116911614155b1561183b576000600d819055600e555b505b61165e838383611bce565b6000818484111561186c5760405162461bcd60e51b815260040161084b9190611f91565b50600061187984866122ee565b95945050505050565b600061189a6007611894846002611bd9565b90611c5b565b905060006118ae6007611894856002611bd9565b905060006118c26007611894866002611bd9565b905060006118dc826118d685818989611c9d565b90611c9d565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611917573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611952573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561198d573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119c8573d6000803e3d6000fd5b505050505050565b6000600854821115611a375760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161084b565b6000611a41611cdf565b9050611a4d8382611c5b565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9c57611a9c612249565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b199190612301565b81600181518110611b2c57611b2c612249565b6001600160a01b039283166020918202929092010152601354611b5291309116846112a3565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8b90859060009086903090429060040161231e565b600060405180830381600087803b158015611ba557600080fd5b505af1158015611bb9573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b61165e838383611d02565b600082600003611beb575060006107b2565b6000611bf7838561238f565b905082611c0485836123a6565b14611a4d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084b565b6000611a4d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ead565b6000611a4d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611848565b6000806000611cec611edb565b9092509050611cfb8282611c5b565b9250505090565b6000611d0c611cdf565b90506000611d51611d2d6064611894600e5487611bd990919063ffffffff16565b6118d6611d4a6064611894600d5489611bd990919063ffffffff16565b8690611c9d565b90506000611d5f8484611bd9565b90506000611d8784611d816064611894600d548a611bd990919063ffffffff16565b90611bd9565b90506000611da985611d816064611894600e548b611bd990919063ffffffff16565b90506000611dbb826118d68686611c9d565b6001600160a01b038a16600090815260016020526040902054909150611de19085611c9d565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611e109082611f1f565b6001600160a01b038916600090815260016020526040808220929092553081522054611e3c9083611f1f565b30600090815260016020526040902055611e5583611f7e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051611e9a91815260200190565b60405180910390a3505050505050505050565b60008183611ece5760405162461bcd60e51b815260040161084b9190611f91565b50600061187984866123a6565b600854600090819069d3c21bcecceda1000000611ef88282611c5b565b821015611f165750506008549269d3c21bcecceda100000092509050565b90939092509050565b600080611f2c8385612236565b905083811015611a4d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084b565b600854611f8b9082611c9d565b60085550565b600060208083528351808285015260005b81811015611fbe57858101830151858201604001528201611fa2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091d57600080fd5b6000806040838503121561200757600080fd5b823561201281611fdf565b946020939093013593505050565b60006020828403121561203257600080fd5b8135611a4d81611fdf565b60008060006060848603121561205257600080fd5b833561205d81611fdf565b9250602084013561206d81611fdf565b929592945050506040919091013590565b801515811461091d57600080fd5b6000806040838503121561209f57600080fd5b82356120aa81611fdf565b915060208301356120ba8161207e565b809150509250929050565b6000602082840312156120d757600080fd5b8135611a4d8161207e565b600080600080608085870312156120f857600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561212657600080fd5b813560ff81168114611a4d57600080fd5b60008060006040848603121561214c57600080fd5b833567ffffffffffffffff8082111561216457600080fd5b818601915086601f83011261217857600080fd5b81358181111561218757600080fd5b8760208260051b850101111561219c57600080fd5b602092830195509350508401356121b28161207e565b809150509250925092565b600080604083850312156121d057600080fd5b82356121db81611fdf565b915060208301356120ba81611fdf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156107b2576107b2612220565b634e487b7160e01b600052603260045260246000fd5b60006001820161227157612271612220565b5060010190565b6040808252810183905260008460608301825b868110156122bb57823561229e81611fdf565b6001600160a01b031682526020928301929091019060010161228b565b5080925050508215156020830152949350505050565b6000602082840312156122e357600080fd5b8151611a4d8161207e565b818103818111156107b2576107b2612220565b60006020828403121561231357600080fd5b8151611a4d81611fdf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561236e5784516001600160a01b031683529383019391830191600101612349565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107b2576107b2612220565b6000826123c357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220da34bf1444a1882191b23b65daec70c4cf339805988468e3666422223358265c64736f6c63430008130033

Deployed Bytecode Sourcemap

16665:13987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16995:75;;;;;;;;;;-1:-1:-1;16995:75:0;;;;-1:-1:-1;;;;;16995:75:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;16995:75:0;;;;;;;;19758:83;;;;;;;;;;-1:-1:-1;19828:5:0;;;;;;;;;;;;-1:-1:-1;;;19828:5:0;;;;19758:83;;;;;;;:::i;20610:161::-;;;;;;;;;;-1:-1:-1;20610:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;20610:161:0;1231:187:1;16754:43:0;;;;;;;;;;-1:-1:-1;16754:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1821:25:1;;;1809:2;1794:18;16754:43:0;1675:177:1;18394:41:0;;;;;;;;;;-1:-1:-1;18394:41:0;;;;-1:-1:-1;;;;;18394:41:0;;;17162:32;;;;;;;;;;-1:-1:-1;17162:32:0;;;;-1:-1:-1;;;17162:32:0;;;;;;20035:95;;;;;;;;;;-1:-1:-1;17514:25:0;20035:95;;16940:46;;;;;;;;;;-1:-1:-1;16940:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17118:37;;;;;;;;;;-1:-1:-1;17118:37:0;;;;-1:-1:-1;;;17118:37:0;;;;;;20779:313;;;;;;;;;;-1:-1:-1;20779:313:0;;;;;:::i;:::-;;:::i;17240:28::-;;;;;;;;;;-1:-1:-1;17240:28:0;;;;;;;;;;;2724:4:1;2712:17;;;2694:36;;2682:2;2667:18;17240:28:0;2552:184:1;19944:83:0;;;;;;;;;;-1:-1:-1;17983:1:0;19944:83;;30131:169;;;;;;;;;;-1:-1:-1;30131:169:0;;;;;:::i;:::-;;:::i;:::-;;18442:28;;;;;;;;;;-1:-1:-1;18442:28:0;;;;-1:-1:-1;;;;;18442:28:0;;;17077:34;;;;;;;;;;-1:-1:-1;17077:34:0;;;;-1:-1:-1;;;17077:34:0;;;;;;17201:32;;;;;;;;;;;;;;;;29307:101;;;;;;;;;;-1:-1:-1;29307:101:0;;;;;:::i;:::-;;:::i;28673:186::-;;;;;;;;;;;;;:::i;20138:138::-;;;;;;;;;;-1:-1:-1;20138:138:0;;;;;:::i;:::-;;:::i;16084:148::-;;;;;;;;;;;;;:::i;26152:237::-;;;;;;;;;;-1:-1:-1;26152:237:0;;;;;:::i;:::-;;:::i;16882:51::-;;;;;;;;;;-1:-1:-1;16882:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21705:190;;;;;;;;;;;;;:::i;15442:79::-;;;;;;;;;;-1:-1:-1;15480:7:0;15507:6;-1:-1:-1;;;;;15507:6:0;15442:79;;19849:87;;;;;;;;;;-1:-1:-1;19921:7:0;;;;;;;;;;;;-1:-1:-1;;;19921:7:0;;;;19849:87;;25844:213;;;;;;;;;;-1:-1:-1;25844:213:0;;;;;:::i;:::-;;:::i;28871:424::-;;;;;;;;;;-1:-1:-1;28871:424:0;;;;;:::i;:::-;;:::i;26785:245::-;;;;;;;;;;-1:-1:-1;26785:245:0;;;;;:::i;:::-;;:::i;20284:167::-;;;;;;;;;;-1:-1:-1;20284:167:0;;;;;:::i;:::-;;:::i;19588:162::-;;;;;;;;;;-1:-1:-1;19588:162:0;;;;;:::i;:::-;;:::i;19447:133::-;;;;;;;;;;-1:-1:-1;19447:133:0;;;;;:::i;:::-;;:::i;26475:221::-;;;;;;;;;;-1:-1:-1;26475:221:0;;;;;:::i;:::-;;:::i;29876:181::-;;;;;;;;;;-1:-1:-1;29876:181:0;;;;;:::i;:::-;;:::i;28478:187::-;;;;;;;;;;;;;:::i;29497:301::-;;;;;;;;;;-1:-1:-1;29497:301:0;;;;;:::i;:::-;;:::i;20459:143::-;;;;;;;;;;-1:-1:-1;20459:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20567:18:0;;;20540:7;20567:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20459:143;25546:209;;;;;;;;;;-1:-1:-1;25546:209:0;;;;;:::i;:::-;;:::i;16387:244::-;;;;;;;;;;-1:-1:-1;16387:244:0;;;;;:::i;:::-;;:::i;30376:271::-;;;;;;;;;;-1:-1:-1;30376:271:0;;;;;:::i;:::-;;:::i;20610:161::-;20685:4;20702:39;3733:10;20725:7;20734:6;20702:8;:39::i;:::-;-1:-1:-1;20759:4:0;20610:161;;;;;:::o;20779:313::-;20877:4;20894:36;20904:6;20912:9;20923:6;20894:9;:36::i;:::-;20941:121;20950:6;3733:10;20972:89;21010:6;20972:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20972:19:0;;;;;;:11;:19;;;;;;;;3733:10;20972:33;;;;;;;;;;:37;:89::i;:::-;20941:8;:121::i;:::-;-1:-1:-1;21080:4:0;20779:313;;;;;:::o;30131:169::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30213:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;30213:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30260:32;;1371:41:1;;;30260:32:0::1;::::0;1344:18:1;30260:32:0::1;;;;;;;;30131:169:::0;;:::o;29307:101::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;29374:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;29374:26:0::1;-1:-1:-1::0;;;;29374:26:0;;::::1;::::0;;;::::1;::::0;;29307:101::o;28673:186::-;15480:7;15507:6;-1:-1:-1;;;;;15507:6:0;3733:10;28723:23;28715:32;;;;;;28787:21;28819:32;28787:21;28819:12;:32::i;:::-;28704:155;28673:186::o;20138:138::-;-1:-1:-1;;;;;20251:16:0;;20204:7;20251:16;;;:7;:16;;;;;;20231:37;;:19;:37::i;16084:148::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;16191:1:::1;16175:6:::0;;16154:40:::1;::::0;-1:-1:-1;;;;;16175:6:0;;::::1;::::0;16154:40:::1;::::0;16191:1;;16154:40:::1;16222:1;16205:19:::0;;-1:-1:-1;;;;;;16205:19:0::1;::::0;;16084:148::o;26152:237::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;26264:17:::1;::::0;26240:49:::1;::::0;-1:-1:-1;;;;;26240:49:0;;::::1;::::0;26264:17:::1;::::0;26240:49:::1;::::0;26264:17:::1;::::0;26240:49:::1;26301:17;:25:::0;;-1:-1:-1;;;;;26301:25:0;;::::1;-1:-1:-1::0;;;;;;26301:25:0;;::::1;::::0;::::1;::::0;;:17:::1;26337:37:::0;;;:18:::1;:37;::::0;;;;:44;;-1:-1:-1;;26337:44:0::1;26301:25:::0;26337:44:::1;::::0;;26152:237::o;21705:190::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;21765:14:::1;::::0;-1:-1:-1;;;21765:14:0;::::1;;;21764:15;21756:54;;;::::0;-1:-1:-1;;;21756:54:0;;6132:2:1;21756:54:0::1;::::0;::::1;6114:21:1::0;6171:2;6151:18;;;6144:30;6210:28;6190:18;;;6183:56;6256:18;;21756:54:0::1;5930:350:1::0;21756:54:0::1;21852:11;::::0;21837:26:::1;::::0;21852:11:::1;;21837:12;:26;:::i;:::-;21817:17;:46:::0;21870:14:::1;:21:::0;;-1:-1:-1;;;;21870:21:0::1;-1:-1:-1::0;;;21870:21:0::1;::::0;;21705:190::o;25844:213::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;25946:11:::1;::::0;25928:39:::1;::::0;-1:-1:-1;;;;;25928:39:0;;::::1;::::0;25946:11:::1;::::0;25928:39:::1;::::0;25946:11:::1;::::0;25928:39:::1;25979:11;:21:::0;;-1:-1:-1;;;;;25979:21:0;;::::1;-1:-1:-1::0;;;;;;25979:21:0;;::::1;::::0;::::1;::::0;;:11:::1;26011:31:::0;;;:18:::1;:31;::::0;;;;:38;;-1:-1:-1;;26011:38:0::1;25979:21:::0;26011:38:::1;::::0;;25844:213::o;28871:424::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;29026:1:::1;29010:13;:17;29002:58;;;::::0;-1:-1:-1;;;29002:58:0;;6749:2:1;29002:58:0::1;::::0;::::1;6731:21:1::0;6788:2;6768:18;;;6761:30;6827;6807:18;;;6800:58;6875:18;;29002:58:0::1;6547:352:1::0;29002:58:0::1;29093:1;29076:14;:18;29068:59;;;::::0;-1:-1:-1;;;29068:59:0;;6749:2:1;29068:59:0::1;::::0;::::1;6731:21:1::0;6788:2;6768:18;;;6761:30;6827;6807:18;;;6800:58;6875:18;;29068:59:0::1;6547:352:1::0;29068:59:0::1;29138:14;:30:::0;;;;29179:15:::1;:32:::0;;;;29222:12:::1;:26:::0;29259:13:::1;:28:::0;28871:424::o;26785:245::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;26899:15:::1;::::0;26877:51:::1;::::0;-1:-1:-1;;;;;26877:51:0;;::::1;::::0;26899:15:::1;::::0;26877:51:::1;::::0;26899:15:::1;::::0;26877:51:::1;26940:15;:29:::0;;-1:-1:-1;;;;;26940:29:0;;::::1;-1:-1:-1::0;;;;;;26940:29:0;;::::1;::::0;::::1;::::0;;:15:::1;26980:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;26980:42:0::1;26940:29:::0;26980:42:::1;::::0;;26785:245::o;20284:167::-;20362:4;20379:42;3733:10;20403:9;20414:6;20379:9;:42::i;19588:162::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;19669:15:::1;:24:::0;;-1:-1:-1;;;;;;19669:24:0::1;-1:-1:-1::0;;;;;19669:24:0;::::1;::::0;;::::1;::::0;;;19704:38:::1;::::0;-1:-1:-1;19704:15:0::1;:38::i;19447:133::-:0;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;19525:14:::1;::::0;-1:-1:-1;;;19525:14:0;::::1;;;19524:15;19516:24;;;::::0;::::1;;19551:11;:21:::0;;-1:-1:-1;;19551:21:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19447:133::o;26475:221::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;26580:12:::1;::::0;26561:42:::1;::::0;-1:-1:-1;;;;;26561:42:0;;::::1;::::0;26580:12:::1;::::0;26561:42:::1;::::0;26580:12:::1;::::0;26561:42:::1;26615:12;:23:::0;;-1:-1:-1;;;;;26615:23:0;;::::1;-1:-1:-1::0;;;;;;26615:23:0;;::::1;::::0;::::1;::::0;;:12:::1;26649:32:::0;;;:18:::1;:32;::::0;;;;:39;;-1:-1:-1;;26649:39:0::1;26615:23:::0;26649:39:::1;::::0;;26475:221::o;29876:181::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29961:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;29961:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30015:34;;1371:41:1;;;30015:34:0::1;::::0;1344:18:1;30015:34:0::1;1231:187:1::0;28478::0;15480:7;15507:6;-1:-1:-1;;;;;15507:6:0;3733:10;28528:23;28520:32;;;;;;28563:23;28589:24;28607:4;28589:9;:24::i;:::-;28563:50;;28624:33;28641:15;28624:16;:33::i;29497:301::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;29614:9:::1;29610:114;29629:19:::0;;::::1;29610:114;;;29704:8;29670:18;:31;29689:8;;29698:1;29689:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29670:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29670:31:0;:42;;-1:-1:-1;;29670:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29650:3;::::1;::::0;::::1;:::i;:::-;;;;29610:114;;;;29739:51;29771:8;;29781;29739:51;;;;;;;;:::i;:::-;;;;;;;;29497:301:::0;;;:::o;25546:209::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;25681:3:::1;-1:-1:-1::0;;;;;25655:39:0::1;25669:10;-1:-1:-1::0;;;;;25655:39:0::1;;25686:7;25655:39;;;;1821:25:1::0;;1809:2;1794:18;;1675:177;25655:39:0::1;;;;;;;;25706:41;::::0;-1:-1:-1;;;25706:41:0;;-1:-1:-1;;;;;8167:32:1;;;25706:41:0::1;::::0;::::1;8149:51:1::0;8216:18;;;8209:34;;;25706:27:0;::::1;::::0;::::1;::::0;8122:18:1;;25706:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25546:209:::0;;;:::o;16387:244::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16476:22:0;::::1;16468:73;;;::::0;-1:-1:-1;;;16468:73:0;;8706:2:1;16468:73:0::1;::::0;::::1;8688:21:1::0;8745:2;8725:18;;;8718:30;8784:34;8764:18;;;8757:62;-1:-1:-1;;;8835:18:1;;;8828:36;8881:19;;16468:73:0::1;8504:402:1::0;16468:73:0::1;16578:6;::::0;;16557:38:::1;::::0;-1:-1:-1;;;;;16557:38:0;;::::1;::::0;16578:6;::::1;::::0;16557:38:::1;::::0;::::1;16606:6;:17:::0;;-1:-1:-1;;;;;;16606:17:0::1;-1:-1:-1::0;;;;;16606:17:0;;;::::1;::::0;;;::::1;::::0;;16387:244::o;30376:271::-;15654:6;;-1:-1:-1;;;;;15654:6:0;3733:10;15654:22;15646:67;;;;-1:-1:-1;;;15646:67:0;;;;;;;:::i;:::-;30481:9:::1;30477:107;30496:19:::0;;::::1;30477:107;;;30567:5;30537:14;:27;30552:8;;30561:1;30552:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30537:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30537:27:0;:35;;-1:-1:-1;;30537:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30517:3;::::1;::::0;::::1;:::i;:::-;;;;30477:107;;;;30599:40;30623:8;;30633:5;30599:40;;;;;;;;:::i;21362:335::-:0;-1:-1:-1;;;;;21455:19:0;;21447:68;;;;-1:-1:-1;;;21447:68:0;;9113:2:1;21447:68:0;;;9095:21:1;9152:2;9132:18;;;9125:30;9191:34;9171:18;;;9164:62;-1:-1:-1;;;9242:18:1;;;9235:34;9286:19;;21447:68:0;8911:400:1;21447:68:0;-1:-1:-1;;;;;21534:21:0;;21526:68;;;;-1:-1:-1;;;21526:68:0;;9518:2:1;21526:68:0;;;9500:21:1;9557:2;9537:18;;;9530:30;9596:34;9576:18;;;9569:62;-1:-1:-1;;;9647:18:1;;;9640:32;9689:19;;21526:68:0;9316:398:1;21526:68:0;-1:-1:-1;;;;;21605:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21657:32;;1821:25:1;;;21657:32:0;;1794:18:1;21657:32:0;;;;;;;21362:335;;;:::o;21903:2406::-;15480:7;15507:6;-1:-1:-1;;;;;21987:15:0;;;15507:6;;21987:15;21983:61;;22021:14;;-1:-1:-1;;;22021:14:0;;;;:22;;22039:4;22021:22;22013:31;;;;;;-1:-1:-1;;;;;22063:18:0;;22055:68;;;;-1:-1:-1;;;22055:68:0;;9921:2:1;22055:68:0;;;9903:21:1;9960:2;9940:18;;;9933:30;9999:34;9979:18;;;9972:62;-1:-1:-1;;;10050:18:1;;;10043:35;10095:19;;22055:68:0;9719:401:1;22055:68:0;-1:-1:-1;;;;;22142:16:0;;22134:64;;;;-1:-1:-1;;;22134:64:0;;10327:2:1;22134:64:0;;;10309:21:1;10366:2;10346:18;;;10339:30;10405:34;10385:18;;;10378:62;-1:-1:-1;;;10456:18:1;;;10449:33;10499:19;;22134:64:0;10125:399:1;22134:64:0;22226:1;22217:6;:10;22209:64;;;;-1:-1:-1;;;22209:64:0;;10731:2:1;22209:64:0;;;10713:21:1;10770:2;10750:18;;;10743:30;10809:34;10789:18;;;10782:62;-1:-1:-1;;;10860:18:1;;;10853:39;10909:19;;22209:64:0;10529:405:1;22209:64:0;-1:-1:-1;;;;;22293:20:0;;;;;;:14;:20;;;;;;;;22292:21;22284:53;;;;-1:-1:-1;;;22284:53:0;;11141:2:1;22284:53:0;;;11123:21:1;11180:2;11160:18;;;11153:30;-1:-1:-1;;;11199:18:1;;;11192:49;11258:18;;22284:53:0;10939:343:1;22284:53:0;22362:1;22350:9;:13;;;22374:7;:11;22403:17;;-1:-1:-1;;;22403:17:0;;;;22398:180;;22447:13;;-1:-1:-1;;;;;22447:13:0;;;22441:19;;;;22437:130;;22481:17;:24;;-1:-1:-1;;;;22481:24:0;-1:-1:-1;;;22481:24:0;;;22437:130;22635:15;;-1:-1:-1;;;;;22619:32:0;;;22635:15;;22619:32;22615:431;;22671:14;;-1:-1:-1;;;22671:14:0;;;;:51;;;;;22705:17;;22689:12;:33;;22671:51;:69;;;;-1:-1:-1;22727:13:0;;-1:-1:-1;;;22727:13:0;;;;22726:14;22671:69;22668:367;;;22772:14;;22760:9;:26;22815:12;;22805:7;:22;22846:30;22861:4;22866:2;22869:6;22846:14;:30::i;:::-;22913:13;;-1:-1:-1;;;;;22899:28:0;;;22913:13;;22899:28;22895:100;;-1:-1:-1;;;;;22952:18:0;;;;;;:14;:18;;;;;:23;;-1:-1:-1;;22952:23:0;22971:4;22952:23;;;22895:100;21903:2406;;;:::o;22668:367::-;23062:14;;-1:-1:-1;;;23062:14:0;;;;:31;;;;-1:-1:-1;23080:13:0;;-1:-1:-1;;;23080:13:0;;;;23062:31;23058:84;;;23109:13;:21;;-1:-1:-1;;;;23109:21:0;;;23058:84;15480:7;15507:6;-1:-1:-1;;;;;23166:15:0;;;15507:6;;23166:15;;;;:32;;-1:-1:-1;15480:7:0;15507:6;-1:-1:-1;;;;;23185:13:0;;;15507:6;;23185:13;;23166:32;23162:1097;;;23229:28;23260:24;23278:4;23260:9;:24::i;:::-;23304:6;;23229:55;;-1:-1:-1;;;;23304:6:0;;;;23303:7;:32;;;;-1:-1:-1;23322:13:0;;-1:-1:-1;;;;;23314:21:0;;;23322:13;;23314:21;;23303:32;:47;;;;-1:-1:-1;23339:11:0;;-1:-1:-1;;;23339:11:0;;;;23303:47;:75;;;;;23377:1;23354:20;:24;23303:75;23299:346;;;23399:38;23416:20;23399:16;:38::i;:::-;23485:21;23528:22;;23525:105;;23575:35;23588:21;23575:12;:35::i;:::-;23380:265;23299:346;23684:13;;-1:-1:-1;;;;;23676:21:0;;;23684:13;;23676:21;:55;;;;-1:-1:-1;23715:15:0;;-1:-1:-1;;;;;23701:30:0;;;23715:15;;23701:30;;23676:55;23673:162;;;23764:14;;23752:9;:26;23807:12;;23797:7;:22;23673:162;23865:13;;-1:-1:-1;;;;;23859:19:0;;;23865:13;;23859:19;:55;;;;-1:-1:-1;23898:15:0;;-1:-1:-1;;;;;23882:32:0;;;23898:15;;23882:32;;23859:55;23855:165;;;23947:15;;23935:9;:27;23991:13;;23981:7;:23;23855:165;-1:-1:-1;;;;;24053:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24081:22:0;;;;;;:18;:22;;;;;;;;24053:50;24052:102;;;-1:-1:-1;24117:13:0;;-1:-1:-1;;;;;24109:21:0;;;24117:13;;24109:21;;;;:44;;-1:-1:-1;24140:13:0;;-1:-1:-1;;;;;24134:19:0;;;24140:13;;24134:19;;24109:44;24048:186;;;24187:1;24175:9;:13;;;24207:7;:11;24048:186;23200:1059;23162:1097;24271:30;24286:4;24291:2;24294:6;24271:14;:30::i;5765:192::-;5851:7;5887:12;5879:6;;;;5871:29;;;;-1:-1:-1;;;5871:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5911:9:0;5923:5;5927:1;5923;:5;:::i;:::-;5911:17;5765:192;-1:-1:-1;;;;;5765:192:0:o;24816:482::-;24873:17;24893:20;24911:1;24893:13;:6;24904:1;24893:10;:13::i;:::-;:17;;:20::i;:::-;24873:40;-1:-1:-1;24924:17:0;24944:20;24962:1;24944:13;:6;24955:1;24944:10;:13::i;:20::-;24924:40;-1:-1:-1;24975:21:0;24999:20;25017:1;24999:13;:6;25010:1;24999:10;:13::i;:20::-;24975:44;-1:-1:-1;25030:18:0;25051:55;24975:44;25051:36;25077:9;25051:36;:6;25062:9;25051:10;:21::i;:::-;:25;;:36::i;:55::-;25117:11;;:31;;25030:76;;-1:-1:-1;;;;;;25117:11:0;;:31;;;;;25138:9;;25117:11;:31;:11;:31;25138:9;25117:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25159:17:0;;:37;;-1:-1:-1;;;;;25159:17:0;;;;:37;;;;;25186:9;;25159:17;:37;:17;:37;25186:9;25159:17;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25207:15:0;;:39;;-1:-1:-1;;;;;25207:15:0;;;;:39;;;;;25232:13;;25207:15;:39;:15;:39;25232:13;25207:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25257:12:0;;:33;;-1:-1:-1;;;;;25257:12:0;;;;:33;;;;;25279:10;;25257:12;:33;:12;:33;25279:10;25257:12;:33;;;;;;;;;;;;;;;;;;;;;24862:436;;;;24816:482;:::o;21100:254::-;21167:7;21206;;21195;:18;;21187:73;;;;-1:-1:-1;;;21187:73:0;;11622:2:1;21187:73:0;;;11604:21:1;11661:2;11641:18;;;11634:30;11700:34;11680:18;;;11673:62;-1:-1:-1;;;11751:18:1;;;11744:40;11801:19;;21187:73:0;11420:406:1;21187:73:0;21271:19;21294:10;:8;:10::i;:::-;21271:33;-1:-1:-1;21322:24:0;:7;21271:33;21322:11;:24::i;:::-;21315:31;21100:254;-1:-1:-1;;;21100:254:0:o;24317:483::-;18593:6;:13;;-1:-1:-1;;;;18593:13:0;-1:-1:-1;;;18593:13:0;;;24419:16:::1;::::0;;24433:1:::1;24419:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24419:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24419:16:0::1;24395:40;;24464:4;24446;24451:1;24446:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24446:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24490:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;24490:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;24446:7;;24490:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24480:4;24485:1;24480:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24480:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;24555:15:::1;::::0;24523:62:::1;::::0;24540:4:::1;::::0;24555:15:::1;24573:11:::0;24523:8:::1;:62::i;:::-;24596:15;::::0;:196:::1;::::0;-1:-1:-1;;;24596:196:0;;-1:-1:-1;;;;;24596:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;24677:11;;24596:15:::1;::::0;24719:4;;24746::::1;::::0;24766:15:::1;::::0;24596:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18629:6:0;:14;;-1:-1:-1;;;;18629:14:0;;;-1:-1:-1;;;;24317:483:0:o;25310:146::-;25404:44;25422:6;25430:9;25441:6;25404:17;:44::i;6216:471::-;6274:7;6519:1;6524;6519:6;6515:47;;-1:-1:-1;6549:1:0;6542:8;;6515:47;6574:9;6586:5;6590:1;6586;:5;:::i;:::-;6574:17;-1:-1:-1;6619:1:0;6610:5;6614:1;6574:17;6610:5;:::i;:::-;:10;6602:56;;;;-1:-1:-1;;;6602:56:0;;13801:2:1;6602:56:0;;;13783:21:1;13840:2;13820:18;;;13813:30;13879:34;13859:18;;;13852:62;-1:-1:-1;;;13930:18:1;;;13923:31;13971:19;;6602:56:0;13599:397:1;7163:132:0;7221:7;7248:39;7252:1;7255;7248:39;;;;;;;;;;;;;;;;;:3;:39::i;5326:136::-;5384:7;5411:43;5415:1;5418;5411:43;;;;;;;;;;;;;;;;;:3;:43::i;28037:163::-;28078:7;28099:15;28116;28135:19;:17;:19::i;:::-;28098:56;;-1:-1:-1;28098:56:0;-1:-1:-1;28172:20:0;28098:56;;28172:11;:20::i;:::-;28165:27;;;;28037:163;:::o;27038:805::-;27136:19;27159:10;:8;:10::i;:::-;27136:33;;27180:23;27206:79;27255:29;27280:3;27255:20;27267:7;;27255;:11;;:20;;;;:::i;:29::-;27206:44;27218:31;27245:3;27218:22;27230:9;;27218:7;:11;;:22;;;;:::i;:31::-;27206:7;;:11;:44::i;:79::-;27180:105;-1:-1:-1;27296:15:0;27314:24;:7;27326:11;27314;:24::i;:::-;27296:42;;27349:12;27364:48;27400:11;27364:31;27391:3;27364:22;27376:9;;27364:7;:11;;:22;;;;:::i;:31::-;:35;;:48::i;:::-;27349:63;;27423:13;27439:46;27473:11;27439:29;27464:3;27439:20;27451:7;;27439;:11;;:20;;;;:::i;:46::-;27423:62;-1:-1:-1;27496:23:0;27522:28;27423:62;27522:17;:7;27534:4;27522:11;:17::i;:28::-;-1:-1:-1;;;;;27579:15:0;;;;;;:7;:15;;;;;;27496:54;;-1:-1:-1;27579:28:0;;27599:7;27579:19;:28::i;:::-;-1:-1:-1;;;;;27561:15:0;;;;;;;:7;:15;;;;;;:46;;;;27639:18;;;;;;;:39;;27662:15;27639:22;:39::i;:::-;-1:-1:-1;;;;;27618:18:0;;;;;;:7;:18;;;;;;:60;;;;27730:4;27714:22;;;;:33;;27741:5;27714:26;:33::i;:::-;27705:4;27689:22;;;;:7;:22;;;;;:58;27758:17;27770:4;27758:11;:17::i;:::-;27808:9;-1:-1:-1;;;;;27791:44:0;27800:6;-1:-1:-1;;;;;27791:44:0;;27819:15;27791:44;;;;1821:25:1;;1809:2;1794:18;;1675:177;27791:44:0;;;;;;;;27125:718;;;;;;27038:805;;;:::o;7791:278::-;7877:7;7912:12;7905:5;7897:28;;;;-1:-1:-1;;;7897:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7936:9:0;7948:5;7952:1;7948;:5;:::i;28208:262::-;28305:7;;28258;;;;17514:25;28379:20;28305:7;17514:25;28379:11;:20::i;:::-;28369:7;:30;28365:61;;;-1:-1:-1;;28409:7:0;;;17514:25;;-1:-1:-1;28208:262:0;-1:-1:-1;28208:262:0:o;28365:61::-;28445:7;;28454;;-1:-1:-1;28208:262:0;-1:-1:-1;28208:262:0:o;4862:181::-;4920:7;;4952:5;4956:1;4952;:5;:::i;:::-;4940:17;;4981:1;4976;:6;;4968:46;;;;-1:-1:-1;;;4968:46:0;;14203:2:1;4968:46:0;;;14185:21:1;14242:2;14222:18;;;14215:30;14281:29;14261:18;;;14254:57;14328:18;;4968:46:0;14001:351:1;27906:89:0;27970:7;;:17;;27982:4;27970:11;:17::i;:::-;27960:7;:27;-1:-1:-1;27906:89:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2741:118::-;2827:5;2820:13;2813:21;2806:5;2803:32;2793:60;;2849:1;2846;2839:12;2864:382;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3045:9;3032:23;3064:31;3089:5;3064:31;:::i;:::-;3114:5;-1:-1:-1;3171:2:1;3156:18;;3143:32;3184:30;3143:32;3184:30;:::i;:::-;3233:7;3223:17;;;2864:382;;;;;:::o;3251:241::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:28;3456:5;3434:28;:::i;3757:385::-;3843:6;3851;3859;3867;3920:3;3908:9;3899:7;3895:23;3891:33;3888:53;;;3937:1;3934;3927:12;3888:53;-1:-1:-1;;3960:23:1;;;4030:2;4015:18;;4002:32;;-1:-1:-1;4081:2:1;4066:18;;4053:32;;4132:2;4117:18;4104:32;;-1:-1:-1;3757:385:1;-1:-1:-1;3757:385:1:o;4147:269::-;4204:6;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4312:9;4299:23;4362:4;4355:5;4351:16;4344:5;4341:27;4331:55;;4382:1;4379;4372:12;4421:750;4513:6;4521;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4638:9;4625:23;4667:18;4708:2;4700:6;4697:14;4694:34;;;4724:1;4721;4714:12;4694:34;4762:6;4751:9;4747:22;4737:32;;4807:7;4800:4;4796:2;4792:13;4788:27;4778:55;;4829:1;4826;4819:12;4778:55;4869:2;4856:16;4895:2;4887:6;4884:14;4881:34;;;4911:1;4908;4901:12;4881:34;4966:7;4959:4;4949:6;4946:1;4942:14;4938:2;4934:23;4930:34;4927:47;4924:67;;;4987:1;4984;4977:12;4924:67;5018:4;5010:13;;;;-1:-1:-1;5042:6:1;-1:-1:-1;;5083:20:1;;5070:34;5113:28;5070:34;5113:28;:::i;:::-;5160:5;5150:15;;;4421:750;;;;;:::o;5176:388::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5360:9;5347:23;5379:31;5404:5;5379:31;:::i;:::-;5429:5;-1:-1:-1;5486:2:1;5471:18;;5458:32;5499:33;5458:32;5499:33;:::i;5569:356::-;5771:2;5753:21;;;5790:18;;;5783:30;5849:34;5844:2;5829:18;;5822:62;5916:2;5901:18;;5569:356::o;6285:127::-;6346:10;6341:3;6337:20;6334:1;6327:31;6377:4;6374:1;6367:15;6401:4;6398:1;6391:15;6417:125;6482:9;;;6503:10;;;6500:36;;;6516:18;;:::i;6904:127::-;6965:10;6960:3;6956:20;6953:1;6946:31;6996:4;6993:1;6986:15;7020:4;7017:1;7010:15;7036:135;7075:3;7096:17;;;7093:43;;7116:18;;:::i;:::-;-1:-1:-1;7163:1:1;7152:13;;7036:135::o;7176:794::-;7398:2;7410:21;;;7383:18;;7466:22;;;7350:4;7545:6;7519:2;7504:18;;7350:4;7579:304;7593:6;7590:1;7587:13;7579:304;;;7668:6;7655:20;7688:31;7713:5;7688:31;:::i;:::-;-1:-1:-1;;;;;7744:31:1;7732:44;;7799:4;7858:15;;;;7823:12;;;;7772:1;7608:9;7579:304;;;7583:3;7900;7892:11;;;;7955:6;7948:14;7941:22;7934:4;7923:9;7919:20;7912:52;7176:794;;;;;;:::o;8254:245::-;8321:6;8374:2;8362:9;8353:7;8349:23;8345:32;8342:52;;;8390:1;8387;8380:12;8342:52;8422:9;8416:16;8441:28;8463:5;8441:28;:::i;11287:128::-;11354:9;;;11375:11;;;11372:37;;;11389:18;;:::i;11963:251::-;12033:6;12086:2;12074:9;12065:7;12061:23;12057:32;12054:52;;;12102:1;12099;12092:12;12054:52;12134:9;12128:16;12153:31;12178:5;12153:31;:::i;12219:980::-;12481:4;12529:3;12518:9;12514:19;12560:6;12549:9;12542:25;12586:2;12624:6;12619:2;12608:9;12604:18;12597:34;12667:3;12662:2;12651:9;12647:18;12640:31;12691:6;12726;12720:13;12757:6;12749;12742:22;12795:3;12784:9;12780:19;12773:26;;12834:2;12826:6;12822:15;12808:29;;12855:1;12865:195;12879:6;12876:1;12873:13;12865:195;;;12944:13;;-1:-1:-1;;;;;12940:39:1;12928:52;;13035:15;;;;13000:12;;;;12976:1;12894:9;12865:195;;;-1:-1:-1;;;;;;;13116:32:1;;;;13111:2;13096:18;;13089:60;-1:-1:-1;;;13180:3:1;13165:19;13158:35;13077:3;12219:980;-1:-1:-1;;;12219:980:1:o;13204:168::-;13277:9;;;13308;;13325:15;;;13319:22;;13305:37;13295:71;;13346:18;;:::i;13377:217::-;13417:1;13443;13433:132;;13487:10;13482:3;13478:20;13475:1;13468:31;13522:4;13519:1;13512:15;13550:4;13547:1;13540:15;13433:132;-1:-1:-1;13579:9:1;;13377:217::o

Swarm Source

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