Contract 0x5ABFF8F8D5b13253dCAB1e427Fdb3305cA620119

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8bc53345b666814c2ded4b0556f4f637c6b816a5c869d2981fd2129a7f710593Set Cap Share64949212022-02-20 21:32:3594 days 17 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.00030038704 ETH
0x283a803054bba032118271a4bb657a9b84dffdf0116ee95c8ecb03f45f21c257Set Pool Share64949162022-02-20 21:32:0194 days 17 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000301237995 ETH
0x0abf41d82d6726903e758f0d21460cd943b4d6ea57e99e727e69cb556560649cSet Pool Share64949012022-02-20 21:32:0194 days 17 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000283184796 ETH
0x50c4722640aae5cbebf2b6ec277c0511af6eb79e996c88c621f20c8f55cf5294Set Cap Share64948852022-02-20 21:32:0194 days 17 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000284053194 ETH
0x530df03729fbf623c2f2006e9a9ed48631f1533557c1813b732330f51bbaf49cSet Contracts64689502022-02-20 15:09:2794 days 23 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000402827799 ETH
0xdb6758d31656d3bed96e08fe7a24b0cd05e7782812e5d1406dd5bba5d86d57e3Set Cap Share44456622022-01-07 7:53:00139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000862598377 ETH
0xc124613c9bab8ce5bab0ed23d81ed25a6ccb528a246e796ee0acd0e0f4213cbcSet Cap Share44456552022-01-07 7:53:00139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000830840672 ETH
0x7fa8455e4f3a8358b2d42bc45428b04671a4d6429f7a462a33692c47e25a8464Set Cap Share44456432022-01-07 7:52:37139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000830840672 ETH
0x9aaf3f50e9e42a54504a72a08b9d21d06a383fff160b7c26571464484f73830cSet Cap Share44456402022-01-07 7:52:37139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000862598377 ETH
0x2e3fc00d172f9c8cb960e801837f35f2f147b405634de914c9141c497cd85c8bSet Pool Share44456232022-01-07 7:52:37139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.00086258142 ETH
0xf46bb893877264cfabaca36d0703a1826e6900c1abc629ae35ccd87233f05076Set Pool Share44456072022-01-07 7:50:52139 days 6 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000830823715 ETH
0x525e00d2db56daee8e90904714aff6d2c1abe865612b8159cad5eb13aeee67e0Set Pool Rewards33806742021-11-27 14:39:58180 days agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000768075501 ETH
0x1ef39241d6e0e59fc4e855a5681dd71871b3549193207355b787a1a63ffdd182Set Pool Rewards33806702021-11-27 14:39:46180 days agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.000740680566 ETH
0x1a5fec604669bff461ab210cb28c58ad532f0b9310265ea1710eaeae141490ddSet Pool33806672021-11-27 14:39:46180 days agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.00076808699 ETH
0x3dbae5bf0cf39b9943cd877e3d614bd7e3d93d976129183697beda793258e04fSet Pool33806642021-11-27 14:39:09180 days 1 min agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.0007406931 ETH
0x27385570b507e36411e91821864ecb51bff57a85f6ed184d6cf49041243a1862Set Currencies31089972021-11-17 17:05:07189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001458672595 ETH
0x9fa5dd5b9565cd7653c0f145fc0d25aba3fa0e43068ce6e96d254ef7428cb84dSet Cap Rewards31089932021-11-17 17:04:18189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001197964116 ETH
0x70e15d7d81ac372add7ac69997e2d08874e1944c45c82e575dd633afc33ff50fSet Cap Rewards31089912021-11-17 17:04:18189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001160813949 ETH
0x550cdaf11887e62bf3a25d9a4c25e5727be729524d73577fb87da70a9ee58b60Set Pool Rewards31089862021-11-17 17:04:18189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.00119795771 ETH
0xa3b01f9ef56a0e9e10724489c1730ec5bb9b2217c8d5925b3ae1ce2a57cfe7c4Set Pool Rewards31089822021-11-17 17:04:18189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001159029091 ETH
0x4197d312761a7a95771caa6a0167b0da1bea93ad635a3237f72cd904e1a341e7Set Cap Share31089772021-11-17 17:04:18189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001166080114 ETH
0x82286a84b0fcdff5d3c45548d3a98044851437fdcbb0b2669701695eb4d66971Set Cap Share31089702021-11-17 17:03:21189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001128940197 ETH
0x91473a0f880251717610f69acf4d3f12b5d9c007cd430b75d1d0310c8a65846fSet Pool Share31089652021-11-17 17:03:21189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001164288849 ETH
0xbee9b61e11000933e29dde4e742113f6c4dc9a3fe5d7117e22672ddc3ea925f6Set Pool Share31089622021-11-17 17:02:40189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001130693023 ETH
0xf28cce537408a78810b438769d8255542cc32f712bd76a75b6077fc6d72de2dcSet Pool31089572021-11-17 17:02:40189 days 21 hrs agoCAP Finance: Deployer IN  CAP Finance: Router0 ETH0.001197960272 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4a45110c551e37bc5338277e895e393d1bc312fa48ddaa2f14a54a27e00a185f130002782022-05-26 14:39:3557 secs ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0x4a45110c551e37bc5338277e895e393d1bc312fa48ddaa2f14a54a27e00a185f130002782022-05-26 14:39:3557 secs ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0x4a45110c551e37bc5338277e895e393d1bc312fa48ddaa2f14a54a27e00a185f130002782022-05-26 14:39:3557 secs ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x4a45110c551e37bc5338277e895e393d1bc312fa48ddaa2f14a54a27e00a185f130002782022-05-26 14:39:3557 secs ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x4a45110c551e37bc5338277e895e393d1bc312fa48ddaa2f14a54a27e00a185f130002782022-05-26 14:39:3557 secs ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xa7b77001bb61e75c1f8fae9e7eec41102319697d9eb5b52c4c9883fef6aa6e45130002122022-05-26 14:37:492 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0xa7b77001bb61e75c1f8fae9e7eec41102319697d9eb5b52c4c9883fef6aa6e45130002122022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xa7b77001bb61e75c1f8fae9e7eec41102319697d9eb5b52c4c9883fef6aa6e45130002122022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago CAP Finance: Router 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago CAP Finance: Router 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago CAP Finance: USDC Pool CAP Finance: Router0 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago CAP Finance: Router 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago CAP Finance: Router 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0xe0135649ac14a37e5cf2f16e8ec487c2a2692744a97903e9705c9132e3ba0a74130001972022-05-26 14:37:492 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0x2ee7c68ca76c334491a1b5d71cf52f113965d5ac2445eb2dd9f177684aca6c8e130001752022-05-26 14:36:393 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x2ee7c68ca76c334491a1b5d71cf52f113965d5ac2445eb2dd9f177684aca6c8e130001752022-05-26 14:36:393 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x2ee7c68ca76c334491a1b5d71cf52f113965d5ac2445eb2dd9f177684aca6c8e130001752022-05-26 14:36:393 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x2ee7c68ca76c334491a1b5d71cf52f113965d5ac2445eb2dd9f177684aca6c8e130001752022-05-26 14:36:393 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x7225dafb5cec9be142e3eb76bcee7ece598c6e959c2698fa895cabeb014b91ec130000352022-05-26 14:34:066 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
0x7225dafb5cec9be142e3eb76bcee7ece598c6e959c2698fa895cabeb014b91ec130000352022-05-26 14:34:066 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0x7225dafb5cec9be142e3eb76bcee7ece598c6e959c2698fa895cabeb014b91ec130000352022-05-26 14:34:066 mins ago 0xbed32937d8a5d1421241f52809908f1a17d75bdb CAP Finance: Router0 ETH
0x94cacb56fb29dd45a6ce8b3e6697a97099c1f0d0426bbbec7226386c72db2c64129999192022-05-26 14:33:077 mins ago CAP Finance: ETH Pool CAP Finance: Router0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Router

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, BSD-3-Clause license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2021-11-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev 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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
/**
 * @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 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'
        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) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _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
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface ITreasury {
    function fundOracle(address destination, uint256 amount) external;

    function notifyFeeReceived(address currency, uint256 amount) external;
}
interface ITrading {

    function distributeFees(address currency) external;
    
    function settleOrder(address user, bytes32 productId, address currency, bool isLong, uint256 price) external;

    function liquidatePosition(address user, bytes32 productId, address currency, bool isLong, uint256 price) external;

    function getPendingFee(address currency) external view returns(uint256);
    
}
interface IRouter {
    function trading() external view returns (address);

    function capPool() external view returns (address);

    function oracle() external view returns (address);

    function treasury() external view returns (address);

    function darkOracle() external view returns (address);

    function isSupportedCurrency(address currency) external view returns (bool);

    function currencies(uint256 index) external view returns (address);

    function currenciesLength() external view returns (uint256);

    function getDecimals(address currency) external view returns(uint8);

    function getPool(address currency) external view returns (address);

    function getPoolShare(address currency) external view returns(uint256);

    function getCapShare(address currency) external view returns(uint256);

    function getPoolRewards(address currency) external view returns (address);

    function getCapRewards(address currency) external view returns (address);
}

contract Router {

	using SafeERC20 for IERC20; 

	// Contract dependencies
	address public owner;
	address public trading;
	address public oracle;
	address public capPool;
	address public treasury;
	address public darkOracle;

	address[] public currencies;

	mapping(address => uint8) decimals;

	mapping(address => address) pools; // currency => contract
	
	mapping(address => uint256) private poolShare; // currency (eth, usdc, etc.) => bps
	mapping(address => uint256) private capShare; // currency => bps

	mapping(address => address) poolRewards; // currency => contract
	mapping(address => address) capRewards; // currency => contract

	constructor() {
		owner = msg.sender;
	}

	function isSupportedCurrency(address currency) external view returns(bool) {
		return currency != address(0) && pools[currency] != address(0);
	}

	function currenciesLength() external view returns(uint256) {
		return currencies.length;
	}

	function getPool(address currency) external view returns(address) {
		return pools[currency];
	}

	function getPoolShare(address currency) external view returns(uint256) {
		return poolShare[currency];
	}

	function getCapShare(address currency) external view returns(uint256) {
		return capShare[currency];
	}

	function getPoolRewards(address currency) external view returns(address) {
		return poolRewards[currency];
	}

	function getCapRewards(address currency) external view returns(address) {
		return capRewards[currency];
	}

	function getDecimals(address currency) external view returns(uint8) {
		if (currency == address(0)) return 18;
		if (decimals[currency] > 0) return decimals[currency];
		if (IERC20(currency).decimals() > 0) return IERC20(currency).decimals();
		return 18;
	}

	// Setters

	function setCurrencies(address[] calldata _currencies) external onlyOwner {
		currencies = _currencies;
	}

	function setDecimals(address currency, uint8 _decimals) external onlyOwner {
		decimals[currency] = _decimals;
	}

	function setContracts(
		address _treasury,
		address _trading,
		address _capPool,
		address _oracle,
		address _darkOracle
	) external onlyOwner {
		treasury = _treasury;
		trading = _trading;
		capPool = _capPool;
		oracle = _oracle;
		darkOracle = _darkOracle;
	}

	function setPool(address currency, address _contract) external onlyOwner {
		pools[currency] = _contract;
	}

	function setPoolShare(address currency, uint256 share) external onlyOwner {
		poolShare[currency] = share;
	}
	function setCapShare(address currency, uint256 share) external onlyOwner {
		capShare[currency] = share;
	}

	function setPoolRewards(address currency, address _contract) external onlyOwner {
		poolRewards[currency] = _contract;
	}

	function setCapRewards(address currency, address _contract) external onlyOwner {
		capRewards[currency] = _contract;
	}

	function setOwner(address newOwner) external onlyOwner {
		owner = newOwner;
	}

	// Modifiers

	modifier onlyOwner() {
		require(msg.sender == owner, "!owner");
		_;
	}

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"capPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"currencies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currenciesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"darkOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getCapRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getCapShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getPoolRewards","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"getPoolShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"isSupportedCurrency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"setCapRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"share","type":"uint256"}],"name":"setCapShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_trading","type":"address"},{"internalType":"address","name":"_capPool","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_darkOracle","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_currencies","type":"address[]"}],"name":"setCurrencies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"setPoolRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"uint256","name":"share","type":"uint256"}],"name":"setPoolShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610b55806100326000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806391399c60116100c3578063cf54aaa01161007c578063cf54aaa014610348578063ec44acf21461036d578063f2259f9614610380578063f63bf8bd14610393578063f6d1c271146103a6578063fca8d471146103b957600080fd5b806391399c601461028e57806395330f3a146102a1578063add1739a146102b4578063af4f1796146102e0578063bbe4f6db14610309578063ce56a7421461033557600080fd5b806361d027b31161011557806361d027b31461021c5780637dc0d1d01461022f5780638c6909f7146102425780638c7610e6146102555780638d34f97f146102685780638da5cb5b1461027b57600080fd5b806313af40351461015d57806339fadb91146101725780634e847fc7146101895780634fa885aa1461019c578063521d91f9146101e05780635dd06578146101f3575b600080fd5b61017061016b366004610927565b6103dc565b005b6006545b6040519081526020015b60405180910390f35b610170610197366004610949565b610431565b6101c86101aa366004610927565b6001600160a01b039081166000908152600c60205260409020541690565b6040516001600160a01b039091168152602001610180565b6101706101ee3660046109e1565b610489565b610176610201366004610927565b6001600160a01b03166000908152600a602052604090205490565b6004546101c8906001600160a01b031681565b6002546101c8906001600160a01b031681565b6005546101c8906001600160a01b031681565b610170610263366004610949565b6104cf565b610170610276366004610a42565b610527565b6000546101c8906001600160a01b031681565b6003546101c8906001600160a01b031681565b6101706102af3660046109e1565b610562565b6101c86102c2366004610927565b6001600160a01b039081166000908152600b60205260409020541690565b6101766102ee366004610927565b6001600160a01b031660009081526009602052604090205490565b6101c8610317366004610927565b6001600160a01b039081166000908152600860205260409020541690565b610170610343366004610949565b6105a8565b61035b610356366004610927565b610600565b60405160ff9091168152602001610180565b6001546101c8906001600160a01b031681565b61017061038e366004610a0b565b610753565b6101706103a136600461097c565b6107aa565b6101c86103b4366004610ab7565b610833565b6103cc6103c7366004610927565b61085d565b6040519015158152602001610180565b6000546001600160a01b0316331461040f5760405162461bcd60e51b815260040161040690610aed565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461045b5760405162461bcd60e51b815260040161040690610aed565b6001600160a01b03918216600090815260086020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146104b35760405162461bcd60e51b815260040161040690610aed565b6001600160a01b039091166000908152600a6020526040902055565b6000546001600160a01b031633146104f95760405162461bcd60e51b815260040161040690610aed565b6001600160a01b039182166000908152600b6020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b031633146105515760405162461bcd60e51b815260040161040690610aed565b61055d60068383610893565b505050565b6000546001600160a01b0316331461058c5760405162461bcd60e51b815260040161040690610aed565b6001600160a01b03909116600090815260096020526040902055565b6000546001600160a01b031633146105d25760405162461bcd60e51b815260040161040690610aed565b6001600160a01b039182166000908152600c6020526040902080546001600160a01b03191691909216179055565b60006001600160a01b03821661061857506012919050565b6001600160a01b03821660009081526007602052604090205460ff161561065857506001600160a01b031660009081526007602052604090205460ff1690565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561069357600080fd5b505afa1580156106a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cb9190610ad0565b60ff16111561074b57816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561070d57600080fd5b505afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107459190610ad0565b92915050565b506012919050565b6000546001600160a01b0316331461077d5760405162461bcd60e51b815260040161040690610aed565b6001600160a01b03919091166000908152600760205260409020805460ff191660ff909216919091179055565b6000546001600160a01b031633146107d45760405162461bcd60e51b815260040161040690610aed565b600480546001600160a01b03199081166001600160a01b03978816179091556001805482169587169590951790945560038054851693861693909317909255600280548416918516919091179055600580549092169216919091179055565b6006818154811061084357600080fd5b6000918252602090912001546001600160a01b0316905081565b60006001600160a01b038216158015906107455750506001600160a01b0390811660009081526008602052604090205416151590565b8280548282559060005260206000209081019282156108e6579160200282015b828111156108e65781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906108b3565b506108f29291506108f6565b5090565b5b808211156108f257600081556001016108f7565b80356001600160a01b038116811461092257600080fd5b919050565b60006020828403121561093957600080fd5b6109428261090b565b9392505050565b6000806040838503121561095c57600080fd5b6109658361090b565b91506109736020840161090b565b90509250929050565b600080600080600060a0868803121561099457600080fd5b61099d8661090b565b94506109ab6020870161090b565b93506109b96040870161090b565b92506109c76060870161090b565b91506109d56080870161090b565b90509295509295909350565b600080604083850312156109f457600080fd5b6109fd8361090b565b946020939093013593505050565b60008060408385031215610a1e57600080fd5b610a278361090b565b91506020830135610a3781610b0d565b809150509250929050565b60008060208385031215610a5557600080fd5b823567ffffffffffffffff80821115610a6d57600080fd5b818501915085601f830112610a8157600080fd5b813581811115610a9057600080fd5b8660208260051b8501011115610aa557600080fd5b60209290920196919550909350505050565b600060208284031215610ac957600080fd5b5035919050565b600060208284031215610ae257600080fd5b815161094281610b0d565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b60ff81168114610b1c57600080fd5b5056fea2646970667358221220a14dd0fb927244b631c559c7711f3b26fd672986a63ed951154475bd0ce07f2264736f6c63430008070033

Deployed ByteCode Sourcemap

16364:3100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19281:81;;;;;;:::i;:::-;;:::i;:::-;;17231:93;17302:10;:17;17231:93;;;3655:25:1;;;3643:2;3628:18;17231:93:0;;;;;;;;18684:110;;;;;;:::i;:::-;;:::i;17770:109::-;;;;;;:::i;:::-;-1:-1:-1;;;;;17854:20:0;;;17833:7;17854:20;;;:10;:20;;;;;;;;17770:109;;;;-1:-1:-1;;;;;2939:32:1;;;2921:51;;2909:2;2894:18;17770:109:0;2775:203:1;18913:109:0;;;;;;:::i;:::-;;:::i;17544:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;17626:18:0;17605:7;17626:18;;;:8;:18;;;;;;;17544:105;16547:23;;;;;-1:-1:-1;;;;;16547:23:0;;;16496:21;;;;;-1:-1:-1;;;;;16496:21:0;;;16574:25;;;;;-1:-1:-1;;;;;16574:25:0;;;19027:123;;;;;;:::i;:::-;;:::i;18167:108::-;;;;;;:::i;:::-;;:::i;16446:20::-;;;;;-1:-1:-1;;;;;16446:20:0;;;16521:22;;;;;-1:-1:-1;;;;;16521:22:0;;;18799:111;;;;;;:::i;:::-;;:::i;17654:::-;;;;;;:::i;:::-;-1:-1:-1;;;;;17739:21:0;;;17718:7;17739:21;;;:11;:21;;;;;;;;17654:111;17432:107;;;;;;:::i;:::-;-1:-1:-1;;;;;17515:19:0;17494:7;17515:19;;;:9;:19;;;;;;;17432:107;17329:98;;;;;;:::i;:::-;-1:-1:-1;;;;;17407:15:0;;;17386:7;17407:15;;;:5;:15;;;;;;;;17329:98;19155:121;;;;;;:::i;:::-;;:::i;17884:263::-;;;;;;:::i;:::-;;:::i;:::-;;;3863:4:1;3851:17;;;3833:36;;3821:2;3806:18;17884:263:0;3691:184:1;16470:22:0;;;;;-1:-1:-1;;;;;16470:22:0;;;18280:115;;;;;;:::i;:::-;;:::i;18400:279::-;;;;;;:::i;:::-;;:::i;16605:27::-;;;;;;:::i;:::-;;:::i;17079:147::-;;;;;;:::i;:::-;;:::i;:::-;;;3148:14:1;;3141:22;3123:41;;3111:2;3096:18;17079:147:0;2983:187:1;19281:81:0;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;;;;;;;;;19341:5:::1;:16:::0;;-1:-1:-1;;;;;;19341:16:0::1;-1:-1:-1::0;;;;;19341:16:0;;;::::1;::::0;;;::::1;::::0;;19281:81::o;18684:110::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18762:15:0;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:27;;-1:-1:-1;;;;;;18762:27:0::1;::::0;;;::::1;;::::0;;18684:110::o;18913:109::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18991:18:0;;::::1;;::::0;;;:8:::1;:18;::::0;;;;:26;18913:109::o;19027:123::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19112:21:0;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:33;;-1:-1:-1;;;;;;19112:33:0::1;::::0;;;::::1;;::::0;;19027:123::o;18167:108::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;18246:24:::1;:10;18259:11:::0;;18246:24:::1;:::i;:::-;;18167:108:::0;;:::o;18799:111::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18878:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:27;18799:111::o;19155:121::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19239:20:0;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:32;;-1:-1:-1;;;;;;19239:32:0::1;::::0;;;::::1;;::::0;;19155:121::o;17884:263::-;17945:5;-1:-1:-1;;;;;17961:22:0;;17957:37;;-1:-1:-1;17992:2:0;;17884:263;-1:-1:-1;17884:263:0:o;17957:37::-;-1:-1:-1;;;;;18003:18:0;;18024:1;18003:18;;;:8;:18;;;;;;;;:22;17999:53;;-1:-1:-1;;;;;;18034:18:0;;;;;:8;:18;;;;;;;;;17884:263::o;17999:53::-;18091:1;18068:8;-1:-1:-1;;;;;18061:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;;18057:71;;;18108:8;-1:-1:-1;;;;;18101:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18094:34;17884:263;-1:-1:-1;;17884:263:0:o;18057:71::-;-1:-1:-1;18140:2:0;;17884:263;-1:-1:-1;17884:263:0:o;18280:115::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18360:18:0;;;::::1;;::::0;;;:8:::1;:18;::::0;;;;:30;;-1:-1:-1;;18360:30:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;18280:115::o;18400:279::-;19432:5;;-1:-1:-1;;;;;19432:5:0;19418:10;:19;19410:38;;;;-1:-1:-1;;;19410:38:0;;;;;;;:::i;:::-;18558:8:::1;:20:::0;;-1:-1:-1;;;;;;18558:20:0;;::::1;-1:-1:-1::0;;;;;18558:20:0;;::::1;;::::0;;;-1:-1:-1;18583:18:0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;18606:18:0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18629:6:::1;:16:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;18650:10:::1;:24:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;18400:279::o;16605:27::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16605:27:0;;-1:-1:-1;16605:27:0;:::o;17079:147::-;17148:4;-1:-1:-1;;;;;17166:22:0;;;;;;:55;;-1:-1:-1;;;;;;;17192:15:0;;;17219:1;17192:15;;;:5;:15;;;;;;;:29;;;17079:147::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:484::-;743:6;751;759;767;775;828:3;816:9;807:7;803:23;799:33;796:53;;;845:1;842;835:12;796:53;868:29;887:9;868:29;:::i;:::-;858:39;;916:38;950:2;939:9;935:18;916:38;:::i;:::-;906:48;;973:38;1007:2;996:9;992:18;973:38;:::i;:::-;963:48;;1030:38;1064:2;1053:9;1049:18;1030:38;:::i;:::-;1020:48;;1087:39;1121:3;1110:9;1106:19;1087:39;:::i;:::-;1077:49;;648:484;;;;;;;;:::o;1137:254::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1305:29;1324:9;1305:29;:::i;:::-;1295:39;1381:2;1366:18;;;;1353:32;;-1:-1:-1;;;1137:254:1:o;1396:317::-;1462:6;1470;1523:2;1511:9;1502:7;1498:23;1494:32;1491:52;;;1539:1;1536;1529:12;1491:52;1562:29;1581:9;1562:29;:::i;:::-;1552:39;;1641:2;1630:9;1626:18;1613:32;1654:29;1677:5;1654:29;:::i;:::-;1702:5;1692:15;;;1396:317;;;;;:::o;1718:615::-;1804:6;1812;1865:2;1853:9;1844:7;1840:23;1836:32;1833:52;;;1881:1;1878;1871:12;1833:52;1921:9;1908:23;1950:18;1991:2;1983:6;1980:14;1977:34;;;2007:1;2004;1997:12;1977:34;2045:6;2034:9;2030:22;2020:32;;2090:7;2083:4;2079:2;2075:13;2071:27;2061:55;;2112:1;2109;2102:12;2061:55;2152:2;2139:16;2178:2;2170:6;2167:14;2164:34;;;2194:1;2191;2184:12;2164:34;2247:7;2242:2;2232:6;2229:1;2225:14;2221:2;2217:23;2213:32;2210:45;2207:65;;;2268:1;2265;2258:12;2207:65;2299:2;2291:11;;;;;2321:6;;-1:-1:-1;1718:615:1;;-1:-1:-1;;;;1718:615:1:o;2338:180::-;2397:6;2450:2;2438:9;2429:7;2425:23;2421:32;2418:52;;;2466:1;2463;2456:12;2418:52;-1:-1:-1;2489:23:1;;2338:180;-1:-1:-1;2338:180:1:o;2523:247::-;2591:6;2644:2;2632:9;2623:7;2619:23;2615:32;2612:52;;;2660:1;2657;2650:12;2612:52;2692:9;2686:16;2711:29;2734:5;2711:29;:::i;3175:329::-;3377:2;3359:21;;;3416:1;3396:18;;;3389:29;-1:-1:-1;;;3449:2:1;3434:18;;3427:36;3495:2;3480:18;;3175:329::o;3880:114::-;3964:4;3957:5;3953:16;3946:5;3943:27;3933:55;;3984:1;3981;3974:12;3933:55;3880:114;:::o

Swarm Source

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