ETH Price: $3,805.00 (+1.76%)

Contract

0x26DA582889f59EaaE9dA1f063bE0140CD93E6a4f
 
Transaction Hash
Method
Block
From
To
Value
Send Deposits1205626482024-05-26 11:47:538 mins ago1716724073IN
0x26DA5828...CD93E6a4f
0.00030102 ETH0.000073430.06273096
Send Deposits1205618732024-05-26 11:22:0334 mins ago1716722523IN
0x26DA5828...CD93E6a4f
0.00008889 ETH0.000028210.06180084
Send Deposits1205618732024-05-26 11:22:0334 mins ago1716722523IN
0x26DA5828...CD93E6a4f
0.00011134 ETH0.00003560.06180084
Send Deposits1205609122024-05-26 10:50:011 hr ago1716720601IN
0x26DA5828...CD93E6a4f
0.00887151 ETH0.000043970.0632711
Send Deposits1205608962024-05-26 10:49:291 hr ago1716720569IN
0x26DA5828...CD93E6a4f
0.00010413 ETH0.00001320.06079242
Send Deposits1205608862024-05-26 10:49:091 hr ago1716720549IN
0x26DA5828...CD93E6a4f
0.00010652 ETH0.000034980.06071852
Send Deposits1205589652024-05-26 9:45:072 hrs ago1716716707IN
0x26DA5828...CD93E6a4f
0.00003063 ETH0.000013210.06085649
Send Deposits1205571342024-05-26 8:44:053 hrs ago1716713045IN
0x26DA5828...CD93E6a4f
0.0003403 ETH0.000013280.06116459
Send Deposits1205570772024-05-26 8:42:113 hrs ago1716712931IN
0x26DA5828...CD93E6a4f
0.00040054 ETH0.000013280.06117183
Send Deposits1205550542024-05-26 7:34:454 hrs ago1716708885IN
0x26DA5828...CD93E6a4f
0.00102404 ETH0.00001390.06197974
Send Deposits1205544082024-05-26 7:13:134 hrs ago1716707593IN
0x26DA5828...CD93E6a4f
0.00344156 ETH0.000013340.06145725
Send Deposits1205543092024-05-26 7:09:554 hrs ago1716707395IN
0x26DA5828...CD93E6a4f
0.0035237 ETH0.000013110.06041215
Send Deposits1205537862024-05-26 6:52:295 hrs ago1716706349IN
0x26DA5828...CD93E6a4f
0.00340808 ETH0.000013360.06155776
Send Deposits1205535722024-05-26 6:45:215 hrs ago1716705921IN
0x26DA5828...CD93E6a4f
0.00346544 ETH0.000013080.06027985
Send Deposits1205504862024-05-26 5:02:296 hrs ago1716699749IN
0x26DA5828...CD93E6a4f
0.00028751 ETH0.000013390.0616546
Send Deposits1205501072024-05-26 4:49:517 hrs ago1716698991IN
0x26DA5828...CD93E6a4f
0.00173552 ETH0.000013110.06041933
Send Deposits1205496742024-05-26 4:35:257 hrs ago1716698125IN
0x26DA5828...CD93E6a4f
0.0004604 ETH0.000013130.0604843
Send Deposits1205384122024-05-25 22:20:0113 hrs ago1716675601IN
0x26DA5828...CD93E6a4f
0.00061476 ETH0.000013120.0610492
Send Deposits1205382442024-05-25 22:14:2513 hrs ago1716675265IN
0x26DA5828...CD93E6a4f
0.00049476 ETH0.000013280.061803
Send Deposits1205380242024-05-25 22:07:0513 hrs ago1716674825IN
0x26DA5828...CD93E6a4f
0.00004599 ETH0.000013380.06161305
Send Deposits1205379392024-05-25 22:04:1513 hrs ago1716674655IN
0x26DA5828...CD93E6a4f
0.00025476 ETH0.000013090.06086425
Send Deposits1205374112024-05-25 21:46:3914 hrs ago1716673599IN
0x26DA5828...CD93E6a4f
0.00005589 ETH0.000013350.0614907
Send Deposits1205373632024-05-25 21:45:0314 hrs ago1716673503IN
0x26DA5828...CD93E6a4f
0.00013593 ETH0.000013280.06174762
Send Deposits1205371952024-05-25 21:39:2714 hrs ago1716673167IN
0x26DA5828...CD93E6a4f
0.00301593 ETH0.000013190.06137693
Send Deposits1205368562024-05-25 21:28:0914 hrs ago1716672489IN
0x26DA5828...CD93E6a4f
0.00004562 ETH0.000013420.06178194
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14967841 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14982725 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14982725 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14983485 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14983485 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14984333 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14984333 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14987269 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14987269 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14988803 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14988803 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14990969 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14990969 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14994796 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14994796 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14996174 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.14996174 ETH
1205626482024-05-26 11:47:538 mins ago1716724073
0x26DA5828...CD93E6a4f
0.1499755 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14967447 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14971585 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14971585 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14974174 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14974174 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14976319 ETH
1205618732024-05-26 11:22:0334 mins ago1716722523
0x26DA5828...CD93E6a4f
0.14967429 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GasLZV2

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200000 runs

Other Settings:
paris EvmVersion, MIT license
File 1 of 6 : GasLZV2.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./OptimizedOApp.sol";

contract GasLZV2 is OptimizedOApp {

    constructor(address _owner, address _endpoint) OptimizedOApp(_owner, _endpoint) {}

    event SentMessages(uint32[] eids, bytes[] messages, uint value, uint fee, address from);
    event SentDeposits(uint256[] params, address to, uint value, uint fee, address from);

    function sendMessages(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages
    ) external payable {
        uint256 fee;
        for (uint i; i < _messages.length; i++) {
            fee += _sendMessage(_dstEids[i], _messages[i]);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentMessages(_dstEids, _messages, msg.value, fee, msg.sender);
    }

    function sendDeposits(
        uint256[] calldata _depositParams,
        address _to
    ) external payable {
        uint256 fee;
        for (uint i; i < _depositParams.length; i++) {
            fee += _sendDeposit(uint32(_depositParams[i] >> 224), uint128(_depositParams[i]), _to);
        }
        require(msg.value >= fee, "Fee Not Met");
        emit SentDeposits(_depositParams, _to, msg.value, fee, msg.sender);
    }

    function _sendMessage(uint32 _dstEid, bytes calldata _message) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, _message, createReceiveOption(_dstEid), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function _sendDeposit(uint32 _dstEid, uint128 _amount, address _to) internal returns (uint256 fee) {
        MessagingReceipt memory receipt = _lzSend(_dstEid, "", createNativeDropOption(_dstEid, _amount, _to), address(this).balance, address(this));
        return receipt.fee.nativeFee;
    }

    function createReceiveOption(uint32 _dstEid) public view returns (bytes memory) {
        return abi.encodePacked(
            abi.encodePacked(uint16(3)),
            uint8(1),
            uint16(16+1),
            uint8(1),
            abi.encodePacked(getGasLimit(_dstEid))
        );
    }

    function createNativeDropOption(uint32 _dstEid, uint128 _nativeAmount, address _to) public view returns (bytes memory) {
        return abi.encodePacked(
            createReceiveOption(_dstEid),
            uint8(1),
            uint16(32+16+1),
            uint8(2),
            abi.encodePacked(_nativeAmount, bytes32(uint256(uint160(_to))))
        );
    }

    function estimateFees(
        uint32[] calldata _dstEids,
        bytes[] calldata _messages,
        bytes[] calldata _options
    ) external view returns (uint256[] memory nativeFees) {
        nativeFees = new uint256[](_dstEids.length);
        for (uint i; i < _dstEids.length; i++) {
            nativeFees[i] = quote(_dstEids[i], _messages[i], _options[i]);
        }
    }

    function quote(uint32 _dstEid, bytes calldata _message, bytes memory _options) public view returns (uint256 nativeFee) {
        MessagingFee memory fee = endpoint.quote(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), address(this));
        return fee.nativeFee;
    }

    function withdraw(address token, uint256 amount) external onlyOwner {
        bool s;
        if (token == address(0)) {
            (s,) = msg.sender.call{value: address(this).balance}("");
        } else {
            (s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount));
        }
        require(s, "Withdraw Failed");
    }

    receive() external payable {}
}

