Contract 0xb6c8bec1fad6dda3294c1f179d61790b10e001e6

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x1c7dbc7227fa955436d5702ba5d4eacf373061d85a248f8f71022d773bce086374348462021-05-15 15:51:0328 days 2 hrs ago0x0923f36d6fd61d6b1d53ed06393be47aae582364 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00014503
0x8af73d37b7e55e1f82e16b43a0f0f4c7574011dc1ccaa9ad7694809f66d2714672774962021-05-09 19:34:0633 days 22 hrs ago0x4cbbc754403c5e55b3f196df20abfd5551f1d908 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00014503
0x091f085b43c86bd54cd17014a3d1da9c50854f6fa91de7bca32654e1640d92ba69792872021-04-29 5:58:2844 days 12 hrs ago0x26a33a2800c4b93d539fa9c284e796038edb9a38 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.000272785
0xdfd4f0c2339e9e46ec293059de71cc66c9e07d5cb7048818ac489646df1d07d562177612021-04-02 12:51:3671 days 5 hrs ago0x4c3a0d41cb765c47d3933f1a05160b7ba085dfca IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029006
0x2909658b1c6e888f708c9cb4be8805b07fc7b43fb2a0a8e118f892881c9b5d9157479022021-03-17 2:49:1087 days 15 hrs ago0x52b0bfa47536d1fbcfd1ef2e27cbcd18b079ccbc IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0xc97ed3eba731af3e911c540b5c78c3aecf975bb6a004cc53029b8a97f845c1d556871272021-03-15 0:06:4889 days 17 hrs ago0xc557707f19266f268f21aea6d032760961576004 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.0005837599
0x1c0863ded95f84000e3e2fe64514f824d8e996e6cea7b49228cb4ae5b82fcc0555139072021-03-08 23:29:3495 days 18 hrs ago0x0ae7ce8d44664a8654d4a4ec621d4711499aa98d IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0xd242c0b21d2d83b86c9465f4888137b1f3e5aeb30fd325c242dc78f300c322ec54699032021-03-07 10:48:0697 days 7 hrs ago0x9495459f04b38335b3704954cf17bd4a6db7b5de IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00139114
0xeeeb32cce3faddfe2a9cbf2ae4d9801519f7d7083f179eaa3407a01c966de8e954372452021-03-06 7:33:3298 days 10 hrs ago0x456d9fd81b1b5ee7cced435366e8032c93c1e04e IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029104
0x86c6ace7b93059f456a6507cdf54763ec1ae3fdde9ad2845b0e006dd2c9d22ab54372372021-03-06 7:33:0898 days 10 hrs ago0x456d9fd81b1b5ee7cced435366e8032c93c1e04e IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00054557
0xb01e6165cc64da36f1f7dd253e138e245f7e0518f3799a5d77fac40a453103b754202722021-03-05 17:24:5299 days 40 mins ago0x44bfd564126b69490184dfe7b8c438d4ae0f6032 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0xbdb827c1af801848878cdf9011e8cc26d59016dd730e6a484291a00f9dd0df0752916772021-03-01 4:46:05103 days 13 hrs ago0xf13f7bf69a5e57ea3367222c65dd3380096d3fbf IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0x8862cdfcd3a3cde55546d009bf43b8c7469e6f470215f4474920c6043c65d82052205962021-02-26 17:19:04106 days 46 mins ago0x83c313a675029a79055fe466f42876b9bb5b43d4 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029104
0x1beb61b0e8b60430d8352e19e2891b72888c8edaa4b93db649a95a706d19a68651519092021-02-24 7:52:00108 days 10 hrs ago0x757ae4cf0552a8242cfaca52b2a81556e089a7fa IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.008019879
0xedf1dbe05886943bef091ea60aa6074311be3ef07fd29e1788fc2644e1229c7d51065512021-02-22 17:48:06110 days 17 mins ago0xaa0f6777f11473ffd98219214d4f060cc87790e6 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029006
0xadaaf244a7f279a19099c1fe26abdadd42e042186c23274fa3b326647529f02050962552021-02-22 9:08:12110 days 8 hrs ago0xdef0704349ea01bd1ad1e8873c6ce6f92edb0f8e IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.0014552
0xd18b1bf2aee2f6229855b8e50e2e674036f80b27c9caa04dbb0f05184f3a4a2050962242021-02-22 9:06:39110 days 8 hrs ago0xdef0704349ea01bd1ad1e8873c6ce6f92edb0f8e IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0x810230179c95d31109b82b131fb358d60c743c4e7ca8608fd69eedae6196aba650962152021-02-22 9:06:12110 days 8 hrs ago0x815614214829a14f0805980154ab2f084f5f193a IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0x95f1c1551fa0446d7354738bffde441749d633495641803bff6d959d15cd7d1d50724422021-02-21 12:52:29111 days 5 hrs ago0x56ec9d5b2845f656ec18bcb171c074bb9c7bb5f7 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00054557
0xc0f021e985b0f2ed6e113b1f7bb91f23d2de4a029da39ec827bb159b67d46eb550586372021-02-21 1:18:20111 days 16 hrs ago0x813d9afe8da7768c468d5330bb18175916f29c7f IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029006
0xbfc7b24977ecc8509d9faecce6c115231341d3601931f7727b9f08c5a424093b50188052021-02-19 15:00:54113 days 3 hrs ago0x53b55490d7cbd0b3a587c669985d4938dcd491e9 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0x9953479b2d7461df28eff0d72499230fd41463f85a4918358c72f8b3b4bfa8a350096582021-02-19 6:28:19113 days 11 hrs ago0x068a01a3443df8230d423af83110d278d8dc9018 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00029104
0xde9d36a3e9534889d15538fcd7ce8ab5af5a8bedcd6553d6d033b5d1d35357bf49988462021-02-18 21:25:43113 days 20 hrs ago0x8f2fbc86e2dfc8e9f934e560ae5585a6b529db4f IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.00069557
0x1c52f52af07f59d960c6e7fdf0d44f844e8647f73e1ad6af4a3a46c1549e139649861892021-02-18 10:42:40114 days 7 hrs ago0xf97a152160ba735f2e52bc8955b82b1e696edb29 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.0006207284
0x15e19e49be80cb176b3dccd38dc1e6a958a428883fbb9603e13ac859237be50b49860282021-02-18 10:34:34114 days 7 hrs ago0xf97a152160ba735f2e52bc8955b82b1e696edb29 IN  0xb6c8bec1fad6dda3294c1f179d61790b10e001e60 BNB0.0006207284
[ Download CSV Export 
Latest 3 internal transactions
Parent Txn Hash Block From To Value
0xd242c0b21d2d83b86c9465f4888137b1f3e5aeb30fd325c242dc78f300c322ec54699032021-03-07 10:48:0697 days 7 hrs ago 0xb6c8bec1fad6dda3294c1f179d61790b10e001e6 Bestswap: BEST Token0 BNB
0x86c6ace7b93059f456a6507cdf54763ec1ae3fdde9ad2845b0e006dd2c9d22ab54372372021-03-06 7:33:0898 days 10 hrs ago 0xb6c8bec1fad6dda3294c1f179d61790b10e001e6 Bestswap: BEST Token0 BNB
0xb01e6165cc64da36f1f7dd253e138e245f7e0518f3799a5d77fac40a453103b754202722021-03-05 17:24:5299 days 40 mins ago 0xb6c8bec1fad6dda3294c1f179d61790b10e001e6 Bestswap: BEST Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x5208a4cd0e413f84e8d66677efa8ab2f4a5d064e

Contract Name:
Liquidity

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-10-23
*/

// File: @openzeppelin/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/contracts/math/Math.sol

// 

pragma solidity ^0.6.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

// File: @openzeppelin/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/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/contracts/token/ERC20/SafeERC20.sol

// 

pragma solidity ^0.6.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: @openzeppelin/contracts/GSN/Context.sol

// 

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/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/Liquidity.sol

// 

pragma solidity ^0.6.0;




//import "@nomiclabs/buidler/console.sol";






contract Liquidity is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    //testnet
    //IERC20 public busd = IERC20(0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee);
    //mainnet
    IERC20 public busd = IERC20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    

    uint256 public contractStartTimestamp;
    address public devAddress;
    //0x3A15a77A2550A43D08F49C64C312a4CAb0D69D04
    
    constructor(address _devAddress) public {
        contractStartTimestamp = block.timestamp;
        devAddress = _devAddress;
    }

    function setDevAddress(address _devAddress) public onlyOwner {
        devAddress = _devAddress;
    }

    
    function setBUSDAddress(address _busd) public onlyOwner {
        busd = IERC20(_busd);
    } 

    function getSecondsLeftInLiquidityGenerationEvent() public view returns (uint256) {
        require(liquidityGenerationOngoing(), "Event over");
        //console.log("3 days since start is", contractStartTimestamp.add(3 days), "Time now is", block.timestamp);
        return contractStartTimestamp.add(3 days).sub(block.timestamp);
    }

    function liquidityGenerationOngoing() public view returns (bool) {
        //console.log("3 days since start is", contractStartTimestamp.add(3 days), "Time now is", block.timestamp);
        //console.log("liquidity generation ongoing", contractStartTimestamp.add(3 days) < block.timestamp);
        return contractStartTimestamp.add(3 days) > block.timestamp;
    }

    mapping (address => uint)  public busdContributed;
    uint256 public totalBusdContributed = 0;
    event LiquidityAddition(address indexed dst, uint value);


    function addBusdLiquidity(uint256 amount) public { 
        require(liquidityGenerationOngoing(), "Liquidity Generation Event over");
        require(amount > 0, "Cannot add 0");
        busd.safeTransferFrom(msg.sender,address(this),amount);
        busdContributed[msg.sender] = busdContributed[msg.sender].add(amount);
        totalBusdContributed = totalBusdContributed.add(amount);
        emit LiquidityAddition(msg.sender, amount);
    }

    //bool public LPGenerationCompleted = false;
    function withdraw() public onlyOwner{
        //require(liquidityGenerationOngoing() == false, "Liquidity generation onging");
        //require(LPGenerationCompleted == false, "Liquidity generation already finished");
        uint256 totalRaised = busd.balanceOf(address(this));
        //console.log("totalRaised:",totalRaised);
        require(totalRaised != 0 , "LP creation failed");
        busd.transfer(devAddress,totalRaised);
        //LPGenerationCompleted = true;
    }


    function getTotalContributed() public view returns (uint256) {
        return totalBusdContributed;
    }

    function getAccountContributed(address account) public view returns (uint256){
        return busdContributed[account];
    }



    IERC20 public rewardToken;
    uint256 public constant DURATION = 100 days;
    uint256 public initreward = 0;
    uint256 public rewardRate = 0;
    uint256 public rewardStartTimestamp;
    uint256 public rewardCompleteTimestamp;
    mapping(address => uint256) public hadEarned;

    event RewardAdded(uint256 reward);
    event RewardPaid(address indexed user, uint256 reward);

    function startReward(uint256 reward, address _rewardToken) public onlyOwner{
        require(liquidityGenerationOngoing() == false, "Liquidity generation onging");
        rewardStartTimestamp = block.timestamp;
        rewardCompleteTimestamp = block.timestamp.add(DURATION);
        initreward = reward;
        rewardToken = IERC20(_rewardToken);
        rewardRate = reward.mul(1e18).div(DURATION).div(totalBusdContributed);
        //console.log('startReward:rewardRate:',rewardRate);
        emit RewardAdded(reward);
    }


    function claim() public{
        require(liquidityGenerationOngoing() == false, "Liquidity generation onging");
        require(block.timestamp > rewardStartTimestamp,"not start");
        uint256 reward = earned(msg.sender);
        if (reward > 0) {
            hadEarned[msg.sender] = hadEarned[msg.sender].add(reward);
            rewardToken.safeTransfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }


    function earned(address account) public view returns (uint256) {
        if(block.timestamp < rewardStartTimestamp){
            return 0;
        }
        uint256 timePassed = Math.min(block.timestamp,rewardCompleteTimestamp).sub(rewardStartTimestamp);
        //console.log('earned:timePassed:',timePassed);
        //console.log('earned:busdContributed[account]:',busdContributed[account]);
        uint256 totalEarned = busdContributed[account].mul(rewardRate).mul(timePassed).div(1e18);
        //console.log('earned:totalEarned:',totalEarned);
        return totalEarned.sub(hadEarned[account]);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LiquidityAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addBusdLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"busd","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"busdContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondsLeftInLiquidityGenerationEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hadEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initreward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGenerationOngoing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCompleteTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_busd","type":"address"}],"name":"setBUSDAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBusdContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b03191673e9e7cea3dedca5984780bafc599bd69add087d5617905560006005819055600781905560085534801561004557600080fd5b506040516114863803806114868339818101604052602081101561006857600080fd5b505160006100746100e7565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35042600255600380546001600160a01b0319166001600160a01b03929092169190911790556100eb565b3390565b61138c806100fa6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80637afdddba116100de578063bbfa279511610097578063e94d881a11610071578063e94d881a14610355578063f2fde38b1461037b578063f7c618c1146103a1578063fcb685bc146103a95761018d565b8063bbfa279514610301578063d0d41fe114610327578063e5ae2e291461034d5761018d565b80637afdddba146102715780637b0a47ee146102975780638da5cb5b1461029f57806394e98d32146102a75780639c907b58146102cd578063ae3ed434146102d55761018d565b80633ca5b2341161014b5780635b5f3e87116101255780635b5f3e871461023d57806360a02590146102455780636a2f796c14610261578063715018a6146102695761018d565b80633ca5b234146102255780633ccfd60b1461022d5780634e71d92d146102355761018d565b80628cc2621461019257806318e4274d146101ca5780631be05289146101d257806325b6cc4b146101da578063369054aa146101f95780633ad10ef614610201575b600080fd5b6101b8600480360360208110156101a857600080fd5b50356001600160a01b03166103b1565b60408051918252519081900360200190f35b6101b8610459565b6101b861045f565b6101f7600480360360208110156101f057600080fd5b5035610466565b005b6101b861058e565b610209610594565b604080516001600160a01b039092168252519081900360200190f35b6102096105a3565b6101f76105b2565b6101f7610752565b6101b8610881565b61024d6108ea565b604080519115158252519081900360200190f35b6101b861090b565b6101f7610911565b6101b86004803603602081101561028757600080fd5b50356001600160a01b03166109b3565b6101b86109c5565b6102096109cb565b6101b8600480360360208110156102bd57600080fd5b50356001600160a01b03166109da565b6101b86109f5565b6101f7600480360360408110156102eb57600080fd5b50803590602001356001600160a01b03166109fb565b6101f76004803603602081101561031757600080fd5b50356001600160a01b0316610b3b565b6101f76004803603602081101561033d57600080fd5b50356001600160a01b0316610bb5565b6101b8610c2f565b6101b86004803603602081101561036b57600080fd5b50356001600160a01b0316610c35565b6101f76004803603602081101561039157600080fd5b50356001600160a01b0316610c47565b610209610d3f565b6101b8610d4e565b60006009544210156103c557506000610454565b60006103df6009546103d942600a54610d54565b90610d6e565b6008546001600160a01b0385166000908152600460205260408120549293509161042891670de0b6b3a76400009161042291869161041c91610db0565b90610db0565b90610e09565b6001600160a01b0385166000908152600b602052604090205490915061044f908290610d6e565b925050505b919050565b60055490565b6283d60081565b61046e6108ea565b6104bf576040805162461bcd60e51b815260206004820152601f60248201527f4c69717569646974792047656e65726174696f6e204576656e74206f76657200604482015290519081900360640190fd5b60008111610503576040805162461bcd60e51b815260206004820152600c60248201526b043616e6e6f742061646420360a41b604482015290519081900360640190fd5b60015461051b906001600160a01b0316333084610e4b565b336000908152600460205260409020546105359082610eab565b336000908152600460205260409020556005546105529082610eab565b60055560408051828152905133917f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b919081900360200190a250565b600a5481565b6003546001600160a01b031681565b6001546001600160a01b031681565b6105ba610f05565b6000546001600160a01b0390811691161461060a576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561065557600080fd5b505afa158015610669573d6000803e3d6000fd5b505050506040513d602081101561067f57600080fd5b50519050806106ca576040805162461bcd60e51b815260206004820152601260248201527113140818dc99585d1a5bdb8819985a5b195960721b604482015290519081900360640190fd5b6001546003546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561072357600080fd5b505af1158015610737573d6000803e3d6000fd5b505050506040513d602081101561074d57600080fd5b505050565b61075a6108ea565b156107ac576040805162461bcd60e51b815260206004820152601b60248201527f4c69717569646974792067656e65726174696f6e206f6e67696e670000000000604482015290519081900360640190fd5b60095442116107ee576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60006107f9336103b1565b9050801561087e57336000908152600b602052604090205461081b9082610eab565b336000818152600b6020526040902091909155600654610847916001600160a01b039091169083610f09565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b50565b600061088b6108ea565b6108c9576040805162461bcd60e51b815260206004820152600a60248201526922bb32b73a1037bb32b960b11b604482015290519081900360640190fd5b6108e5426103d96203f480600254610eab90919063ffffffff16565b905090565b6000426109056203f480600254610eab90919063ffffffff16565b11905090565b60025481565b610919610f05565b6000546001600160a01b03908116911614610969576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600b6020526000908152604090205481565b60085481565b6000546001600160a01b031690565b6001600160a01b031660009081526004602052604090205490565b60075481565b610a03610f05565b6000546001600160a01b03908116911614610a53576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b610a5b6108ea565b15610aad576040805162461bcd60e51b815260206004820152601b60248201527f4c69717569646974792067656e65726174696f6e206f6e67696e670000000000604482015290519081900360640190fd5b426009819055610ac0906283d600610eab565b600a556007829055600680546001600160a01b0319166001600160a01b038316179055600554610b01906104226283d6008186670de0b6b3a7640000610db0565b6008556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b610b43610f05565b6000546001600160a01b03908116911614610b93576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610bbd610f05565b6000546001600160a01b03908116911614610c0d576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60055481565b60046020526000908152604090205481565b610c4f610f05565b6000546001600160a01b03908116911614610c9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061130d833981519152604482015290519081900360640190fd5b6001600160a01b038116610ce45760405162461bcd60e51b81526004018080602001828103825260268152602001806112c66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031681565b60095481565b6000818310610d635781610d65565b825b90505b92915050565b6000610d6583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f5b565b600082610dbf57506000610d68565b82820282848281610dcc57fe5b0414610d655760405162461bcd60e51b81526004018080602001828103825260218152602001806112ec6021913960400191505060405180910390fd5b6000610d6583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ff2565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610ea5908590611057565b50505050565b600082820183811015610d65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261074d908490611057565b60008184841115610fea5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610faf578181015183820152602001610f97565b50505050905090810190601f168015610fdc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836110415760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610faf578181015183820152602001610f97565b50600083858161104d57fe5b0495945050505050565b60606110ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111089092919063ffffffff16565b80519091501561074d578080602001905160208110156110cb57600080fd5b505161074d5760405162461bcd60e51b815260040180806020018281038252602a81526020018061132d602a913960400191505060405180910390fd5b6060611117848460008561111f565b949350505050565b606061112a8561128c565b61117b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106111ba5780518252601f19909201916020918201910161119b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b509150915081156112355791506111179050565b8051156112455780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315610faf578181015183820152602001610f97565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061044f57505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212202d7b3caab23528d90ffcdd588c55b472d9344bba16d04360d84754d5bb896bf064736f6c634300060c00330000000000000000000000003a15a77a2550a43d08f49c64c312a4cab0d69d04

Deployed ByteCode Sourcemap

22439:4986:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26804:618;;;;;;;;;;;;;;;;-1:-1:-1;26804:618:0;-1:-1:-1;;;;;26804:618:0;;:::i;:::-;;;;;;;;;;;;;;;;25141:107;;;:::i;25427:43::-;;;:::i;24133:451::-;;;;;;;;;;;;;;;;-1:-1:-1;24133:451:0;;:::i;:::-;;25591:38;;;:::i;22784:25::-;;;:::i;:::-;;;;-1:-1:-1;;;;;22784:25:0;;;;;;;;;;;;;;22654:71;;;:::i;24642:489::-;;;:::i;26340:454::-;;;:::i;23236:342::-;;;:::i;23586:370::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;22740:37;;;:::i;21753:148::-;;;:::i;25636:44::-;;;;;;;;;;;;;;;;-1:-1:-1;25636:44:0;-1:-1:-1;;;;;25636:44:0;;:::i;25513:29::-;;;:::i;21111:79::-;;;:::i;25256:127::-;;;;;;;;;;;;;;;;-1:-1:-1;25256:127:0;-1:-1:-1;;;;;25256:127:0;;:::i;25477:29::-;;;:::i;25792:538::-;;;;;;;;;;;;;;;;-1:-1:-1;25792:538:0;;;;;;-1:-1:-1;;;;;25792:538:0;;:::i;23132:95::-;;;;;;;;;;;;;;;;-1:-1:-1;23132:95:0;-1:-1:-1;;;;;23132:95:0;;:::i;23014:104::-;;;;;;;;;;;;;;;;-1:-1:-1;23014:104:0;-1:-1:-1;;;;;23014:104:0;;:::i;24020:39::-;;;:::i;23964:49::-;;;;;;;;;;;;;;;;-1:-1:-1;23964:49:0;-1:-1:-1;;;;;23964:49:0;;:::i;22056:244::-;;;;;;;;;;;;;;;;-1:-1:-1;22056:244:0;-1:-1:-1;;;;;22056:244:0;;:::i;25395:25::-;;;:::i;25549:35::-;;;:::i;26804:618::-;26858:7;26899:20;;26881:15;:38;26878:77;;;-1:-1:-1;26942:1:0;26935:8;;26878:77;26965:18;26986:75;27040:20;;26986:49;26995:15;27011:23;;26986:8;:49::i;:::-;:53;;:75::i;:::-;27265:10;;-1:-1:-1;;;;;27236:24:0;;27214:19;27236:24;;;:15;:24;;;;;;26965:96;;-1:-1:-1;27214:19:0;27236:66;;27297:4;;27236:56;;26965:96;;27236:40;;:28;:40::i;:::-;:44;;:56::i;:::-;:60;;:66::i;:::-;-1:-1:-1;;;;;27395:18:0;;;;;;:9;:18;;;;;;27214:88;;-1:-1:-1;27379:35:0;;27214:88;;27379:15;:35::i;:::-;27372:42;;;;26804:618;;;;:::o;25141:107::-;25220:20;;25141:107;:::o;25427:43::-;25462:8;25427:43;:::o;24133:451::-;24202:28;:26;:28::i;:::-;24194:72;;;;;-1:-1:-1;;;24194:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24294:1;24285:6;:10;24277:35;;;;;-1:-1:-1;;;24277:35:0;;;;;;;;;;;;-1:-1:-1;;;24277:35:0;;;;;;;;;;;;;;;24323:4;;:54;;-1:-1:-1;;;;;24323:4:0;24345:10;24364:4;24370:6;24323:21;:54::i;:::-;24434:10;24418:27;;;;:15;:27;;;;;;:39;;24450:6;24418:31;:39::i;:::-;24404:10;24388:27;;;;:15;:27;;;;;:69;24491:20;;:32;;24516:6;24491:24;:32::i;:::-;24468:20;:55;24539:37;;;;;;;;24557:10;;24539:37;;;;;;;;;;24133:451;:::o;25591:38::-;;;;:::o;22784:25::-;;;-1:-1:-1;;;;;22784:25:0;;:::o;22654:71::-;;;-1:-1:-1;;;;;22654:71:0;;:::o;24642:489::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;24894:4:::1;::::0;:29:::1;::::0;;-1:-1:-1;;;24894:29:0;;24917:4:::1;24894:29;::::0;::::1;::::0;;;24872:19:::1;::::0;-1:-1:-1;;;;;24894:4:0::1;::::0;:14:::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:4;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24894:29:0;;-1:-1:-1;24994:16:0;24986:48:::1;;;::::0;;-1:-1:-1;;;24986:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24986:48:0;;;;;;;;;;;;;::::1;;25045:4;::::0;25059:10:::1;::::0;25045:37:::1;::::0;;-1:-1:-1;;;25045:37:0;;-1:-1:-1;;;;;25059:10:0;;::::1;25045:37;::::0;::::1;::::0;;;;;;;;;:4;;;::::1;::::0;:13:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:4:::1;::::0;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;24642:489:0:o;26340:454::-;26382:28;:26;:28::i;:::-;:37;26374:77;;;;;-1:-1:-1;;;26374:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26488:20;;26470:15;:38;26462:59;;;;;-1:-1:-1;;;26462:59:0;;;;;;;;;;;;-1:-1:-1;;;26462:59:0;;;;;;;;;;;;;;;26532:14;26549:18;26556:10;26549:6;:18::i;:::-;26532:35;-1:-1:-1;26582:10:0;;26578:209;;26643:10;26633:21;;;;:9;:21;;;;;;:33;;26659:6;26633:25;:33::i;:::-;26619:10;26609:21;;;;:9;:21;;;;;:57;;;;26681:11;;:44;;-1:-1:-1;;;;;26681:11:0;;;;26718:6;26681:24;:44::i;:::-;26745:30;;;;;;;;26756:10;;26745:30;;;;;;;;;;26578:209;26340:454;:::o;23236:342::-;23309:7;23337:28;:26;:28::i;:::-;23329:51;;;;;-1:-1:-1;;;23329:51:0;;;;;;;;;;;;-1:-1:-1;;;23329:51:0;;;;;;;;;;;;;;;23515:55;23554:15;23515:34;23542:6;23515:22;;:26;;:34;;;;:::i;:55::-;23508:62;;23236:342;:::o;23586:370::-;23645:4;23933:15;23896:34;23923:6;23896:22;;:26;;:34;;;;:::i;:::-;:52;23889:59;;23586:370;:::o;22740:37::-;;;;:::o;21753:148::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;21860:1:::1;21844:6:::0;;21823:40:::1;::::0;-1:-1:-1;;;;;21844:6:0;;::::1;::::0;21823:40:::1;::::0;21860:1;;21823:40:::1;21891:1;21874:19:::0;;-1:-1:-1;;;;;;21874:19:0::1;::::0;;21753:148::o;25636:44::-;;;;;;;;;;;;;:::o;25513:29::-;;;;:::o;21111:79::-;21149:7;21176:6;-1:-1:-1;;;;;21176:6:0;21111:79;:::o;25256:127::-;-1:-1:-1;;;;;25351:24:0;25325:7;25351:24;;;:15;:24;;;;;;;25256:127::o;25477:29::-;;;;:::o;25792:538::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;25886:28:::1;:26;:28::i;:::-;:37;25878:77;;;::::0;;-1:-1:-1;;;25878:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25989:15;25966:20;:38:::0;;;26041:29:::1;::::0;25462:8:::1;26041:19;:29::i;:::-;26015:23;:55:::0;26081:10:::1;:19:::0;;;26111:11:::1;:34:::0;;-1:-1:-1;;;;;;26111:34:0::1;-1:-1:-1::0;;;;;26111:34:0;::::1;;::::0;;26204:20:::1;::::0;26169:56:::1;::::0;:30:::1;25462:8;26169:30:::0;26081:19;26180:4:::1;26169:10;:16::i;:56::-;26156:10;:69:::0;26303:19:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;25792:538:::0;;:::o;23132:95::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;23199:4:::1;:20:::0;;-1:-1:-1;;;;;;23199:20:0::1;-1:-1:-1::0;;;;;23199:20:0;;;::::1;::::0;;;::::1;::::0;;23132:95::o;23014:104::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;23086:10:::1;:24:::0;;-1:-1:-1;;;;;;23086:24:0::1;-1:-1:-1::0;;;;;23086:24:0;;;::::1;::::0;;;::::1;::::0;;23014:104::o;24020:39::-;;;;:::o;23964:49::-;;;;;;;;;;;;;:::o;22056:244::-;21333:12;:10;:12::i;:::-;21323:6;;-1:-1:-1;;;;;21323:6:0;;;:22;;;21315:67;;;;;-1:-1:-1;;;21315:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21315:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22145:22:0;::::1;22137:73;;;;-1:-1:-1::0;;;22137:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22247:6;::::0;;22226:38:::1;::::0;-1:-1:-1;;;;;22226:38:0;;::::1;::::0;22247:6;::::1;::::0;22226:38:::1;::::0;::::1;22275:6;:17:::0;;-1:-1:-1;;;;;;22275:17:0::1;-1:-1:-1::0;;;;;22275:17:0;;;::::1;::::0;;;::::1;::::0;;22056:244::o;25395:25::-;;;-1:-1:-1;;;;;25395:25:0;;:::o;25549:35::-;;;;:::o;5819:106::-;5877:7;5908:1;5904;:5;:13;;5916:1;5904:13;;;5912:1;5904:13;5897:20;;5819:106;;;;;:::o;1392:136::-;1450:7;1477:43;1481:1;1484;1477:43;;;;;;;;;;;;;;;;;:3;:43::i;2282:471::-;2340:7;2585:6;2581:47;;-1:-1:-1;2615:1:0;2608:8;;2581:47;2652:5;;;2656:1;2652;:5;:1;2676:5;;;;;:10;2668:56;;;;-1:-1:-1;;;2668:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3229:132;3287:7;3314:39;3318:1;3321;3314:39;;;;;;;;;;;;;;;;;:3;:39::i;16143:205::-;16271:68;;;-1:-1:-1;;;;;16271:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16271:68:0;-1:-1:-1;;;16271:68:0;;;16244:96;;16264:5;;16244:19;:96::i;:::-;16143:205;;;;:::o;928:181::-;986:7;1018:5;;;1042:6;;;;1034:46;;;;;-1:-1:-1;;;1034:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19660:106;19748:10;19660:106;:::o;15958:177::-;16068:58;;;-1:-1:-1;;;;;16068:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16068:58:0;-1:-1:-1;;;16068:58:0;;;16041:86;;16061:5;;16041:19;:86::i;1831:192::-;1917:7;1953:12;1945:6;;;;1937:29;;;;-1:-1:-1;;;1937:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1989:5:0;;;1831:192::o;3857:278::-;3943:7;3978:12;3971:5;3963:28;;;;-1:-1:-1;;;3963:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4002:9;4018:1;4014;:5;;;;;;;3857:278;-1:-1:-1;;;;;3857:278:0:o;18263:761::-;18687:23;18713:69;18741:4;18713:69;;;;;;;;;;;;;;;;;18721:5;-1:-1:-1;;;;;18713:27:0;;;:69;;;;;:::i;:::-;18797:17;;18687:95;;-1:-1:-1;18797:21:0;18793:224;;18939:10;18928:30;;;;;;;;;;;;;;;-1:-1:-1;18928:30:0;18920:85;;;;-1:-1:-1;;;18920:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12934:196;13037:12;13069:53;13092:6;13100:4;13106:1;13109:12;13069:22;:53::i;:::-;13062:60;12934:196;-1:-1:-1;;;;12934:196:0:o;14311:979::-;14441:12;14474:18;14485:6;14474:10;:18::i;:::-;14466:60;;;;;-1:-1:-1;;;14466:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14600:12;14614:23;14641:6;-1:-1:-1;;;;;14641:11:0;14661:8;14672:4;14641:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14641:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14599:78;;;;14692:7;14688:595;;;14723:10;-1:-1:-1;14716:17:0;;-1:-1:-1;14716:17:0;14688:595;14837:17;;:21;14833:439;;15100:10;15094:17;15161:15;15148:10;15144:2;15140:19;15133:44;15048:148;15236:20;;-1:-1:-1;;;15236:20:0;;;;;;;;;;;;;;;;;15243:12;;15236:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9819:619;9879:4;10347:20;;10190:66;10387:23;;;;;;:42;;-1:-1:-1;;10414:15:0;;;9819:619;-1:-1:-1;;9819:619:0:o

Swarm Source

ipfs://2d7b3caab23528d90ffcdd588c55b472d9344bba16d04360d84754d5bb896bf0
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.