ETH Price: $3,375.22 (+3.18%)
Gas: 3 Gwei

Token

JustReflect (jRFi)
 

Overview

Max Total Supply

10,000 jRFi

Holders

276

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
JustReflect

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-12
*/

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

/**
 *Submitted for verification at Etherscan.io on 2020-11-19
*/

// File: openzeppelin-solidity\contracts\GSN\Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

// File: openzeppelin-solidity\contracts\token\ERC20\IERC20.sol

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity\contracts\math\SafeMath.sol

pragma solidity ^0.6.0;

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

// File: openzeppelin-solidity\contracts\utils\Address.sol

pragma solidity ^0.6.2;

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

// File: openzeppelin-solidity\contracts\access\Ownable.sol

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

// File: contracts\REFLECT.sol

/*
 * Copyright 2020 reflect.finance. ALL RIGHTS RESERVED.
 */

pragma solidity ^0.6.2;


contract JustReflect is Context, IERC20, 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;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 10000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'JustReflect';
    string private _symbol = 'jRFi';
    uint8 private _decimals = 9;
    uint8 public reflectFees = 0;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _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, "ERC20: 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, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(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 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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }
    
    function _transferPresale(address sender, address recipient, uint256 tAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(tAmount);       
        _reflectFee(0, 0);
        emit Transfer(sender, recipient, tAmount);
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256) {
        uint256 tFee = tAmount.div(100).mul(reflectFees);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    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 setFeeRate(uint8 newFee) external onlyOwner() {
        reflectFees = newFee;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"uint8","name":"newFee","type":"uint8"}],"name":"setFeeRate","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":"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"}]

