BNB Price: $641.41 (+1.38%)
 

Overview

Max Total Supply

999,999,984,962,409.195382Metee

Holders

899

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.2835013 Metee

Value
$0.00
0xC0b95240A62e99421350d3Ee62BDb6C3889888b9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MetaverseNFT

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2021-07-22
*/

pragma solidity ^0.8.2;


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

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

/**
 * @dev Interface of the BEP20 standard as defined in the EIP.
 */
interface IBEP20 {
    /**
     * @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);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address public _owner;

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


    /**
     * @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;
    }
}

contract MetaverseNFT is Context, IBEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isCharity;
    address[] private _excluded;
    
    mapping (address => bool) private _isIncludeInReward;

    
    string  private _NAME;
    string  private _SYMBOL;
    uint256 private _DECIMALS;
	address public FeeAddress;
   
    uint256 private _MAX = ~uint256(0);
    uint256 private _DECIMALFACTOR;
    uint256 private _GRANULARITY = 100;
    
    uint256 private _tTotal;
    uint256 private _rTotal;
    
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tCharityTotal;
    
    uint256 public     _TAX_FEE;
    uint256 public    _BURN_FEE;
    uint256 public _CHARITY_FEE;

    // Track original fees to bypass fees for charity account
    uint256 private ORIG_TAX_FEE;
    uint256 private ORIG_BURN_FEE;
    uint256 private ORIG_CHARITY_FEE;
    
    constructor () {
        
		_owner = 0x5A7a4Fc56E2c136Fb20d9cdE1335445d10cafdB9;
		uint256 _txFee = 5;
		uint256 _burnFee = 3;
		uint256 _charityFee = 0;

		uint256 _supply = 1000000000000000;
		
	    _NAME = "MetaverseNFT";
	    
		_SYMBOL = "Metee";
		_DECIMALS = 9;
		
		_DECIMALFACTOR = 10 ** uint256(_DECIMALS);
		_tTotal = _supply * _DECIMALFACTOR;
		_rTotal = (_MAX - (_MAX % _tTotal));
		
		
		_TAX_FEE = _txFee * 100; 
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
		
		FeeAddress = _owner;
		
        _isCharity[_owner] = true;
        _isIncludeInReward[_owner] = true;


		_rOwned[_owner] = _rTotal;
		
        emit Transfer(address(0),_owner, _tTotal);
    }

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

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

    function decimals() public view returns (uint256) {
        return _DECIMALS;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
         if (_isExcluded[account]) return _tOwned[account];
        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, "TOKEN20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    
    function isCharity(address account) public view returns (bool) {
        return _isCharity[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }
    
    function totalCharity() public view returns (uint256) {
        return _tCharityTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    
    function checkIsIncludeInReward(address account) public view returns(bool) {
        return _isIncludeInReward[account]; 
    }
    
    function includeInRewardV2(address account) external onlyOwner() {
        _tOwned[account] = 0;
        _isIncludeInReward[account] = true; 
        _isExcluded[account] = false;

    }
    function excludeFromRewardV2(address account) external onlyOwner() {
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isIncludeInReward[account] = false;
        _isExcluded[account] = true;
    }

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function setAsCharityAccount(address account) external onlyOwner() {
        require(!_isCharity[account], "Account is already charity account");
        _isCharity[account] = true;
    }
    
    function setFeeAccount(address account) external onlyOwner() {
		FeeAddress = account;
    }

	function burn(uint256 _value) public{
		_burn(msg.sender, _value);
	}
	
	function updateFee(uint256 _txFee,uint256 _burnFee,uint256 _charityFee) onlyOwner() public{
        _TAX_FEE = _txFee* 100; 
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
	}
	

	function _burn(address _who, uint256 _value) internal {
		require(_value <= _rOwned[_who]);
		_rOwned[_who] = _rOwned[_who].sub(_value);
		_tTotal = _tTotal.sub(_value);
		emit Transfer(_who, address(0), _value);
	}

    function mint(address account, uint256 amount) onlyOwner() public {

        _tTotal = _tTotal.add(amount);
        _rOwned[account] = _rOwned[account].add(amount);
        emit Transfer(address(0), account, amount);
    }



    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "TOKEN20: approve from the zero address");
        require(spender != address(0), "TOKEN20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "TOKEN20: transfer from the zero address");
        require(recipient != address(0), "TOKEN20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // Remove fees for transfers to and from charity account
        bool takeFee = true;
        if (_isCharity[sender] || _isCharity[recipient]) {
            takeFee = false;
        }

        if (!takeFee) removeAllFee();

         if (!_isIncludeInReward[sender] && _isIncludeInReward[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
            _isExcluded[sender] = true;
        } else if (_isIncludeInReward[sender] && !_isIncludeInReward[recipient]) {
            _transferToExcluded(sender, recipient, amount);
            _isExcluded[recipient] = true;
        } else if (_isIncludeInReward[sender] && _isIncludeInReward[recipient]) {
            _transferStandard(sender, recipient, amount);
            _isExcluded[recipient] = false;
            _isExcluded[sender] = false;
        } else if (!_isIncludeInReward[sender] && !_isIncludeInReward[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
            _isExcluded[recipient] = true;
            _isExcluded[sender] = true;
        } else {
            _transferStandard(sender, recipient, amount);
            
        }

        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);     
        _standardTransferContent(sender, recipient, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _standardTransferContent(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }
    
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount);        
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _excludedFromTransferContent(address sender, address recipient, uint256 tTransferAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);    
    }
    

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        _excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _excludedToTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);    
        _bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount);  
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _bothTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 rCharity, uint256 tFee, uint256 tBurn, uint256 tCharity) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn).sub(rCharity);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tCharityTotal = _tCharityTotal.add(tCharity);
        _tTotal = _tTotal.sub(tBurn);
		emit Transfer(address(this), address(0), tBurn);
    }
    

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tFee, uint256 tBurn, uint256 tCharity) = _getTBasics(tAmount, _TAX_FEE, _BURN_FEE, _CHARITY_FEE);
        uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tBurn, tCharity);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate);
        uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tBurn, tCharity, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn, tCharity);
    }
    
    function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 burnFee, uint256 charityFee) private view returns (uint256, uint256, uint256) {
        uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
        uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100);
        uint256 tCharity = ((tAmount.mul(charityFee)).div(_GRANULARITY)).div(100);
        return (tFee, tBurn, tCharity);
    }
    
    function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) private pure returns (uint256) {
        return tAmount.sub(tFee).sub(tBurn).sub(tCharity);
    }
    
    function _getRBasics(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        return (rAmount, rFee);
    }
    
    function _getRTransferAmount(uint256 rAmount, uint256 rFee, uint256 tBurn, uint256 tCharity, uint256 currentRate) private pure returns (uint256) {
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rCharity);
        return rTransferAmount;
    }

    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;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _sendToCharity(uint256 tCharity, address sender) private {
        if(_CHARITY_FEE > 0){
            uint256 currentRate = _getRate();
            uint256 rCharity = tCharity.mul(currentRate);
            _rOwned[FeeAddress] = _rOwned[FeeAddress].add(rCharity);
            _tOwned[FeeAddress] = _tOwned[FeeAddress].add(tCharity);
            emit Transfer(sender, FeeAddress, tCharity);
        }
       
    }

    function removeAllFee() private {
        if(_TAX_FEE == 0 && _BURN_FEE == 0 && _CHARITY_FEE == 0) return;
        
        ORIG_TAX_FEE = _TAX_FEE;
        ORIG_BURN_FEE = _BURN_FEE;
        ORIG_CHARITY_FEE = _CHARITY_FEE;
        
        _TAX_FEE = 0;
        _BURN_FEE = 0;
        _CHARITY_FEE = 0;
    }
    
    function restoreAllFee() private {
        _TAX_FEE = ORIG_TAX_FEE;
        _BURN_FEE = ORIG_BURN_FEE;
        _CHARITY_FEE = ORIG_CHARITY_FEE;
    }
    
    function _getTaxFee() private view returns(uint256) {
        return _TAX_FEE;
    }


}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"inputs":[],"name":"FeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BURN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_CHARITY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkIsIncludeInReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRewardV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInRewardV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCharity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsCharityAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600019600c556064600e553480156200001c57600080fd5b50600080546001600160a01b031916735a7a4fc56e2c136fb20d9cde1335445d10cafdb917815560408051808201909152600c8082526b13595d185d995c9cd953919560a21b6020909201918252600592600392909166038d7ea4c68000916200008a9160089190620001f0565b50604080518082019091526005808252644d6574656560d81b6020909201918252620000b991600991620001f0565b506009600a818155620000cd9190620002df565b600d819055620000de9082620003aa565b600f819055600c54620000f2919062000423565b600c54620001019190620003cc565b60105562000111846064620003aa565b60145562000121836064620003aa565b60155562000131826064620003aa565b601681905560145460175560155460185560195560008054600b80546001600160a01b0319166001600160a01b039283169081179091558252600560209081526040808420805460ff19908116600190811790925585548516865260078452828620805490911682179055601054855485168652908352818520558354600f54915191825290921692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050506200045c565b828054620001fe90620003e6565b90600052602060002090601f0160209004810192826200022257600085556200026d565b82601f106200023d57805160ff19168380011785556200026d565b828001600101855582156200026d579182015b828111156200026d57825182559160200191906001019062000250565b506200027b9291506200027f565b5090565b5b808211156200027b576000815560010162000280565b600181815b80851115620002d7578160001904821115620002bb57620002bb62000446565b80851615620002c957918102915b93841c93908002906200029b565b509250929050565b6000620002ed8383620002f4565b9392505050565b6000826200030557506001620003a4565b816200031457506000620003a4565b81600181146200032d5760028114620003385762000358565b6001915050620003a4565b60ff8411156200034c576200034c62000446565b50506001821b620003a4565b5060208310610133831016604e8410600b84101617156200037d575081810a620003a4565b62000389838362000296565b8060001904821115620003a057620003a062000446565b0290505b92915050565b6000816000190483118215151615620003c757620003c762000446565b500290565b600082821015620003e157620003e162000446565b500390565b600181811c90821680620003fb57607f821691505b602082108114156200041d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200044157634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b6124fc806200046c6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637b7e8bac11610130578063b5862428116100b8578063efd918e01161007c578063efd918e0146104cf578063f2cc0c18146104e2578063f2fde38b146104f5578063f84354f114610508578063fc061a4f1461051b57600080fd5b8063b58624281461042d578063cba0e99614610436578063d608b3b214610462578063dd62ed3e1461046a578063e81ffbef146104a357600080fd5b8063a457c2d7116100ff578063a457c2d7146103d8578063a9059cbb146103eb578063ab23ffa2146103fe578063ae9dd5e014610411578063b2bdfa7b1461041a57600080fd5b80637b7e8bac14610368578063836ad668146103935780638da5cb5b146103bf57806395d89b41146103d057600080fd5b80633c9f861d116101b3578063457bdf6c11610182578063457bdf6c1461031e5780634b023cf81461033157806370a0823114610344578063715018a61461035757806377ef79931461035f57600080fd5b80633c9f861d146102dd57806340c10f19146102e557806342966c68146102f85780634549b0391461030b57600080fd5b806323b872dd116101fa57806323b872dd146102875780632d8381191461029a578063313ce567146102ad57806339509351146102b55780633bd5d173146102c857600080fd5b806306fdde031461022c578063095ea7b31461024a57806313114a9d1461026d57806318160ddd1461027f575b600080fd5b61023461052e565b60405161024191906122c3565b60405180910390f35b61025d61025836600461221f565b6105c0565b6040519015158152602001610241565b6011545b604051908152602001610241565b600f54610271565b61025d6102953660046121e3565b6105d7565b6102716102a8366004612249565b610640565b600a54610271565b61025d6102c336600461221f565b6106c9565b6102db6102d6366004612249565b6106ff565b005b601254610271565b6102db6102f336600461221f565b6107eb565b6102db610306366004612249565b610893565b610271610319366004612262565b6108a0565b6102db61032c366004612195565b61092f565b6102db61033f366004612195565b6109f1565b610271610352366004612195565b610a3d565b6102db610a9c565b61027160155481565b600b5461037b906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b61025d6103a1366004612195565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031661037b565b610234610b10565b61025d6103e636600461221f565b610b1f565b61025d6103f936600461221f565b610b6e565b6102db61040c366004612195565b610b7b565b61027160165481565b60005461037b906001600160a01b031681565b61027160145481565b61025d610444366004612195565b6001600160a01b031660009081526004602052604090205460ff1690565b601354610271565b6102716104783660046121b0565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61025d6104b1366004612195565b6001600160a01b031660009081526005602052604090205460ff1690565b6102db6104dd366004612195565b610c38565b6102db6104f0366004612195565b610ca5565b6102db610503366004612195565b610df8565b6102db610516366004612195565b610ee2565b6102db610529366004612297565b611099565b60606008805461053d906123bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610569906123bd565b80156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105cd338484611103565b5060015b92915050565b60006105e484848461122b565b6106368433610631856040518060600160405280602a815260200161247d602a91396001600160a01b038a16600090815260036020908152604080832033845290915290205491906115e5565b611103565b5060019392505050565b60006010548211156106ac5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006106b661161f565b90506106c28382611642565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916105cd9185906106319086611684565b3360008181526004602052604090205460ff16156107745760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016106a3565b600061077f836116e3565b5050506001600160a01b0386166000908152600160205260409020549394506107ad93925084915050611767565b6001600160a01b0383166000908152600160205260409020556010546107d39082611767565b6010556011546107e39084611684565b601155505050565b6000546001600160a01b031633146108155760405162461bcd60e51b81526004016106a390612318565b600f546108229082611684565b600f556001600160a01b0382166000908152600160205260409020546108489082611684565b6001600160a01b0383166000818152600160205260408082209390935591519091906000805160206124a7833981519152906108879085815260200190565b60405180910390a35050565b61089d33826117a9565b50565b6000600f548311156108f45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016106a3565b81610914576000610904846116e3565b509496506105d195505050505050565b600061091f846116e3565b509396506105d195505050505050565b6000546001600160a01b031633146109595760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526005602052604090205460ff16156109cd5760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c72656164792063686172697479206163636f756044820152611b9d60f21b60648201526084016106a3565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610a1b5760405162461bcd60e51b81526004016106a390612318565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526004602052604081205460ff1615610a7a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546105d190610640565b6000546001600160a01b03163314610ac65760405162461bcd60e51b81526004016106a390612318565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606009805461053d906123bd565b60006105cd338461063185604051806060016040528060278152602001612456602791393360009081526003602090815260408083206001600160a01b038d16845290915290205491906115e5565b60006105cd33848461122b565b6000546001600160a01b03163314610ba55760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526001602052604090205415610bff576001600160a01b038116600090815260016020526040902054610be590610640565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000908152600760209081526040808320805460ff19908116909155600490925290912080549091166001179055565b6000546001600160a01b03163314610c625760405162461bcd60e51b81526004016106a390612318565b6001600160a01b0316600090815260026020908152604080832083905560078252808320805460ff19908116600117909155600490925290912080549091169055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526004602052604090205460ff1615610d385760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016106a3565b6001600160a01b03811660009081526001602052604090205415610d92576001600160a01b038116600090815260016020526040902054610d7890610640565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016106a390612318565b6001600160a01b038116610e875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526004602052604090205460ff16610f745760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016106a3565b60005b60065481101561109557816001600160a01b031660068281548110610f9e57610f9e61243f565b6000918252602090912001546001600160a01b031614156110835760068054610fc9906001906123a6565b81548110610fd957610fd961243f565b600091825260209091200154600680546001600160a01b0390921691839081106110055761100561243f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600680548061105d5761105d612429565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108d816123f8565b915050610f77565b5050565b6000546001600160a01b031633146110c35760405162461bcd60e51b81526004016106a390612318565b6110ce836064612387565b6014556110dc826064612387565b6015556110ea816064612387565b6016819055601454601755601554601855601955505050565b6001600160a01b0383166111685760405162461bcd60e51b815260206004820152602660248201527f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016106a3565b6001600160a01b0382166111ca5760405162461bcd60e51b8152602060048201526024808201527f544f4b454e32303a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106a3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112915760405162461bcd60e51b815260206004820152602760248201527f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f206044820152666164647265737360c81b60648201526084016106a3565b6001600160a01b0382166112f55760405162461bcd60e51b815260206004820152602560248201527f544f4b454e32303a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106a3565b600081116113575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106a3565b6001600160a01b03831660009081526005602052604090205460019060ff168061139957506001600160a01b03831660009081526005602052604090205460ff165b156113a2575060005b806113af576113af611846565b6001600160a01b03841660009081526007602052604090205460ff161580156113f057506001600160a01b03831660009081526007602052604090205460ff165b156114285761140084848461188b565b6001600160a01b0384166000908152600460205260409020805460ff191660011790556115c3565b6001600160a01b03841660009081526007602052604090205460ff16801561146957506001600160a01b03831660009081526007602052604090205460ff16155b156114a15761147984848461194d565b6001600160a01b0383166000908152600460205260409020805460ff191660011790556115c3565b6001600160a01b03841660009081526007602052604090205460ff1680156114e157506001600160a01b03831660009081526007602052604090205460ff165b15611529576114f18484846119ad565b6001600160a01b03808416600090815260046020526040808220805460ff1990811690915592871682529020805490911690556115c3565b6001600160a01b03841660009081526007602052604090205460ff1615801561156b57506001600160a01b03831660009081526007602052604090205460ff16155b156115b85761157b848484611a0c565b6001600160a01b038381166000908152600460205260408082208054600160ff1991821681179092559388168352912080549092161790556115c3565b6115c38484846119ad565b806115df576115df601754601455601854601555601954601655565b50505050565b600081848411156116095760405162461bcd60e51b81526004016106a391906122c3565b50600061161684866123a6565b95945050505050565b600080600061162c611a6d565b909250905061163b8282611642565b9250505090565b60006106c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bef565b600080611691838561234d565b9050838110156106c25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106a3565b6000806000806000806000806000806117048b601454601554601654611c1d565b92509250925060006117188c858585611c9c565b9050600061172461161f565b90506000806117348f8885611cb4565b9150915060006117478383898988611cde565b929e50919c509a5091985093965091945092505050919395979092949650565b60006106c283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115e5565b6001600160a01b0382166000908152600160205260409020548111156117ce57600080fd5b6001600160a01b0382166000908152600160205260409020546117f19082611767565b6001600160a01b038316600090815260016020526040902055600f546118179082611767565b600f556040518181526000906001600160a01b038416906000805160206124a783398151915290602001610887565b6014541580156118565750601554155b80156118625750601654155b1561186957565b6014805460175560158054601855601680546019556000928390559082905555565b600061189561161f565b905060008060008060008060006118ab896116e3565b965096509650965096509650965060006118ce8984611d1a90919063ffffffff16565b905060006118dc838b611d1a565b90506118eb8d8d8d8c8c611d99565b6118f5838e611e3d565b611903878383888888611f14565b8b6001600160a01b03168d6001600160a01b03166000805160206124a78339815191528860405161193691815260200190565b60405180910390a350505050505050505050505050565b600061195761161f565b9050600080600080600080600061196d896116e3565b965096509650965096509650965060006119908984611d1a90919063ffffffff16565b9050600061199e838b611d1a565b90506118eb8d8d888c8c611fa2565b60006119b761161f565b905060008060008060008060006119cd896116e3565b965096509650965096509650965060006119f08984611d1a90919063ffffffff16565b905060006119fe838b611d1a565b90506118eb8d8d8b8b61202a565b6000611a1661161f565b90506000806000806000806000611a2c896116e3565b96509650965096509650965096506000611a4f8984611d1a90919063ffffffff16565b90506000611a5d838b611d1a565b90506118eb8d8d8d8c8a8d61209e565b601054600f546000918291825b600654811015611bbf57826001600060068481548110611a9c57611a9c61243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b075750816002600060068481548110611ae057611ae061243f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1d57601054600f54945094505050509091565b611b636001600060068481548110611b3757611b3761243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611767565b9250611bab6002600060068481548110611b7f57611b7f61243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611767565b915080611bb7816123f8565b915050611a7a565b50600f54601054611bcf91611642565b821015611be657601054600f549350935050509091565b90939092509050565b60008183611c105760405162461bcd60e51b81526004016106a391906122c3565b5060006116168486612365565b600080600080611c476064611c41600e54611c418b8d611d1a90919063ffffffff16565b90611642565b90506000611c696064611c41600e54611c418b8e611d1a90919063ffffffff16565b90506000611c8b6064611c41600e54611c418b8f611d1a90919063ffffffff16565b929a91995091975095505050505050565b600061161682611cae85818989611767565b90611767565b60008080611cc28685611d1a565b90506000611cd08686611d1a565b919791965090945050505050565b600080611ceb8584611d1a565b90506000611cf98585611d1a565b90506000611d0d82611cae85818d8d611767565b9998505050505050505050565b600082611d29575060006105d1565b6000611d358385612387565b905082611d428583612365565b146106c25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106a3565b6001600160a01b038516600090815260026020526040902054611dbc9084611767565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611deb9083611767565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611e1a9082611684565b6001600160a01b0390941660009081526001602052604090209390935550505050565b60165415611095576000611e4f61161f565b90506000611e5d8483611d1a565b600b546001600160a01b0316600090815260016020526040902054909150611e859082611684565b600b80546001600160a01b039081166000908152600160209081526040808320959095559254909116815260029091522054611ec19085611684565b600b80546001600160a01b03908116600090815260026020908152604091829020949094559154915187815291811692908616916000805160206124a7833981519152910160405180910390a350505050565b611f3184611cae87611cae8a60105461176790919063ffffffff16565b601055601154611f419084611684565b601155601254611f519083611684565b601255601354611f619082611684565b601355600f54611f719083611767565b600f5560405182815260009030906000805160206124a78339815191529060200160405180910390a3505050505050565b6001600160a01b038516600090815260016020526040902054611fc59083611767565b6001600160a01b03808716600090815260016020908152604080832094909455918716815260029091522054611ffb9084611684565b6001600160a01b038516600090815260026020908152604080832093909355600190522054611e1a9082611684565b6001600160a01b03841660009081526001602052604090205461204d9083611767565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461207c9082611684565b6001600160a01b03909316600090815260016020526040902092909255505050565b6001600160a01b0386166000908152600260205260409020546120c19085611767565b6001600160a01b0387166000908152600260209081526040808320939093556001905220546120f09084611767565b6001600160a01b038088166000908152600160209081526040808320949094559188168152600290915220546121269083611684565b6001600160a01b0386166000908152600260209081526040808320939093556001905220546121559082611684565b6001600160a01b039095166000908152600160205260409020949094555050505050565b80356001600160a01b038116811461219057600080fd5b919050565b6000602082840312156121a757600080fd5b6106c282612179565b600080604083850312156121c357600080fd5b6121cc83612179565b91506121da60208401612179565b90509250929050565b6000806000606084860312156121f857600080fd5b61220184612179565b925061220f60208501612179565b9150604084013590509250925092565b6000806040838503121561223257600080fd5b61223b83612179565b946020939093013593505050565b60006020828403121561225b57600080fd5b5035919050565b6000806040838503121561227557600080fd5b823591506020830135801515811461228c57600080fd5b809150509250929050565b6000806000606084860312156122ac57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156122f0578581018301518582016040015282016122d4565b81811115612302576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561236057612360612413565b500190565b60008261238257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123a1576123a1612413565b500290565b6000828210156123b8576123b8612413565b500390565b600181811c908216806123d157607f821691505b602082108114156123f257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561240c5761240c612413565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122037b3bb53d251423f90b6f6f67f698b6731c1bdcbb72279b30303e85bb872697364736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c80637b7e8bac11610130578063b5862428116100b8578063efd918e01161007c578063efd918e0146104cf578063f2cc0c18146104e2578063f2fde38b146104f5578063f84354f114610508578063fc061a4f1461051b57600080fd5b8063b58624281461042d578063cba0e99614610436578063d608b3b214610462578063dd62ed3e1461046a578063e81ffbef146104a357600080fd5b8063a457c2d7116100ff578063a457c2d7146103d8578063a9059cbb146103eb578063ab23ffa2146103fe578063ae9dd5e014610411578063b2bdfa7b1461041a57600080fd5b80637b7e8bac14610368578063836ad668146103935780638da5cb5b146103bf57806395d89b41146103d057600080fd5b80633c9f861d116101b3578063457bdf6c11610182578063457bdf6c1461031e5780634b023cf81461033157806370a0823114610344578063715018a61461035757806377ef79931461035f57600080fd5b80633c9f861d146102dd57806340c10f19146102e557806342966c68146102f85780634549b0391461030b57600080fd5b806323b872dd116101fa57806323b872dd146102875780632d8381191461029a578063313ce567146102ad57806339509351146102b55780633bd5d173146102c857600080fd5b806306fdde031461022c578063095ea7b31461024a57806313114a9d1461026d57806318160ddd1461027f575b600080fd5b61023461052e565b60405161024191906122c3565b60405180910390f35b61025d61025836600461221f565b6105c0565b6040519015158152602001610241565b6011545b604051908152602001610241565b600f54610271565b61025d6102953660046121e3565b6105d7565b6102716102a8366004612249565b610640565b600a54610271565b61025d6102c336600461221f565b6106c9565b6102db6102d6366004612249565b6106ff565b005b601254610271565b6102db6102f336600461221f565b6107eb565b6102db610306366004612249565b610893565b610271610319366004612262565b6108a0565b6102db61032c366004612195565b61092f565b6102db61033f366004612195565b6109f1565b610271610352366004612195565b610a3d565b6102db610a9c565b61027160155481565b600b5461037b906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b61025d6103a1366004612195565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031661037b565b610234610b10565b61025d6103e636600461221f565b610b1f565b61025d6103f936600461221f565b610b6e565b6102db61040c366004612195565b610b7b565b61027160165481565b60005461037b906001600160a01b031681565b61027160145481565b61025d610444366004612195565b6001600160a01b031660009081526004602052604090205460ff1690565b601354610271565b6102716104783660046121b0565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61025d6104b1366004612195565b6001600160a01b031660009081526005602052604090205460ff1690565b6102db6104dd366004612195565b610c38565b6102db6104f0366004612195565b610ca5565b6102db610503366004612195565b610df8565b6102db610516366004612195565b610ee2565b6102db610529366004612297565b611099565b60606008805461053d906123bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610569906123bd565b80156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105cd338484611103565b5060015b92915050565b60006105e484848461122b565b6106368433610631856040518060600160405280602a815260200161247d602a91396001600160a01b038a16600090815260036020908152604080832033845290915290205491906115e5565b611103565b5060019392505050565b60006010548211156106ac5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006106b661161f565b90506106c28382611642565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916105cd9185906106319086611684565b3360008181526004602052604090205460ff16156107745760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016106a3565b600061077f836116e3565b5050506001600160a01b0386166000908152600160205260409020549394506107ad93925084915050611767565b6001600160a01b0383166000908152600160205260409020556010546107d39082611767565b6010556011546107e39084611684565b601155505050565b6000546001600160a01b031633146108155760405162461bcd60e51b81526004016106a390612318565b600f546108229082611684565b600f556001600160a01b0382166000908152600160205260409020546108489082611684565b6001600160a01b0383166000818152600160205260408082209390935591519091906000805160206124a7833981519152906108879085815260200190565b60405180910390a35050565b61089d33826117a9565b50565b6000600f548311156108f45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016106a3565b81610914576000610904846116e3565b509496506105d195505050505050565b600061091f846116e3565b509396506105d195505050505050565b6000546001600160a01b031633146109595760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526005602052604090205460ff16156109cd5760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c72656164792063686172697479206163636f756044820152611b9d60f21b60648201526084016106a3565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610a1b5760405162461bcd60e51b81526004016106a390612318565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526004602052604081205460ff1615610a7a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546105d190610640565b6000546001600160a01b03163314610ac65760405162461bcd60e51b81526004016106a390612318565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60606009805461053d906123bd565b60006105cd338461063185604051806060016040528060278152602001612456602791393360009081526003602090815260408083206001600160a01b038d16845290915290205491906115e5565b60006105cd33848461122b565b6000546001600160a01b03163314610ba55760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526001602052604090205415610bff576001600160a01b038116600090815260016020526040902054610be590610640565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000908152600760209081526040808320805460ff19908116909155600490925290912080549091166001179055565b6000546001600160a01b03163314610c625760405162461bcd60e51b81526004016106a390612318565b6001600160a01b0316600090815260026020908152604080832083905560078252808320805460ff19908116600117909155600490925290912080549091169055565b6000546001600160a01b03163314610ccf5760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526004602052604090205460ff1615610d385760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016106a3565b6001600160a01b03811660009081526001602052604090205415610d92576001600160a01b038116600090815260016020526040902054610d7890610640565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610e225760405162461bcd60e51b81526004016106a390612318565b6001600160a01b038116610e875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b81526004016106a390612318565b6001600160a01b03811660009081526004602052604090205460ff16610f745760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016106a3565b60005b60065481101561109557816001600160a01b031660068281548110610f9e57610f9e61243f565b6000918252602090912001546001600160a01b031614156110835760068054610fc9906001906123a6565b81548110610fd957610fd961243f565b600091825260209091200154600680546001600160a01b0390921691839081106110055761100561243f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff19169055600680548061105d5761105d612429565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061108d816123f8565b915050610f77565b5050565b6000546001600160a01b031633146110c35760405162461bcd60e51b81526004016106a390612318565b6110ce836064612387565b6014556110dc826064612387565b6015556110ea816064612387565b6016819055601454601755601554601855601955505050565b6001600160a01b0383166111685760405162461bcd60e51b815260206004820152602660248201527f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016106a3565b6001600160a01b0382166111ca5760405162461bcd60e51b8152602060048201526024808201527f544f4b454e32303a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106a3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112915760405162461bcd60e51b815260206004820152602760248201527f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f206044820152666164647265737360c81b60648201526084016106a3565b6001600160a01b0382166112f55760405162461bcd60e51b815260206004820152602560248201527f544f4b454e32303a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106a3565b600081116113575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106a3565b6001600160a01b03831660009081526005602052604090205460019060ff168061139957506001600160a01b03831660009081526005602052604090205460ff165b156113a2575060005b806113af576113af611846565b6001600160a01b03841660009081526007602052604090205460ff161580156113f057506001600160a01b03831660009081526007602052604090205460ff165b156114285761140084848461188b565b6001600160a01b0384166000908152600460205260409020805460ff191660011790556115c3565b6001600160a01b03841660009081526007602052604090205460ff16801561146957506001600160a01b03831660009081526007602052604090205460ff16155b156114a15761147984848461194d565b6001600160a01b0383166000908152600460205260409020805460ff191660011790556115c3565b6001600160a01b03841660009081526007602052604090205460ff1680156114e157506001600160a01b03831660009081526007602052604090205460ff165b15611529576114f18484846119ad565b6001600160a01b03808416600090815260046020526040808220805460ff1990811690915592871682529020805490911690556115c3565b6001600160a01b03841660009081526007602052604090205460ff1615801561156b57506001600160a01b03831660009081526007602052604090205460ff16155b156115b85761157b848484611a0c565b6001600160a01b038381166000908152600460205260408082208054600160ff1991821681179092559388168352912080549092161790556115c3565b6115c38484846119ad565b806115df576115df601754601455601854601555601954601655565b50505050565b600081848411156116095760405162461bcd60e51b81526004016106a391906122c3565b50600061161684866123a6565b95945050505050565b600080600061162c611a6d565b909250905061163b8282611642565b9250505090565b60006106c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bef565b600080611691838561234d565b9050838110156106c25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106a3565b6000806000806000806000806000806117048b601454601554601654611c1d565b92509250925060006117188c858585611c9c565b9050600061172461161f565b90506000806117348f8885611cb4565b9150915060006117478383898988611cde565b929e50919c509a5091985093965091945092505050919395979092949650565b60006106c283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115e5565b6001600160a01b0382166000908152600160205260409020548111156117ce57600080fd5b6001600160a01b0382166000908152600160205260409020546117f19082611767565b6001600160a01b038316600090815260016020526040902055600f546118179082611767565b600f556040518181526000906001600160a01b038416906000805160206124a783398151915290602001610887565b6014541580156118565750601554155b80156118625750601654155b1561186957565b6014805460175560158054601855601680546019556000928390559082905555565b600061189561161f565b905060008060008060008060006118ab896116e3565b965096509650965096509650965060006118ce8984611d1a90919063ffffffff16565b905060006118dc838b611d1a565b90506118eb8d8d8d8c8c611d99565b6118f5838e611e3d565b611903878383888888611f14565b8b6001600160a01b03168d6001600160a01b03166000805160206124a78339815191528860405161193691815260200190565b60405180910390a350505050505050505050505050565b600061195761161f565b9050600080600080600080600061196d896116e3565b965096509650965096509650965060006119908984611d1a90919063ffffffff16565b9050600061199e838b611d1a565b90506118eb8d8d888c8c611fa2565b60006119b761161f565b905060008060008060008060006119cd896116e3565b965096509650965096509650965060006119f08984611d1a90919063ffffffff16565b905060006119fe838b611d1a565b90506118eb8d8d8b8b61202a565b6000611a1661161f565b90506000806000806000806000611a2c896116e3565b96509650965096509650965096506000611a4f8984611d1a90919063ffffffff16565b90506000611a5d838b611d1a565b90506118eb8d8d8d8c8a8d61209e565b601054600f546000918291825b600654811015611bbf57826001600060068481548110611a9c57611a9c61243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b075750816002600060068481548110611ae057611ae061243f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b1d57601054600f54945094505050509091565b611b636001600060068481548110611b3757611b3761243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611767565b9250611bab6002600060068481548110611b7f57611b7f61243f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611767565b915080611bb7816123f8565b915050611a7a565b50600f54601054611bcf91611642565b821015611be657601054600f549350935050509091565b90939092509050565b60008183611c105760405162461bcd60e51b81526004016106a391906122c3565b5060006116168486612365565b600080600080611c476064611c41600e54611c418b8d611d1a90919063ffffffff16565b90611642565b90506000611c696064611c41600e54611c418b8e611d1a90919063ffffffff16565b90506000611c8b6064611c41600e54611c418b8f611d1a90919063ffffffff16565b929a91995091975095505050505050565b600061161682611cae85818989611767565b90611767565b60008080611cc28685611d1a565b90506000611cd08686611d1a565b919791965090945050505050565b600080611ceb8584611d1a565b90506000611cf98585611d1a565b90506000611d0d82611cae85818d8d611767565b9998505050505050505050565b600082611d29575060006105d1565b6000611d358385612387565b905082611d428583612365565b146106c25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106a3565b6001600160a01b038516600090815260026020526040902054611dbc9084611767565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611deb9083611767565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611e1a9082611684565b6001600160a01b0390941660009081526001602052604090209390935550505050565b60165415611095576000611e4f61161f565b90506000611e5d8483611d1a565b600b546001600160a01b0316600090815260016020526040902054909150611e859082611684565b600b80546001600160a01b039081166000908152600160209081526040808320959095559254909116815260029091522054611ec19085611684565b600b80546001600160a01b03908116600090815260026020908152604091829020949094559154915187815291811692908616916000805160206124a7833981519152910160405180910390a350505050565b611f3184611cae87611cae8a60105461176790919063ffffffff16565b601055601154611f419084611684565b601155601254611f519083611684565b601255601354611f619082611684565b601355600f54611f719083611767565b600f5560405182815260009030906000805160206124a78339815191529060200160405180910390a3505050505050565b6001600160a01b038516600090815260016020526040902054611fc59083611767565b6001600160a01b03808716600090815260016020908152604080832094909455918716815260029091522054611ffb9084611684565b6001600160a01b038516600090815260026020908152604080832093909355600190522054611e1a9082611684565b6001600160a01b03841660009081526001602052604090205461204d9083611767565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461207c9082611684565b6001600160a01b03909316600090815260016020526040902092909255505050565b6001600160a01b0386166000908152600260205260409020546120c19085611767565b6001600160a01b0387166000908152600260209081526040808320939093556001905220546120f09084611767565b6001600160a01b038088166000908152600160209081526040808320949094559188168152600290915220546121269083611684565b6001600160a01b0386166000908152600260209081526040808320939093556001905220546121559082611684565b6001600160a01b039095166000908152600160205260409020949094555050505050565b80356001600160a01b038116811461219057600080fd5b919050565b6000602082840312156121a757600080fd5b6106c282612179565b600080604083850312156121c357600080fd5b6121cc83612179565b91506121da60208401612179565b90509250929050565b6000806000606084860312156121f857600080fd5b61220184612179565b925061220f60208501612179565b9150604084013590509250925092565b6000806040838503121561223257600080fd5b61223b83612179565b946020939093013593505050565b60006020828403121561225b57600080fd5b5035919050565b6000806040838503121561227557600080fd5b823591506020830135801515811461228c57600080fd5b809150509250929050565b6000806000606084860312156122ac57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156122f0578581018301518582016040015282016122d4565b81811115612302576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561236057612360612413565b500190565b60008261238257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123a1576123a1612413565b500290565b6000828210156123b8576123b8612413565b500390565b600181811c908216806123d157607f821691505b602082108114156123f257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561240c5761240c612413565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122037b3bb53d251423f90b6f6f67f698b6731c1bdcbb72279b30303e85bb872697364736f6c63430008060033

Deployed Bytecode Sourcemap

16532:18433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18588:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19503:161;;;;;;:::i;:::-;;:::i;:::-;;;2465:14:1;;2458:22;2440:41;;2428:2;2413:18;19503:161:0;2395:92:1;20738:87:0;20807:10;;20738:87;;;8745:25:1;;;8733:2;8718:18;20738:87:0;8700:76:1;18867:95:0;18947:7;;18867:95;;19672:315;;;;;;:::i;:::-;;:::i;21871:253::-;;;;;;:::i;:::-;;:::i;18774:85::-;18842:9;;18774:85;;19995:218;;;;;;:::i;:::-;;:::i;21039:378::-;;;;;;:::i;:::-;;:::i;:::-;;20837:88;20906:11;;20837:88;;24495:227;;;;;;:::i;:::-;;:::i;23886:71::-;;;;;;:::i;:::-;;:::i;21425:438::-;;;;;;:::i;:::-;;:::i;23585:190::-;;;;;;:::i;:::-;;:::i;23787:94::-;;;;;;:::i;:::-;;:::i;18970:199::-;;;;;;:::i;:::-;;:::i;15978:148::-;;;:::i;17505:27::-;;;;;;17133:25;;;;;-1:-1:-1;;;;;17133:25:0;;;;;;-1:-1:-1;;;;;2256:32:1;;;2238:51;;2226:2;2211:18;17133:25:0;2193:102:1;22136:129:0;;;;;;:::i;:::-;-1:-1:-1;;;;;22229:27:0;22205:4;22229:27;;;:18;:27;;;;;;;;;22136:129;15336:79;15374:7;15401:6;-1:-1:-1;;;;;15401:6:0;15336:79;;18679:87;;;:::i;20221:271::-;;;;;;:::i;:::-;;:::i;19177:167::-;;;;;;:::i;:::-;;:::i;22474:277::-;;;;;;:::i;:::-;;:::i;17539:27::-;;;;;;15139:21;;;;;-1:-1:-1;;;;;15139:21:0;;;17471:27;;;;;;20500:110;;;;;;:::i;:::-;-1:-1:-1;;;;;20582:20:0;20558:4;20582:20;;;:11;:20;;;;;;;;;20500:110;20937:94;21009:14;;20937:94;;19352:143;;;;;;:::i;:::-;-1:-1:-1;;;;;19460:18:0;;;19433:7;19460:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19352:143;20622:108;;;;;;:::i;:::-;-1:-1:-1;;;;;20703:19:0;20679:4;20703:19;;;:10;:19;;;;;;;;;20622:108;22277:191;;;;;;:::i;:::-;;:::i;22759:332::-;;;;;;:::i;:::-;;:::i;16281:244::-;;;;;;:::i;:::-;;:::i;23099:478::-;;;;;;:::i;:::-;;:::i;23963:296::-;;;;;;:::i;:::-;;:::i;18588:83::-;18625:13;18658:5;18651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18588:83;:::o;19503:161::-;19578:4;19595:39;158:10;19618:7;19627:6;19595:8;:39::i;:::-;-1:-1:-1;19652:4:0;19503:161;;;;;:::o;19672:315::-;19770:4;19787:36;19797:6;19805:9;19816:6;19787:9;:36::i;:::-;19834:123;19843:6;158:10;19865:91;19903:6;19865:91;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19865:19:0;;;;;;:11;:19;;;;;;;;158:10;19865:33;;;;;;;;;;:37;:91::i;:::-;19834:8;:123::i;:::-;-1:-1:-1;19975:4:0;19672:315;;;;;:::o;21871:253::-;21937:7;21976;;21965;:18;;21957:73;;;;-1:-1:-1;;;21957:73:0;;4110:2:1;21957:73:0;;;4092:21:1;4149:2;4129:18;;;4122:30;4188:34;4168:18;;;4161:62;-1:-1:-1;;;4239:18:1;;;4232:40;4289:19;;21957:73:0;;;;;;;;;22041:19;22064:10;:8;:10::i;:::-;22041:33;-1:-1:-1;22092:24:0;:7;22041:33;22092:11;:24::i;:::-;22085:31;21871:253;-1:-1:-1;;;21871:253:0:o;19995:218::-;158:10;20083:4;20132:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20132:34:0;;;;;;;;;;20083:4;;20100:83;;20123:7;;20132:50;;20171:10;20132:38;:50::i;21039:378::-;158:10;21091:14;21140:19;;;:11;:19;;;;;;;;21139:20;21131:77;;;;-1:-1:-1;;;21131:77:0;;8388:2:1;21131:77:0;;;8370:21:1;8427:2;8407:18;;;8400:30;8466:34;8446:18;;;8439:62;-1:-1:-1;;;8517:18:1;;;8510:42;8569:19;;21131:77:0;8360:234:1;21131:77:0;21220:15;21245:19;21256:7;21245:10;:19::i;:::-;-1:-1:-1;;;;;;;;21293:15:0;;;;;;:7;:15;;;;;;21219:45;;-1:-1:-1;21293:28:0;;:15;-1:-1:-1;21219:45:0;;-1:-1:-1;;21293:19:0;:28::i;:::-;-1:-1:-1;;;;;21275:15:0;;;;;;:7;:15;;;;;:46;21342:7;;:20;;21354:7;21342:11;:20::i;:::-;21332:7;:30;21386:10;;:23;;21401:7;21386:14;:23::i;:::-;21373:10;:36;-1:-1:-1;;;21039:378:0:o;24495:227::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;24584:7:::1;::::0;:19:::1;::::0;24596:6;24584:11:::1;:19::i;:::-;24574:7;:29:::0;-1:-1:-1;;;;;24633:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:28:::1;::::0;24654:6;24633:20:::1;:28::i;:::-;-1:-1:-1::0;;;;;24614:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:47;;;;24677:37;;24614:16;;;-1:-1:-1;;;;;;;;;;;24677:37:0;::::1;::::0;24707:6;8745:25:1;;8733:2;8718:18;;8700:76;24677:37:0::1;;;;;;;;24495:227:::0;;:::o;23886:71::-;23927:25;23933:10;23945:6;23927:5;:25::i;:::-;23886:71;:::o;21425:438::-;21515:7;21554;;21543;:18;;21535:62;;;;-1:-1:-1;;;21535:62:0;;6043:2:1;21535:62:0;;;6025:21:1;6082:2;6062:18;;;6055:30;6121:33;6101:18;;;6094:61;6172:18;;21535:62:0;6015:181:1;21535:62:0;21613:17;21608:248;;21648:15;21673:19;21684:7;21673:10;:19::i;:::-;-1:-1:-1;21647:45:0;;-1:-1:-1;21707:14:0;;-1:-1:-1;;;;;;21707:14:0;21608:248;21756:23;21788:19;21799:7;21788:10;:19::i;:::-;-1:-1:-1;21754:53:0;;-1:-1:-1;21822:22:0;;-1:-1:-1;;;;;;21822:22:0;23585:190;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23672:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;23671:20;23663:67;;;::::0;-1:-1:-1;;;23663:67:0;;5640:2:1;23663:67:0::1;::::0;::::1;5622:21:1::0;5679:2;5659:18;;;5652:30;5718:34;5698:18;;;5691:62;-1:-1:-1;;;5769:18:1;;;5762:32;5811:19;;23663:67:0::1;5612:224:1::0;23663:67:0::1;-1:-1:-1::0;;;;;23741:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;23741:26:0::1;23763:4;23741:26;::::0;;23585:190::o;23787:94::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;23853:10:::1;:20:::0;;-1:-1:-1;;;;;;23853:20:0::1;-1:-1:-1::0;;;;;23853:20:0;;;::::1;::::0;;;::::1;::::0;;23787:94::o;18970:199::-;-1:-1:-1;;;;;19061:20:0;;19036:7;19061:20;;;:11;:20;;;;;;;;19057:49;;;-1:-1:-1;;;;;;19090:16:0;;;;;:7;:16;;;;;;;18970:199::o;19057:49::-;-1:-1:-1;;;;;19144:16:0;;;;;;:7;:16;;;;;;19124:37;;:19;:37::i;15978:148::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;16085:1:::1;16069:6:::0;;16048:40:::1;::::0;-1:-1:-1;;;;;16069:6:0;;::::1;::::0;16048:40:::1;::::0;16085:1;;16048:40:::1;16116:1;16099:19:::0;;-1:-1:-1;;;;;;16099:19:0::1;::::0;;15978:148::o;18679:87::-;18718:13;18751:7;18744:14;;;;;:::i;20221:271::-;20314:4;20331:131;158:10;20354:7;20363:98;20402:15;20363:98;;;;;;;;;;;;;;;;;158:10;20363:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20363:34:0;;;;;;;;;;;;:38;:98::i;19177:167::-;19255:4;19272:42;158:10;19296:9;19307:6;19272:9;:42::i;22474:277::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22555:16:0;::::1;22574:1;22555:16:::0;;;:7:::1;:16;::::0;;;;;:20;22552:108:::1;;-1:-1:-1::0;;;;;22631:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22611:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22592:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22552:108:::1;-1:-1:-1::0;;;;;22670:27:0::1;22700:5;22670:27:::0;;;:18:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;22670:35:0;;::::1;::::0;;;22716:11:::1;:20:::0;;;;;;:27;;;;::::1;22670:35:::0;22716:27:::1;::::0;;22474:277::o;22277:191::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22353:16:0::1;22372:1;22353:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;22384:18:::1;:27:::0;;;;;:34;;-1:-1:-1;;22384:34:0;;::::1;22414:4;22384:34;::::0;;;22430:11:::1;:20:::0;;;;;;:28;;;;::::1;::::0;;22277:191::o;22759:332::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22841:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22840:21;22832:61;;;::::0;-1:-1:-1;;;22832:61:0;;5284:2:1;22832:61:0::1;::::0;::::1;5266:21:1::0;5323:2;5303:18;;;5296:30;5362:29;5342:18;;;5335:57;5409:18;;22832:61:0::1;5256:177:1::0;22832:61:0::1;-1:-1:-1::0;;;;;22907:16:0;::::1;22926:1;22907:16:::0;;;:7:::1;:16;::::0;;;;;:20;22904:108:::1;;-1:-1:-1::0;;;;;22983:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22963:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22944:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22904:108:::1;-1:-1:-1::0;;;;;23022:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23022:27:0::1;23045:4;23022:27:::0;;::::1;::::0;;;23060:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23060:23:0::1;::::0;;::::1;::::0;;22759:332::o;16281:244::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16370:22:0;::::1;16362:73;;;::::0;-1:-1:-1;;;16362:73:0;;4521:2:1;16362:73:0::1;::::0;::::1;4503:21:1::0;4560:2;4540:18;;;4533:30;4599:34;4579:18;;;4572:62;-1:-1:-1;;;4650:18:1;;;4643:36;4696:19;;16362:73:0::1;4493:228:1::0;16362:73:0::1;16472:6;::::0;;16451:38:::1;::::0;-1:-1:-1;;;;;16451:38:0;;::::1;::::0;16472:6;::::1;::::0;16451:38:::1;::::0;::::1;16500:6;:17:::0;;-1:-1:-1;;;;;;16500:17:0::1;-1:-1:-1::0;;;;;16500:17:0;;;::::1;::::0;;;::::1;::::0;;16281:244::o;23099:478::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23180:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23172:60;;;::::0;-1:-1:-1;;;23172:60:0;;5284:2:1;23172:60:0::1;::::0;::::1;5266:21:1::0;5323:2;5303:18;;;5296:30;5362:29;5342:18;;;5335:57;5409:18;;23172:60:0::1;5256:177:1::0;23172:60:0::1;23248:9;23243:327;23267:9;:16:::0;23263:20;::::1;23243:327;;;23325:7;-1:-1:-1::0;;;;;23309:23:0::1;:9;23319:1;23309:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23309:12:0::1;:23;23305:254;;;23368:9;23378:16:::0;;:20:::1;::::0;23397:1:::1;::::0;23378:20:::1;:::i;:::-;23368:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23353:9:::1;:12:::0;;-1:-1:-1;;;;;23368:31:0;;::::1;::::0;23363:1;;23353:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23353:46:0::1;-1:-1:-1::0;;;;;23353:46:0;;::::1;;::::0;;23418:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23457:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23457:28:0::1;::::0;;23504:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23504:15:0;;;;;-1:-1:-1;;;;;;23504:15:0::1;::::0;;;;;23243:327:::1;23099:478:::0;:::o;23305:254::-:1;23285:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23243:327;;;;23099:478:::0;:::o;23963:296::-;15548:6;;-1:-1:-1;;;;;15548:6:0;158:10;15548:22;15540:67;;;;-1:-1:-1;;;15540:67:0;;;;;;;:::i;:::-;24075:11:::1;:6:::0;24083:3:::1;24075:11;:::i;:::-;24064:8;:22:::0;24110:14:::1;:8:::0;24121:3:::1;24110:14;:::i;:::-;24098:9;:26:::0;24144:16:::1;:11:::0;24157:3:::1;24144:16;:::i;:::-;24129:12;:31:::0;;;24180:8:::1;::::0;24165:12:::1;:23:::0;24209:9:::1;::::0;24193:13:::1;:25:::0;24223:16:::1;:31:::0;-1:-1:-1;;;23963:296:0:o;24734:341::-;-1:-1:-1;;;;;24827:19:0;;24819:70;;;;-1:-1:-1;;;24819:70:0;;7981:2:1;24819:70:0;;;7963:21:1;8020:2;8000:18;;;7993:30;8059:34;8039:18;;;8032:62;-1:-1:-1;;;8110:18:1;;;8103:36;8156:19;;24819:70:0;7953:228:1;24819:70:0;-1:-1:-1;;;;;24908:21:0;;24900:70;;;;-1:-1:-1;;;24900:70:0;;7576:2:1;24900:70:0;;;7558:21:1;7615:2;7595:18;;;7588:30;7654:34;7634:18;;;7627:62;-1:-1:-1;;;7705:18:1;;;7698:34;7749:19;;24900:70:0;7548:226:1;24900:70:0;-1:-1:-1;;;;;24983:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25035:32;;8745:25:1;;;25035:32:0;;8718:18:1;25035:32:0;;;;;;;24734:341;;;:::o;25083:1547::-;-1:-1:-1;;;;;25180:20:0;;25172:72;;;;-1:-1:-1;;;25172:72:0;;3702:2:1;25172:72:0;;;3684:21:1;3741:2;3721:18;;;3714:30;3780:34;3760:18;;;3753:62;-1:-1:-1;;;3831:18:1;;;3824:37;3878:19;;25172:72:0;3674:229:1;25172:72:0;-1:-1:-1;;;;;25263:23:0;;25255:73;;;;-1:-1:-1;;;25255:73:0;;3296:2:1;25255:73:0;;;3278:21:1;3335:2;3315:18;;;3308:30;3374:34;3354:18;;;3347:62;-1:-1:-1;;;3425:18:1;;;3418:35;3470:19;;25255:73:0;3268:227:1;25255:73:0;25356:1;25347:6;:10;25339:64;;;;-1:-1:-1;;;25339:64:0;;7166:2:1;25339:64:0;;;7148:21:1;7205:2;7185:18;;;7178:30;7244:34;7224:18;;;7217:62;-1:-1:-1;;;7295:18:1;;;7288:39;7344:19;;25339:64:0;7138:231:1;25339:64:0;-1:-1:-1;;;;;25516:18:0;;25482:12;25516:18;;;:10;:18;;;;;;25497:4;;25516:18;;;:43;;-1:-1:-1;;;;;;25538:21:0;;;;;;:10;:21;;;;;;;;25516:43;25512:91;;;-1:-1:-1;25586:5:0;25512:91;25620:7;25615:28;;25629:14;:12;:14::i;:::-;-1:-1:-1;;;;;25662:26:0;;;;;;:18;:26;;;;;;;;25661:27;:60;;;;-1:-1:-1;;;;;;25692:29:0;;;;;;:18;:29;;;;;;;;25661:60;25657:924;;;25738:48;25760:6;25768:9;25779:6;25738:21;:48::i;:::-;-1:-1:-1;;;;;25801:19:0;;;;;;:11;:19;;;;;:26;;-1:-1:-1;;25801:26:0;25823:4;25801:26;;;25657:924;;;-1:-1:-1;;;;;25849:26:0;;;;;;:18;:26;;;;;;;;:60;;;;-1:-1:-1;;;;;;25880:29:0;;;;;;:18;:29;;;;;;;;25879:30;25849:60;25845:736;;;25926:46;25946:6;25954:9;25965:6;25926:19;:46::i;:::-;-1:-1:-1;;;;;25987:22:0;;;;;;:11;:22;;;;;:29;;-1:-1:-1;;25987:29:0;26012:4;25987:29;;;25845:736;;;-1:-1:-1;;;;;26038:26:0;;;;;;:18;:26;;;;;;;;:59;;;;-1:-1:-1;;;;;;26068:29:0;;;;;;:18;:29;;;;;;;;26038:59;26034:547;;;26114:44;26132:6;26140:9;26151:6;26114:17;:44::i;:::-;-1:-1:-1;;;;;26173:22:0;;;26198:5;26173:22;;;:11;:22;;;;;;:30;;-1:-1:-1;;26173:30:0;;;;;;26218:19;;;;;;;:27;;;;;;;26034:547;;;-1:-1:-1;;;;;26268:26:0;;;;;;:18;:26;;;;;;;;26267:27;:61;;;;-1:-1:-1;;;;;;26299:29:0;;;;;;:18;:29;;;;;;;;26298:30;26267:61;26263:318;;;26345:48;26367:6;26375:9;26386:6;26345:21;:48::i;:::-;-1:-1:-1;;;;;26408:22:0;;;;;;;:11;:22;;;;;;:29;;26433:4;-1:-1:-1;;26408:29:0;;;;;;;;26452:19;;;;;;;:26;;;;;;;;26263:318;;;26511:44;26529:6;26537:9;26548:6;26511:17;:44::i;:::-;26598:7;26593:29;;26607:15;34762:12;;34751:8;:23;34797:13;;34785:9;:25;34836:16;;34821:12;:31;34707:153;26607:15;25161:1469;25083:1547;;;:::o;4881:192::-;4967:7;5003:12;4995:6;;;;4987:29;;;;-1:-1:-1;;;4987:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5027:9:0;5039:5;5043:1;5039;:5;:::i;:::-;5027:17;4881:192;-1:-1:-1;;;;;4881:192:0:o;33198:163::-;33239:7;33260:15;33277;33296:19;:17;:19::i;:::-;33259:56;;-1:-1:-1;33259:56:0;-1:-1:-1;33333:20:0;33259:56;;33333:11;:20::i;:::-;33326:27;;;;33198:163;:::o;6279:132::-;6337:7;6364:39;6368:1;6371;6364:39;;;;;;;;;;;;;;;;;:3;:39::i;3978:181::-;4036:7;;4068:5;4072:1;4068;:5;:::i;:::-;4056:17;;4097:1;4092;:6;;4084:46;;;;-1:-1:-1;;;4084:46:0;;4928:2:1;4084:46:0;;;4910:21:1;4967:2;4947:18;;;4940:30;5006:29;4986:18;;;4979:57;5053:18;;4084:46:0;4900:177:1;31249:652:0;31308:7;31317;31326;31335;31344;31353;31362;31383:12;31397:13;31412:16;31432:55;31444:7;31453:8;;31463:9;;31474:12;;31432:11;:55::i;:::-;31382:105;;;;;;31498:23;31524:50;31543:7;31552:4;31558:5;31565:8;31524:18;:50::i;:::-;31498:76;;31585:19;31608:10;:8;:10::i;:::-;31585:33;;31630:15;31647:12;31663:39;31675:7;31684:4;31690:11;31663;:39::i;:::-;31629:73;;;;31713:23;31739:64;31759:7;31768:4;31774:5;31781:8;31791:11;31739:19;:64::i;:::-;31822:7;;-1:-1:-1;31713:90:0;;-1:-1:-1;31848:4:0;-1:-1:-1;31854:15:0;;-1:-1:-1;31871:4:0;;-1:-1:-1;31877:5:0;;-1:-1:-1;31884:8:0;-1:-1:-1;;;31249:652:0;;;;;;;;;:::o;4442:136::-;4500:7;4527:43;4531:1;4534;4527:43;;;;;;;;;;;;;;;;;:3;:43::i;24267:220::-;-1:-1:-1;;;;;24344:13:0;;;;;;:7;:13;;;;;;24334:23;;;24326:32;;;;;;-1:-1:-1;;;;;24379:13:0;;;;;;:7;:13;;;;;;:25;;24397:6;24379:17;:25::i;:::-;-1:-1:-1;;;;;24363:13:0;;;;;;:7;:13;;;;;:41;24419:7;;:19;;24431:6;24419:11;:19::i;:::-;24409:7;:29;24448:34;;8745:25:1;;;24471:1:0;;-1:-1:-1;;;;;24448:34:0;;;-1:-1:-1;;;;;;;;;;;24448:34:0;8733:2:1;8718:18;24448:34:0;8700:76:1;34375:320:0;34421:8;;:13;:31;;;;-1:-1:-1;34438:9:0;;:14;34421:31;:52;;;;-1:-1:-1;34456:12:0;;:17;34421:52;34418:64;;;34375:320::o;34418:64::-;34517:8;;;34502:12;:23;34552:9;;;34536:13;:25;34591:12;;;34572:16;:31;-1:-1:-1;34624:12:0;;;;34647:13;;;;34671:16;34375:320::o;28648:671::-;28750:19;28773:10;:8;:10::i;:::-;28750:33;;28795:15;28812:23;28837:12;28851:23;28876:12;28890:13;28905:16;28925:19;28936:7;28925:10;:19::i;:::-;28794:150;;;;;;;;;;;;;;28955:13;28972:22;28982:11;28972:5;:9;;:22;;;;:::i;:::-;28955:39;-1:-1:-1;29005:16:0;29024:25;:8;29037:11;29024:12;:25::i;:::-;29005:44;;29060:80;29087:6;29095:9;29106:7;29115;29124:15;29060:26;:80::i;:::-;29151:32;29166:8;29176:6;29151:14;:32::i;:::-;29194:57;29206:4;29212:5;29219:8;29229:4;29235:5;29242:8;29194:11;:57::i;:::-;29284:9;-1:-1:-1;;;;;29267:44:0;29276:6;-1:-1:-1;;;;;29267:44:0;-1:-1:-1;;;;;;;;;;;29295:15:0;29267:44;;;;8745:25:1;;8733:2;8718:18;;8700:76;29267:44:0;;;;;;;;28739:580;;;;;;;;;;28648:671;;;:::o;27576:687::-;27676:19;27699:10;:8;:10::i;:::-;27676:33;;27721:15;27738:23;27763:12;27777:23;27802:12;27816:13;27831:16;27851:19;27862:7;27851:10;:19::i;:::-;27720:150;;;;;;;;;;;;;;27881:13;27898:22;27908:11;27898:5;:9;;:22;;;;:::i;:::-;27881:39;-1:-1:-1;27931:16:0;27950:25;:8;27963:11;27950:12;:25::i;:::-;27931:44;;27986:90;28015:6;28023:9;28034:15;28051:7;28060:15;27986:28;:90::i;26636:661::-;26734:19;26757:10;:8;:10::i;:::-;26734:33;;26779:15;26796:23;26821:12;26835:23;26860:12;26874:13;26889:16;26909:19;26920:7;26909:10;:19::i;:::-;26778:150;;;;;;;;;;;;;;26939:13;26956:22;26966:11;26956:5;:9;;:22;;;;:::i;:::-;26939:39;-1:-1:-1;26989:16:0;27008:25;:8;27021:11;27008:12;:25::i;:::-;26989:44;;27049:69;27074:6;27082:9;27093:7;27102:15;27049:24;:69::i;29672:688::-;29774:19;29797:10;:8;:10::i;:::-;29774:33;;29819:15;29836:23;29861:12;29875:23;29900:12;29914:13;29929:16;29949:19;29960:7;29949:10;:19::i;:::-;29818:150;;;;;;;;;;;;;;29979:13;29996:22;30006:11;29996:5;:9;;:22;;;;:::i;:::-;29979:39;-1:-1:-1;30029:16:0;30048:25;:8;30061:11;30048:12;:25::i;:::-;30029:44;;30088:91;30109:6;30117:9;30128:7;30137;30146:15;30163;30088:20;:91::i;33369:561::-;33466:7;;33502;;33419;;;;;33526:289;33550:9;:16;33546:20;;33526:289;;;33616:7;33592;:21;33600:9;33610:1;33600:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33600:12:0;33592:21;;;;;;;;;;;;;:31;;:66;;;33651:7;33627;:21;33635:9;33645:1;33635:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33635:12:0;33627:21;;;;;;;;;;;;;:31;33592:66;33588:97;;;33668:7;;33677;;33660:25;;;;;;;33369:561;;:::o;33588:97::-;33710:34;33722:7;:21;33730:9;33740:1;33730:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33730:12:0;33722:21;;;;;;;;;;;;;33710:7;;:11;:34::i;:::-;33700:44;;33769:34;33781:7;:21;33789:9;33799:1;33789:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33789:12:0;33781:21;;;;;;;;;;;;;33769:7;;:11;:34::i;:::-;33759:44;-1:-1:-1;33568:3:0;;;;:::i;:::-;;;;33526:289;;;-1:-1:-1;33851:7:0;;33839;;:20;;:11;:20::i;:::-;33829:7;:30;33825:61;;;33869:7;;33878;;33861:25;;;;;;33369:561;;:::o;33825:61::-;33905:7;;33914;;-1:-1:-1;33369:561:0;-1:-1:-1;33369:561:0:o;6907:278::-;6993:7;7028:12;7021:5;7013:28;;;;-1:-1:-1;;;7013:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7052:9:0;7064:5;7068:1;7064;:5;:::i;31913:427::-;32026:7;32035;32044;32064:12;32079:50;32125:3;32080:39;32106:12;;32081:19;32093:6;32081:7;:11;;:19;;;;:::i;:::-;32080:25;;:39::i;32079:50::-;32064:65;;32140:13;32156:51;32203:3;32157:40;32184:12;;32158:20;32170:7;32158;:11;;:20;;;;:::i;32156:51::-;32140:67;;32218:16;32237:54;32287:3;32238:43;32268:12;;32239:23;32251:10;32239:7;:11;;:23;;;;:::i;32237:54::-;32310:4;;32316:5;;-1:-1:-1;32310:4:0;;-1:-1:-1;31913:427:0;-1:-1:-1;;;;;;31913:427:0:o;32352:191::-;32466:7;32493:42;32526:8;32493:28;32515:5;32493:28;:7;32505:4;32493:11;:17::i;:::-;:21;;:28::i;32555:254::-;32650:7;;;32697:24;:7;32709:11;32697;:24::i;:::-;32679:42;-1:-1:-1;32732:12:0;32747:21;:4;32756:11;32747:8;:21::i;:::-;32787:7;;;;-1:-1:-1;32555:254:0;;-1:-1:-1;;;;;32555:254:0:o;32821:369::-;32957:7;;32993:22;:5;33003:11;32993:9;:22::i;:::-;32977:38;-1:-1:-1;33026:16:0;33045:25;:8;33058:11;33045:12;:25::i;:::-;33026:44;-1:-1:-1;33081:23:0;33107:42;33026:44;33107:28;33129:5;33107:28;:7;33119:4;33107:11;:17::i;:42::-;33081:68;32821:369;-1:-1:-1;;;;;;;;;32821:369:0:o;5332:471::-;5390:7;5635:6;5631:47;;-1:-1:-1;5665:1:0;5658:8;;5631:47;5690:9;5702:5;5706:1;5702;:5;:::i;:::-;5690:17;-1:-1:-1;5735:1:0;5726:5;5730:1;5690:17;5726:5;:::i;:::-;:10;5718:56;;;;-1:-1:-1;;;5718:56:0;;6403:2:1;5718:56:0;;;6385:21:1;6442:2;6422:18;;;6415:30;6481:34;6461:18;;;6454:62;-1:-1:-1;;;6532:18:1;;;6525:31;6573:19;;5718:56:0;6375:223:1;29331:333:0;-1:-1:-1;;;;;29498:15:0;;;;;;:7;:15;;;;;;:28;;29518:7;29498:19;:28::i;:::-;-1:-1:-1;;;;;29480:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29555:7;:15;;;;:28;;29575:7;29555:19;:28::i;:::-;-1:-1:-1;;;;;29537:15:0;;;;;;;:7;:15;;;;;;:46;;;;29615:18;;;;;;;:39;;29638:15;29615:22;:39::i;:::-;-1:-1:-1;;;;;29594:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;;29331:333:0:o;33938:429::-;34018:12;;:16;34015:336;;34050:19;34072:10;:8;:10::i;:::-;34050:32;-1:-1:-1;34097:16:0;34116:25;:8;34050:32;34116:12;:25::i;:::-;34186:10;;-1:-1:-1;;;;;34186:10:0;34178:19;;;;:7;:19;;;;;;34097:44;;-1:-1:-1;34178:33:0;;34097:44;34178:23;:33::i;:::-;34164:10;;;-1:-1:-1;;;;;34164:10:0;;;34156:19;;;;:7;:19;;;;;;;;:55;;;;34256:10;;;;;34248:19;;:7;:19;;;;;:33;;34272:8;34248:23;:33::i;:::-;34234:10;;;-1:-1:-1;;;;;34234:10:0;;;34226:19;;;;:7;:19;;;;;;;;;:55;;;;34318:10;;34301:38;;8745:25:1;;;34318:10:0;;;;34301:38;;;;-1:-1:-1;;;;;;;;;;;34301:38:0;8718:18:1;34301:38:0;;;;;;;34035:316;;33938:429;;:::o;30803:432::-;30947:42;30980:8;30947:28;30969:5;30947:17;30959:4;30947:7;;:11;;:17;;;;:::i;:42::-;30937:7;:52;31013:10;;:20;;31028:4;31013:14;:20::i;:::-;31000:10;:33;31058:11;;:22;;31074:5;31058:15;:22::i;:::-;31044:11;:36;31108:14;;:28;;31127:8;31108:18;:28::i;:::-;31091:14;:45;31157:7;;:18;;31169:5;31157:11;:18::i;:::-;31147:7;:28;31185:42;;8745:25:1;;;31217:1:0;;31202:4;;-1:-1:-1;;;;;;;;;;;31185:42:0;8733:2:1;8718:18;31185:42:0;;;;;;;30803:432;;;;;;:::o;28275:359::-;-1:-1:-1;;;;;28452:15:0;;;;;;:7;:15;;;;;;:28;;28472:7;28452:19;:28::i;:::-;-1:-1:-1;;;;;28434:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28512:18;;;;;:7;:18;;;;;:39;;28535:15;28512:22;:39::i;:::-;-1:-1:-1;;;;;28491:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28583:7;:18;;;;:39;;28606:15;28583:22;:39::i;27309:255::-;-1:-1:-1;;;;;27457:15:0;;;;;;:7;:15;;;;;;:28;;27477:7;27457:19;:28::i;:::-;-1:-1:-1;;;;;27439:15:0;;;;;;;:7;:15;;;;;;:46;;;;27517:18;;;;;;;:39;;27540:15;27517:22;:39::i;:::-;-1:-1:-1;;;;;27496:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;27309:255:0:o;30372:423::-;-1:-1:-1;;;;;30558:15:0;;;;;;:7;:15;;;;;;:28;;30578:7;30558:19;:28::i;:::-;-1:-1:-1;;;;;30540:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30615:7;:15;;;;:28;;30635:7;30615:19;:28::i;:::-;-1:-1:-1;;;;;30597:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30675:18;;;;;:7;:18;;;;;:39;;30698:15;30675:22;:39::i;:::-;-1:-1:-1;;;;;30654:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30746:7;:18;;;;:39;;30769:15;30746:22;:39::i;:::-;-1:-1:-1;;;;;30725:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;;;30372:423:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:1:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:2;;;1368:1;1365;1358:12;1320:2;-1:-1:-1;1391:23:1;;1310:110;-1:-1:-1;1310:110:1:o;1425:341::-;1490:6;1498;1551:2;1539:9;1530:7;1526:23;1522:32;1519:2;;;1567:1;1564;1557:12;1519:2;1603:9;1590:23;1580:33;;1663:2;1652:9;1648:18;1635:32;1710:5;1703:13;1696:21;1689:5;1686:32;1676:2;;1732:1;1729;1722:12;1676:2;1755:5;1745:15;;;1509:257;;;;;:::o;1771:316::-;1848:6;1856;1864;1917:2;1905:9;1896:7;1892:23;1888:32;1885:2;;;1933:1;1930;1923:12;1885:2;-1:-1:-1;;1956:23:1;;;2026:2;2011:18;;1998:32;;-1:-1:-1;2077:2:1;2062:18;;;2049:32;;1875:212;-1:-1:-1;1875:212:1:o;2492:597::-;2604:4;2633:2;2662;2651:9;2644:21;2694:6;2688:13;2737:6;2732:2;2721:9;2717:18;2710:34;2762:1;2772:140;2786:6;2783:1;2780:13;2772:140;;;2881:14;;;2877:23;;2871:30;2847:17;;;2866:2;2843:26;2836:66;2801:10;;2772:140;;;2930:6;2927:1;2924:13;2921:2;;;3000:1;2995:2;2986:6;2975:9;2971:22;2967:31;2960:42;2921:2;-1:-1:-1;3073:2:1;3052:15;-1:-1:-1;;3048:29:1;3033:45;;;;3080:2;3029:54;;2613:476;-1:-1:-1;;;2613:476:1:o;6603:356::-;6805:2;6787:21;;;6824:18;;;6817:30;6883:34;6878:2;6863:18;;6856:62;6950:2;6935:18;;6777:182::o;8781:128::-;8821:3;8852:1;8848:6;8845:1;8842:13;8839:2;;;8858:18;;:::i;:::-;-1:-1:-1;8894:9:1;;8829:80::o;8914:217::-;8954:1;8980;8970:2;;9024:10;9019:3;9015:20;9012:1;9005:31;9059:4;9056:1;9049:15;9087:4;9084:1;9077:15;8970:2;-1:-1:-1;9116:9:1;;8960:171::o;9136:168::-;9176:7;9242:1;9238;9234:6;9230:14;9227:1;9224:21;9219:1;9212:9;9205:17;9201:45;9198:2;;;9249:18;;:::i;:::-;-1:-1:-1;9289:9:1;;9188:116::o;9309:125::-;9349:4;9377:1;9374;9371:8;9368:2;;;9382:18;;:::i;:::-;-1:-1:-1;9419:9:1;;9358:76::o;9439:380::-;9518:1;9514:12;;;;9561;;;9582:2;;9636:4;9628:6;9624:17;9614:27;;9582:2;9689;9681:6;9678:14;9658:18;9655:38;9652:2;;;9735:10;9730:3;9726:20;9723:1;9716:31;9770:4;9767:1;9760:15;9798:4;9795:1;9788:15;9652:2;;9494:325;;;:::o;9824:135::-;9863:3;-1:-1:-1;;9884:17:1;;9881:2;;;9904:18;;:::i;:::-;-1:-1:-1;9951:1:1;9940:13;;9871:88::o;9964:127::-;10025:10;10020:3;10016:20;10013:1;10006:31;10056:4;10053:1;10046:15;10080:4;10077:1;10070:15;10096:127;10157:10;10152:3;10148:20;10145:1;10138:31;10188:4;10185:1;10178:15;10212:4;10209:1;10202:15;10228:127;10289:10;10284:3;10280:20;10277:1;10270:31;10320:4;10317:1;10310:15;10344:4;10341:1;10334:15

Swarm Source

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