S Price: $0.467844 (-0.91%)
    /

    Contract

    0x3754480db8b3E607fbE125697EB496a44A1Be720

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0 S

    S Value

    $0.00
    Age:24H
    Amount:Between 1-100
    Reset Filter

    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount

    There are no matching entries

    1 Internal Transaction and > 10 Token Transfers found.

    Latest 1 internal transaction

    Parent Transaction Hash Block Age From To Amount
    5880282024-12-18 16:51:13118 days ago1734540673
     Contract Creation
    0 S
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    BoringOnChainQueue

    Compiler Version
    v0.8.21+commit.d9974bed

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    london EvmVersion
    File 1 of 21 : BoringOnChainQueue.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {WETH} from "@solmate/tokens/WETH.sol";
    import {BoringVault} from "src/base/BoringVault.sol";
    import {AccountantWithRateProviders} from "src/base/Roles/AccountantWithRateProviders.sol";
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {BeforeTransferHook} from "src/interfaces/BeforeTransferHook.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    import {ReentrancyGuard} from "@solmate/utils/ReentrancyGuard.sol";
    import {IPausable} from "src/interfaces/IPausable.sol";
    import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
    import {IBoringSolver} from "src/base/Roles/BoringQueue/IBoringSolver.sol";
    contract BoringOnChainQueue is Auth, ReentrancyGuard, IPausable {
    using EnumerableSet for EnumerableSet.Bytes32Set;
    using SafeTransferLib for BoringVault;
    using SafeTransferLib for ERC20;
    using FixedPointMathLib for uint256;
    // ========================================= STRUCTS =========================================
    /**
    * @param allowWithdraws Whether or not withdraws are allowed for this asset.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 21 : ERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
    /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
    /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
    abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
    EVENTS
    //////////////////////////////////////////////////////////////*/
    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    /*//////////////////////////////////////////////////////////////
    METADATA STORAGE
    //////////////////////////////////////////////////////////////*/
    string public name;
    string public symbol;
    uint8 public immutable decimals;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 21 : WETH.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    import {ERC20} from "./ERC20.sol";
    import {SafeTransferLib} from "../utils/SafeTransferLib.sol";
    /// @notice Minimalist and modern Wrapped Ether implementation.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/WETH.sol)
    /// @author Inspired by WETH9 (https://github.com/dapphub/ds-weth/blob/master/src/weth9.sol)
    contract WETH is ERC20("Wrapped Ether", "WETH", 18) {
    using SafeTransferLib for address;
    event Deposit(address indexed from, uint256 amount);
    event Withdrawal(address indexed to, uint256 amount);
    function deposit() public payable virtual {
    _mint(msg.sender, msg.value);
    emit Deposit(msg.sender, msg.value);
    }
    function withdraw(uint256 amount) public virtual {
    _burn(msg.sender, amount);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 21 : BoringVault.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    import {Address} from "@openzeppelin/contracts/utils/Address.sol";
    import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
    import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {BeforeTransferHook} from "src/interfaces/BeforeTransferHook.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    contract BoringVault is ERC20, Auth, ERC721Holder, ERC1155Holder {
    using Address for address;
    using SafeTransferLib for ERC20;
    using FixedPointMathLib for uint256;
    // ========================================= STATE =========================================
    /**
    * @notice Contract responsbile for implementing `beforeTransfer`.
    */
    BeforeTransferHook public hook;
    //============================== EVENTS ===============================
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 21 : AccountantWithRateProviders.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {IRateProvider} from "src/interfaces/IRateProvider.sol";
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {BoringVault} from "src/base/BoringVault.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    import {IPausable} from "src/interfaces/IPausable.sol";
    contract AccountantWithRateProviders is Auth, IRateProvider, IPausable {
    using FixedPointMathLib for uint256;
    using SafeTransferLib for ERC20;
    // ========================================= STRUCTS =========================================
    /**
    * @param payoutAddress the address `claimFees` sends fees to
    * @param highwaterMark the highest value of the BoringVault's share price
    * @param feesOwedInBase total pending fees owed in terms of base
    * @param totalSharesLastUpdate total amount of shares the last exchange rate update
    * @param exchangeRate the current exchange rate in terms of base
    * @param allowedExchangeRateChangeUpper the max allowed change to exchange rate from an update
    * @param allowedExchangeRateChangeLower the min allowed change to exchange rate from an update
    * @param lastUpdateTimestamp the block timestamp of the last exchange rate update
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 21 : FixedPointMathLib.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Arithmetic library with operations for fixed-point numbers.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
    /// @author Inspired by USM (https://github.com/usmfum/USM/blob/master/contracts/WadMath.sol)
    library FixedPointMathLib {
    /*//////////////////////////////////////////////////////////////
    SIMPLIFIED FIXED POINT OPERATIONS
    //////////////////////////////////////////////////////////////*/
    uint256 internal constant MAX_UINT256 = 2**256 - 1;
    uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s.
    function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down.
    }
    function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up.
    }
    function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down.
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 21 : SafeTransferLib.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    import {ERC20} from "../tokens/ERC20.sol";
    /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
    /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
    /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
    library SafeTransferLib {
    /*//////////////////////////////////////////////////////////////
    ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/
    function safeTransferETH(address to, uint256 amount) internal {
    bool success;
    /// @solidity memory-safe-assembly
    assembly {
    // Transfer the ETH and store if it succeeded or not.
    success := call(gas(), to, amount, 0, 0, 0, 0)
    }
    require(success, "ETH_TRANSFER_FAILED");
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 21 : BeforeTransferHook.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface BeforeTransferHook {
    function beforeTransfer(address from, address to, address operator) external view;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 21 : Auth.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
    /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
    abstract contract Auth {
    event OwnershipTransferred(address indexed user, address indexed newOwner);
    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);
    address public owner;
    Authority public authority;
    constructor(address _owner, Authority _authority) {
    owner = _owner;
    authority = _authority;
    emit OwnershipTransferred(msg.sender, _owner);
    emit AuthorityUpdated(msg.sender, _authority);
    }
    modifier requiresAuth() virtual {
    require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 21 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Gas optimized reentrancy protection for smart contracts.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
    /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
    abstract contract ReentrancyGuard {
    uint256 private locked = 1;
    modifier nonReentrant() virtual {
    require(locked == 1, "REENTRANCY");
    locked = 2;
    _;
    locked = 1;
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 21 : IPausable.sol
    1
    2
    3
    4
    5
    6
    7
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface IPausable {
    function pause() external;
    function unpause() external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 21 : EnumerableSet.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol)
    // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Library for managing
    * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
    * types.
    *
    * Sets have the following properties:
    *
    * - Elements are added, removed, and checked for existence in constant time
    * (O(1)).
    * - Elements are enumerated in O(n). No guarantees are made on the ordering.
    *
    * ```solidity
    * contract Example {
    * // Add the library methods
    * using EnumerableSet for EnumerableSet.AddressSet;
    *
    * // Declare a set state variable
    * EnumerableSet.AddressSet private mySet;
    * }
    * ```
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 21 : IBoringSolver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface IBoringSolver {
    function boringSolve(
    address initiator,
    address boringVault,
    address solveAsset,
    uint256 totalShares,
    uint256 requiredAssets,
    bytes calldata solveData
    ) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 21 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev The ETH balance of the account is not enough to perform the operation.
    */
    error AddressInsufficientBalance(address account);
    /**
    * @dev There's no code at `target` (it is not a contract).
    */
    error AddressEmptyCode(address target);
    /**
    * @dev A call to an address target failed. The target may have reverted.
    */
    error FailedInnerCall();
    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 21 : ERC721Holder.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)
    pragma solidity ^0.8.20;
    import {IERC721Receiver} from "../IERC721Receiver.sol";
    /**
    * @dev Implementation of the {IERC721Receiver} interface.
    *
    * Accepts all token transfers.
    * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
    * {IERC721-setApprovalForAll}.
    */
    abstract contract ERC721Holder is IERC721Receiver {
    /**
    * @dev See {IERC721Receiver-onERC721Received}.
    *
    * Always returns `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) {
    return this.onERC721Received.selector;
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 21 : ERC1155Holder.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/utils/ERC1155Holder.sol)
    pragma solidity ^0.8.20;
    import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol";
    import {IERC1155Receiver} from "../IERC1155Receiver.sol";
    /**
    * @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
    *
    * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
    * stuck.
    */
    abstract contract ERC1155Holder is ERC165, IERC1155Receiver {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
    return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
    function onERC1155Received(
    address,
    address,
    uint256,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 21 : IRateProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: UNLICENSED
    // This program is free software: you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    // You should have received a copy of the GNU General Public License
    // along with this program. If not, see <http://www.gnu.org/licenses/>.
    pragma solidity ^0.8.0;
    interface IRateProvider {
    function getRate() external view returns (uint256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 21 : IERC721Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)
    pragma solidity ^0.8.20;
    /**
    * @title ERC721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC721 asset contracts.
    */
    interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
    * reverted.
    *
    * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 21 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
    * for the additional interface id that will be supported. For example:
    *
    * ```solidity
    * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
    * }
    * ```
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
    return interfaceId == type(IERC165).interfaceId;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 21 : IERC1155Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Interface that must be implemented by smart contracts in order to receive
    * ERC-1155 token transfers.
    */
    interface IERC1155Receiver is IERC165 {
    /**
    * @dev Handles the receipt of a single ERC1155 token type. This function is
    * called at the end of a `safeTransferFrom` after the balance has been updated.
    *
    * NOTE: To accept the transfer, this must return
    * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    * (i.e. 0xf23a6e61, or its own function selector).
    *
    * @param operator The address which initiated the transfer (i.e. msg.sender)
    * @param from The address which previously owned the token
    * @param id The ID of the token being transferred
    * @param value The amount of tokens being transferred
    * @param data Additional data with no specified format
    * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 21 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[EIP].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "@solmate/=lib/solmate/src/",
    "@forge-std/=lib/forge-std/src/",
    "@ds-test/=lib/forge-std/lib/ds-test/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@ccip/=lib/ccip/",
    "@oapp-auth/=lib/OAppAuth/src/",
    "@devtools-oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/contracts/oapp/",
    "@layerzerolabs/lz-evm-messagelib-v2/=lib/OAppAuth/node_modules/@layerzerolabs/lz-evm-messagelib-v2/",
    "@layerzerolabs/lz-evm-protocol-v2/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/protocol/",
    "@layerzerolabs/oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/",
    "@lz-oapp-evm/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/oapp/contracts/oapp/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@sbu/=lib/OAppAuth/lib/solidity-bytes-utils/",
    "LayerZero-V2/=lib/OAppAuth/lib/",
    "OAppAuth/=lib/OAppAuth/",
    "ccip/=lib/ccip/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/OAppAuth/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solidity-bytes-utils/=lib/OAppAuth/node_modules/solidity-bytes-utils/",
    "solmate/=lib/solmate/src/"
    ],
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_auth","type":"address"},{"internalType":"address payable","name":"_boringVault","type":"address"},{"internalType":"address","name":"_accountant","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BoringOnChainQueue__BadDeadline","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadDiscount","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadInput","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadShareAmount","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadUser","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__DeadlinePassed","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Keccak256Collision","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAXIMUM_MINIMUM_SECONDS_TO_DEADLINE","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAXIMUM_SECONDS_TO_MATURITY","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAX_DISCOUNT","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__NotMatured","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Overflow","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Paused","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__PermitFailedAndAllowanceTooLow","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__RequestNotFound","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__RescueCannotTakeSharesFromActiveRequests","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__SolveAssetMismatch","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__WithdrawsNotAllowedForAsset","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OnChainWithdrawCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint96","name":"nonce","type":"uint96"},{"indexed":false,"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"indexed":false,"internalType":"uint40","name":"creationTime","type":"uint40"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"OnChainWithdrawRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OnChainWithdrawSolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"indexed":false,"internalType":"uint16","name":"minDiscount","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"indexed":false,"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"WithdrawAssetSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"}],"name":"WithdrawAssetStopped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint16","name":"minDiscount","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"indexed":false,"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"WithdrawAssetUpdated","type":"event"},{"inputs":[],"name":"ONE_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountant","outputs":[{"internalType":"contract AccountantWithRateProviders","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boringVault","outputs":[{"internalType":"contract BoringVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"request","type":"tuple"}],"name":"cancelOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"requests","type":"tuple[]"}],"name":"cancelUserWithdraws","outputs":[{"internalType":"bytes32[]","name":"canceledRequestIds","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"request","type":"tuple"}],"name":"getRequestId","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRequestIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"}],"name":"previewAssetsOut","outputs":[{"internalType":"uint128","name":"amountOfAssets128","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"oldRequest","type":"tuple"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"replaceOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"oldRequestId","type":"bytes32"},{"internalType":"bytes32","name":"newRequestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"requestOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"},{"internalType":"uint256","name":"permitDeadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"requestOnChainWithdrawWithPermit","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"activeRequests","type":"tuple[]"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"requests","type":"tuple[]"},{"internalType":"bytes","name":"solveData","type":"bytes"},{"internalType":"address","name":"solver","type":"address"}],"name":"solveOnChainWithdraws","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"}],"name":"stopWithdrawsInAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"internalType":"uint16","name":"minDiscount","type":"uint16"},{"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"updateWithdrawAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawAssets","outputs":[{"internalType":"bool","name":"allowWithdraws","type":"bool"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"internalType":"uint16","name":"minDiscount","type":"uint16"},{"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"internalType":"uint96","name":"minimumShares","type":"uint96"}],"stateMutability":"view","type":"function"}]

    60e060405260016002819055600680546001600160601b03191690911790553480156200002b57600080fd5b5060405162002ebc38038062002ebc8339810160408190526200004e9162000191565b600080546001600160a01b03199081166001600160a01b0387811691821784556001805490931690871617909155604051869286929133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350506001600160a01b03821660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156200012c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001529190620001f9565b6200015f90600a6200033a565b60c0526001600160a01b031660a052506200034b915050565b6001600160a01b03811681146200018e57600080fd5b50565b60008060008060808587031215620001a857600080fd5b8451620001b58162000178565b6020860151909450620001c88162000178565b6040860151909350620001db8162000178565b6060860151909250620001ee8162000178565b939692955090935050565b6000602082840312156200020c57600080fd5b815160ff811681146200021e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200027c57816000190482111562000260576200026062000225565b808516156200026e57918102915b93841c939080029062000240565b509250929050565b600082620002955750600162000334565b81620002a45750600062000334565b8160018114620002bd5760028114620002c857620002e8565b600191505062000334565b60ff841115620002dc57620002dc62000225565b50506001821b62000334565b5060208310610133831016604e8410600b84101617156200030d575081810a62000334565b6200031983836200023b565b806000190482111562000330576200033062000225565b0290505b92915050565b60006200021e60ff84168362000284565b60805160a05160c051612aed620003cf600039600081816103bd01526114290152600081816101b80152818161138b0152611573015260008181610448015281816104a70152818161060501528181610adc01528181610b2f01528181610d8101528181610e0801528181610ea701528181610fcc0152611da40152612aed6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a5672fd7116100c3578063b7d122b51161007c578063b7d122b5146103b8578063bf7e214f146103df578063e69a31c2146103f2578063eed4b3f81461041d578063f2fde38b14610430578063f3b977841461044357600080fd5b8063a5672fd714610279578063aa5a0ffd146102a1578063ac33a2731461034e578063affed0e014610356578063b187bd2614610381578063b22ed42a146103a557600080fd5b80636bb3b476116101155780636bb3b4761461020557806374732728146102185780637a9e5e4b1461022b5780638456cb591461023e5780638da5cb5b146102465780639fff7e2a1461025957600080fd5b80630bf6cab71461015d5780633f4ba83a14610172578063412638dc1461017a5780634a2dc5e41461018d5780634fb3ccc5146101b3578063581b4920146101f2575b600080fd5b61017061016b366004612228565b61046a565b005b610170610746565b61017061018836600461229b565b6107b0565b6101a061019b36600461248f565b610c30565b6040519081526020015b60405180910390f35b6101da7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101aa565b6101a06102003660046124be565b610c73565b6101a061021336600461254a565b610ef9565b6101706102263660046125a0565b61101a565b6101706102393660046125a0565b611095565b61017061117f565b6000546101da906001600160a01b031681565b61026c6102673660046125bd565b6111ef565b6040516101aa91906125f3565b61028c610287366004612637565b6112da565b604080519283526020830191909152016101aa565b6103076102af3660046125a0565b60056020526000908152604090205460ff81169062ffffff610100820481169164010000000081049091169061ffff600160381b8204811691600160481b8104909116906001600160601b03600160581b9091041686565b60408051961515875262ffffff9586166020880152939094169285019290925261ffff90811660608501521660808301526001600160601b031660a082015260c0016101aa565b61026c611326565b600654610369906001600160601b031681565b6040516001600160601b0390911681526020016101aa565b60065461039590600160601b900460ff1681565b60405190151581526020016101aa565b6101a06103b336600461267e565b611337565b6101a07f000000000000000000000000000000000000000000000000000000000000000081565b6001546101da906001600160a01b031681565b610405610400366004612691565b611367565b6040516001600160801b0390911681526020016101aa565b61017061042b3660046126cd565b611480565b61017061043e3660046125a0565b6117b5565b6101da7f000000000000000000000000000000000000000000000000000000000000000081565b610480336000356001600160e01b031916611832565b6104a55760405162461bcd60e51b815260040161049c90612743565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036106b75760006104ea60036118dc565b805190915082811461050f576040516312ed8d4160e21b815260040160405180910390fd5b6000805b828110156105e25783818151811061052d5761052d612769565b602002602001015186868381811061054757610547612769565b9050610100020160405160200161055e919061277f565b6040516020818303038152906040528051906020012014610592576040516312ed8d4160e21b815260040160405180910390fd5b8585828181106105a4576105a4612769565b9050610100020160600160208101906105bd9190612849565b6105d0906001600160801b03168361287a565b91506105db8161288d565b9050610513565b506040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067091906128a6565b61067a91906128bf565b9050600019880361068d578097506106ae565b808811156106ae5760405163fbeb452f60e01b815260040160405180910390fd5b5050505061072b565b600019840361072b576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610704573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072891906128a6565b93505b61073f6001600160a01b03861684866118f0565b5050505050565b61075c336000356001600160e01b031916611832565b6107785760405162461bcd60e51b815260040161049c90612743565b6006805460ff60601b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6107c6336000356001600160e01b031916611832565b6107e25760405162461bcd60e51b815260040161049c90612743565b600654600160601b900460ff161561080d5760405163158b17e360e11b815260040160405180910390fd5b60008585600081811061082257610822612769565b90506101000201604001602081019061083b91906125a0565b905060008086815b81811015610ace5789898281811061085d5761085d612769565b90506101000201604001602081019061087691906125a0565b6001600160a01b0316856001600160a01b0316146108a7576040516331f59b5960e21b815260040160405180910390fd5b60008a8a838181106108bb576108bb612769565b9050610100020160c00160208101906108d491906128d2565b62ffffff168b8b848181106108eb576108eb612769565b9050610100020160a001602081019061090491906128ed565b61090e9190612908565b64ffffffffff16905080421015610938576040516332924a4960e01b815260040160405180910390fd5b60008b8b8481811061094c5761094c612769565b9050610100020160e001602081019061096591906128d2565b6109749062ffffff168361287a565b905080421115610997576040516378b2b00760e01b815260040160405180910390fd5b8b8b848181106109a9576109a9612769565b9050610100020160800160208101906109c29190612849565b6109d5906001600160801b03168761287a565b95508b8b848181106109e9576109e9612769565b905061010002016060016020810190610a029190612849565b610a15906001600160801b03168661287a565b94506000610a4a8d8d86818110610a2e57610a2e612769565b90506101000201803603810190610a45919061248f565b611977565b90508c8c85818110610a5e57610a5e612769565b905061010002016020016020810190610a7791906125a0565b6001600160a01b0316817fd94fc49a6578873ff851671d19cacb1809887f7a9128867ee4306dc3ffc93c2642604051610ab291815260200190565b60405180910390a350505080610ac79061288d565b9050610843565b50610b036001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686846118f0565b8515610b94576040516333d5020b60e11b81526001600160a01b038616906367aa041690610b619033907f000000000000000000000000000000000000000000000000000000000000000090899088908a908f908f90600401612926565b600060405180830381600087803b158015610b7b57600080fd5b505af1158015610b8f573d6000803e3d6000fd5b505050505b60005b81811015610c2457610c14868b8b84818110610bb557610bb5612769565b905061010002016020016020810190610bce91906125a0565b8c8c85818110610be057610be0612769565b905061010002016080016020810190610bf99190612849565b6001600160a01b0389169291906001600160801b03166119d7565b610c1d8161288d565b9050610b97565b50505050505050505050565b6000610c48336000356001600160e01b031916611832565b610c645760405162461bcd60e51b815260040161049c90612743565b610c6d82611a6c565b92915050565b6000610c8b336000356001600160e01b031916611832565b610ca75760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038916600090815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610d39818a8a8a611aa7565b60405163d505accf60e01b81523360048201523060248201526001600160801b038a1660448201526064810187905260ff8616608482015260a4810185905260c481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610dcd57600080fd5b505af1925050508015610dde575060015b610e9a57604051636eb1769f60e11b81523360048201523060248201526001600160801b038a16907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b91906128a6565b1015610e9a57604051634bfd8d1d60e01b815260040160405180910390fd5b610ed86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633306001600160801b038d166119d7565b610eea338b8b8b85602001518c611b9a565b509a9950505050505050505050565b6000610f11336000356001600160e01b031916611832565b610f2d5760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038516600090815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610fbf81868686611aa7565b610ffd6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633306001600160801b0389166119d7565b61100f33878787856020015188611b9a565b509695505050505050565b611030336000356001600160e01b031916611832565b61104c5760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038116600081815260056020526040808220805460ff19169055517ff1abf38a870f414456542524a2b679c0ece751691e36f4feee2ca7826c99e4629190a250565b6000546001600160a01b031633148061112a575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906110e990339030906001600160e01b0319600035169060040161298b565b602060405180830381865afa158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a91906129b8565b61113357600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b611195336000356001600160e01b031916611832565b6111b15760405162461bcd60e51b815260040161049c90612743565b6006805460ff60601b1916600160601b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6060611207336000356001600160e01b031916611832565b6112235760405162461bcd60e51b815260040161049c90612743565b818067ffffffffffffffff81111561123d5761123d61234d565b604051908082528060200260200182016040528015611266578160200160208202803683370190505b50915060005b818110156112d2576112a585858381811061128957611289612769565b905061010002018036038101906112a0919061248f565b611d7f565b8382815181106112b7576112b7612769565b60209081029190910101526112cb8161288d565b905061126c565b505092915050565b6000806112f3336000356001600160e01b031916611832565b61130f5760405162461bcd60e51b815260040161049c90612743565b61131a858585611e28565b90969095509350505050565b606061133260036118dc565b905090565b60008160405160200161134a919061277f565b604051602081830303815290604052805190602001209050919050565b604051634104b9ed60e11b81526001600160a01b03848116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063820973da90602401602060405180830381865afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f691906128a6565b9050611415611407846127106129da565b829061ffff16612710611e7c565b9050600061144d6001600160801b038616837f0000000000000000000000000000000000000000000000000000000000000000611e7c565b90506001600160801b0381111561147757604051635637123160e01b815260040160405180910390fd5b95945050505050565b611496336000356001600160e01b031916611832565b6114b25760405162461bcd60e51b815260040161049c90612743565b610bb861ffff831611156114d95760405163daf4c27560e01b815260040160405180910390fd5b62278d0062ffffff86161115611502576040516341e2834f60e11b815260040160405180910390fd5b62278d0062ffffff8516111561152b57604051632496e55f60e21b815260040160405180910390fd5b8161ffff168361ffff1611156115545760405163a800f19560e01b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b0387811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063820973da90602401602060405180830381865afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de91906128a6565b506040518060c001604052806001151581526020018662ffffff1681526020018562ffffff1681526020018461ffff1681526020018361ffff168152602001826001600160601b031681525060056000886001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548162ffffff021916908362ffffff16021790555060408201518160000160046101000a81548162ffffff021916908362ffffff16021790555060608201518160000160076101000a81548161ffff021916908361ffff16021790555060808201518160000160096101000a81548161ffff021916908361ffff16021790555060a082015181600001600b6101000a8154816001600160601b0302191690836001600160601b03160217905550905050856001600160a01b03167f6ece44744f1fe676735f115da497fe130c7acf43fcd142fe92e20df15788797e86868686866040516117a595949392919062ffffff958616815293909416602084015261ffff91821660408401521660608201526001600160601b0391909116608082015260a00190565b60405180910390a2505050505050565b6117cb336000356001600160e01b031916611832565b6117e75760405162461bcd60e51b815260040161049c90612743565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546000906001600160a01b031680158015906118bc575060405163b700961360e01b81526001600160a01b0382169063b70096139061187b9087903090889060040161298b565b602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc91906129b8565b806118d457506000546001600160a01b038581169116145b949350505050565b606060006118e983611e9a565b9392505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806119715760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161049c565b50505050565b60008160405160200161198a91906129f5565b60408051601f198184030181529190528051602090910120905060006119b1600383611ef6565b9050806119d157604051630ba52cdd60e11b815260040160405180910390fd5b50919050565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061073f5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161049c565b6020810151600090336001600160a01b0382168114611a9e576040516322583d4960e21b815260040160405180910390fd5b6118d484611d7f565b600654600160601b900460ff1615611ad25760405163158b17e360e11b815260040160405180910390fd5b8351611af1576040516312baa4e960e11b815260040160405180910390fd5b836060015161ffff168261ffff161080611b165750836080015161ffff168261ffff16115b15611b345760405163a800f19560e01b815260040160405180910390fd5b8360a001516001600160601b0316836001600160801b03161015611b6b5760405163030510d560e11b815260040160405180910390fd5b836040015162ffffff168162ffffff161015611971576040516394fb53cb60e01b815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052600680546bffffffffffffffffffffffff19811660016001600160601b03928316908101909216179091556000611c12898989611367565b90506000429050604051806101000160405280846001600160601b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160801b03168152602001836001600160801b031681526020018264ffffffffff1681526020018862ffffff1681526020018762ffffff16815250935083604051602001611ca491906129f5565b60408051601f19818403018152919052805160209091012094506000611ccb600387611f02565b905080611ceb57604051635028981b60e11b815260040160405180910390fd5b604080516001600160601b03861681526001600160801b038c8116602083015285168183015264ffffffffff8416606082015262ffffff8a81166080830152891660a082015290516001600160a01b038d811692908f169189917f2eb08ebdb4d68b4a37e3b424927f3363e1d799ca7e56e7b2c59cc6c1778d33f5919081900360c00190a450505050965096945050505050565b6000611d8a82611977565b9050611ddb826020015183606001516001600160801b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118f09092919063ffffffff16565b81602001516001600160a01b0316817f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e3642604051611e1b91815260200190565b60405180910390a3919050565b600080846020015133806001600160a01b0316826001600160a01b031614611e63576040516322583d4960e21b815260040160405180910390fd5b611e6e878787611f0e565b909890975095505050505050565b6000826000190484118302158202611e9357600080fd5b5091020490565b606081600001805480602002602001604051908101604052809291908181526020018280548015611eea57602002820191906000526020600020905b815481526020019060010190808311611ed6575b50505050509050919050565b60006118e9838361206b565b60006118e98383612165565b600080846020015133806001600160a01b0316826001600160a01b031614611f49576040516322583d4960e21b815260040160405180910390fd5b6040878101516001600160a01b031660009081526005602090815290829020825160c081018452905460ff811615158252610100810462ffffff90811693830193909352640100000000810490921692810192909252600160381b810461ffff908116606080850191909152600160481b83049091166080840152600160581b9091046001600160601b031660a0830152880151611fea9082908989611aa7565b611ff388611977565b945087602001516001600160a01b0316857f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e364260405161203591815260200190565b60405180910390a361205b886020015189604001518a606001518a85602001518b611b9a565b5080945050505050935093915050565b6000818152600183016020526040812054801561215457600061208f6001836128bf565b85549091506000906120a3906001906128bf565b90508082146121085760008660000182815481106120c3576120c3612769565b90600052602060002001549050808760000184815481106120e6576120e6612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061211957612119612aa1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c6d565b6000915050610c6d565b5092915050565b60008181526001830160205260408120546121ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c6d565b506000610c6d565b6001600160a01b03811681146121c957600080fd5b50565b80356121d7816121b4565b919050565b60008083601f8401126121ee57600080fd5b50813567ffffffffffffffff81111561220657600080fd5b6020830191508360208260081b850101111561222157600080fd5b9250929050565b60008060008060006080868803121561224057600080fd5b853561224b816121b4565b9450602086013593506040860135612262816121b4565b9250606086013567ffffffffffffffff81111561227e57600080fd5b61228a888289016121dc565b969995985093965092949392505050565b6000806000806000606086880312156122b357600080fd5b853567ffffffffffffffff808211156122cb57600080fd5b6122d789838a016121dc565b909750955060208801359150808211156122f057600080fd5b818801915088601f83011261230457600080fd5b81358181111561231357600080fd5b89602082850101111561232557600080fd5b602083019550809450505050604086013561233f816121b4565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b80356001600160601b03811681146121d757600080fd5b80356001600160801b03811681146121d757600080fd5b803564ffffffffff811681146121d757600080fd5b803562ffffff811681146121d757600080fd5b60006101008083850312156123cd57600080fd5b6040519081019067ffffffffffffffff821181831017156123fe57634e487b7160e01b600052604160045260246000fd5b8160405280925061240e84612363565b815261241c602085016121cc565b602082015261242d604085016121cc565b604082015261243e6060850161237a565b606082015261244f6080850161237a565b608082015261246060a08501612391565b60a082015261247160c085016123a6565b60c082015261248260e085016123a6565b60e0820152505092915050565b600061010082840312156124a257600080fd5b6118e983836123b9565b803561ffff811681146121d757600080fd5b600080600080600080600080610100898b0312156124db57600080fd5b88356124e6816121b4565b97506124f460208a0161237a565b965061250260408a016124ac565b955061251060608a016123a6565b94506080890135935060a089013560ff8116811461252d57600080fd5b979a969950949793969295929450505060c08201359160e0013590565b6000806000806080858703121561256057600080fd5b843561256b816121b4565b93506125796020860161237a565b9250612587604086016124ac565b9150612595606086016123a6565b905092959194509250565b6000602082840312156125b257600080fd5b81356118e9816121b4565b600080602083850312156125d057600080fd5b823567ffffffffffffffff8111156125e757600080fd5b61131a858286016121dc565b6020808252825182820181905260009190848201906040850190845b8181101561262b5783518352928401929184019160010161260f565b50909695505050505050565b6000806000610140848603121561264d57600080fd5b61265785856123b9565b925061266661010085016124ac565b915061267561012085016123a6565b90509250925092565b600061010082840312156119d157600080fd5b6000806000606084860312156126a657600080fd5b83356126b1816121b4565b92506126bf6020850161237a565b9150612675604085016124ac565b60008060008060008060c087890312156126e657600080fd5b86356126f1816121b4565b95506126ff602088016123a6565b945061270d604088016123a6565b935061271b606088016124ac565b9250612729608088016124ac565b915061273760a08801612363565b90509295509295509295565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b61010081016001600160601b0361279584612363565b16825260208301356127a6816121b4565b6001600160a01b0390811660208401526040840135906127c5826121b4565b1660408301526127d76060840161237a565b6001600160801b031660608301526127f16080840161237a565b6001600160801b0316608083015261280b60a08401612391565b64ffffffffff1660a083015261282360c084016123a6565b62ffffff1660c083015261283960e084016123a6565b62ffffff811660e084015261215e565b60006020828403121561285b57600080fd5b6118e98261237a565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6d57610c6d612864565b60006001820161289f5761289f612864565b5060010190565b6000602082840312156128b857600080fd5b5051919050565b81810381811115610c6d57610c6d612864565b6000602082840312156128e457600080fd5b6118e9826123a6565b6000602082840312156128ff57600080fd5b6118e982612391565b64ffffffffff81811683821601908082111561215e5761215e612864565b6001600160a01b038881168252878116602083015286166040820152606081018590526080810184905260c060a0820181905281018290526000828460e0840137600060e0848401015260e0601f19601f850116830101905098975050505050505050565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b6000602082840312156129ca57600080fd5b815180151581146118e957600080fd5b61ffff82811682821603908082111561215e5761215e612864565b6000610100820190506001600160601b038351168252602083015160018060a01b03808216602085015280604086015116604085015250506001600160801b0360608401511660608301526080830151612a5a60808401826001600160801b03169052565b5060a0830151612a7360a084018264ffffffffff169052565b5060c0830151612a8a60c084018262ffffff169052565b5060e083015161215e60e084018262ffffff169052565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220acabc043303dad95ad94c0bfd05d994da6fceedfed8842893580dc2fbe6b672364736f6c634300081500330000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be

    Deployed Bytecode

    0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063a5672fd7116100c3578063b7d122b51161007c578063b7d122b5146103b8578063bf7e214f146103df578063e69a31c2146103f2578063eed4b3f81461041d578063f2fde38b14610430578063f3b977841461044357600080fd5b8063a5672fd714610279578063aa5a0ffd146102a1578063ac33a2731461034e578063affed0e014610356578063b187bd2614610381578063b22ed42a146103a557600080fd5b80636bb3b476116101155780636bb3b4761461020557806374732728146102185780637a9e5e4b1461022b5780638456cb591461023e5780638da5cb5b146102465780639fff7e2a1461025957600080fd5b80630bf6cab71461015d5780633f4ba83a14610172578063412638dc1461017a5780634a2dc5e41461018d5780634fb3ccc5146101b3578063581b4920146101f2575b600080fd5b61017061016b366004612228565b61046a565b005b610170610746565b61017061018836600461229b565b6107b0565b6101a061019b36600461248f565b610c30565b6040519081526020015b60405180910390f35b6101da7f000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be81565b6040516001600160a01b0390911681526020016101aa565b6101a06102003660046124be565b610c73565b6101a061021336600461254a565b610ef9565b6101706102263660046125a0565b61101a565b6101706102393660046125a0565b611095565b61017061117f565b6000546101da906001600160a01b031681565b61026c6102673660046125bd565b6111ef565b6040516101aa91906125f3565b61028c610287366004612637565b6112da565b604080519283526020830191909152016101aa565b6103076102af3660046125a0565b60056020526000908152604090205460ff81169062ffffff610100820481169164010000000081049091169061ffff600160381b8204811691600160481b8104909116906001600160601b03600160581b9091041686565b60408051961515875262ffffff9586166020880152939094169285019290925261ffff90811660608501521660808301526001600160601b031660a082015260c0016101aa565b61026c611326565b600654610369906001600160601b031681565b6040516001600160601b0390911681526020016101aa565b60065461039590600160601b900460ff1681565b60405190151581526020016101aa565b6101a06103b336600461267e565b611337565b6101a07f00000000000000000000000000000000000000000000000000000000000f424081565b6001546101da906001600160a01b031681565b610405610400366004612691565b611367565b6040516001600160801b0390911681526020016101aa565b61017061042b3660046126cd565b611480565b61017061043e3660046125a0565b6117b5565b6101da7f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae81565b610480336000356001600160e01b031916611832565b6104a55760405162461bcd60e51b815260040161049c90612743565b60405180910390fd5b7f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae6001600160a01b0316856001600160a01b0316036106b75760006104ea60036118dc565b805190915082811461050f576040516312ed8d4160e21b815260040160405180910390fd5b6000805b828110156105e25783818151811061052d5761052d612769565b602002602001015186868381811061054757610547612769565b9050610100020160405160200161055e919061277f565b6040516020818303038152906040528051906020012014610592576040516312ed8d4160e21b815260040160405180910390fd5b8585828181106105a4576105a4612769565b9050610100020160600160208101906105bd9190612849565b6105d0906001600160801b03168361287a565b91506105db8161288d565b9050610513565b506040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae16906370a0823190602401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067091906128a6565b61067a91906128bf565b9050600019880361068d578097506106ae565b808811156106ae5760405163fbeb452f60e01b815260040160405180910390fd5b5050505061072b565b600019840361072b576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610704573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072891906128a6565b93505b61073f6001600160a01b03861684866118f0565b5050505050565b61075c336000356001600160e01b031916611832565b6107785760405162461bcd60e51b815260040161049c90612743565b6006805460ff60601b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6107c6336000356001600160e01b031916611832565b6107e25760405162461bcd60e51b815260040161049c90612743565b600654600160601b900460ff161561080d5760405163158b17e360e11b815260040160405180910390fd5b60008585600081811061082257610822612769565b90506101000201604001602081019061083b91906125a0565b905060008086815b81811015610ace5789898281811061085d5761085d612769565b90506101000201604001602081019061087691906125a0565b6001600160a01b0316856001600160a01b0316146108a7576040516331f59b5960e21b815260040160405180910390fd5b60008a8a838181106108bb576108bb612769565b9050610100020160c00160208101906108d491906128d2565b62ffffff168b8b848181106108eb576108eb612769565b9050610100020160a001602081019061090491906128ed565b61090e9190612908565b64ffffffffff16905080421015610938576040516332924a4960e01b815260040160405180910390fd5b60008b8b8481811061094c5761094c612769565b9050610100020160e001602081019061096591906128d2565b6109749062ffffff168361287a565b905080421115610997576040516378b2b00760e01b815260040160405180910390fd5b8b8b848181106109a9576109a9612769565b9050610100020160800160208101906109c29190612849565b6109d5906001600160801b03168761287a565b95508b8b848181106109e9576109e9612769565b905061010002016060016020810190610a029190612849565b610a15906001600160801b03168661287a565b94506000610a4a8d8d86818110610a2e57610a2e612769565b90506101000201803603810190610a45919061248f565b611977565b90508c8c85818110610a5e57610a5e612769565b905061010002016020016020810190610a7791906125a0565b6001600160a01b0316817fd94fc49a6578873ff851671d19cacb1809887f7a9128867ee4306dc3ffc93c2642604051610ab291815260200190565b60405180910390a350505080610ac79061288d565b9050610843565b50610b036001600160a01b037f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae1686846118f0565b8515610b94576040516333d5020b60e11b81526001600160a01b038616906367aa041690610b619033907f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae90899088908a908f908f90600401612926565b600060405180830381600087803b158015610b7b57600080fd5b505af1158015610b8f573d6000803e3d6000fd5b505050505b60005b81811015610c2457610c14868b8b84818110610bb557610bb5612769565b905061010002016020016020810190610bce91906125a0565b8c8c85818110610be057610be0612769565b905061010002016080016020810190610bf99190612849565b6001600160a01b0389169291906001600160801b03166119d7565b610c1d8161288d565b9050610b97565b50505050505050505050565b6000610c48336000356001600160e01b031916611832565b610c645760405162461bcd60e51b815260040161049c90612743565b610c6d82611a6c565b92915050565b6000610c8b336000356001600160e01b031916611832565b610ca75760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038916600090815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610d39818a8a8a611aa7565b60405163d505accf60e01b81523360048201523060248201526001600160801b038a1660448201526064810187905260ff8616608482015260a4810185905260c481018490527f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae6001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610dcd57600080fd5b505af1925050508015610dde575060015b610e9a57604051636eb1769f60e11b81523360048201523060248201526001600160801b038a16907f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae6001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b91906128a6565b1015610e9a57604051634bfd8d1d60e01b815260040160405180910390fd5b610ed86001600160a01b037f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae1633306001600160801b038d166119d7565b610eea338b8b8b85602001518c611b9a565b509a9950505050505050505050565b6000610f11336000356001600160e01b031916611832565b610f2d5760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038516600090815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610fbf81868686611aa7565b610ffd6001600160a01b037f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae1633306001600160801b0389166119d7565b61100f33878787856020015188611b9a565b509695505050505050565b611030336000356001600160e01b031916611832565b61104c5760405162461bcd60e51b815260040161049c90612743565b6001600160a01b038116600081815260056020526040808220805460ff19169055517ff1abf38a870f414456542524a2b679c0ece751691e36f4feee2ca7826c99e4629190a250565b6000546001600160a01b031633148061112a575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906110e990339030906001600160e01b0319600035169060040161298b565b602060405180830381865afa158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a91906129b8565b61113357600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b611195336000356001600160e01b031916611832565b6111b15760405162461bcd60e51b815260040161049c90612743565b6006805460ff60601b1916600160601b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6060611207336000356001600160e01b031916611832565b6112235760405162461bcd60e51b815260040161049c90612743565b818067ffffffffffffffff81111561123d5761123d61234d565b604051908082528060200260200182016040528015611266578160200160208202803683370190505b50915060005b818110156112d2576112a585858381811061128957611289612769565b905061010002018036038101906112a0919061248f565b611d7f565b8382815181106112b7576112b7612769565b60209081029190910101526112cb8161288d565b905061126c565b505092915050565b6000806112f3336000356001600160e01b031916611832565b61130f5760405162461bcd60e51b815260040161049c90612743565b61131a858585611e28565b90969095509350505050565b606061133260036118dc565b905090565b60008160405160200161134a919061277f565b604051602081830303815290604052805190602001209050919050565b604051634104b9ed60e11b81526001600160a01b03848116600483015260009182917f000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be169063820973da90602401602060405180830381865afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f691906128a6565b9050611415611407846127106129da565b829061ffff16612710611e7c565b9050600061144d6001600160801b038616837f00000000000000000000000000000000000000000000000000000000000f4240611e7c565b90506001600160801b0381111561147757604051635637123160e01b815260040160405180910390fd5b95945050505050565b611496336000356001600160e01b031916611832565b6114b25760405162461bcd60e51b815260040161049c90612743565b610bb861ffff831611156114d95760405163daf4c27560e01b815260040160405180910390fd5b62278d0062ffffff86161115611502576040516341e2834f60e11b815260040160405180910390fd5b62278d0062ffffff8516111561152b57604051632496e55f60e21b815260040160405180910390fd5b8161ffff168361ffff1611156115545760405163a800f19560e01b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b0387811660048301527f000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be169063820973da90602401602060405180830381865afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de91906128a6565b506040518060c001604052806001151581526020018662ffffff1681526020018562ffffff1681526020018461ffff1681526020018361ffff168152602001826001600160601b031681525060056000886001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548162ffffff021916908362ffffff16021790555060408201518160000160046101000a81548162ffffff021916908362ffffff16021790555060608201518160000160076101000a81548161ffff021916908361ffff16021790555060808201518160000160096101000a81548161ffff021916908361ffff16021790555060a082015181600001600b6101000a8154816001600160601b0302191690836001600160601b03160217905550905050856001600160a01b03167f6ece44744f1fe676735f115da497fe130c7acf43fcd142fe92e20df15788797e86868686866040516117a595949392919062ffffff958616815293909416602084015261ffff91821660408401521660608201526001600160601b0391909116608082015260a00190565b60405180910390a2505050505050565b6117cb336000356001600160e01b031916611832565b6117e75760405162461bcd60e51b815260040161049c90612743565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546000906001600160a01b031680158015906118bc575060405163b700961360e01b81526001600160a01b0382169063b70096139061187b9087903090889060040161298b565b602060405180830381865afa158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc91906129b8565b806118d457506000546001600160a01b038581169116145b949350505050565b606060006118e983611e9a565b9392505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806119715760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161049c565b50505050565b60008160405160200161198a91906129f5565b60408051601f198184030181529190528051602090910120905060006119b1600383611ef6565b9050806119d157604051630ba52cdd60e11b815260040160405180910390fd5b50919050565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061073f5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b604482015260640161049c565b6020810151600090336001600160a01b0382168114611a9e576040516322583d4960e21b815260040160405180910390fd5b6118d484611d7f565b600654600160601b900460ff1615611ad25760405163158b17e360e11b815260040160405180910390fd5b8351611af1576040516312baa4e960e11b815260040160405180910390fd5b836060015161ffff168261ffff161080611b165750836080015161ffff168261ffff16115b15611b345760405163a800f19560e01b815260040160405180910390fd5b8360a001516001600160601b0316836001600160801b03161015611b6b5760405163030510d560e11b815260040160405180910390fd5b836040015162ffffff168162ffffff161015611971576040516394fb53cb60e01b815260040160405180910390fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052600680546bffffffffffffffffffffffff19811660016001600160601b03928316908101909216179091556000611c12898989611367565b90506000429050604051806101000160405280846001600160601b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160801b03168152602001836001600160801b031681526020018264ffffffffff1681526020018862ffffff1681526020018762ffffff16815250935083604051602001611ca491906129f5565b60408051601f19818403018152919052805160209091012094506000611ccb600387611f02565b905080611ceb57604051635028981b60e11b815260040160405180910390fd5b604080516001600160601b03861681526001600160801b038c8116602083015285168183015264ffffffffff8416606082015262ffffff8a81166080830152891660a082015290516001600160a01b038d811692908f169189917f2eb08ebdb4d68b4a37e3b424927f3363e1d799ca7e56e7b2c59cc6c1778d33f5919081900360c00190a450505050965096945050505050565b6000611d8a82611977565b9050611ddb826020015183606001516001600160801b03167f000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae6001600160a01b03166118f09092919063ffffffff16565b81602001516001600160a01b0316817f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e3642604051611e1b91815260200190565b60405180910390a3919050565b600080846020015133806001600160a01b0316826001600160a01b031614611e63576040516322583d4960e21b815260040160405180910390fd5b611e6e878787611f0e565b909890975095505050505050565b6000826000190484118302158202611e9357600080fd5b5091020490565b606081600001805480602002602001604051908101604052809291908181526020018280548015611eea57602002820191906000526020600020905b815481526020019060010190808311611ed6575b50505050509050919050565b60006118e9838361206b565b60006118e98383612165565b600080846020015133806001600160a01b0316826001600160a01b031614611f49576040516322583d4960e21b815260040160405180910390fd5b6040878101516001600160a01b031660009081526005602090815290829020825160c081018452905460ff811615158252610100810462ffffff90811693830193909352640100000000810490921692810192909252600160381b810461ffff908116606080850191909152600160481b83049091166080840152600160581b9091046001600160601b031660a0830152880151611fea9082908989611aa7565b611ff388611977565b945087602001516001600160a01b0316857f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e364260405161203591815260200190565b60405180910390a361205b886020015189604001518a606001518a85602001518b611b9a565b5080945050505050935093915050565b6000818152600183016020526040812054801561215457600061208f6001836128bf565b85549091506000906120a3906001906128bf565b90508082146121085760008660000182815481106120c3576120c3612769565b90600052602060002001549050808760000184815481106120e6576120e6612769565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061211957612119612aa1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c6d565b6000915050610c6d565b5092915050565b60008181526001830160205260408120546121ac57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c6d565b506000610c6d565b6001600160a01b03811681146121c957600080fd5b50565b80356121d7816121b4565b919050565b60008083601f8401126121ee57600080fd5b50813567ffffffffffffffff81111561220657600080fd5b6020830191508360208260081b850101111561222157600080fd5b9250929050565b60008060008060006080868803121561224057600080fd5b853561224b816121b4565b9450602086013593506040860135612262816121b4565b9250606086013567ffffffffffffffff81111561227e57600080fd5b61228a888289016121dc565b969995985093965092949392505050565b6000806000806000606086880312156122b357600080fd5b853567ffffffffffffffff808211156122cb57600080fd5b6122d789838a016121dc565b909750955060208801359150808211156122f057600080fd5b818801915088601f83011261230457600080fd5b81358181111561231357600080fd5b89602082850101111561232557600080fd5b602083019550809450505050604086013561233f816121b4565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b80356001600160601b03811681146121d757600080fd5b80356001600160801b03811681146121d757600080fd5b803564ffffffffff811681146121d757600080fd5b803562ffffff811681146121d757600080fd5b60006101008083850312156123cd57600080fd5b6040519081019067ffffffffffffffff821181831017156123fe57634e487b7160e01b600052604160045260246000fd5b8160405280925061240e84612363565b815261241c602085016121cc565b602082015261242d604085016121cc565b604082015261243e6060850161237a565b606082015261244f6080850161237a565b608082015261246060a08501612391565b60a082015261247160c085016123a6565b60c082015261248260e085016123a6565b60e0820152505092915050565b600061010082840312156124a257600080fd5b6118e983836123b9565b803561ffff811681146121d757600080fd5b600080600080600080600080610100898b0312156124db57600080fd5b88356124e6816121b4565b97506124f460208a0161237a565b965061250260408a016124ac565b955061251060608a016123a6565b94506080890135935060a089013560ff8116811461252d57600080fd5b979a969950949793969295929450505060c08201359160e0013590565b6000806000806080858703121561256057600080fd5b843561256b816121b4565b93506125796020860161237a565b9250612587604086016124ac565b9150612595606086016123a6565b905092959194509250565b6000602082840312156125b257600080fd5b81356118e9816121b4565b600080602083850312156125d057600080fd5b823567ffffffffffffffff8111156125e757600080fd5b61131a858286016121dc565b6020808252825182820181905260009190848201906040850190845b8181101561262b5783518352928401929184019160010161260f565b50909695505050505050565b6000806000610140848603121561264d57600080fd5b61265785856123b9565b925061266661010085016124ac565b915061267561012085016123a6565b90509250925092565b600061010082840312156119d157600080fd5b6000806000606084860312156126a657600080fd5b83356126b1816121b4565b92506126bf6020850161237a565b9150612675604085016124ac565b60008060008060008060c087890312156126e657600080fd5b86356126f1816121b4565b95506126ff602088016123a6565b945061270d604088016123a6565b935061271b606088016124ac565b9250612729608088016124ac565b915061273760a08801612363565b90509295509295509295565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b61010081016001600160601b0361279584612363565b16825260208301356127a6816121b4565b6001600160a01b0390811660208401526040840135906127c5826121b4565b1660408301526127d76060840161237a565b6001600160801b031660608301526127f16080840161237a565b6001600160801b0316608083015261280b60a08401612391565b64ffffffffff1660a083015261282360c084016123a6565b62ffffff1660c083015261283960e084016123a6565b62ffffff811660e084015261215e565b60006020828403121561285b57600080fd5b6118e98261237a565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6d57610c6d612864565b60006001820161289f5761289f612864565b5060010190565b6000602082840312156128b857600080fd5b5051919050565b81810381811115610c6d57610c6d612864565b6000602082840312156128e457600080fd5b6118e9826123a6565b6000602082840312156128ff57600080fd5b6118e982612391565b64ffffffffff81811683821601908082111561215e5761215e612864565b6001600160a01b038881168252878116602083015286166040820152606081018590526080810184905260c060a0820181905281018290526000828460e0840137600060e0848401015260e0601f19601f850116830101905098975050505050505050565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b6000602082840312156129ca57600080fd5b815180151581146118e957600080fd5b61ffff82811682821603908082111561215e5761215e612864565b6000610100820190506001600160601b038351168252602083015160018060a01b03808216602085015280604086015116604085015250506001600160801b0360608401511660608301526080830151612a5a60808401826001600160801b03169052565b5060a0830151612a7360a084018264ffffffffff169052565b5060c0830151612a8a60c084018262ffffff169052565b5060e083015161215e60e084018262ffffff169052565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220acabc043303dad95ad94c0bfd05d994da6fceedfed8842893580dc2fbe6b672364736f6c63430008150033

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

    0000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be

    -----Decoded View---------------
    Arg [0] : _owner (address): 0x5F2F11ad8656439d5C14d9B351f8b09cDaC2A02d
    Arg [1] : _auth (address): 0x0000000000000000000000000000000000000000
    Arg [2] : _boringVault (address): 0xd3DCe716f3eF535C5Ff8d041c1A41C3bd89b97aE
    Arg [3] : _accountant (address): 0xA76E0F54918E39A63904b51F688513043242a0BE

    -----Encoded View---------------
    4 Constructor Arguments found :
    Arg [0] : 0000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d
    Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
    Arg [2] : 000000000000000000000000d3dce716f3ef535c5ff8d041c1a41c3bd89b97ae
    Arg [3] : 000000000000000000000000a76e0f54918e39a63904b51f688513043242a0be


    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.