60806040526509184e72a000600019816200001657fe5b06600019036006556040518060400160405280600b81526020017f4a7573745265666c656374000000000000000000000000000000000000000000815250600890805190602001906200006b9291906200028e565b506040518060400160405280600481526020017f6a5246690000000000000000000000000000000000000000000000000000000081525060099080519060200190620000b99291906200028e565b506009600a60006101000a81548160ff021916908360ff1602179055506000600a60016101000a81548160ff021916908360ff160217905550348015620000ff57600080fd5b506000620001126200028660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001c76200028660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002156200028660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6509184e72a0006040518082815260200191505060405180910390a362000334565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b6134c380620003446000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80635177942a116100c3578063a9059cbb1161007c578063a9059cbb1461060b578063cba0e9961461066f578063dd62ed3e146106c9578063f2cc0c1814610741578063f2fde38b14610785578063f84354f1146107c95761014d565b80635177942a1461045d57806370a082311461048e578063715018a6146104e65780638da5cb5b146104f057806395d89b4114610524578063a457c2d7146105a75761014d565b806318160ddd1161011557806318160ddd146102a657806323b872dd146102c45780632d83811914610348578063313ce5671461038a57806339509351146103ab5780634549b0391461040f5761014d565b8063053ab1821461015257806306fdde0314610180578063095ea7b3146102035780630fff105d1461026757806313114a9d14610288575b600080fd5b61017e6004803603602081101561016857600080fd5b810190808035906020019092919050505061080d565b005b61018861099d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c85780820151818401526020810190506101ad565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024f6004803603604081101561021957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a3f565b60405180821515815260200191505060405180910390f35b61026f610a5d565b604051808260ff16815260200191505060405180910390f35b610290610a70565b6040518082815260200191505060405180910390f35b6102ae610a7a565b6040518082815260200191505060405180910390f35b610330600480360360608110156102da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a88565b60405180821515815260200191505060405180910390f35b6103746004803603602081101561035e57600080fd5b8101908080359060200190929190505050610b61565b6040518082815260200191505060405180910390f35b610392610be5565b604051808260ff16815260200191505060405180910390f35b6103f7600480360360408110156103c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bfc565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561042557600080fd5b8101908080359060200190929190803515159060200190929190505050610caf565b6040518082815260200191505060405180910390f35b61048c6004803603602081101561047357600080fd5b81019080803560ff169060200190929190505050610d68565b005b6104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4e565b6040518082815260200191505060405180910390f35b6104ee610f39565b005b6104f86110bf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052c6110e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561056c578082015181840152602081019050610551565b50505050905090810190601f1680156105995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105f3600480360360408110156105bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061118a565b60405180821515815260200191505060405180910390f35b6106576004803603604081101561062157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611257565b60405180821515815260200191505060405180910390f35b6106b16004803603602081101561068557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611275565b60405180821515815260200191505060405180910390f35b61072b600480360360408110156106df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112cb565b6040518082815260200191505060405180910390f35b6107836004803603602081101561075757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611352565b005b6107c76004803603602081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061166c565b005b61080b600480360360208110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b6000610817611c01565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061343d602c913960400191505060405180910390fd5b60006108c783611c09565b50505050905061091f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061097781600654611c6190919063ffffffff16565b60068190555061099283600754611cab90919063ffffffff16565b600781905550505050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c611c01565b8484611d33565b6001905092915050565b600a60019054906101000a900460ff1681565b6000600754905090565b60006509184e72a000905090565b6000610a95848484611f2a565b610b5684610aa1611c01565b610b51856040518060600160405280602881526020016133a360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b07611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123839092919063ffffffff16565b611d33565b600190509392505050565b6000600654821115610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613310602a913960400191505060405180910390fd5b6000610bc8612443565b9050610bdd818461246e90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610ca5610c09611c01565b84610ca08560036000610c1a611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b611d33565b6001905092915050565b60006509184e72a000831115610d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610d4c576000610d3d84611c09565b50505050905080915050610d62565b6000610d5784611c09565b505050915050809150505b92915050565b610d70611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60016101000a81548160ff021916908360ff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ee957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610f34565b610f31600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b61565b90505b919050565b610f41611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b5050505050905090565b600061124d611197611c01565b846112488560405180606001604052806025815260200161346960259139600360006111c1611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123839092919063ffffffff16565b611d33565b6001905092915050565b600061126b611264611c01565b8484611f2a565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61135a611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115ae5761156a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b61565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611674611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061333a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187f611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015611bfd578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611a3257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bf057600560016005805490500381548110611a8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611ac657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611bb657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611bfd565b8080600101915050611a01565b5050565b600033905090565b6000806000806000806000611c1d886124b8565b915091506000611c2b612443565b90506000806000611c3d8c868661251b565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000611ca383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612383565b905092915050565b600080828401905083811015611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134196024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806133606022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133f46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132ed6023913960400191505060405180910390fd5b6000811161208f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806133cb6029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121325750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214757612142838383612579565b61237e565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ea5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121ff576121fa8383836127cc565b61237d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122a35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b8576122b3838383612a1f565b61237c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561235a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561236f5761236a838383612bdd565b61237b565b61237a838383612a1f565b5b5b5b5b505050565b6000838311158290612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123f55780820151818401526020810190506123da565b50505050905090810190601f1680156124225780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612450612ec5565b91509150612467818361246e90919063ffffffff16565b9250505090565b60006124b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613166565b905092915050565b60008060006124f5600a60019054906101000a900460ff1660ff166124e760648761246e90919063ffffffff16565b61322c90919063ffffffff16565b9050600061250c8286611c6190919063ffffffff16565b90508082935093505050915091565b600080600080612534858861322c90919063ffffffff16565b9050600061254b868861322c90919063ffffffff16565b905060006125628284611c6190919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061258a86611c09565b945094509450945094506125e686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275d83826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006127dd86611c09565b9450945094509450945061283985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ce82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061296384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129b083826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a3086611c09565b94509450945094509450612a8c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6e83826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612bee86611c09565b94509450945094509450612c4a86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cdf85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d7482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e0984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5683826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000600654905060006509184e72a000905060005b60058054905081101561312157826001600060058481548110612efc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612fe35750816002600060058481548110612f7b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612ffe576006546509184e72a00094509450505050613162565b613087600160006005848154811061301257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c6190919063ffffffff16565b9250613112600260006005848154811061309d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611c6190919063ffffffff16565b91508080600101915050612edd565b5061313d6509184e72a00060065461246e90919063ffffffff16565b821015613159576006546509184e72a000935093505050613162565b81819350935050505b9091565b60008083118290613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131d75780820151818401526020810190506131bc565b50505050905090810190601f1680156132045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161321e57fe5b049050809150509392505050565b60008083141561323f57600090506132ac565b600082840290508284828161325057fe5b04146132a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133826021913960400191505060405180910390fd5b809150505b92915050565b6132c782600654611c6190919063ffffffff16565b6006819055506132e281600754611cab90919063ffffffff16565b600781905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c375a281e9bbccc92d331392a1cf5953024ec08a13f8f0d6af14c692c421a68e64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80635177942a116100c3578063a9059cbb1161007c578063a9059cbb1461060b578063cba0e9961461066f578063dd62ed3e146106c9578063f2cc0c1814610741578063f2fde38b14610785578063f84354f1146107c95761014d565b80635177942a1461045d57806370a082311461048e578063715018a6146104e65780638da5cb5b146104f057806395d89b4114610524578063a457c2d7146105a75761014d565b806318160ddd1161011557806318160ddd146102a657806323b872dd146102c45780632d83811914610348578063313ce5671461038a57806339509351146103ab5780634549b0391461040f5761014d565b8063053ab1821461015257806306fdde0314610180578063095ea7b3146102035780630fff105d1461026757806313114a9d14610288575b600080fd5b61017e6004803603602081101561016857600080fd5b810190808035906020019092919050505061080d565b005b61018861099d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c85780820151818401526020810190506101ad565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024f6004803603604081101561021957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a3f565b60405180821515815260200191505060405180910390f35b61026f610a5d565b604051808260ff16815260200191505060405180910390f35b610290610a70565b6040518082815260200191505060405180910390f35b6102ae610a7a565b6040518082815260200191505060405180910390f35b610330600480360360608110156102da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a88565b60405180821515815260200191505060405180910390f35b6103746004803603602081101561035e57600080fd5b8101908080359060200190929190505050610b61565b6040518082815260200191505060405180910390f35b610392610be5565b604051808260ff16815260200191505060405180910390f35b6103f7600480360360408110156103c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bfc565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561042557600080fd5b8101908080359060200190929190803515159060200190929190505050610caf565b6040518082815260200191505060405180910390f35b61048c6004803603602081101561047357600080fd5b81019080803560ff169060200190929190505050610d68565b005b6104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4e565b6040518082815260200191505060405180910390f35b6104ee610f39565b005b6104f86110bf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052c6110e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561056c578082015181840152602081019050610551565b50505050905090810190601f1680156105995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105f3600480360360408110156105bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061118a565b60405180821515815260200191505060405180910390f35b6106576004803603604081101561062157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611257565b60405180821515815260200191505060405180910390f35b6106b16004803603602081101561068557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611275565b60405180821515815260200191505060405180910390f35b61072b600480360360408110156106df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112cb565b6040518082815260200191505060405180910390f35b6107836004803603602081101561075757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611352565b005b6107c76004803603602081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061166c565b005b61080b600480360360208110156107df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b6000610817611c01565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156108bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061343d602c913960400191505060405180910390fd5b60006108c783611c09565b50505050905061091f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061097781600654611c6190919063ffffffff16565b60068190555061099283600754611cab90919063ffffffff16565b600781905550505050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c611c01565b8484611d33565b6001905092915050565b600a60019054906101000a900460ff1681565b6000600754905090565b60006509184e72a000905090565b6000610a95848484611f2a565b610b5684610aa1611c01565b610b51856040518060600160405280602881526020016133a360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b07611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123839092919063ffffffff16565b611d33565b600190509392505050565b6000600654821115610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613310602a913960400191505060405180910390fd5b6000610bc8612443565b9050610bdd818461246e90919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610ca5610c09611c01565b84610ca08560036000610c1a611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b611d33565b6001905092915050565b60006509184e72a000831115610d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610d4c576000610d3d84611c09565b50505050905080915050610d62565b6000610d5784611c09565b505050915050809150505b92915050565b610d70611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60016101000a81548160ff021916908360ff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ee957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610f34565b610f31600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b61565b90505b919050565b610f41611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111805780601f1061115557610100808354040283529160200191611180565b820191906000526020600020905b81548152906001019060200180831161116357829003601f168201915b5050505050905090565b600061124d611197611c01565b846112488560405180606001604052806025815260200161346960259139600360006111c1611c01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123839092919063ffffffff16565b611d33565b6001905092915050565b600061126b611264611c01565b8484611f2a565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61135a611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115ae5761156a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b61565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611674611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061333a6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187f611c01565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015611bfd578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611a3257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bf057600560016005805490500381548110611a8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611ac657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611bb657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611bfd565b8080600101915050611a01565b5050565b600033905090565b6000806000806000806000611c1d886124b8565b915091506000611c2b612443565b90506000806000611c3d8c868661251b565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000611ca383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612383565b905092915050565b600080828401905083811015611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134196024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806133606022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133f46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132ed6023913960400191505060405180910390fd5b6000811161208f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806133cb6029913960400191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121325750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214757612142838383612579565b61237e565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121ea5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121ff576121fa8383836127cc565b61237d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122a35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b8576122b3838383612a1f565b61237c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561235a5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561236f5761236a838383612bdd565b61237b565b61237a838383612a1f565b5b5b5b5b505050565b6000838311158290612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123f55780820151818401526020810190506123da565b50505050905090810190601f1680156124225780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612450612ec5565b91509150612467818361246e90919063ffffffff16565b9250505090565b60006124b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613166565b905092915050565b60008060006124f5600a60019054906101000a900460ff1660ff166124e760648761246e90919063ffffffff16565b61322c90919063ffffffff16565b9050600061250c8286611c6190919063ffffffff16565b90508082935093505050915091565b600080600080612534858861322c90919063ffffffff16565b9050600061254b868861322c90919063ffffffff16565b905060006125628284611c6190919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061258a86611c09565b945094509450945094506125e686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275d83826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006127dd86611c09565b9450945094509450945061283985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ce82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061296384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129b083826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612a3086611c09565b94509450945094509450612a8c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b6e83826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000612bee86611c09565b94509450945094509450612c4a86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cdf85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c6190919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d7482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e0984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cab90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5683826132b2565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000600654905060006509184e72a000905060005b60058054905081101561312157826001600060058481548110612efc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612fe35750816002600060058481548110612f7b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612ffe576006546509184e72a00094509450505050613162565b613087600160006005848154811061301257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611c6190919063ffffffff16565b9250613112600260006005848154811061309d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611c6190919063ffffffff16565b91508080600101915050612edd565b5061313d6509184e72a00060065461246e90919063ffffffff16565b821015613159576006546509184e72a000935093505050613162565b81819350935050505b9091565b60008083118290613212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131d75780820151818401526020810190506131bc565b50505050905090810190601f1680156132045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161321e57fe5b049050809150509392505050565b60008083141561323f57600090506132ac565b600082840290508284828161325057fe5b04146132a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133826021913960400191505060405180910390fd5b809150505b92915050565b6132c782600654611c6190919063ffffffff16565b6006819055506132e281600754611cab90919063ffffffff16565b600781905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c375a281e9bbccc92d331392a1cf5953024ec08a13f8f0d6af14c692c421a68e64736f6c634300060c0033