File 2 of 6 : OptimizedOApp.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../Ownable.sol";
import "./ILayerZeroEndpointV2.sol";
import "./IMessageLibManager.sol";
import "./IUlnBase.sol";

abstract contract OptimizedOApp is Ownable {
    ILayerZeroEndpointV2 public immutable endpoint;

    mapping(uint32 => bytes32) public peers;
    mapping(uint32 => uint128) public gasLimitLookup;

    uint128 public defaultGasLimit = 20_000;

    constructor(address _owner, address _endpoint) {
        endpoint = ILayerZeroEndpointV2(_endpoint);
        _initializeOwner(_owner);
        endpoint.setDelegate(_owner);
    }

    // Receive

    function nextNonce(uint32, bytes32) public pure virtual returns (uint64 nonce) {
        return 0;
    }

    function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {
        return getPeer(origin.srcEid) == origin.sender;
    }

    function lzReceive(
        Origin calldata,
        bytes32,
        bytes calldata,
        address,
        bytes calldata
    ) external pure {
        return;
    }

    // Send

    function _lzSend(
        uint32 _dstEid,
        bytes memory _message,
        bytes memory _options,
        uint _nativeFee,
        address _refundAddress
    ) internal virtual returns (MessagingReceipt memory receipt) {
        return endpoint.send{value: _nativeFee}(MessagingParams(_dstEid, getPeer(_dstEid), _message, _options, false), _refundAddress);
    }

    function getPeer(uint32 _dstEid) internal view returns (bytes32) {
        bytes32 trustedRemote = peers[_dstEid];
        if (trustedRemote == 0) {
            return bytes32(uint256(uint160(address(this))));
        } else {
            return trustedRemote;
        }
    }

    function getGasLimit(uint32 _dstEid) internal view returns (uint128) {
        uint128 gasLimit = gasLimitLookup[_dstEid];
        if (gasLimit == 0) {
            return defaultGasLimit;
        } else {
            return gasLimit;
        }
    }

    function setPeers(
        uint32[] calldata _remoteEids, 
        bytes32[] calldata _remoteAddresses
    ) external onlyOwner {
        require(_remoteEids.length == _remoteAddresses.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            peers[_remoteEids[i]] = _remoteAddresses[i];
        }
    }

    function setGasLimit(
        uint32[] calldata _remoteEids, 
        uint128[] calldata _gasLimits
    ) external onlyOwner {
        require(_remoteEids.length == _gasLimits.length, "Length Mismatch");

        for (uint i; i < _remoteEids.length; i++) {
            gasLimitLookup[_remoteEids[i]] = _gasLimits[i];
        }
    }

    function setDefaultGasLimit(uint128 _defaultGasLimit) external onlyOwner {
        defaultGasLimit = _defaultGasLimit;
    }

    function setDelegate(address _delegate) external onlyOwner {
        endpoint.setDelegate(_delegate);
    }

    function setUlnConfigs(address _lib, uint64 confirmations, uint32[] calldata eids, address dvn) external onlyOwner {
        SetConfigParam[] memory configs = new SetConfigParam[](eids.length);

        for(uint i; i < eids.length; i++) {
            address[] memory opt = new address[](0);
            address[] memory req = new address[](1);
            req[0] = dvn;

            bytes memory config = abi.encode(UlnConfig(confirmations, uint8(1), 0, 0, req, opt));
            configs[i] = SetConfigParam({eid: eids[i], configType: 2, config: config});
        }

        IMessageLibManager(address(endpoint)).setConfig(address(this), _lib, configs);
    }
}

File 3 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

File 4 of 6 : ILayerZeroEndpointV2.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct MessagingParams {
    uint32 dstEid;
    bytes32 receiver;
    bytes message;
    bytes options;
    bool payInLzToken;
}

struct MessagingReceipt {
    bytes32 guid;
    uint64 nonce;
    MessagingFee fee;
}

struct MessagingFee {
    uint256 nativeFee;
    uint256 lzTokenFee;
}

struct Origin {
    uint32 srcEid;
    bytes32 sender;
    uint64 nonce;
}

interface ILayerZeroEndpointV2 {
    event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);

    event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);

    event PacketDelivered(Origin origin, address receiver);

    event LzReceiveAlert(
        address indexed receiver,
        address indexed executor,
        Origin origin,
        bytes32 guid,
        uint256 gas,
        uint256 value,
        bytes message,
        bytes extraData,
        bytes reason
    );

    event LzTokenSet(address token);

    event DelegateSet(address sender, address delegate);

    function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);

    function send(
        MessagingParams calldata _params,
        address _refundAddress
    ) external payable returns (MessagingReceipt memory);

    function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;

    function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);

    function initializable(Origin calldata _origin, address _receiver) external view returns (bool);

    function lzReceive(
        Origin calldata _origin,
        address _receiver,
        bytes32 _guid,
        bytes calldata _message,
        bytes calldata _extraData
    ) external payable;

    // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order
    function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;

    function setLzToken(address _lzToken) external;

    function lzToken() external view returns (address);

    function nativeToken() external view returns (address);

    function setDelegate(address _delegate) external;
}

File 5 of 6 : IMessageLibManager.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct SetConfigParam {
    uint32 eid;
    uint32 configType;
    bytes config;
}

interface IMessageLibManager {
    struct Timeout {
        address lib;
        uint256 expiry;
    }

    event LibraryRegistered(address newLib);
    event DefaultSendLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibrarySet(uint32 eid, address newLib);
    event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);
    event SendLibrarySet(address sender, uint32 eid, address newLib);
    event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);
    event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);

    function registerLibrary(address _lib) external;

    function isRegisteredLibrary(address _lib) external view returns (bool);

    function getRegisteredLibraries() external view returns (address[] memory);

    function setDefaultSendLibrary(uint32 _eid, address _newLib) external;

    function defaultSendLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external;

    function defaultReceiveLibrary(uint32 _eid) external view returns (address);

    function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;

    function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);

    function isSupportedEid(uint32 _eid) external view returns (bool);

    function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);

    /// ------------------- OApp interfaces -------------------
    function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;

    function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);

    function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);

    function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;

    function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);

    function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external;

    function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);

    function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;

    function getConfig(
        address _oapp,
        address _lib,
        uint32 _eid,
        uint32 _configType
    ) external view returns (bytes memory config);
}

File 6 of 6 : IUlnBase.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

struct UlnConfig {
    uint64 confirmations;
    // we store the length of required DVNs and optional DVNs instead of using DVN.length directly to save gas
    uint8 requiredDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNCount; // 0 indicate DEFAULT, NIL_DVN_COUNT indicate NONE (to override the value of default)
    uint8 optionalDVNThreshold; // (0, optionalDVNCount]
    address[] requiredDVNs; // no duplicates. sorted an an ascending order. allowed overlap with optionalDVNs
    address[] optionalDVNs; // no duplicates. sorted an an ascending order. allowed overlap with requiredDVNs
}

interface IUlnBase {
    function getUlnConfig(address, uint32) external returns (UlnConfig memory);
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"params","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentDeposits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"indexed":false,"internalType":"bytes[]","name":"messages","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"SentMessages","type":"event"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"uint128","name":"_nativeAmount","type":"uint128"},{"internalType":"address","name":"_to","type":"address"}],"name":"createNativeDropOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"}],"name":"createReceiveOption","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultGasLimit","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"},{"internalType":"bytes[]","name":"_options","type":"bytes[]"}],"name":"estimateFees","outputs":[{"internalType":"uint256[]","name":"nativeFees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"gasLimitLookup","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dstEid","type":"uint32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes","name":"_options","type":"bytes"}],"name":"quote","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_depositParams","type":"uint256[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"sendDeposits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_dstEids","type":"uint32[]"},{"internalType":"bytes[]","name":"_messages","type":"bytes[]"}],"name":"sendMessages","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"setDefaultGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"uint128[]","name":"_gasLimits","type":"uint128[]"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_remoteEids","type":"uint32[]"},{"internalType":"bytes32[]","name":"_remoteAddresses","type":"bytes32[]"}],"name":"setPeers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lib","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"internalType":"address","name":"dvn","type":"address"}],"name":"setUlnConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600280546001600160801b031916614e201790553480156200002557600080fd5b50604051620026b5380380620026b5833981016040819052620000489162000126565b6001600160a01b03811660805281816200006282620000cd565b60805160405163ca5eb5e160e01b81526001600160a01b0384811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000aa57600080fd5b505af1158015620000bf573d6000803e3d6000fd5b50505050505050506200015e565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b80516001600160a01b03811681146200012157600080fd5b919050565b600080604083850312156200013a57600080fd5b620001458362000109565b9150620001556020840162000109565b90509250929050565b60805161251f62000196600039600081816102de0152818161097001528181610e7d015281816113240152611605015261251f6000f3fe6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c