Deployed Bytecode Sourcemap

18030:10626:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21028:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18910:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19822:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18734:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20933:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19187:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19991:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21854:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19096:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20312:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21412:434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28553:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19290:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17345:148;;;:::i;:::-;;16703:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19001:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20538:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19496:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20815:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19671:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22115:332;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17648:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22455:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21028:376;21080:14;21097:12;:10;:12::i;:::-;21080:29;;21129:11;:19;21141:6;21129:19;;;;;;;;;;;;;;;;;;;;;;;;;21128:20;21120:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21209:15;21232:19;21243:7;21232:10;:19::i;:::-;21208:43;;;;;;21280:28;21300:7;21280;:15;21288:6;21280:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21262:7;:15;21270:6;21262:15;;;;;;;;;;;;;;;:46;;;;21329:20;21341:7;21329;;:11;;:20;;;;:::i;:::-;21319:7;:30;;;;21373:23;21388:7;21373:10;;:14;;:23;;;;:::i;:::-;21360:10;:36;;;;21028:376;;;:::o;18910:83::-;18947:13;18980:5;18973:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18910:83;:::o;19822:161::-;19897:4;19914:39;19923:12;:10;:12::i;:::-;19937:7;19946:6;19914:8;:39::i;:::-;19971:4;19964:11;;19822:161;;;;:::o;18734:28::-;;;;;;;;;;;;;:::o;20933:87::-;20975:7;21002:10;;20995:17;;20933:87;:::o;19187:95::-;19240:7;18508:13;19260:14;;19187:95;:::o;19991:313::-;20089:4;20106:36;20116:6;20124:9;20135:6;20106:9;:36::i;:::-;20153:121;20162:6;20170:12;:10;:12::i;:::-;20184:89;20222:6;20184:89;;;;;;;;;;;;;;;;;:11;:19;20196:6;20184:19;;;;;;;;;;;;;;;:33;20204:12;:10;:12::i;:::-;20184:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20153:8;:121::i;:::-;20292:4;20285:11;;19991:313;;;;;:::o;21854:253::-;21920:7;21959;;21948;:18;;21940:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22024:19;22047:10;:8;:10::i;:::-;22024:33;;22075:24;22087:11;22075:7;:11;;:24;;;;:::i;:::-;22068:31;;;21854:253;;;:::o;19096:83::-;19137:5;19162:9;;;;;;;;;;;19155:16;;19096:83;:::o;20312:218::-;20400:4;20417:83;20426:12;:10;:12::i;:::-;20440:7;20449:50;20488:10;20449:11;:25;20461:12;:10;:12::i;:::-;20449:25;;;;;;;;;;;;;;;:34;20475:7;20449:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20417:8;:83::i;:::-;20518:4;20511:11;;20312:218;;;;:::o;21412:434::-;21502:7;18508:13;21530:7;:18;;21522:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21600:17;21595:244;;21635:15;21658:19;21669:7;21658:10;:19::i;:::-;21634:43;;;;;;21699:7;21692:14;;;;;21595:244;21741:23;21771:19;21782:7;21771:10;:19::i;:::-;21739:51;;;;;;21812:15;21805:22;;;21412:434;;;;;:::o;28553:94::-;16925:12;:10;:12::i;:::-;16915:22;;:6;;;;;;;;;;:22;;;16907:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28633:6:::1;28619:11;;:20;;;;;;;;;;;;;;;;;;28553:94:::0;:::o;19290:198::-;19356:7;19380:11;:20;19392:7;19380:20;;;;;;;;;;;;;;;;;;;;;;;;;19376:49;;;19409:7;:16;19417:7;19409:16;;;;;;;;;;;;;;;;19402:23;;;;19376:49;19443:37;19463:7;:16;19471:7;19463:16;;;;;;;;;;;;;;;;19443:19;:37::i;:::-;19436:44;;19290:198;;;;:::o;17345:148::-;16925:12;:10;:12::i;:::-;16915:22;;:6;;;;;;;;;;:22;;;16907:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17452:1:::1;17415:40;;17436:6;::::0;::::1;;;;;;;;17415:40;;;;;;;;;;;;17483:1;17466:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17345:148::o:0;16703:79::-;16741:7;16768:6;;;;;;;;;;;16761:13;;16703:79;:::o;19001:87::-;19040:13;19073:7;19066:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19001:87;:::o;20538:269::-;20631:4;20648:129;20657:12;:10;:12::i;:::-;20671:7;20680:96;20719:15;20680:96;;;;;;;;;;;;;;;;;:11;:25;20692:12;:10;:12::i;:::-;20680:25;;;;;;;;;;;;;;;:34;20706:7;20680:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20648:8;:129::i;:::-;20795:4;20788:11;;20538:269;;;;:::o;19496:167::-;19574:4;19591:42;19601:12;:10;:12::i;:::-;19615:9;19626:6;19591:9;:42::i;:::-;19651:4;19644:11;;19496:167;;;;:::o;20815:110::-;20873:4;20897:11;:20;20909:7;20897:20;;;;;;;;;;;;;;;;;;;;;;;;;20890:27;;20815:110;;;:::o;19671:143::-;19752:7;19779:11;:18;19791:5;19779:18;;;;;;;;;;;;;;;:27;19798:7;19779:27;;;;;;;;;;;;;;;;19772:34;;19671:143;;;;:::o;22115:332::-;16925:12;:10;:12::i;:::-;16915:22;;:6;;;;;;;;;;:22;;;16907:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22197:11:::1;:20;22209:7;22197:20;;;;;;;;;;;;;;;;;;;;;;;;;22196:21;22188:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22282:1;22263:7;:16;22271:7;22263:16;;;;;;;;;;;;;;;;:20;22260:108;;;22319:37;22339:7;:16;22347:7;22339:16;;;;;;;;;;;;;;;;22319:19;:37::i;:::-;22300:7;:16;22308:7;22300:16;;;;;;;;;;;;;;;:56;;;;22260:108;22401:4;22378:11;:20;22390:7;22378:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22416:9;22431:7;22416:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22115:332:::0;:::o;17648:244::-;16925:12;:10;:12::i;:::-;16915:22;;:6;;;;;;;;;;:22;;;16907:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17757:1:::1;17737:22;;:8;:22;;;;17729:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:8;17818:38;;17839:6;::::0;::::1;;;;;;;;17818:38;;;;;;;;;;;;17876:8;17867:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17648:244:::0;:::o;22455:478::-;16925:12;:10;:12::i;:::-;16915:22;;:6;;;;;;;;;;:22;;;16907:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22536:11:::1;:20;22548:7;22536:20;;;;;;;;;;;;;;;;;;;;;;;;;22528:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22604:9;22599:327;22623:9;:16;;;;22619:1;:20;22599:327;;;22681:7;22665:23;;:9;22675:1;22665:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22661:254;;;22724:9;22753:1;22734:9;:16;;;;:20;22724:31;;;;;;;;;;;;;;;;;;;;;;;;;22709:9;22719:1;22709:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22793:1;22774:7;:16;22782:7;22774:16;;;;;;;;;;;;;;;:20;;;;22836:5;22813:11;:20;22825:7;22813:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22860:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22894:5;;22661:254;22641:3;;;;;;;22599:327;;;;22455:478:::0;:::o;807:106::-;860:15;895:10;888:17;;807:106;:::o;26800:411::-;26859:7;26868;26877;26886;26895;26916:23;26941:12;26957:20;26969:7;26957:11;:20::i;:::-;26915:62;;;;26988:19;27011:10;:8;:10::i;:::-;26988:33;;27033:15;27050:23;27075:12;27091:39;27103:7;27112:4;27118:11;27091;:39::i;:::-;27032:98;;;;;;27149:7;27158:15;27175:4;27181:15;27198:4;27141:62;;;;;;;;;;;;;;;;26800:411;;;;;;;:::o;5361:136::-;5419:7;5446:43;5450:1;5453;5446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5439:50;;5361:136;;;;:::o;4897:181::-;4955:7;4975:9;4991:1;4987;:5;4975:17;;5016:1;5011;:6;;5003:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5069:1;5062:8;;;4897:181;;;;:::o;22941:337::-;23051:1;23034:19;;:5;:19;;;;23026:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23132:1;23113:21;;:7;:21;;;;23105:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23216:6;23186:11;:18;23198:5;23186:18;;;;;;;;;;;;;;;:27;23205:7;23186:27;;;;;;;;;;;;;;;:36;;;;23254:7;23238:32;;23247:5;23238:32;;;23263:6;23238:32;;;;;;;;;;;;;;;;;;22941:337;;;:::o;23286:931::-;23401:1;23383:20;;:6;:20;;;;23375:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:1;23464:23;;:9;:23;;;;23456:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23555:1;23546:6;:10;23538:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23617:11;:19;23629:6;23617:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;23641:11;:22;23653:9;23641:22;;;;;;;;;;;;;;;;;;;;;;;;;23640:23;23617:46;23613:597;;;23680:48;23702:6;23710:9;23721:6;23680:21;:48::i;:::-;23613:597;;;23751:11;:19;23763:6;23751:19;;;;;;;;;;;;;;;;;;;;;;;;;23750:20;:46;;;;;23774:11;:22;23786:9;23774:22;;;;;;;;;;;;;;;;;;;;;;;;;23750:46;23746:464;;;23813:46;23833:6;23841:9;23852:6;23813:19;:46::i;:::-;23746:464;;;23882:11;:19;23894:6;23882:19;;;;;;;;;;;;;;;;;;;;;;;;;23881:20;:47;;;;;23906:11;:22;23918:9;23906:22;;;;;;;;;;;;;;;;;;;;;;;;;23905:23;23881:47;23877:333;;;23945:44;23963:6;23971:9;23982:6;23945:17;:44::i;:::-;23877:333;;;24011:11;:19;24023:6;24011:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;24034:11;:22;24046:9;24034:22;;;;;;;;;;;;;;;;;;;;;;;;;24011:45;24007:203;;;24073:48;24095:6;24103:9;24114:6;24073:21;:48::i;:::-;24007:203;;;24154:44;24172:6;24180:9;24191:6;24154:17;:44::i;:::-;24007:203;23877:333;23746:464;23613:597;23286:931;;;:::o;5800:192::-;5886:7;5919:1;5914;:6;;5922:12;5906:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5946:9;5962:1;5958;:5;5946:17;;5983:1;5976:8;;;5800:192;;;;;:::o;27809:163::-;27850:7;27871:15;27888;27907:19;:17;:19::i;:::-;27870:56;;;;27944:20;27956:7;27944;:11;;:20;;;;:::i;:::-;27937:27;;;;27809:163;:::o;7198:132::-;7256:7;7283:39;7287:1;7290;7283:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7276:46;;7198:132;;;;:::o;27219:240::-;27279:7;27288;27308:12;27323:33;27344:11;;;;;;;;;;;27323:33;;:16;27335:3;27323:7;:11;;:16;;;;:::i;:::-;:20;;:33;;;;:::i;:::-;27308:48;;27367:23;27393:17;27405:4;27393:7;:11;;:17;;;;:::i;:::-;27367:43;;27429:15;27446:4;27421:30;;;;;;27219:240;;;:::o;27467:334::-;27562:7;27571;27580;27600:15;27618:24;27630:11;27618:7;:11;;:24;;;;:::i;:::-;27600:42;;27653:12;27668:21;27677:11;27668:4;:8;;:21;;;;:::i;:::-;27653:36;;27700:23;27726:17;27738:4;27726:7;:11;;:17;;;;:::i;:::-;27700:43;;27762:7;27771:15;27788:4;27754:39;;;;;;;;;27467:334;;;;;;;:::o;25535:509::-;25638:15;25655:23;25680:12;25694:23;25719:12;25735:19;25746:7;25735:10;:19::i;:::-;25637:117;;;;;;;;;;25783:28;25803:7;25783;:15;25791:6;25783:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25765:7;:15;25773:6;25765:15;;;;;;;;;;;;;;;:46;;;;25840:28;25860:7;25840;:15;25848:6;25840:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25822:7;:15;25830:6;25822:15;;;;;;;;;;;;;;;:46;;;;25900:39;25923:15;25900:7;:18;25908:9;25900:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25879:7;:18;25887:9;25879:18;;;;;;;;;;;;;;;:60;;;;25953:23;25965:4;25971;25953:11;:23::i;:::-;26009:9;25992:44;;26001:6;25992:44;;;26020:15;25992:44;;;;;;;;;;;;;;;;;;25535:509;;;;;;;;:::o;24998:529::-;25099:15;25116:23;25141:12;25155:23;25180:12;25196:19;25207:7;25196:10;:19::i;:::-;25098:117;;;;;;;;;;25244:28;25264:7;25244;:15;25252:6;25244:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25226:7;:15;25234:6;25226:15;;;;;;;;;;;;;;;:46;;;;25304:39;25327:15;25304:7;:18;25312:9;25304:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25283:7;:18;25291:9;25283:18;;;;;;;;;;;;;;;:60;;;;25375:39;25398:15;25375:7;:18;25383:9;25375:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25354:7;:18;25362:9;25354:18;;;;;;;;;;;;;;;:60;;;;25436:23;25448:4;25454;25436:11;:23::i;:::-;25492:9;25475:44;;25484:6;25475:44;;;25503:15;25475:44;;;;;;;;;;;;;;;;;;24998:529;;;;;;;;:::o;24538:452::-;24637:15;24654:23;24679:12;24693:23;24718:12;24734:19;24745:7;24734:10;:19::i;:::-;24636:117;;;;;;;;;;24782:28;24802:7;24782;:15;24790:6;24782:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24764:7;:15;24772:6;24764:15;;;;;;;;;;;;;;;:46;;;;24842:39;24865:15;24842:7;:18;24850:9;24842:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24821:7;:18;24829:9;24821:18;;;;;;;;;;;;;;;:60;;;;24899:23;24911:4;24917;24899:11;:23::i;:::-;24955:9;24938:44;;24947:6;24938:44;;;24966:15;24938:44;;;;;;;;;;;;;;;;;;24538:452;;;;;;;;:::o;26052:585::-;26155:15;26172:23;26197:12;26211:23;26236:12;26252:19;26263:7;26252:10;:19::i;:::-;26154:117;;;;;;;;;;26300:28;26320:7;26300;:15;26308:6;26300:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26282:7;:15;26290:6;26282:15;;;;;;;;;;;;;;;:46;;;;26357:28;26377:7;26357;:15;26365:6;26357:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26339:7;:15;26347:6;26339:15;;;;;;;;;;;;;;;:46;;;;26417:39;26440:15;26417:7;:18;26425:9;26417:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26396:7;:18;26404:9;26396:18;;;;;;;;;;;;;;;:60;;;;26488:39;26511:15;26488:7;:18;26496:9;26488:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26467:7;:18;26475:9;26467:18;;;;;;;;;;;;;;;:60;;;;26546:23;26558:4;26564;26546:11;:23::i;:::-;26602:9;26585:44;;26594:6;26585:44;;;26613:15;26585:44;;;;;;;;;;;;;;;;;;26052:585;;;;;;;;:::o;27980:561::-;28030:7;28039;28059:15;28077:7;;28059:25;;28095:15;18508:13;28095:25;;28142:9;28137:289;28161:9;:16;;;;28157:1;:20;28137:289;;;28227:7;28203;:21;28211:9;28221:1;28211:12;;;;;;;;;;;;;;;;;;;;;;;;;28203:21;;;;;;;;;;;;;;;;:31;:66;;;;28262:7;28238;:21;28246:9;28256:1;28246:12;;;;;;;;;;;;;;;;;;;;;;;;;28238:21;;;;;;;;;;;;;;;;:31;28203:66;28199:97;;;28279:7;;18508:13;28271:25;;;;;;;;;28199:97;28321:34;28333:7;:21;28341:9;28351:1;28341:12;;;;;;;;;;;;;;;;;;;;;;;;;28333:21;;;;;;;;;;;;;;;;28321:7;:11;;:34;;;;:::i;:::-;28311:44;;28380:34;28392:7;:21;28400:9;28410:1;28400:12;;;;;;;;;;;;;;;;;;;;;;;;;28392:21;;;;;;;;;;;;;;;;28380:7;:11;;:34;;;;:::i;:::-;28370:44;;28179:3;;;;;;;28137:289;;;;28450:20;18508:13;28450:7;;:11;;:20;;;;:::i;:::-;28440:7;:30;28436:61;;;28480:7;;18508:13;28472:25;;;;;;;;28436:61;28516:7;28525;28508:25;;;;;;27980:561;;;:::o;7826:278::-;7912:7;7944:1;7940;:5;7947:12;7932:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7971:9;7987:1;7983;:5;;;;;;7971:17;;8095:1;8088:8;;;7826:278;;;;;:::o;6251:471::-;6309:7;6559:1;6554;:6;6550:47;;;6584:1;6577:8;;;;6550:47;6609:9;6625:1;6621;:5;6609:17;;6654:1;6649;6645;:5;;;;;;:10;6637:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6713:1;6706:8;;;6251:471;;;;;:::o;26645:147::-;26723:17;26735:4;26723:7;;:11;;:17;;;;:::i;:::-;26713:7;:27;;;;26764:20;26779:4;26764:10;;:14;;:20;;;;:::i;:::-;26751:10;:33;;;;26645:147;;:::o

Swarm Source

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