Deployed Bytecode

0x6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063ec089c411161008a578063f3fef3a311610064578063f3fef3a3146104e4578063fccbe22014610504578063fee81cf414610524578063ff7bd03d1461055757600080fd5b8063ec089c411461049e578063f04e283e146104be578063f2fde38b146104d157600080fd5b8063bb0b6a53116100bb578063bb0b6a5314610430578063ca5eb5e11461046b578063d29e9f321461048b57600080fd5b80638da5cb5b146103a657806394ca88aa146103da57806395368d2e1461040757600080fd5b80633772df581161014e578063715018a611610128578063715018a6146103255780637154cc651461032d5780637d25a05e1461035a57806389a281b61461039357600080fd5b80633772df58146102a457806354d1f13d146102c45780635e280f11146102cc57600080fd5b806329b85fff1161017f57806329b85fff146101ff5780632b94e4991461021f57806333ebcb741461023f57600080fd5b8063128c9991146101b157806313137d65146101d357806325692962146101f757600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611777565b610587565b005b3480156101df57600080fd5b506101d16101ee366004611866565b50505050505050565b6101d16106c8565b34801561020b57600080fd5b506101d161021a366004611925565b610718565b34801561022b57600080fd5b506101d161023a36600461195d565b610763565b34801561024b57600080fd5b5061027e61025a3660046119e9565b6001602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b057600080fd5b506101d16102bf366004611777565b6109e3565b6101d1610acb565b3480156102d857600080fd5b506103007f0000000000000000000000001a44076050125825900e736c501f859c50fe728c81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029b565b6101d1610b07565b34801561033957600080fd5b5061034d610348366004611a04565b610b1b565b60405161029b9190611ab5565b34801561036657600080fd5b5061037a610375366004611ac8565b610bd4565b60405167ffffffffffffffff909116815260200161029b565b6101d16103a1366004611af2565b610bdd565b3480156103b257600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610300565b3480156103e657600080fd5b506103fa6103f5366004611b3d565b610cf8565b60405161029b9190611bd7565b34801561041357600080fd5b5060025461027e906fffffffffffffffffffffffffffffffff1681565b34801561043c57600080fd5b5061045d61044b3660046119e9565b60006020819052908152604090205481565b60405190815260200161029b565b34801561047757600080fd5b506101d1610486366004611c1b565b610e30565b6101d1610499366004611777565b610ed5565b3480156104aa57600080fd5b5061034d6104b93660046119e9565b611007565b6101d16104cc366004611c1b565b6110e3565b6101d16104df366004611c1b565b611123565b3480156104f057600080fd5b506101d16104ff366004611c36565b61114a565b34801561051057600080fd5b5061045d61051f366004611cd0565b61131f565b34801561053057600080fd5b5061045d61053f366004611c1b565b63389a75e1600c908152600091909152602090205490565b34801561056357600080fd5b50610577610572366004611dbe565b61144c565b604051901515815260200161029b565b61058f61146f565b8281146105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b838110156106c15782828281811061061a5761061a611dda565b905060200201602081019061062f9190611925565b6001600087878581811061064557610645611dda565b905060200201602081019061065a91906119e9565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055806106b981611e38565b915050610600565b5050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b61072061146f565b600280547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b61076b61146f565b60008267ffffffffffffffff81111561078657610786611c52565b6040519080825280602002602001820160405280156107d357816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816107a45790505b50905060005b838110156109325760408051600080825260016020808401828152606085018652939492939285019080368337019050509050848160008151811061082057610820611dda565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091018201526040805160c08101825267ffffffffffffffff8b1681526001818401526000818301819052606082018190526080820185905260a082018690529151919261088c9201611ec1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152606083019091529150808989878181106108d3576108d3611dda565b90506020020160208101906108e891906119e9565b63ffffffff16815260026020820152604001829052855186908690811061091157610911611dda565b6020026020010181905250505050808061092a90611e38565b9150506107d9565b506040517f6dbd9f9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c1690636dbd9f90906109a99030908a908690600401611f5c565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050505050505050565b6109eb61146f565b828114610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064016105f4565b60005b838110156106c157828282818110610a7157610a71611dda565b90506020020135600080878785818110610a8d57610a8d611dda565b9050602002016020810190610aa291906119e9565b63ffffffff16815260208101919091526040016000205580610ac381611e38565b915050610a57565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610b0f61146f565b610b1960006114a5565b565b6060610b2684611007565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b16602082015273ffffffffffffffffffffffffffffffffffffffff84166030820152600190603190600290605001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610bbc959493929160200161202b565b60405160208183030381529060405290509392505050565b60005b92915050565b6000805b83811015610c4657610c2860e0868684818110610c0057610c00611dda565b90506020020135901c868684818110610c1b57610c1b611dda565b905060200201358561150b565b610c3290836120c4565b915080610c3e81611e38565b915050610be1565b5080341015610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7fa22a487af6300dc77db439586e8ce7028fd7f1d734efd33b287bc1e2af4cd162848484348533604051610cea969594939291906120d7565b60405180910390a150505050565b60608567ffffffffffffffff811115610d1357610d13611c52565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b86811015610e2557610df6888883818110610d5f57610d5f611dda565b9050602002016020810190610d7491906119e9565b878784818110610d8657610d86611dda565b9050602002810190610d98919061215b565b878786818110610daa57610daa611dda565b9050602002810190610dbc919061215b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131f92505050565b828281518110610e0857610e08611dda565b602090810291909101015280610e1d81611e38565b915050610d42565b509695505050505050565b610e3861146f565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000001a44076050125825900e736c501f859c50fe728c169063ca5eb5e190602401600060405180830381600087803b158015610ec157600080fd5b505af11580156106c1573d6000803e3d6000fd5b6000805b82811015610f5257610f34868683818110610ef657610ef6611dda565b9050602002016020810190610f0b91906119e9565b858584818110610f1d57610f1d611dda565b9050602002810190610f2f919061215b565b611542565b610f3e90836120c4565b915080610f4a81611e38565b915050610ed9565b5080341015610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d657400000000000000000000000000000000000000000060448201526064016105f4565b7f14af90211b59e95afdafa93c2cb547e61a4e6b0e74cfad8c3d7b6c3d48e6c29d85858585348633604051610ff89796959493929190612209565b60405180910390a15050505050565b6040517e0300000000000000000000000000000000000000000000000000000000000060208201526060906022016040516020818303038152906040526001601160016110538661158b565b60405160200161108e919060809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016815260100190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526110cd959493929160200161202b565b6040516020818303038152906040529050919050565b6110eb61146f565b63389a75e1600c52806000526020600c20805442111561111357636f5e88186000526004601cfd5b60009055611120816114a5565b50565b61112b61146f565b8060601b61114157637448fbae6000526004601cfd5b611120816114a5565b61115261146f565b600073ffffffffffffffffffffffffffffffffffffffff83166111bf5760405133904790600081818185875af1925050503d80600081146111af576040519150601f19603f3d011682016040523d82523d6000602084013e6111b4565b606091505b5050809150506112b3565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790525161126b9190612356565b6000604051808303816000865af19150503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50909150505b8061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c6564000000000000000000000000000000000060448201526064016105f4565b505050565b6000807f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808963ffffffff16815260200161137e8a6115d6565b815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208201889052604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261140191903090600401612372565b6040805180830381865afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612465565b519695505050505050565b6000602082018035906114689061146390856119e9565b6115d6565b1492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b19576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b600080611534856040518060200160405280600081525061152d888888610b1b565b47306115fb565b604001515195945050505050565b6000806115348585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061152d92508a91506110079050565b63ffffffff81166000908152600160205260408120546fffffffffffffffffffffffffffffffff16808203610bd75750506002546fffffffffffffffffffffffffffffffff16919050565b63ffffffff8116600090815260208190526040812054808203610bd757503092915050565b6116036116e3565b7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c73ffffffffffffffffffffffffffffffffffffffff16632637a450846040518060a001604052808a63ffffffff1681526020016116608b6115d6565b815260200189815260200188815260200160001515815250856040518463ffffffff1660e01b8152600401611696929190612372565b60806040518083038185885af11580156116b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d99190612481565b9695505050505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001611726604051806040016040528060008152602001600081525090565b905290565b60008083601f84011261173d57600080fd5b50813567ffffffffffffffff81111561175557600080fd5b6020830191508360208260051b850101111561177057600080fd5b9250929050565b6000806000806040858703121561178d57600080fd5b843567ffffffffffffffff808211156117a557600080fd5b6117b18883890161172b565b909650945060208701359150808211156117ca57600080fd5b506117d78782880161172b565b95989497509550505050565b6000606082840312156117f557600080fd5b50919050565b60008083601f84011261180d57600080fd5b50813567ffffffffffffffff81111561182557600080fd5b60208301915083602082850101111561177057600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461186157600080fd5b919050565b600080600080600080600060e0888a03121561188157600080fd5b61188b89896117e3565b965060608801359550608088013567ffffffffffffffff808211156118af57600080fd5b6118bb8b838c016117fb565b90975095508591506118cf60a08b0161183d565b945060c08a01359150808211156118e557600080fd5b506118f28a828b016117fb565b989b979a50959850939692959293505050565b80356fffffffffffffffffffffffffffffffff8116811461186157600080fd5b60006020828403121561193757600080fd5b61194082611905565b9392505050565b67ffffffffffffffff8116811461112057600080fd5b60008060008060006080868803121561197557600080fd5b61197e8661183d565b9450602086013561198e81611947565b9350604086013567ffffffffffffffff8111156119aa57600080fd5b6119b68882890161172b565b90945092506119c990506060870161183d565b90509295509295909350565b803563ffffffff8116811461186157600080fd5b6000602082840312156119fb57600080fd5b611940826119d5565b600080600060608486031215611a1957600080fd5b611a22846119d5565b9250611a3060208501611905565b9150611a3e6040850161183d565b90509250925092565b60005b83811015611a62578181015183820152602001611a4a565b50506000910152565b60008151808452611a83816020860160208601611a47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119406020830184611a6b565b60008060408385031215611adb57600080fd5b611ae4836119d5565b946020939093013593505050565b600080600060408486031215611b0757600080fd5b833567ffffffffffffffff811115611b1e57600080fd5b611b2a8682870161172b565b9094509250611a3e90506020850161183d565b60008060008060008060608789031215611b5657600080fd5b863567ffffffffffffffff80821115611b6e57600080fd5b611b7a8a838b0161172b565b90985096506020890135915080821115611b9357600080fd5b611b9f8a838b0161172b565b90965094506040890135915080821115611bb857600080fd5b50611bc589828a0161172b565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015611c0f57835183529284019291840191600101611bf3565b50909695505050505050565b600060208284031215611c2d57600080fd5b6119408261183d565b60008060408385031215611c4957600080fd5b611ae48361183d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611cc857611cc8611c52565b604052919050565b60008060008060608587031215611ce657600080fd5b611cef856119d5565b935060208086013567ffffffffffffffff80821115611d0d57600080fd5b611d1989838a016117fb565b90965094506040880135915080821115611d3257600080fd5b818801915088601f830112611d4657600080fd5b813581811115611d5857611d58611c52565b611d88847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c81565b91508082528984828501011115611d9e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608284031215611dd057600080fd5b61194083836117e3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6957611e69611e09565b5060010190565b600081518084526020808501945080840160005b83811015611eb657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611e84565b509495945050505050565b6020815267ffffffffffffffff825116602082015260ff602083015116604082015260ff604083015116606082015260ff60608301511660808201526000608083015160c060a0840152611f1860e0840182611e70565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c0850152611f538282611e70565b95945050505050565b6000606080830173ffffffffffffffffffffffffffffffffffffffff808816855260208188168187015260409150838287015282875180855260808801915060808160051b890101945082890160005b8281101561201a578987037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800184528151805163ffffffff908116895286820151168689015286015186880189905261200789890182611a6b565b9750509284019290840190600101611fac565b50949b9a5050505050505050505050565b6000865161203d818460208b01611a47565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516120b5816004840160208801611a47565b01600401979650505050505050565b80820180821115610bd757610bd7611e09565b60a081528560a082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87111561211057600080fd5b8660051b808960c085013773ffffffffffffffffffffffffffffffffffffffff9687166020840152604083019590955250606081019290925290921660808301520160c00192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219057600080fd5b83018035915067ffffffffffffffff8211156121ab57600080fd5b60200191503681900382131561177057600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60a0808252810187905260008860c08301825b8a8110156122475763ffffffff612232846119d5565b1682526020928301929091019060010161221c565b506020915083810382850152808882528282019050828960051b8301018a60005b8b811015612313577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18e36030181126122c957600080fd5b8d01868101903567ffffffffffffffff8111156122e557600080fd5b8036038213156122f457600080fd5b6122ff8582846121c0565b958801959450505090850190600101612268565b50508094505050505084604083015283606083015261234a608083018473ffffffffffffffffffffffffffffffffffffffff169052565b98975050505050505050565b60008251612368818460208701611a47565b9190910192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526123a860e0840182611a6b565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526123e38282611a6b565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b60006040828403121561242857600080fd5b6040516040810181811067ffffffffffffffff8211171561244b5761244b611c52565b604052825181526020928301519281019290925250919050565b60006040828403121561247757600080fd5b6119408383612416565b60006080828403121561249357600080fd5b6040516060810181811067ffffffffffffffff821117156124b6576124b6611c52565b6040528251815260208301516124cb81611947565b60208201526124dd8460408501612416565b6040820152939250505056fea264697066735822122003802418fd76c668814738a0ada7739fe057268c6807317835b9193206c2797364736f6c63430008150033

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

000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a0000000000000000000000001a44076050125825900e736c501f859c50fe728c

-----Decoded View---------------
Arg [0] : _owner (address): 0xBC2C7144b1F8D708A0601961da6B6102f4Af286a
Arg [1] : _endpoint (address): 0x1a44076050125825900e736c501f859c50fE728c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc2c7144b1f8d708a0601961da6b6102f4af286a
Arg [1] : 0000000000000000000000001a44076050125825900e736c501f859c50fe728c


Deployed Bytecode Sourcemap

89:3481:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:332:5;;;;;;;;;;-1:-1:-1;2339:332:5;;;;;:::i;:::-;;:::i;:::-;;896:169;;;;;;;;;;-1:-1:-1;896:169:5;;;;;:::i;:::-;;;;;;;;;9021:617:0;;;:::i;2677:124:5:-;;;;;;;;;;-1:-1:-1;2677:124:5;;;;;:::i;:::-;;:::i;2920:661::-;;;;;;;;;;-1:-1:-1;2920:661:5;;;;;:::i;:::-;;:::i;328:48::-;;;;;;;;;;-1:-1:-1;328:48:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4636:34:6;4624:47;;;4606:66;;4594:2;4579:18;328:48:5;;;;;;;;1995:338;;;;;;;;;;-1:-1:-1;1995:338:5;;;;;:::i;:::-;;:::i;9720:456:0:-;;;:::i;230:46:5:-;;;;;;;;;;;;;;;;;;5662:42:6;5650:55;;;5632:74;;5620:2;5605:18;230:46:5;5458:254:6;8762:100:0;;;:::i;2114:361:1:-;;;;;;;;;;-1:-1:-1;2114:361:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;629:104:5:-;;;;;;;;;;-1:-1:-1;629:104:5;;;;;:::i;:::-;;:::i;:::-;;;7296:18:6;7284:31;;;7266:50;;7254:2;7239:18;629:104:5;7122:200:6;799:428:1;;;;;;:::i;:::-;;:::i;11408:182:0:-;;;;;;;;;;-1:-1:-1;11562:11:0;11556:18;11408:182;;2481:381:1;;;;;;;;;;-1:-1:-1;2481:381:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;383:39:5:-;;;;;;;;;;-1:-1:-1;383:39:5;;;;;;;;283;;;;;;;;;;-1:-1:-1;283:39:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10099:25:6;;;10087:2;10072:18;283:39:5;9953:177:6;2807:107:5;;;;;;;;;;-1:-1:-1;2807:107:5;;;;;:::i;:::-;;:::i;402:391:1:-;;;;;;:::i;:::-;;:::i;1815:293::-;;;;;;;;;;-1:-1:-1;1815:293:1;;;;;:::i;:::-;;:::i;10363:708:0:-;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;3166:367:1:-;;;;;;;;;;-1:-1:-1;3166:367:1;;;;;:::i;:::-;;:::i;2868:292::-;;;;;;;;;;-1:-1:-1;2868:292:1;;;;;:::i;:::-;;:::i;11693:435:0:-;;;;;;;;;;-1:-1:-1;11693:435:0;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;739:151:5;;;;;;;;;;-1:-1:-1;739:151:5;;;;;:::i;:::-;;:::i;:::-;;;13672:14:6;;13665:22;13647:41;;13635:2;13620:18;739:151:5;13507:187:6;2339:332:5;12517:13:0;:11;:13::i;:::-;2482:39:5;;::::1;2474:67;;;::::0;::::1;::::0;;13901:2:6;2474:67:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2474:67:5::1;;;;;;;;;2557:6;2552:113;2565:22:::0;;::::1;2552:113;;;2641:10;;2652:1;2641:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:14;:30;2623:11;;2635:1;2623:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2608:30;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2608:30:5;:46;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2589:3;::::1;::::0;::::1;:::i;:::-;;;;2552:113;;;;2339:332:::0;;;;:::o;9021:617:0:-;9114:15;7972:9;9132:46;;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;2677:124:5:-;12517:13:0;:11;:13::i;:::-;2760:15:5::1;:34:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2677:124::o;2920:661::-;12517:13:0;:11;:13::i;:::-;3045:31:5::1;3100:4:::0;3079:33:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;3079:33:5::1;;;;;;;;;;;;;;;;3045:67;;3127:6;3123:364;3135:15:::0;;::::1;3123:364;;;3194:16;::::0;;3171:20:::1;3194:16:::0;;;3261:1:::1;3194:16;::::0;;::::1;3247::::0;;;;;;;;3194;;3171:20;;3194:16;3247;;;3194;3247::::1;::::0;::::1;;::::0;-1:-1:-1;3247:16:5::1;3224:39;;3286:3;3277;3281:1;3277:6;;;;;;;;:::i;:::-;:12;::::0;;::::1;:6;::::0;;::::1;::::0;;;;;;:12;3337:50:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;3368:1:::1;3337:50:::0;;::::1;::::0;3304:19:::1;3337:50:::0;;;;;;;;;;;;;;;;;;;;;;;;3326:62;;3304:19;;3326:62:::1;::::0;::::1;;:::i;:::-;;::::0;;;;;::::1;::::0;;;3415:61:::1;::::0;::::1;::::0;;;3326:62;-1:-1:-1;3326:62:5;3436:4;;3441:1;3436:7;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3415:61;;::::0;;3457:1:::1;3415:61;::::0;::::1;::::0;;;;;;3402:10;;:7;;3410:1;;3402:10;::::1;;;;;:::i;:::-;;;;;;:74;;;;3157:330;;;3152:3;;;;;:::i;:::-;;;;3123:364;;;-1:-1:-1::0;3497:77:5::1;::::0;;;;:47:::1;3524:8;3497:47;::::0;::::1;::::0;:77:::1;::::0;3553:4:::1;::::0;3560;;3566:7;;3497:77:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3035:546;2920:661:::0;;;;;:::o;1995:338::-;12517:13:0;:11;:13::i;:::-;2141:45:5;;::::1;2133:73;;;::::0;::::1;::::0;;13901:2:6;2133:73:5::1;::::0;::::1;13883:21:6::0;13940:2;13920:18;;;13913:30;13979:17;13959:18;;;13952:45;14014:18;;2133:73:5::1;13699:339:6::0;2133:73:5::1;2222:6;2217:110;2230:22:::0;;::::1;2217:110;;;2297:16;;2314:1;2297:19;;;;;;;:::i;:::-;;;;;;;2273:5;:21:::0;2279:11:::1;;2291:1;2279:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2273:21;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2273:21:5;:43;2254:3;::::1;::::0;::::1;:::i;:::-;;;;2217:110;;9720:456:0::0;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;2114:361:1:-;2219:12;2280:28;2300:7;2280:19;:28::i;:::-;2395:63;;17674:66:6;17660:3;17656:16;;;17652:89;2395:63:1;;;17640:102:6;2435:21:1;;;17758:12:6;;;17751:28;2328:1:1;;2351:7;;2379:1;;17795:12:6;;2395:63:1;;;;;;;;;;;;;;2250:218;;;;;;2395:63;2250:218;;:::i;:::-;;;;;;;;;;;;;2243:225;;2114:361;;;;;:::o;629:104:5:-;694:12;629:104;;;;;:::o;799:428:1:-;918:11;944:6;939:156;952:25;;;939:156;;;1005:79;1046:3;1025:14;;1040:1;1025:17;;;;;;;:::i;:::-;;;;;;;:24;;1060:14;;1075:1;1060:17;;;;;;;:::i;:::-;;;;;;;1080:3;1005:12;:79::i;:::-;998:86;;;;:::i;:::-;;-1:-1:-1;979:3:1;;;;:::i;:::-;;;;939:156;;;;1125:3;1112:9;:16;;1104:40;;;;;;;19049:2:6;1104:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;1104:40:1;18847:335:6;1104:40:1;1159:61;1172:14;;1188:3;1193:9;1204:3;1209:10;1159:61;;;;;;;;;;;:::i;:::-;;;;;;;;908:319;799:428;;;:::o;2481:381::-;2639:27;2705:8;2691:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2691:30:1;;2678:43;;2736:6;2731:125;2744:19;;;2731:125;;;2800:45;2806:8;;2815:1;2806:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2819:9;;2829:1;2819:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2833:8;;2842:1;2833:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2800:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2800:5:1;;-1:-1:-1;;;2800:45:1:i;:::-;2784:10;2795:1;2784:13;;;;;;;;:::i;:::-;;;;;;;;;;:61;2765:3;;;;:::i;:::-;;;;2731:125;;;;2481:381;;;;;;;;:::o;2807:107:5:-;12517:13:0;:11;:13::i;:::-;2876:31:5::1;::::0;;;;:20:::1;5650:55:6::0;;;2876:31:5::1;::::0;::::1;5632:74:6::0;2876:8:5::1;:20;::::0;::::1;::::0;5605:18:6;;2876:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;402:391:1::0;529:11;555:6;550:111;563:20;;;550:111;;;611:39;624:8;;633:1;624:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;637:9;;647:1;637:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;611;:39::i;:::-;604:46;;;;:::i;:::-;;-1:-1:-1;585:3:1;;;;:::i;:::-;;;;550:111;;;;691:3;678:9;:16;;670:40;;;;;;;19049:2:6;670:40:1;;;19031:21:6;19088:2;19068:18;;;19061:30;19127:13;19107:18;;;19100:41;19158:18;;670:40:1;18847:335:6;670:40:1;725:61;738:8;;748:9;;759;770:3;775:10;725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;519:274;402:391;;;;:::o;1815:293::-;1942:27;;23207:16:6;1942:27:1;;;23191:102:6;1881:12:1;;23309:11:6;;1942:27:1;;;;;;;;;;;;1989:1;2012:4;2037:1;2070:20;2082:7;2070:11;:20::i;:::-;2053:38;;;;;;;23480:3:6;23476:16;;;;23494:66;23472:89;23460:102;;23587:2;23578:12;;23331:265;2053:38:1;;;;;;;;;;;;;;;1912:189;;;;;;2053:38;1912:189;;:::i;:::-;;;;;;;;;;;;;1905:196;;1815:293;;;:::o;10363:708:0:-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;3166:367:1:-:0;12517:13:0;:11;:13::i;:::-;3244:6:1::1;3264:19;::::0;::::1;3260:228;;3306:49;::::0;:10:::1;::::0;3329:21:::1;::::0;3306:49:::1;::::0;;;3329:21;3306:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3299:56;;;;;3260:228;;;3404:72;::::0;3457:10:::1;3404:72;::::0;::::1;23985:74:6::0;24075:18;;;24068:34;;;3393:10:1::1;::::0;::::1;::::0;23958:18:6;;3404:72:1::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;;;::::0;;3393:84;::::1;::::0;3404:72;3393:84:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;3386:91:1;;-1:-1:-1;;3260:228:1::1;3505:1;3497:29;;;::::0;::::1;::::0;;24607:2:6;3497:29:1::1;::::0;::::1;24589:21:6::0;24646:2;24626:18;;;24619:30;24685:17;24665:18;;;24658:45;24720:18;;3497:29:1::1;24405:339:6::0;3497:29:1::1;3234:299;3166:367:::0;;:::o;2868:292::-;2968:17;2997:23;3023:8;:14;;;3038:69;;;;;;;;3054:7;3038:69;;;;;;3063:16;3071:7;3063;:16::i;:::-;3038:69;;;;3081:8;;3038:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3038:69:1;;;-1:-1:-1;;;3038:69:1;;;;;;;;;;;3023:100;;;;;;;;;;;;3117:4;;3023:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3140:13;;2868:292;-1:-1:-1;;;;;;2868:292:1:o;739:151:5:-;821:4;870:13;;;;;;844:22;;852:13;;870:6;852:13;:::i;:::-;844:7;:22::i;:::-;:39;;739:151;-1:-1:-1;;739:151:5:o;7292:355:0:-;7504:11;7498:18;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;6145:1089;6857:11;7093:16;;6941:26;;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;1516:293:1:-;1602:11;1625:31;1659:105;1667:7;1659:105;;;;;;;;;;;;1680:45;1703:7;1712;1721:3;1680:22;:45::i;:::-;1727:21;1758:4;1659:7;:105::i;:::-;1781:11;;;:21;;1516:293;-1:-1:-1;;;;;1516:293:1:o;1233:277::-;1314:11;1337:31;1371:94;1379:7;1388:8;;1371:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1398:28:1;;-1:-1:-1;1418:7:1;;-1:-1:-1;1398:19:1;;-1:-1:-1;1398:28:1:i;1740:249:5:-;1838:23;;;1800:7;1838:23;;;:14;:23;;;;;;;;1875:13;;;1871:112;;-1:-1:-1;;1911:15:5;;;;;1740:249;-1:-1:-1;1740:249:5:o;1458:276::-;1557:14;;;1514:7;1557:14;;;;;;;;;;;1585:18;;;1581:147;;-1:-1:-1;1658:4:5;;1458:276;-1:-1:-1;;1458:276:5:o;1084:368::-;1276:31;;:::i;:::-;1326:8;:13;;;1347:10;1359:69;;;;;;;;1375:7;1359:69;;;;;;1384:16;1392:7;1384;:16::i;:::-;1359:69;;;;1402:8;1359:69;;;;1412:8;1359:69;;;;1422:5;1359:69;;;;;1430:14;1326:119;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1319:126;1084:368;-1:-1:-1;;;;;;1084:368:5:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:366:6:-;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:6;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:770::-;506:6;514;522;530;583:2;571:9;562:7;558:23;554:32;551:52;;;599:1;596;589:12;551:52;639:9;626:23;668:18;709:2;701:6;698:14;695:34;;;725:1;722;715:12;695:34;764:69;825:7;816:6;805:9;801:22;764:69;:::i;:::-;852:8;;-1:-1:-1;738:95:6;-1:-1:-1;940:2:6;925:18;;912:32;;-1:-1:-1;956:16:6;;;953:36;;;985:1;982;975:12;953:36;;1024:71;1087:7;1076:8;1065:9;1061:24;1024:71;:::i;:::-;385:770;;;;-1:-1:-1;1114:8:6;-1:-1:-1;;;;385:770:6:o;1160:154::-;1219:5;1264:2;1255:6;1250:3;1246:16;1242:25;1239:45;;;1280:1;1277;1270:12;1239:45;-1:-1:-1;1302:6:6;1160:154;-1:-1:-1;1160:154:6:o;1319:347::-;1370:8;1380:6;1434:3;1427:4;1419:6;1415:17;1411:27;1401:55;;1452:1;1449;1442:12;1401:55;-1:-1:-1;1475:20:6;;1518:18;1507:30;;1504:50;;;1550:1;1547;1540:12;1504:50;1587:4;1579:6;1575:17;1563:29;;1639:3;1632:4;1623:6;1615;1611:19;1607:30;1604:39;1601:59;;;1656:1;1653;1646:12;1671:196;1739:20;;1799:42;1788:54;;1778:65;;1768:93;;1857:1;1854;1847:12;1768:93;1671:196;;;:::o;1872:986::-;2014:6;2022;2030;2038;2046;2054;2062;2115:3;2103:9;2094:7;2090:23;2086:33;2083:53;;;2132:1;2129;2122:12;2083:53;2155;2200:7;2189:9;2155:53;:::i;:::-;2145:63;;2255:2;2244:9;2240:18;2227:32;2217:42;;2310:3;2299:9;2295:19;2282:33;2334:18;2375:2;2367:6;2364:14;2361:34;;;2391:1;2388;2381:12;2361:34;2430:58;2480:7;2471:6;2460:9;2456:22;2430:58;:::i;:::-;2507:8;;-1:-1:-1;2404:84:6;-1:-1:-1;2404:84:6;;-1:-1:-1;2561:39:6;2595:3;2580:19;;2561:39;:::i;:::-;2551:49;;2653:3;2642:9;2638:19;2625:33;2609:49;;2683:2;2673:8;2670:16;2667:36;;;2699:1;2696;2689:12;2667:36;;2738:60;2790:7;2779:8;2768:9;2764:24;2738:60;:::i;:::-;1872:986;;;;-1:-1:-1;1872:986:6;;-1:-1:-1;1872:986:6;;;;2712:86;;-1:-1:-1;;;1872:986:6:o;2863:188::-;2931:20;;2991:34;2980:46;;2970:57;;2960:85;;3041:1;3038;3031:12;3056:186;3115:6;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3207:29;3226:9;3207:29;:::i;:::-;3197:39;3056:186;-1:-1:-1;;;3056:186:6:o;3247:129::-;3332:18;3325:5;3321:30;3314:5;3311:41;3301:69;;3366:1;3363;3356:12;3381:717;3492:6;3500;3508;3516;3524;3577:3;3565:9;3556:7;3552:23;3548:33;3545:53;;;3594:1;3591;3584:12;3545:53;3617:29;3636:9;3617:29;:::i;:::-;3607:39;;3696:2;3685:9;3681:18;3668:32;3709:30;3733:5;3709:30;:::i;:::-;3758:5;-1:-1:-1;3814:2:6;3799:18;;3786:32;3841:18;3830:30;;3827:50;;;3873:1;3870;3863:12;3827:50;3912:69;3973:7;3964:6;3953:9;3949:22;3912:69;:::i;:::-;4000:8;;-1:-1:-1;3886:95:6;-1:-1:-1;4054:38:6;;-1:-1:-1;4088:2:6;4073:18;;4054:38;:::i;:::-;4044:48;;3381:717;;;;;;;;:::o;4103:163::-;4170:20;;4230:10;4219:22;;4209:33;;4199:61;;4256:1;4253;4246:12;4271:184;4329:6;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4421:28;4439:9;4421:28;:::i;5717:332::-;5793:6;5801;5809;5862:2;5850:9;5841:7;5837:23;5833:32;5830:52;;;5878:1;5875;5868:12;5830:52;5901:28;5919:9;5901:28;:::i;:::-;5891:38;;5948;5982:2;5971:9;5967:18;5948:38;:::i;:::-;5938:48;;6005:38;6039:2;6028:9;6024:18;6005:38;:::i;:::-;5995:48;;5717:332;;;;;:::o;6054:250::-;6139:1;6149:113;6163:6;6160:1;6157:13;6149:113;;;6239:11;;;6233:18;6220:11;;;6213:39;6185:2;6178:10;6149:113;;;-1:-1:-1;;6296:1:6;6278:16;;6271:27;6054:250::o;6309:329::-;6350:3;6388:5;6382:12;6415:6;6410:3;6403:19;6431:76;6500:6;6493:4;6488:3;6484:14;6477:4;6470:5;6466:16;6431:76;:::i;:::-;6552:2;6540:15;6557:66;6536:88;6527:98;;;;6627:4;6523:109;;6309:329;-1:-1:-1;;6309:329:6:o;6643:217::-;6790:2;6779:9;6772:21;6753:4;6810:44;6850:2;6839:9;6835:18;6827:6;6810:44;:::i;6865:252::-;6932:6;6940;6993:2;6981:9;6972:7;6968:23;6964:32;6961:52;;;7009:1;7006;6999:12;6961:52;7032:28;7050:9;7032:28;:::i;:::-;7022:38;7107:2;7092:18;;;;7079:32;;-1:-1:-1;;;6865:252:6:o;7327:510::-;7422:6;7430;7438;7491:2;7479:9;7470:7;7466:23;7462:32;7459:52;;;7507:1;7504;7497:12;7459:52;7547:9;7534:23;7580:18;7572:6;7569:30;7566:50;;;7612:1;7609;7602:12;7566:50;7651:69;7712:7;7703:6;7692:9;7688:22;7651:69;:::i;:::-;7739:8;;-1:-1:-1;7625:95:6;-1:-1:-1;7793:38:6;;-1:-1:-1;7827:2:6;7812:18;;7793:38;:::i;8205:1106::-;8384:6;8392;8400;8408;8416;8424;8477:2;8465:9;8456:7;8452:23;8448:32;8445:52;;;8493:1;8490;8483:12;8445:52;8533:9;8520:23;8562:18;8603:2;8595:6;8592:14;8589:34;;;8619:1;8616;8609:12;8589:34;8658:69;8719:7;8710:6;8699:9;8695:22;8658:69;:::i;:::-;8746:8;;-1:-1:-1;8632:95:6;-1:-1:-1;8834:2:6;8819:18;;8806:32;;-1:-1:-1;8850:16:6;;;8847:36;;;8879:1;8876;8869:12;8847:36;8918:71;8981:7;8970:8;8959:9;8955:24;8918:71;:::i;:::-;9008:8;;-1:-1:-1;8892:97:6;-1:-1:-1;9096:2:6;9081:18;;9068:32;;-1:-1:-1;9112:16:6;;;9109:36;;;9141:1;9138;9131:12;9109:36;;9180:71;9243:7;9232:8;9221:9;9217:24;9180:71;:::i;:::-;8205:1106;;;;-1:-1:-1;8205:1106:6;;-1:-1:-1;8205:1106:6;;9270:8;;8205:1106;-1:-1:-1;;;8205:1106:6:o;9316:632::-;9487:2;9539:21;;;9609:13;;9512:18;;;9631:22;;;9458:4;;9487:2;9710:15;;;;9684:2;9669:18;;;9458:4;9753:169;9767:6;9764:1;9761:13;9753:169;;;9828:13;;9816:26;;9897:15;;;;9862:12;;;;9789:1;9782:9;9753:169;;;-1:-1:-1;9939:3:6;;9316:632;-1:-1:-1;;;;;;9316:632:6:o;10135:186::-;10194:6;10247:2;10235:9;10226:7;10222:23;10218:32;10215:52;;;10263:1;10260;10253:12;10215:52;10286:29;10305:9;10286:29;:::i;11112:254::-;11180:6;11188;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11280:29;11299:9;11280:29;:::i;11371:184::-;11423:77;11420:1;11413:88;11520:4;11517:1;11510:15;11544:4;11541:1;11534:15;11560:334;11631:2;11625:9;11687:2;11677:13;;11692:66;11673:86;11661:99;;11790:18;11775:34;;11811:22;;;11772:62;11769:88;;;11837:18;;:::i;:::-;11873:2;11866:22;11560:334;;-1:-1:-1;11560:334:6:o;11899:1181::-;11995:6;12003;12011;12019;12072:2;12060:9;12051:7;12047:23;12043:32;12040:52;;;12088:1;12085;12078:12;12040:52;12111:28;12129:9;12111:28;:::i;:::-;12101:38;;12158:2;12211;12200:9;12196:18;12183:32;12234:18;12275:2;12267:6;12264:14;12261:34;;;12291:1;12288;12281:12;12261:34;12330:58;12380:7;12371:6;12360:9;12356:22;12330:58;:::i;:::-;12407:8;;-1:-1:-1;12304:84:6;-1:-1:-1;12495:2:6;12480:18;;12467:32;;-1:-1:-1;12511:16:6;;;12508:36;;;12540:1;12537;12530:12;12508:36;12578:8;12567:9;12563:24;12553:34;;12625:7;12618:4;12614:2;12610:13;12606:27;12596:55;;12647:1;12644;12637:12;12596:55;12683:2;12670:16;12705:2;12701;12698:10;12695:36;;;12711:18;;:::i;:::-;12753:112;12861:2;12792:66;12785:4;12781:2;12777:13;12773:86;12769:95;12753:112;:::i;:::-;12740:125;;12888:2;12881:5;12874:17;12928:7;12923:2;12918;12914;12910:11;12906:20;12903:33;12900:53;;;12949:1;12946;12939:12;12900:53;13004:2;12999;12995;12991:11;12986:2;12979:5;12975:14;12962:45;13048:1;13043:2;13038;13031:5;13027:14;13023:23;13016:34;;13069:5;13059:15;;;;;11899:1181;;;;;;;:::o;13267:235::-;13351:6;13404:2;13392:9;13383:7;13379:23;13375:32;13372:52;;;13420:1;13417;13410:12;13372:52;13443:53;13488:7;13477:9;13443:53;:::i;14043:184::-;14095:77;14092:1;14085:88;14192:4;14189:1;14182:15;14216:4;14213:1;14206:15;14232:184;14284:77;14281:1;14274:88;14381:4;14378:1;14371:15;14405:4;14402:1;14395:15;14421:195;14460:3;14491:66;14484:5;14481:77;14478:103;;14561:18;;:::i;:::-;-1:-1:-1;14608:1:6;14597:13;;14421:195::o;14621:484::-;14674:3;14712:5;14706:12;14739:6;14734:3;14727:19;14765:4;14794:2;14789:3;14785:12;14778:19;;14831:2;14824:5;14820:14;14852:1;14862:218;14876:6;14873:1;14870:13;14862:218;;;14941:13;;14956:42;14937:62;14925:75;;15020:12;;;;15055:15;;;;14898:1;14891:9;14862:218;;;-1:-1:-1;15096:3:6;;14621:484;-1:-1:-1;;;;;14621:484:6:o;15110:915::-;15293:2;15282:9;15275:21;15351:18;15342:6;15336:13;15332:38;15327:2;15316:9;15312:18;15305:66;15435:4;15429:2;15421:6;15417:15;15411:22;15407:33;15402:2;15391:9;15387:18;15380:61;15505:4;15499:2;15491:6;15487:15;15481:22;15477:33;15472:2;15461:9;15457:18;15450:61;15576:4;15570:2;15562:6;15558:15;15552:22;15548:33;15542:3;15531:9;15527:19;15520:62;15256:4;15629:3;15621:6;15617:16;15611:23;15671:4;15665:3;15654:9;15650:19;15643:33;15699:63;15757:3;15746:9;15742:19;15728:12;15699:63;:::i;:::-;15685:77;;15811:3;15803:6;15799:16;15793:23;15882:66;15870:9;15862:6;15858:22;15854:95;15847:4;15836:9;15832:20;15825:125;15967:52;16012:6;15996:14;15967:52;:::i;:::-;15959:60;15110:915;-1:-1:-1;;;;;15110:915:6:o;16030:1448::-;16290:4;16319:2;16359;16348:9;16344:18;16381:42;16462:2;16454:6;16450:15;16439:9;16432:34;16485:2;16535;16527:6;16523:15;16518:2;16507:9;16503:18;16496:43;16558:2;16548:12;;16596:2;16591;16580:9;16576:18;16569:30;16619:6;16654;16648:13;16685:6;16677;16670:22;16723:3;16712:9;16708:19;16701:26;;16786:3;16776:6;16773:1;16769:14;16758:9;16754:30;16750:40;16736:54;;16825:2;16817:6;16813:15;16846:1;16856:593;16870:6;16867:1;16864:13;16856:593;;;16935:22;;;16959:66;16931:95;16919:108;;17050:13;;17128:9;;17086:10;17124:18;;;17109:34;;17190:11;;;17184:18;17180:27;17163:15;;;17156:52;17247:11;;17241:18;17279:15;;;17272:27;;;17322:47;17353:15;;;17241:18;17322:47;:::i;:::-;17312:57;-1:-1:-1;;17427:12:6;;;;17392:15;;;;16892:1;16885:9;16856:593;;;-1:-1:-1;17466:6:6;;16030:1448;-1:-1:-1;;;;;;;;;;;16030:1448:6:o;17818:894::-;18067:3;18105:6;18099:13;18121:66;18180:6;18175:3;18168:4;18160:6;18156:17;18121:66;:::i;:::-;18218:6;18213:3;18209:16;18196:29;;18244:66;18355:2;18346:6;18341:3;18337:16;18333:25;18326:5;18319:40;18412:66;18403:6;18398:3;18394:16;18390:89;18386:1;18379:5;18375:13;18368:112;18533:2;18524:6;18519:3;18515:16;18511:25;18507:1;18500:5;18496:13;18489:48;;18568:6;18562:13;18584:78;18653:8;18649:1;18642:5;18638:13;18631:4;18623:6;18619:17;18584:78;:::i;:::-;18682:20;18704:1;18678:28;;17818:894;-1:-1:-1;;;;;;;17818:894:6:o;18717:125::-;18782:9;;;18803:10;;;18800:36;;;18816:18;;:::i;19187:860::-;19488:3;19477:9;19470:22;19529:6;19523:3;19512:9;19508:19;19501:35;19451:4;19559:66;19551:6;19548:78;19545:98;;;19639:1;19636;19629:12;19545:98;19673:6;19670:1;19666:14;19731:6;19723;19717:3;19706:9;19702:19;19689:49;19806:42;19886:15;;;19879:4;19864:20;;19857:45;19933:2;19918:18;;19911:34;;;;-1:-1:-1;19976:2:6;19961:18;;19954:34;;;;20025:15;;;20019:3;20004:19;;19997:44;19759:22;19783:3;19755:32;;19187:860;-1:-1:-1;;19187:860:6:o;20052:580::-;20129:4;20135:6;20195:11;20182:25;20285:66;20274:8;20258:14;20254:29;20250:102;20230:18;20226:127;20216:155;;20367:1;20364;20357:12;20216:155;20394:33;;20446:20;;;-1:-1:-1;20489:18:6;20478:30;;20475:50;;;20521:1;20518;20511:12;20475:50;20554:4;20542:17;;-1:-1:-1;20585:14:6;20581:27;;;20571:38;;20568:58;;;20622:1;20619;20612:12;20637:325;20725:6;20720:3;20713:19;20777:6;20770:5;20763:4;20758:3;20754:14;20741:43;;20829:1;20822:4;20813:6;20808:3;20804:16;20800:27;20793:38;20695:3;20951:4;20881:66;20876:2;20868:6;20864:15;20860:88;20855:3;20851:98;20847:109;20840:116;;20637:325;;;;:::o;20967:2092::-;21357:3;21370:22;;;21342:19;;21427:22;;;21309:4;21507:6;21480:3;21465:19;;21309:4;21541:225;21555:6;21552:1;21549:13;21541:225;;;21647:10;21620:25;21638:6;21620:25;:::i;:::-;21616:42;21604:55;;21682:4;21741:15;;;;21706:12;;;;21577:1;21570:9;21541:225;;;21545:3;21785:4;21775:14;;21834:9;21829:3;21825:19;21820:2;21809:9;21805:18;21798:47;21867:3;21891:6;21886:3;21879:19;21925:2;21920:3;21916:12;21907:21;;21981:2;21971:6;21968:1;21964:14;21959:3;21955:24;21951:33;22009:6;22035:1;22045:843;22061:6;22056:3;22053:15;22045:843;;;22150:66;22144:3;22136:6;22132:16;22128:89;22121:5;22114:104;22270:8;22257:22;22359:66;22350:6;22334:14;22330:27;22326:100;22306:18;22302:125;22292:153;;22441:1;22438;22431:12;22292:153;22471:31;;22576:14;;;;22529:19;22617:18;22606:30;;22603:50;;;22649:1;22646;22639:12;22603:50;22702:6;22686:14;22682:27;22673:7;22669:41;22666:61;;;22723:1;22720;22713:12;22666:61;22750:50;22793:6;22785;22776:7;22750:50;:::i;:::-;22864:14;;;;22740:60;-1:-1:-1;;;22825:17:6;;;;22087:1;22078:11;22045:843;;;22049:3;;22905:6;22897:14;;;;;;22947:6;22942:2;22931:9;22927:18;22920:34;22990:6;22985:2;22974:9;22970:18;22963:34;23006:47;23048:3;23037:9;23033:19;23025:6;7919:42;7908:54;7896:67;;7842:127;23006:47;20967:2092;;;;;;;;;;:::o;24113:287::-;24242:3;24280:6;24274:13;24296:66;24355:6;24350:3;24343:4;24335:6;24331:17;24296:66;:::i;:::-;24378:16;;;;;24113:287;-1:-1:-1;;24113:287:6:o;24749:969::-;24970:2;24959:9;24952:21;25028:10;25019:6;25013:13;25009:30;25004:2;24993:9;24989:18;24982:58;25094:4;25086:6;25082:17;25076:24;25071:2;25060:9;25056:18;25049:52;24933:4;25148:2;25140:6;25136:15;25130:22;25189:4;25183:3;25172:9;25168:19;25161:33;25217:51;25263:3;25252:9;25248:19;25234:12;25217:51;:::i;:::-;25203:65;;25317:2;25309:6;25305:15;25299:22;25387:66;25375:9;25367:6;25363:22;25359:95;25352:4;25341:9;25337:20;25330:125;25478:40;25511:6;25495:14;25478:40;:::i;:::-;25587:3;25575:16;;;;25569:23;25562:31;25555:39;25549:3;25534:19;;25527:68;-1:-1:-1;;;25668:42:6;25656:55;;;;25649:4;25634:20;;;25627:85;25464:54;24749:969::o;25723:478::-;25793:5;25841:4;25829:9;25824:3;25820:19;25816:30;25813:50;;;25859:1;25856;25849:12;25813:50;25892:4;25886:11;25936:4;25928:6;25924:17;26007:6;25995:10;25992:22;25971:18;25959:10;25956:34;25953:62;25950:88;;;26018:18;;:::i;:::-;26054:4;26047:24;26119:16;;26104:32;;26190:2;26175:18;;;26169:25;26152:15;;;26145:50;;;;-1:-1:-1;26089:6:6;25723:478;-1:-1:-1;25723:478:6:o;26206:258::-;26305:6;26358:2;26346:9;26337:7;26333:23;26329:32;26326:52;;;26374:1;26371;26364:12;26326:52;26397:61;26450:7;26439:9;26397:61;:::i;26469:682::-;26572:6;26625:3;26613:9;26604:7;26600:23;26596:33;26593:53;;;26642:1;26639;26632:12;26593:53;26675:2;26669:9;26717:4;26709:6;26705:17;26788:6;26776:10;26773:22;26752:18;26740:10;26737:34;26734:62;26731:88;;;26799:18;;:::i;:::-;26835:2;26828:22;26874:16;;26859:32;;26934:2;26919:18;;26913:25;26947:30;26913:25;26947:30;:::i;:::-;27005:2;26993:15;;26986:30;27049:70;27111:7;27106:2;27091:18;;27049:70;:::i;:::-;27044:2;27032:15;;27025:95;27036:6;26469:682;-1:-1:-1;;;26469:682:6:o

Swarm Source

ipfs://03802418fd76c668814738a0ada7739fe057268c6807317835b9193206c27973

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
BASE40.55%$3,805.981.0239$3,897.08
ARB15.32%$3,805.580.3869$1,472.3
LINEA11.98%$3,805.140.3027$1,151.77
SCROLL7.29%$3,805.140.1842$700.84
OP
Ether (ETH)
5.93%$3,8060.1497$569.68
ARBNOVA4.83%$3,805.720.1219$463.86
BSC4.22%$601.10.674$405.13
AVAX2.30%$37.35.9351$221.38
FTM2.30%$0.810003272.3573$220.61
MOVR1.37%$15.268.6465$131.92
OPBNB1.28%$601.160.2045$122.95
GNO1.03%$0.99978599.3128$99.29
CELO0.39%$0.88233742.1513$37.19
ETH0.33%$3,806.040.0083096$31.63
BLAST0.30%$3,8060.00745296$28.37
MANTLE0.26%$1.0224.7519$25.28
GLMR0.17%$0.29700853.7346$15.96
ZKSYNC0.16%$3,805.140.00397733$15.13
FRAXTAL<0.01%$3,785.480.00015801$0.598158
[ Download: CSV Export  ]
[ 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.