ETH Price: $3,394.62 (+0.74%)

Contract

0x0De2669e8A7A6F6CC0cBD3Cf2D1EEaD89e243208
 
Transaction Hash
Method
Block
From
To
Unlock Transfers...214898552024-12-26 23:14:4711 hrs ago1735254887IN
0x0De2669e...89e243208
0 ETH0.000375725.00213379
Submit Transfer ...214895532024-12-26 22:14:1112 hrs ago1735251251IN
0x0De2669e...89e243208
0 ETH0.000702524.60847554
Unlock Transfers...214224742024-12-17 13:11:479 days ago1734441107IN
0x0De2669e...89e243208
0 ETH0.0014967916.85732049
Submit Transfer ...214221722024-12-17 12:11:119 days ago1734437471IN
0x0De2669e...89e243208
0 ETH0.0016497410.82377958
Unlock Transfers...214009952024-12-14 13:16:4712 days ago1734182207IN
0x0De2669e...89e243208
0 ETH0.000726258.17923394
Submit Transfer ...214006922024-12-14 12:15:4712 days ago1734178547IN
0x0De2669e...89e243208
0 ETH0.001256358.24145146
Unlock Transfers...213813192024-12-11 19:22:1115 days ago1733944931IN
0x0De2669e...89e243208
0 ETH0.0030413534.25258608
Submit Transfer ...213810202024-12-11 18:21:3515 days ago1733941295IN
0x0De2669e...89e243208
0 ETH0.0044474229.1766523
Unlock Transfers...213729982024-12-10 15:28:3516 days ago1733844515IN
0x0De2669e...89e243208
0 ETH0.0048248154.33844769
Submit Transfer ...213726962024-12-10 14:27:5916 days ago1733840879IN
0x0De2669e...89e243208
0 ETH0.0100337465.82485491
Withdraw213657272024-12-09 15:04:4717 days ago1733756687IN
0x0De2669e...89e243208
0.0001272 ETH0.006022737.38116955
Unlock Transfers...213473472024-12-07 1:30:4720 days ago1733535047IN
0x0De2669e...89e243208
0 ETH0.0011270113.73753422
Submit Transfer ...213470452024-12-07 0:30:1120 days ago1733531411IN
0x0De2669e...89e243208
0 ETH0.002276114.92617206
Withdraw213448132024-12-06 17:01:1120 days ago1733504471IN
0x0De2669e...89e243208
0.00012514 ETH0.0053921933.46923642
Withdraw213446772024-12-06 16:33:5920 days ago1733502839IN
0x0De2669e...89e243208
0.00012556 ETH0.005719435.49667024
Unlock Transfers...213309602024-12-04 18:35:1122 days ago1733337311IN
0x0De2669e...89e243208
0 ETH0.0023734526.73046453
Submit Transfer ...213303672024-12-04 16:36:2322 days ago1733330183IN
0x0De2669e...89e243208
0 ETH0.0065551243.00728074
Withdraw212954512024-11-29 19:31:5927 days ago1732908719IN
0x0De2669e...89e243208
0.0001405 ETH0.0018404713.12975393
Unlock Transfers...212949472024-11-29 17:50:5927 days ago1732902659IN
0x0De2669e...89e243208
0 ETH0.0011546314.07422995
Submit Transfer ...212946482024-11-29 16:50:2327 days ago1732899023IN
0x0De2669e...89e243208
0 ETH0.002942619.29694039
Unlock Transfers...212596802024-11-24 19:25:3532 days ago1732476335IN
0x0De2669e...89e243208
0 ETH0.000604518.04816974
Submit Transfer ...212593752024-11-24 18:24:3532 days ago1732472675IN
0x0De2669e...89e243208
0 ETH0.001416929.29549245
Withdraw212235342024-11-19 18:20:4737 days ago1732040447IN
0x0De2669e...89e243208
0.00016073 ETH0.003641622.60337123
Unlock Transfers...212071742024-11-17 11:37:3539 days ago1731843455IN
0x0De2669e...89e243208
0 ETH0.000684118.33885131
Submit Transfer ...212068732024-11-17 10:37:1140 days ago1731839831IN
0x0De2669e...89e243208
0 ETH0.001287958.4474066
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
213657272024-12-09 15:04:4717 days ago1733756687
0x0De2669e...89e243208
0.0001272 ETH
213448132024-12-06 17:01:1120 days ago1733504471
0x0De2669e...89e243208
0.00012514 ETH
213446772024-12-06 16:33:5920 days ago1733502839
0x0De2669e...89e243208
0.00012556 ETH
212954512024-11-29 19:31:5927 days ago1732908719
0x0De2669e...89e243208
0.0001405 ETH
212235342024-11-19 18:20:4737 days ago1732040447
0x0De2669e...89e243208
0.00016073 ETH
211679162024-11-12 0:06:3545 days ago1731369995
0x0De2669e...89e243208
0.00014868 ETH
211277062024-11-06 9:26:2351 days ago1730885183
0x0De2669e...89e243208
0.00019149 ETH
211162772024-11-04 19:08:3552 days ago1730747315
0x0De2669e...89e243208
0.00020645 ETH
210943062024-11-01 17:31:2355 days ago1730482283
0x0De2669e...89e243208
0.00019868 ETH
210942252024-11-01 17:15:1155 days ago1730481311
0x0De2669e...89e243208
0.00019925 ETH
210378842024-10-24 20:35:1163 days ago1729802111
0x0De2669e...89e243208
0.00019767 ETH
209716562024-10-15 14:47:3572 days ago1729003655
0x0De2669e...89e243208
0.00019449 ETH
208383432024-09-27 0:22:2391 days ago1727396543
0x0De2669e...89e243208
0.00019072 ETH
208038062024-09-22 4:44:3596 days ago1726980275
0x0De2669e...89e243208
0.00019272 ETH
207892322024-09-20 3:51:2398 days ago1726804283
0x0De2669e...89e243208
0.00020146 ETH
207884472024-09-20 1:13:1198 days ago1726794791
0x0De2669e...89e243208
0.00020443 ETH
207405742024-09-13 8:42:59105 days ago1726216979
0x0De2669e...89e243208
0.00021374 ETH
207335132024-09-12 9:02:59106 days ago1726131779
0x0De2669e...89e243208
0.00021235 ETH
207254592024-09-11 6:03:35107 days ago1726034615
0x0De2669e...89e243208
0.00021544 ETH
206996812024-09-07 15:40:23110 days ago1725723623
0x0De2669e...89e243208
0.0002176 ETH
206979562024-09-07 9:54:47111 days ago1725702887
0x0De2669e...89e243208
0.00021935 ETH
206631972024-09-02 13:31:47115 days ago1725283907
0x0De2669e...89e243208
0.00019933 ETH
206513002024-08-31 21:40:59117 days ago1725140459
0x0De2669e...89e243208
0.00019993 ETH
206432462024-08-30 18:40:23118 days ago1725043223
0x0De2669e...89e243208
0.00019896 ETH
206432242024-08-30 18:35:59118 days ago1725042959
0x0De2669e...89e243208
0.00019896 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ProxyMultiSig

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion, MIT license
File 1 of 6 : Proxy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./MultiSigWallet.sol";
import "hardhat/console.sol";


contract ProxyMultiSig is Proxy, MultiSigWallet {
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
    bytes32 private constant ADMIN_STORAGE_LOCATION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    bytes4 private constant _UPGRADE_TO_AND_CALL_SIGNATURE = bytes4(keccak256("_upgradeToAndCall(address,bytes)"));

    event Upgraded(address indexed implementation);


    constructor(
        address _logic,
        bytes memory _data,
        address[] memory owners,
        uint _required

    ) MultiSigWallet(owners, _required) {
        // Cannot use _upgradeToAndCall because of onlyWallet modifier
        _upgradeTo(_logic);
        if (_data.length > 0) {
            Address.functionDelegateCall(_logic, _data);
        }

        StorageSlot.getAddressSlot(ADMIN_STORAGE_LOCATION).value = msg.sender;  // trick the hardhat-deploy
    }


    function implementation() external view returns (address) {
        return _implementation();
    }

    function upgradeTo(address newImplementation) external payable ownerExists(msg.sender) {
        submitTransaction(
            address(this),
            msg.value,
            abi.encodeWithSelector(_UPGRADE_TO_AND_CALL_SIGNATURE, newImplementation, bytes(""))
        );
    }

    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ownerExists(msg.sender) {
        submitTransaction(
            address(this),
            msg.value,
            abi.encodeWithSelector(_UPGRADE_TO_AND_CALL_SIGNATURE, newImplementation, data)
        );
    }

    function _upgradeToAndCall(address newImplementation, bytes memory data) external onlyWallet payable {
        _upgradeTo(newImplementation);
        if (data.length > 0) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    function _upgradeTo(address newImplementation) internal {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
        emit Upgraded(newImplementation);
    }

    function _implementation() internal view override returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }
}

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

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

File 5 of 6 : MultiSigWallet.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;


contract MultiSigWallet {

    /*
     *  Events
     */
    event Confirmation(address indexed sender, uint indexed transactionId);
    event Revocation(address indexed sender, uint indexed transactionId);
    event Submission(uint indexed transactionId);
    event Execution(uint indexed transactionId);
    event ExecutionFailure(uint indexed transactionId);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint required);

    /*
     *  Constants
     */
    uint constant public MAX_OWNER_COUNT = 50;

    /*
     *  Storage
     */
    mapping(uint => Transaction) public transactions;
    mapping(uint => mapping(address => bool)) public confirmations;
    mapping(address => bool) public isOwner;
    address[] public owners;
    uint public required;
    uint public transactionCount;

    struct Transaction {
        address destination;
        uint value;
        bytes data;
        bool executed;
    }

    /*
     *  Modifiers
     */
    modifier onlyWallet() {
        require(msg.sender == address(this));
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        require(!isOwner[owner]);
        _;
    }

    modifier ownerExists(address owner) {
        require(isOwner[owner]);
        _;
    }

    modifier transactionExists(uint transactionId) {
        require(transactions[transactionId].destination != address(0));
        _;
    }

    modifier confirmed(uint transactionId, address owner) {
        require(confirmations[transactionId][owner]);
        _;
    }

    modifier notConfirmed(uint transactionId, address owner) {
        require(!confirmations[transactionId][owner]);
        _;
    }

    modifier notExecuted(uint transactionId) {
        require(!transactions[transactionId].executed);
        _;
    }

    modifier notNull(address _address) {
        require(_address != address(0));
        _;
    }

    modifier validRequirement(uint ownerCount, uint _required) {
        require(ownerCount <= MAX_OWNER_COUNT
        && _required <= ownerCount
        && _required != 0
            && ownerCount != 0);
        _;
    }

    /*
     * Public functions
     */
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    constructor(address[] memory _owners, uint _required)
    validRequirement(_owners.length, _required)
    {
        for (uint i = 0; i < _owners.length; i++) {
            require(!isOwner[_owners[i]] && _owners[i] != address(0));
            isOwner[_owners[i]] = true;
        }
        owners = _owners;
        required = _required;
    }

    /// @dev Allows to add a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of new owner.
    function addOwner(address owner)
    public
    onlyWallet
    ownerDoesNotExist(owner)
    notNull(owner)
    validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        emit OwnerAddition(owner);
    }

    /// @dev Allows to remove an owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner.
    function removeOwner(address owner)
    public
    onlyWallet
    ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint i = 0; i < owners.length - 1; i++)
            if (owners[i] == owner) {
                owners[i] = owners[owners.length - 1];
                break;
            }
        owners.pop();
        if (required > owners.length)
            changeRequirement(owners.length);
        emit OwnerRemoval(owner);
    }

    /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner to be replaced.
    /// @param newOwner Address of new owner.
    function replaceOwner(address owner, address newOwner)
    public
    onlyWallet
    ownerExists(owner)
    ownerDoesNotExist(newOwner)
    {
        for (uint i = 0; i < owners.length; i++)
            if (owners[i] == owner) {
                owners[i] = newOwner;
                break;
            }
        isOwner[owner] = false;
        isOwner[newOwner] = true;
        emit OwnerRemoval(owner);
        emit OwnerAddition(newOwner);
    }

    /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
    /// @param _required Number of required confirmations.
    function changeRequirement(uint _required)
    public
    onlyWallet
    validRequirement(owners.length, _required)
    {
        required = _required;
        emit RequirementChange(_required);
    }

    /// @dev Allows an owner to submit and confirm a transaction.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return transactionId Returns transaction ID.
    function submitTransaction(
        address destination,
        uint value,
        bytes memory data
    ) public returns (uint transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /// @dev Allows an owner to confirm a transaction.
    /// @param transactionId Transaction ID.
    function confirmTransaction(uint transactionId)
    public
    ownerExists(msg.sender)
    transactionExists(transactionId)
    notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        emit Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /// @dev Allows an owner to revoke a confirmation for a transaction.
    /// @param transactionId Transaction ID.
    function revokeConfirmation(uint transactionId)
    public
    ownerExists(msg.sender)
    confirmed(transactionId, msg.sender)
    notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        emit Revocation(msg.sender, transactionId);
    }

    /// @dev Allows anyone to execute a confirmed transaction.
    /// @param transactionId Transaction ID.
    function executeTransaction(uint transactionId)
    public
    ownerExists(msg.sender)
    confirmed(transactionId, msg.sender)
    notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            Transaction storage txn = transactions[transactionId];
            txn.executed = true;
            if (external_call(txn.destination, txn.value, txn.data.length, txn.data))
                emit Execution(transactionId);
            else {
                emit ExecutionFailure(transactionId);
                txn.executed = false;
            }
        }
    }

    // call has been separated into its own function in order to take advantage
    // of the Solidity's code generator to produce a loop that copies tx.data into memory.
    function external_call(address destination, uint value, uint dataLength, bytes memory data) private returns (bool) {
        bool result;
        assembly {
            let x := mload(0x40)   // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
            let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
            result := call(
            sub(gas(), 36810), // 34710 is the value that solidity is currently emitting  // todo
            // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) +
            // callNewAccountGas (25000, in case the destination address does not exist and needs creating) +
            // gasSLoadEIP2929 (2100)

            destination,
            value,
            d,
            dataLength, // Size of the input (in bytes) - this is what fixes the padding problem
            x,
            0                  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

    /// @dev Returns the confirmation status of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Confirmation status.
    function isConfirmed(uint transactionId) public view returns (bool)
    {
        uint count = 0;
        for (uint i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
                count += 1;
            if (count == required)
                return true;
        }
        return false;
    }

    /*
     * Internal functions
     */
    /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return transactionId Returns transaction ID.
    function addTransaction(
        address destination,
        uint value,
        bytes memory data
    ) internal
    notNull(destination) returns (uint transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
        destination : destination,
        value : value,
        data : data,
        executed : false
        });
        transactionCount += 1;
        emit Submission(transactionId);
    }

    /*
     * Web3 call functions
     */
    /// @dev Returns number of confirmations of a transaction.
    /// @param transactionId Transaction ID.
    /// @return count Number of confirmations.
    function getConfirmationCount(uint transactionId)
    public
    view
    returns (uint count)
    {
        for (uint i = 0; i < owners.length; i++)
            if (confirmations[transactionId][owners[i]])
                count += 1;
    }

    /// @dev Returns total number of transactions after filers are applied.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return count Total number of transactions after filters are applied.
    function getTransactionCount(bool pending, bool executed)
    public
    view
    returns (uint count)
    {
        for (uint i = 0; i < transactionCount; i++)
            if (pending && !transactions[i].executed
            || executed && transactions[i].executed)
                count += 1;
    }

    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners() public view returns (address[] memory)
    {
        return owners;
    }

    /// @dev Returns array with owner addresses, which confirmed transaction.
    /// @param transactionId Transaction ID.
    /// @return _confirmations Returns array of owner addresses.
    function getConfirmations(uint transactionId) public view
    returns (address[] memory _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint count = 0;
        uint i;
        for (i = 0; i < owners.length; i++)
            if (confirmations[transactionId][owners[i]]) {
                confirmationsTemp[count] = owners[i];
                count += 1;
            }
        _confirmations = new address[](count);
        for (i = 0; i < count; i++)
            _confirmations[i] = confirmationsTemp[i];
    }

    /// @dev Returns list of transaction IDs in defined range.
    /// @param from Index start position of transaction array.
    /// @param to Index end position of transaction array.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return _transactionIds Returns array of transaction IDs.
    function getTransactionIds(uint from, uint to, bool pending, bool executed)
    public
    view
    returns (uint[] memory _transactionIds)
    {
        uint[] memory transactionIdsTemp = new uint[](transactionCount);
        uint count = 0;
        uint i;
        for (i = 0; i < transactionCount; i++)
            if (pending && !transactions[i].executed
            || executed && transactions[i].executed)
            {
                transactionIdsTemp[count] = i;
                count += 1;
            }
        _transactionIds = new uint[](to - from);
        for (i = from; i < to; i++)
            _transactionIds[i - from] = transactionIdsTemp[i];
    }
}

File 6 of 6 : console.sol
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

Settings
{
  "evmVersion": "byzantium",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256","name":"_required","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Execution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"required","type":"uint256"}],"name":"RequirementChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Revocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"Submission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"MAX_OWNER_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"_upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_required","type":"uint256"}],"name":"changeRequirement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"confirmTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"confirmations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"getConfirmationCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"getConfirmations","outputs":[{"internalType":"address[]","name":"_confirmations","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pending","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"name":"getTransactionCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"bool","name":"pending","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"name":"getTransactionIds","outputs":[{"internalType":"uint256[]","name":"_transactionIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"replaceOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"required","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"submitTransaction","outputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200285f3803806200285f833981016040819052620000349162000645565b8181815181603282111580156200004b5750818111155b80156200005757508015155b80156200006357508115155b6200006d57600080fd5b60005b845181101562000163576002600086838151811062000093576200009362000821565b602090810291909101810151600160a060020a031682528101919091526040016000205460ff16158015620000f757506000600160a060020a0316858281518110620000e357620000e362000821565b6020026020010151600160a060020a031614155b6200010157600080fd5b6001600260008784815181106200011c576200011c62000821565b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055806200015a81620007de565b91505062000070565b5083516200017990600390602087019062000511565b5050506004555062000194846401000000006200021b810204565b825115620001b857620001b68484640100000000620015686200034a82021704565b505b33620001f27fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036401000000006200158d6200038282021704565b8054600160a060020a031916600160a060020a0392909216919091179055506200087f92505050565b6200023481640100000000620015906200038582021704565b620002c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b80620003007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6401000000006200158d6200038282021704565b8054600160a060020a031916600160a060020a03928316179055604051908216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200037b838360405180606001604052806027815260200162002838602791396401000000006200038b810204565b9392505050565b90565b3b151590565b6060620003a18464010000000062000385810204565b6200042f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401620002bd565b60008085600160a060020a0316856040516200044c919062000725565b600060405180830381855af49150503d806000811462000489576040519150601f19603f3d011682016040523d82523d6000602084013e6200048e565b606091505b5091509150620004af828286620004b9640100000000026401000000009004565b9695505050505050565b60608315620004ca5750816200037b565b825115620004db5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002bd919062000743565b82805482825590600052602060002090810192821562000569579160200282015b82811115620005695782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000532565b50620005779291506200057b565b5090565b5b808211156200057757600081556001016200057c565b8051600160a060020a0381168114620005aa57600080fd5b919050565b600082601f830112620005c157600080fd5b815160206001604060020a03821115620005df57620005df62000850565b808202620005ef82820162000778565b8381528281019086840183880185018910156200060b57600080fd5b600093505b858410156200063957620006248162000592565b83526001939093019291840191840162000610565b50979650505050505050565b600080600080608085870312156200065c57600080fd5b620006678562000592565b935060208501516001604060020a03808211156200068457600080fd5b818701915087601f8301126200069957600080fd5b815181811115620006ae57620006ae62000850565b620006c3601f8201601f191660200162000778565b818152896020838601011115620006d957600080fd5b620006ec826020830160208701620007ab565b6040890151909650925050808211156200070557600080fd5b506200071487828801620005af565b606096909601519497939650505050565b6000825162000739818460208701620007ab565b9190910192915050565b602081526000825180602084015262000764816040850160208701620007ab565b601f01601f19169190910160400192915050565b604051601f8201601f191681016001604060020a0381118282101715620007a357620007a362000850565b604052919050565b60005b83811015620007c8578181015183820152602001620007ae565b83811115620007d8576000848401525b50505050565b60006000198214156200081a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fa9806200088f6000396000f3fe608060405260043610610187576000357c0100000000000000000000000000000000000000000000000000000000900480639ace38c2116100ee578063ba885381116100a7578063d74f8edd11610081578063d74f8edd14610487578063dc8452cd1461049c578063e20056e6146104b2578063ee22610b146104d257610196565b8063ba88538114610434578063c01a8c8414610447578063c64274741461046757610196565b80639ace38c21461035f578063a0e67e2b1461038f578063a8abe69a146103b1578063b5dc40c3146103de578063b77bf600146103fe578063ba51a6df1461041457610196565b80634f1ef286116101405780634f1ef286146102a957806354741525146102bc5780635c60da1b146102ea5780637065cb48146102ff578063784547a71461031f5780638b51d13f1461033f57610196565b8063025e7c271461019e578063173825d9146101db57806320ea8d86146101fb5780632f54bf6e1461021b5780633411c81c1461025b5780633659cfe61461029657610196565b36610196576101946104f2565b005b6101946104f2565b3480156101aa57600080fd5b506101be6101b9366004611c30565b61052d565b604051600160a060020a0390911681526020015b60405180910390f35b3480156101e757600080fd5b506101946101f6366004611a90565b610557565b34801561020757600080fd5b50610194610216366004611c30565b61071b565b34801561022757600080fd5b5061024b610236366004611a90565b60026020526000908152604090205460ff1681565b60405190151581526020016101d2565b34801561026757600080fd5b5061024b610276366004611c49565b600160209081526000928352604080842090915290825290205460ff1681565b6101946102a4366004611a90565b6107d1565b6101946102b7366004611ade565b61089e565b3480156102c857600080fd5b506102dc6102d7366004611c06565b6108fc565b6040519081526020016101d2565b3480156102f657600080fd5b506101be610979565b34801561030b57600080fd5b5061019461031a366004611a90565b6109b1565b34801561032b57600080fd5b5061024b61033a366004611c30565b610ad7565b34801561034b57600080fd5b506102dc61035a366004611c30565b610b76565b34801561036b57600080fd5b5061037f61037a366004611c30565b610bfc565b6040516101d29493929190611d63565b34801561039b57600080fd5b506103a4610cba565b6040516101d29190611d9e565b3480156103bd57600080fd5b506103d16103cc366004611c6c565b610d1c565b6040516101d29190611deb565b3480156103ea57600080fd5b506103a46103f9366004611c30565b610eb4565b34801561040a57600080fd5b506102dc60055481565b34801561042057600080fd5b5061019461042f366004611c30565b61108c565b610194610442366004611b61565b611109565b34801561045357600080fd5b50610194610462366004611c30565b611133565b34801561047357600080fd5b506102dc610482366004611baf565b6111f3565b34801561049357600080fd5b506102dc603281565b3480156104a857600080fd5b506102dc60045481565b3480156104be57600080fd5b506101946104cd366004611aab565b611212565b3480156104de57600080fd5b506101946104ed366004611c30565b6113a5565b61052b6105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b611596565b565b6003818154811061053d57600080fd5b600091825260209091200154600160a060020a0316905081565b33301461056357600080fd5b600160a060020a038116600090815260026020526040902054819060ff1661058a57600080fd5b600160a060020a0382166000908152600260205260408120805460ff191690555b6003546105ba90600190611e4e565b81101561068a5782600160a060020a0316600382815481106105de576105de611f1a565b600091825260209091200154600160a060020a03161415610678576003805461060990600190611e4e565b8154811061061957610619611f1a565b60009182526020909120015460038054600160a060020a03909216918390811061064557610645611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061068a565b8061068281611ecd565b9150506105ab565b50600380548061069c5761069c611f01565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905560035460045411156106e3576003546106e39061108c565b604051600160a060020a038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b3360008181526002602052604090205460ff1661073757600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1661076157600080fd5b600084815260208190526040902060030154849060ff161561078257600080fd5b6000858152600160209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b3360008181526002602052604090205460ff166107ed57600080fd5b61089930347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc908560405180602001604052806000815250604051602401610835929190611d39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111f3565b505050565b3360008181526002602052604090205460ff166108ba57600080fd5b6108f530347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc9087878760405160240161083593929190611cfa565b5050505050565b6000805b60055481101561097257838015610929575060008181526020819052604090206003015460ff16155b8061094d575082801561094d575060008181526020819052604090206003015460ff165b156109605761095d600183611e36565b91505b8061096a81611ecd565b915050610900565b5092915050565b60006109ac7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b905090565b3330146109bd57600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e557600080fd5b81600160a060020a0381166109f957600080fd5b600354610a07906001611e36565b60045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b610a3a57600080fd5b600160a060020a038516600081815260026020526040808220805460ff1916600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b6c5760008481526001602052604081206003805491929184908110610b0b57610b0b611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610b4657610b43600183611e36565b91505b600454821415610b5a575060019392505050565b80610b6481611ecd565b915050610adc565b5060009392505050565b6000805b600354811015610bf65760008381526001602052604081206003805491929184908110610ba957610ba9611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610be457610be1600183611e36565b91505b80610bee81611ecd565b915050610b7a565b50919050565b600060208190529081526040902080546001820154600283018054600160a060020a03909316939192610c2e90611e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90611e95565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610cf4575b5050505050905090565b6060600060055467ffffffffffffffff811115610d3b57610d3b611f33565b604051908082528060200260200182016040528015610d64578160200160208202803683370190505b5090506000805b600554811015610dfb57858015610d94575060008181526020819052604090206003015460ff16155b80610db85750848015610db8575060008181526020819052604090206003015460ff165b15610de95780838381518110610dd057610dd0611f1a565b6020908102919091010152610de6600183611e36565b91505b80610df381611ecd565b915050610d6b565b610e058888611e4e565b67ffffffffffffffff811115610e1d57610e1d611f33565b604051908082528060200260200182016040528015610e46578160200160208202803683370190505b5093508790505b86811015610ea957828181518110610e6757610e67611f1a565b6020026020010151848983610e7c9190611e4e565b81518110610e8c57610e8c611f1a565b602090810291909101015280610ea181611ecd565b915050610e4d565b505050949350505050565b60035460609060009067ffffffffffffffff811115610ed557610ed5611f33565b604051908082528060200260200182016040528015610efe578160200160208202803683370190505b5090506000805b600354811015610fdc5760008581526001602052604081206003805491929184908110610f3457610f34611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610fca5760038181548110610f7457610f74611f1a565b9060005260206000200160009054906101000a9004600160a060020a0316838381518110610fa457610fa4611f1a565b600160a060020a0390921660209283029190910190910152610fc7600183611e36565b91505b80610fd481611ecd565b915050610f05565b8167ffffffffffffffff811115610ff557610ff5611f33565b60405190808252806020026020018201604052801561101e578160200160208202803683370190505b509350600090505b818110156110845782818151811061104057611040611f1a565b602002602001015184828151811061105a5761105a611f1a565b600160a060020a03909216602092830291909101909101528061107c81611ecd565b915050611026565b505050919050565b33301461109857600080fd5b60035481603282118015906110ad5750818111155b80156110b857508015155b80156110c357508115155b6110cc57600080fd5b60048390556040518381527fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9060200160405180910390a1505050565b33301461111557600080fd5b61111e826115ba565b80511561112f576108998282611568565b5050565b3360008181526002602052604090205460ff1661114f57600080fd5b6000828152602081905260409020548290600160a060020a031661117257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561119d57600080fd5b6000858152600160208181526040808420338086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108f5856113a5565b60006112008484846116c3565b905061120b81611133565b9392505050565b33301461121e57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1661124557600080fd5b600160a060020a038216600090815260026020526040902054829060ff161561126d57600080fd5b60005b60035481101561130b5784600160a060020a03166003828154811061129757611297611f1a565b600091825260209091200154600160a060020a031614156112f95783600382815481106112c6576112c6611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061130b565b8061130381611ecd565b915050611270565b50600160a060020a03808516600081815260026020526040808220805460ff1990811690915593871682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038416907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a250505050565b3360008181526002602052604090205460ff166113c157600080fd5b60008281526001602090815260408083203380855292529091205483919060ff166113eb57600080fd5b600084815260208190526040902060030154849060ff161561140c57600080fd5b61141585610ad7565b156108f557600085815260208190526040902060038101805460ff191660019081179091558154908201546002830180546114f393600160a060020a031692919061145f90611e95565b905084600201805461147090611e95565b80601f016020809104026020016040519081016040528092919081815260200182805461149c90611e95565b80156114e95780601f106114be576101008083540402835291602001916114e9565b820191906000526020600020905b8154815290600101906020018083116114cc57829003601f168201915b50505050506117c3565b156115285760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611560565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038101805460ff191690555b505050505050565b606061120b8383604051806060016040528060278152602001611f4d602791396117e6565b90565b3b151590565b3660008037600080366000845af43d6000803e8080156115b5573d6000f35b3d6000fd5b803b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600083600160a060020a0381166116d957600080fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff19169416939093178355516001830155925180519496509193909261175992600285019291019061193e565b50606091909101516003909101805460ff1916911515919091179055600580546001919060009061178b908490611e36565b909155505060405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b6000806040516020840160008287838a8c618fca5a03f198975050505050505050565b6060833b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401611644565b60008085600160a060020a0316856040516118919190611cde565b600060405180830381855af49150503d80600081146118cc576040519150601f19603f3d011682016040523d82523d6000602084013e6118d1565b606091505b50915091506118e18282866118eb565b9695505050505050565b606083156118fa57508161120b565b82511561190a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449190611e23565b82805461194a90611e95565b90600052602060002090601f01602090048101928261196c57600085556119b2565b82601f1061198557805160ff19168380011785556119b2565b828001600101855582156119b2579182015b828111156119b2578251825591602001919060010190611997565b506119be9291506119c2565b5090565b5b808211156119be57600081556001016119c3565b8035600160a060020a03811681146119ee57600080fd5b919050565b803580151581146119ee57600080fd5b600082601f830112611a1457600080fd5b813567ffffffffffffffff80821115611a2f57611a2f611f33565b604051601f8301601f19908116603f01168101908282118183101715611a5757611a57611f33565b81604052838152866020858801011115611a7057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611aa257600080fd5b61120b826119d7565b60008060408385031215611abe57600080fd5b611ac7836119d7565b9150611ad5602084016119d7565b90509250929050565b600080600060408486031215611af357600080fd5b611afc846119d7565b9250602084013567ffffffffffffffff80821115611b1957600080fd5b818601915086601f830112611b2d57600080fd5b813581811115611b3c57600080fd5b876020828501011115611b4e57600080fd5b6020830194508093505050509250925092565b60008060408385031215611b7457600080fd5b611b7d836119d7565b9150602083013567ffffffffffffffff811115611b9957600080fd5b611ba585828601611a03565b9150509250929050565b600080600060608486031215611bc457600080fd5b611bcd846119d7565b925060208401359150604084013567ffffffffffffffff811115611bf057600080fd5b611bfc86828701611a03565b9150509250925092565b60008060408385031215611c1957600080fd5b611c22836119f3565b9150611ad5602084016119f3565b600060208284031215611c4257600080fd5b5035919050565b60008060408385031215611c5c57600080fd5b82359150611ad5602084016119d7565b60008060008060808587031215611c8257600080fd5b8435935060208501359250611c99604086016119f3565b9150611ca7606086016119f3565b905092959194509250565b60008151808452611cca816020860160208601611e65565b601f01601f19169290920160200192915050565b60008251611cf0818460208701611e65565b9190910192915050565b600160a060020a038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600160a060020a0383168152604060208201526000611d5b6040830184611cb2565b949350505050565b600160a060020a0385168152836020820152608060408201526000611d8b6080830185611cb2565b9050821515606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf578351600160a060020a031683529284019291840191600101611dba565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf57835183529284019291840191600101611e07565b60208152600061120b6020830184611cb2565b60008219821115611e4957611e49611ee8565b500190565b600082821015611e6057611e60611ee8565b500390565b60005b83811015611e80578181015183820152602001611e68565b83811115611e8f576000848401525b50505050565b600281046001821680611ea957607f821691505b60208210811415610bf65760e060020a634e487b7102600052602260045260246000fd5b6000600019821415611ee157611ee1611ee8565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052604160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220558728c0a320f4caa2d0ad93c90eb723e3aaa33a04102dd7eef27686a8aa796864736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000001604169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d800000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85

Deployed Bytecode

0x608060405260043610610187576000357c0100000000000000000000000000000000000000000000000000000000900480639ace38c2116100ee578063ba885381116100a7578063d74f8edd11610081578063d74f8edd14610487578063dc8452cd1461049c578063e20056e6146104b2578063ee22610b146104d257610196565b8063ba88538114610434578063c01a8c8414610447578063c64274741461046757610196565b80639ace38c21461035f578063a0e67e2b1461038f578063a8abe69a146103b1578063b5dc40c3146103de578063b77bf600146103fe578063ba51a6df1461041457610196565b80634f1ef286116101405780634f1ef286146102a957806354741525146102bc5780635c60da1b146102ea5780637065cb48146102ff578063784547a71461031f5780638b51d13f1461033f57610196565b8063025e7c271461019e578063173825d9146101db57806320ea8d86146101fb5780632f54bf6e1461021b5780633411c81c1461025b5780633659cfe61461029657610196565b36610196576101946104f2565b005b6101946104f2565b3480156101aa57600080fd5b506101be6101b9366004611c30565b61052d565b604051600160a060020a0390911681526020015b60405180910390f35b3480156101e757600080fd5b506101946101f6366004611a90565b610557565b34801561020757600080fd5b50610194610216366004611c30565b61071b565b34801561022757600080fd5b5061024b610236366004611a90565b60026020526000908152604090205460ff1681565b60405190151581526020016101d2565b34801561026757600080fd5b5061024b610276366004611c49565b600160209081526000928352604080842090915290825290205460ff1681565b6101946102a4366004611a90565b6107d1565b6101946102b7366004611ade565b61089e565b3480156102c857600080fd5b506102dc6102d7366004611c06565b6108fc565b6040519081526020016101d2565b3480156102f657600080fd5b506101be610979565b34801561030b57600080fd5b5061019461031a366004611a90565b6109b1565b34801561032b57600080fd5b5061024b61033a366004611c30565b610ad7565b34801561034b57600080fd5b506102dc61035a366004611c30565b610b76565b34801561036b57600080fd5b5061037f61037a366004611c30565b610bfc565b6040516101d29493929190611d63565b34801561039b57600080fd5b506103a4610cba565b6040516101d29190611d9e565b3480156103bd57600080fd5b506103d16103cc366004611c6c565b610d1c565b6040516101d29190611deb565b3480156103ea57600080fd5b506103a46103f9366004611c30565b610eb4565b34801561040a57600080fd5b506102dc60055481565b34801561042057600080fd5b5061019461042f366004611c30565b61108c565b610194610442366004611b61565b611109565b34801561045357600080fd5b50610194610462366004611c30565b611133565b34801561047357600080fd5b506102dc610482366004611baf565b6111f3565b34801561049357600080fd5b506102dc603281565b3480156104a857600080fd5b506102dc60045481565b3480156104be57600080fd5b506101946104cd366004611aab565b611212565b3480156104de57600080fd5b506101946104ed366004611c30565b6113a5565b61052b6105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b611596565b565b6003818154811061053d57600080fd5b600091825260209091200154600160a060020a0316905081565b33301461056357600080fd5b600160a060020a038116600090815260026020526040902054819060ff1661058a57600080fd5b600160a060020a0382166000908152600260205260408120805460ff191690555b6003546105ba90600190611e4e565b81101561068a5782600160a060020a0316600382815481106105de576105de611f1a565b600091825260209091200154600160a060020a03161415610678576003805461060990600190611e4e565b8154811061061957610619611f1a565b60009182526020909120015460038054600160a060020a03909216918390811061064557610645611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061068a565b8061068281611ecd565b9150506105ab565b50600380548061069c5761069c611f01565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905560035460045411156106e3576003546106e39061108c565b604051600160a060020a038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b3360008181526002602052604090205460ff1661073757600080fd5b60008281526001602090815260408083203380855292529091205483919060ff1661076157600080fd5b600084815260208190526040902060030154849060ff161561078257600080fd5b6000858152600160209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b3360008181526002602052604090205460ff166107ed57600080fd5b61089930347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc908560405180602001604052806000815250604051602401610835929190611d39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526111f3565b505050565b3360008181526002602052604090205460ff166108ba57600080fd5b6108f530347fba885381e9e37cc12b642007ef2e8679381eb527b676e6a3d428e0378e8cbc9087878760405160240161083593929190611cfa565b5050505050565b6000805b60055481101561097257838015610929575060008181526020819052604090206003015460ff16155b8061094d575082801561094d575060008181526020819052604090206003015460ff165b156109605761095d600183611e36565b91505b8061096a81611ecd565b915050610900565b5092915050565b60006109ac7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600160a060020a031690565b905090565b3330146109bd57600080fd5b600160a060020a038116600090815260026020526040902054819060ff16156109e557600080fd5b81600160a060020a0381166109f957600080fd5b600354610a07906001611e36565b60045460328211158015610a1b5750818111155b8015610a2657508015155b8015610a3157508115155b610a3a57600080fd5b600160a060020a038516600081815260026020526040808220805460ff1916600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600080805b600354811015610b6c5760008481526001602052604081206003805491929184908110610b0b57610b0b611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610b4657610b43600183611e36565b91505b600454821415610b5a575060019392505050565b80610b6481611ecd565b915050610adc565b5060009392505050565b6000805b600354811015610bf65760008381526001602052604081206003805491929184908110610ba957610ba9611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610be457610be1600183611e36565b91505b80610bee81611ecd565b915050610b7a565b50919050565b600060208190529081526040902080546001820154600283018054600160a060020a03909316939192610c2e90611e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5a90611e95565b8015610ca75780601f10610c7c57610100808354040283529160200191610ca7565b820191906000526020600020905b815481529060010190602001808311610c8a57829003601f168201915b5050506003909301549192505060ff1684565b60606003805480602002602001604051908101604052809291908181526020018280548015610d1257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610cf4575b5050505050905090565b6060600060055467ffffffffffffffff811115610d3b57610d3b611f33565b604051908082528060200260200182016040528015610d64578160200160208202803683370190505b5090506000805b600554811015610dfb57858015610d94575060008181526020819052604090206003015460ff16155b80610db85750848015610db8575060008181526020819052604090206003015460ff165b15610de95780838381518110610dd057610dd0611f1a565b6020908102919091010152610de6600183611e36565b91505b80610df381611ecd565b915050610d6b565b610e058888611e4e565b67ffffffffffffffff811115610e1d57610e1d611f33565b604051908082528060200260200182016040528015610e46578160200160208202803683370190505b5093508790505b86811015610ea957828181518110610e6757610e67611f1a565b6020026020010151848983610e7c9190611e4e565b81518110610e8c57610e8c611f1a565b602090810291909101015280610ea181611ecd565b915050610e4d565b505050949350505050565b60035460609060009067ffffffffffffffff811115610ed557610ed5611f33565b604051908082528060200260200182016040528015610efe578160200160208202803683370190505b5090506000805b600354811015610fdc5760008581526001602052604081206003805491929184908110610f3457610f34611f1a565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610fca5760038181548110610f7457610f74611f1a565b9060005260206000200160009054906101000a9004600160a060020a0316838381518110610fa457610fa4611f1a565b600160a060020a0390921660209283029190910190910152610fc7600183611e36565b91505b80610fd481611ecd565b915050610f05565b8167ffffffffffffffff811115610ff557610ff5611f33565b60405190808252806020026020018201604052801561101e578160200160208202803683370190505b509350600090505b818110156110845782818151811061104057611040611f1a565b602002602001015184828151811061105a5761105a611f1a565b600160a060020a03909216602092830291909101909101528061107c81611ecd565b915050611026565b505050919050565b33301461109857600080fd5b60035481603282118015906110ad5750818111155b80156110b857508015155b80156110c357508115155b6110cc57600080fd5b60048390556040518381527fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9060200160405180910390a1505050565b33301461111557600080fd5b61111e826115ba565b80511561112f576108998282611568565b5050565b3360008181526002602052604090205460ff1661114f57600080fd5b6000828152602081905260409020548290600160a060020a031661117257600080fd5b60008381526001602090815260408083203380855292529091205484919060ff161561119d57600080fd5b6000858152600160208181526040808420338086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108f5856113a5565b60006112008484846116c3565b905061120b81611133565b9392505050565b33301461121e57600080fd5b600160a060020a038216600090815260026020526040902054829060ff1661124557600080fd5b600160a060020a038216600090815260026020526040902054829060ff161561126d57600080fd5b60005b60035481101561130b5784600160a060020a03166003828154811061129757611297611f1a565b600091825260209091200154600160a060020a031614156112f95783600382815481106112c6576112c6611f1a565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a0316021790555061130b565b8061130381611ecd565b915050611270565b50600160a060020a03808516600081815260026020526040808220805460ff1990811690915593871682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038416907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a250505050565b3360008181526002602052604090205460ff166113c157600080fd5b60008281526001602090815260408083203380855292529091205483919060ff166113eb57600080fd5b600084815260208190526040902060030154849060ff161561140c57600080fd5b61141585610ad7565b156108f557600085815260208190526040902060038101805460ff191660019081179091558154908201546002830180546114f393600160a060020a031692919061145f90611e95565b905084600201805461147090611e95565b80601f016020809104026020016040519081016040528092919081815260200182805461149c90611e95565b80156114e95780601f106114be576101008083540402835291602001916114e9565b820191906000526020600020905b8154815290600101906020018083116114cc57829003601f168201915b50505050506117c3565b156115285760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611560565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038101805460ff191690555b505050505050565b606061120b8383604051806060016040528060278152602001611f4d602791396117e6565b90565b3b151590565b3660008037600080366000845af43d6000803e8080156115b5573d6000f35b3d6000fd5b803b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600083600160a060020a0381166116d957600080fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff19169416939093178355516001830155925180519496509193909261175992600285019291019061193e565b50606091909101516003909101805460ff1916911515919091179055600580546001919060009061178b908490611e36565b909155505060405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b6000806040516020840160008287838a8c618fca5a03f198975050505050505050565b6060833b611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401611644565b60008085600160a060020a0316856040516118919190611cde565b600060405180830381855af49150503d80600081146118cc576040519150601f19603f3d011682016040523d82523d6000602084013e6118d1565b606091505b50915091506118e18282866118eb565b9695505050505050565b606083156118fa57508161120b565b82511561190a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449190611e23565b82805461194a90611e95565b90600052602060002090601f01602090048101928261196c57600085556119b2565b82601f1061198557805160ff19168380011785556119b2565b828001600101855582156119b2579182015b828111156119b2578251825591602001919060010190611997565b506119be9291506119c2565b5090565b5b808211156119be57600081556001016119c3565b8035600160a060020a03811681146119ee57600080fd5b919050565b803580151581146119ee57600080fd5b600082601f830112611a1457600080fd5b813567ffffffffffffffff80821115611a2f57611a2f611f33565b604051601f8301601f19908116603f01168101908282118183101715611a5757611a57611f33565b81604052838152866020858801011115611a7057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611aa257600080fd5b61120b826119d7565b60008060408385031215611abe57600080fd5b611ac7836119d7565b9150611ad5602084016119d7565b90509250929050565b600080600060408486031215611af357600080fd5b611afc846119d7565b9250602084013567ffffffffffffffff80821115611b1957600080fd5b818601915086601f830112611b2d57600080fd5b813581811115611b3c57600080fd5b876020828501011115611b4e57600080fd5b6020830194508093505050509250925092565b60008060408385031215611b7457600080fd5b611b7d836119d7565b9150602083013567ffffffffffffffff811115611b9957600080fd5b611ba585828601611a03565b9150509250929050565b600080600060608486031215611bc457600080fd5b611bcd846119d7565b925060208401359150604084013567ffffffffffffffff811115611bf057600080fd5b611bfc86828701611a03565b9150509250925092565b60008060408385031215611c1957600080fd5b611c22836119f3565b9150611ad5602084016119f3565b600060208284031215611c4257600080fd5b5035919050565b60008060408385031215611c5c57600080fd5b82359150611ad5602084016119d7565b60008060008060808587031215611c8257600080fd5b8435935060208501359250611c99604086016119f3565b9150611ca7606086016119f3565b905092959194509250565b60008151808452611cca816020860160208601611e65565b601f01601f19169290920160200192915050565b60008251611cf0818460208701611e65565b9190910192915050565b600160a060020a038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b600160a060020a0383168152604060208201526000611d5b6040830184611cb2565b949350505050565b600160a060020a0385168152836020820152608060408201526000611d8b6080830185611cb2565b9050821515606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf578351600160a060020a031683529284019291840191600101611dba565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ddf57835183529284019291840191600101611e07565b60208152600061120b6020830184611cb2565b60008219821115611e4957611e49611ee8565b500190565b600082821015611e6057611e60611ee8565b500390565b60005b83811015611e80578181015183820152602001611e68565b83811115611e8f576000848401525b50505050565b600281046001821680611ea957607f821691505b60208210811415610bf65760e060020a634e487b7102600052602260045260246000fd5b6000600019821415611ee157611ee1611ee8565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052604160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220558728c0a320f4caa2d0ad93c90eb723e3aaa33a04102dd7eef27686a8aa796864736f6c63430008060033

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

0000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000001604169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d800000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85

-----Decoded View---------------
Arg [0] : _logic (address): 0x8F499Bc97B99EF413bAc02545040b701b86d2628
Arg [1] : _data (bytes): 0x169e7a9900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf388fcb8d0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca959ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce36451880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447ce3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea983538eea1820000000000000000000000000000000000000000000000000000000000000097000000000000000000000000162ba761fc75f5873197a340f9e7fb926ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e647456220000000000000000000000009b1822da3f6450832dd92713f49c075b2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacbecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c0262003d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421de582d072000000000000000000000000ce0131435386f95e527438a021424eb1224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e1581c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24ad110006000000000000000000000000f1e149223a0614f2da591db097fe95101c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e880910722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca9739699d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf24f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db85463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb45c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc424f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54ac996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc716dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996bddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93ca48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e3773683254d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e6641838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a4529e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a07148870b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e029c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0ed21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd7174b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab39526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e569159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f626e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd58776937f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f18104f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f231341cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb67621269938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc657d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d22760495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff0781ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b16212d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669ae09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f844c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf2435f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f3da97d55000000000000000000000000122555bdb0152564070453c447320aaa0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1f4bfcea300000000000000000000000090719a0fa1ed2902ddefc3936993147712ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a408c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3aeb6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf4990cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb9164919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea2269354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c47f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c831539ed3e320000000000000000000000003612882d4149d18a3604a6392b4596826c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9ccb91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1eed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b929fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1938546ba000000000000000000000000df43648a9748901a784c017821b05ba26274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec4267965fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8ccc3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc08699674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee55cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fef8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b808199d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf142200af599e7
Arg [2] : owners (address[]): 0xf3cb1e06e72233e0350F7588D11a2585B268C7AD,0xb017DcCC473499C83f1b553bE564f3CeAf002254,0xe620e1F969Bc3a24Ac96D527220AD6B6e2d12843,0xe8d204D3B12E643888DEBD525e2f8034fC7EB855,0xFe231E979dAe1D87Cd961Aa353221C0c754941d8,0x59C66c7E3D3F239961c87A4627F86a5a9049407C,0xa5E32D3fB342D9Ed3135fD5cb59a102AC8ED7B85
Arg [3] : _required (uint256): 4

-----Encoded View---------------
190 Constructor Arguments found :
Arg [0] : 0000000000000000000000008f499bc97b99ef413bac02545040b701b86d2628
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000016c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001604
Arg [5] : 169e7a9900000000000000000000000000000000000000000000000000000000
Arg [6] : 000000a000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000030000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000f00259b67b0646d84c1a5abc435943f5473232aec507bd899e83a00abf3
Arg [9] : 88fcb8d000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000a00000000000000000000000019cabc1e34ab0cc5c62daa1394f6022b
Arg [11] : 38b75c78000000000000000000000000b6db3c082d25c0dc26602334b5f3d270
Arg [12] : 091dc422000000000000000000000000fae075e12116fbfe65c58e1ef0e6ca95
Arg [13] : 9ca37ded000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead908
Arg [14] : 3c756cc200000000000000000000000000000000000000000000000000000000
Arg [15] : 0000016000000000000000000000000000000000000000000000000000000000
Arg [16] : 000001e000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000384000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000025800000000000000000000000000000000000000000000000000000000
Arg [21] : 0000000a00000000000000000000000000000000000000000000000000000000
Arg [22] : 00000003000000000000000000000000278a8c33ef2a7d7c682f458c85e9447c
Arg [23] : e364518800000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead908
Arg [25] : 3c756cc200000000000000000000000000000000000000000000000000000000
Arg [26] : 000000030000000000000000000000002b2d892c3fe2b4113dd7ac0d2c1882af
Arg [27] : 202fb28f000000000000000000000000278a8c33ef2a7d7c682f458c85e9447c
Arg [28] : e3645188000000000000000000000000e7c3607474e235ec8def1f0a63ea9835
Arg [29] : 38eea18200000000000000000000000000000000000000000000000000000000
Arg [30] : 00000097000000000000000000000000162ba761fc75f5873197a340f9e7fb92
Arg [31] : 6ba7517d000000000000000000000000129c0057af3f91d4fa729aea7910b46f
Arg [32] : 7ce3d08100000000000000000000000073574449cbed6213f5340e806e9dec36
Arg [33] : f05a25ec000000000000000000000000742c823ac6963f43e3fa218be3b8abb4
Arg [34] : b786bdbe0000000000000000000000009f8b33a65a61f3382904611020edc17e
Arg [35] : 647456220000000000000000000000009b1822da3f6450832dd92713f49c075b
Arg [36] : 2538f057000000000000000000000000fef2ea6607d891f30d916b207c62eacb
Arg [37] : ecfbb48a000000000000000000000000138687b0eb23fbe0bca74f2d60e37cb3
Arg [38] : e370e66c0000000000000000000000007cfbdda8ed4ba1bd1e826dfd5c026200
Arg [39] : 3d010b110000000000000000000000008ceb1b9f5d2603a2df7761fc5204421d
Arg [40] : e582d072000000000000000000000000ce0131435386f95e527438a021424eb1
Arg [41] : 224969c70000000000000000000000003b460775ac2c299b3717b46b2cc80e15
Arg [42] : 81c71f2a000000000000000000000000ac733dd5032ee3946058ff4c8a668090
Arg [43] : c0627ea40000000000000000000000008ee3ffb66b3a73a9366170b5d1335b24
Arg [44] : ad110006000000000000000000000000f1e149223a0614f2da591db097fe9510
Arg [45] : 1c46bdfc000000000000000000000000dcc27e312f77e8fca4cec1c7da80375b
Arg [46] : 29fcbe49000000000000000000000000eaa70cf46b0ab7d1b9e5670d250dae21
Arg [47] : c7752c7500000000000000000000000030b0b0f047f0fd0a769165b1f37e8809
Arg [48] : 10722a8e000000000000000000000000ab0f37183ba79ab089707dd084adce1e
Arg [49] : 83fa767e000000000000000000000000a3d52fdd6441358f4fd6456eca973969
Arg [50] : 9d19637d0000000000000000000000007e890ae8dc02e4004618d32ada2c0cf2
Arg [51] : 4f6496500000000000000000000000000fd04a8810c6ca7d20278a4c0f0cdb2b
Arg [52] : 763ed17a000000000000000000000000b4439fb83012557a1037ba897ba32db8
Arg [53] : 5463fcf500000000000000000000000006bc91fd5360136fae0ee2c4325e806d
Arg [54] : 2fef8c91000000000000000000000000ce70659202a4d172a13fe099598fa8c4
Arg [55] : e8d112d200000000000000000000000086b8fb21c1acda087c9c682b573b0eb4
Arg [56] : 5c6c0aa200000000000000000000000079eefefdd489d0b6a22225b31f8cffc4
Arg [57] : 24f3af030000000000000000000000008f64d0bc82557fd8c2be558382cdf793
Arg [58] : c48805c30000000000000000000000001cff2e3ae9e45f42b21423a13bedc2a8
Arg [59] : a4b793f2000000000000000000000000be3a417f13d8f878275d4fae20255250
Arg [60] : e6a027d60000000000000000000000001bc2d8e9f0289fca70b65db74e9ec54a
Arg [61] : c996fcf7000000000000000000000000b08ed49d231a7ae7a2107463e3656bee
Arg [62] : 9a7b52b200000000000000000000000069aa49661c21d196555230d6cbaa2a44
Arg [63] : a7efaea8000000000000000000000000c43b53dcaa928e7ea7cd4eec4ed69cc9
Arg [64] : cad6831e000000000000000000000000d0c394a55ed86d49b1d5417e2abd2bc7
Arg [65] : 16dd25bf000000000000000000000000a93d6cf6aa5de876351044017d1a996b
Arg [66] : ddaa7ef50000000000000000000000007873a27ff825bd0aea97040fcdb5fecb
Arg [67] : 16860be6000000000000000000000000c86d0450248d26c8ac57e05c25020b2a
Arg [68] : 9c9303950000000000000000000000005a97d3119fdd7790341195aea7473db5
Arg [69] : e472f5840000000000000000000000006a3a0ba256d62258426ce55d3dde5dce
Arg [70] : 230419d9000000000000000000000000db22968688bd5a999ed270d5fc92d93c
Arg [71] : a48e27ee00000000000000000000000004c60ec0f73358fb0f066248a852a5e5
Arg [72] : bbaf5f7d000000000000000000000000acaf7ebac25345732d62ed9e37736832
Arg [73] : 54d27145000000000000000000000000bad13a54ea55a54719b04c9c9c66e664
Arg [74] : 1838236d000000000000000000000000bf9a1a9ff27779d8bdafdcf1e0006c29
Arg [75] : dfa4a1f90000000000000000000000001e6a48718b5314630b1a5b232c03c764
Arg [76] : ee75a3da000000000000000000000000bde95b78ba9aafb0b32b006c37f0a452
Arg [77] : 9e4a3f47000000000000000000000000c71f56df3c7915ed3a5ca9092a071488
Arg [78] : 70b8eb4e000000000000000000000000408c6f2683ff22fd0bd22b23268673e0
Arg [79] : 29c6b58a00000000000000000000000057b49083224ade62bcca859151cdbd0e
Arg [80] : d21542430000000000000000000000001fd9fb1d037bde2438d03031a867ad34
Arg [81] : 134f7c3e00000000000000000000000074aad1e344507707fd69c711fc84f46e
Arg [82] : 15a7fdf1000000000000000000000000f9cf8775cd6697c1bb52fdbd9625c8f5
Arg [83] : fae6c62c0000000000000000000000000db5ba0246ea95952cee6185bddf2127
Arg [84] : a36b11e4000000000000000000000000ead0f93d61011d64cb8ec04b94a3dd71
Arg [85] : 74b3eb6000000000000000000000000068e89a6c875f19bd4352b460fa9e266e
Arg [86] : 966d2aa0000000000000000000000000ae839443a6e3b2780c215cc4383aed5a
Arg [87] : 8dd33402000000000000000000000000de05ea20ba8ffbd9b34e2d6ceedaac70
Arg [88] : ed81cb4c000000000000000000000000f98fa8f72531b8b46838a8b93869992d
Arg [89] : 2856ae3900000000000000000000000067ac377cbdd8ea9115d7e7824801d948
Arg [90] : ba871dfd00000000000000000000000054fd4d217f419ebcf3dc682d69307f9f
Arg [91] : 93f6c2f60000000000000000000000000bf8b6d38c75622929430c3bd6456d7d
Arg [92] : 5e4cbc72000000000000000000000000276ded8feac8a3ccb4ac443e73364ab3
Arg [93] : 9526f06b000000000000000000000000049ff380cf0c95d9998ad4bf05fdf127
Arg [94] : 061fe87a00000000000000000000000097faf64436bf6d385d438e5799170e56
Arg [95] : 9159242c00000000000000000000000046afaf062cc1b5497d0b3c84bd9fab74
Arg [96] : 873c63cf00000000000000000000000086d43d411523a26608f724de2d1852f6
Arg [97] : 26e875cc0000000000000000000000009cf1a5260f214c197a6f9eecd5877693
Arg [98] : 7f33b40c0000000000000000000000008c8915f998e2bf938cf82b3530269c38
Arg [99] : d4ad6ae20000000000000000000000004dae3a51049a390a253a941dc1a6f181
Arg [100] : 04f6d1c8000000000000000000000000421e84dc43b05a5db967adac16f23134
Arg [101] : 1cfb219500000000000000000000000029e273cd79d7c6d449744b5b681b0d6f
Arg [102] : 93c447cd00000000000000000000000033f37ee39e17a7ccc6ab3e42104ea636
Arg [103] : a8752538000000000000000000000000f50ec954b0e6f9e2c2939ffdcab84a92
Arg [104] : f53714f50000000000000000000000007a3599b88ea2068268b763dee8b8703d
Arg [105] : 21700df30000000000000000000000004df7e56ea65784c56d601d201ee2915b
Arg [106] : 9db66c7e000000000000000000000000d55bf79b35db54e28eadb9dfb6762126
Arg [107] : 9938608e000000000000000000000000b9830ecc83bd54a574d81f7ca04080bc
Arg [108] : 8299c98b0000000000000000000000002c19568e9ee6a9e3980ff6124301a9f7
Arg [109] : a2307813000000000000000000000000c48049fdeb138ce3472de4976539bfc6
Arg [110] : 57d9c3b9000000000000000000000000fe1f7c9ca6b109d22bff83579ac7a6d2
Arg [111] : e0e5e9c9000000000000000000000000a5e7d68aecf9578b604ccf461b9d2276
Arg [112] : 0495477d000000000000000000000000c0c05faca257d02dbe3f34b5c615ff07
Arg [113] : 81ce65f90000000000000000000000000a83aff99582d68aa08a6a8e8e8b1621
Arg [114] : 2d7567f0000000000000000000000000cf03bc13888a1ecb89c66b495b4e669a
Arg [115] : e09712da000000000000000000000000ba91099ae5da08064bf269f11621bb09
Arg [116] : b9d89ae10000000000000000000000000bf0315611cd24745d955a71d9c0f23f
Arg [117] : 7c2c0f0b0000000000000000000000001b0db8ca2f90781b0d80fe411f36934f
Arg [118] : 094d7a33000000000000000000000000a1d921c093e793d9d1a14298a9e3dbb5
Arg [119] : f130a658000000000000000000000000dcae77e5845c828e3765de97d2f98f59
Arg [120] : 232b8cab000000000000000000000000123a1048b72e14ddfe11a8a246860a84
Arg [121] : 199aa9e9000000000000000000000000b0c9db4cd4d8557a83ec113405568182
Arg [122] : db95958000000000000000000000000078253d5b6032ffbaa3357476c004a5f8
Arg [123] : 44c23d8300000000000000000000000020e61908877e5e4874d22b2581aeb803
Arg [124] : ed99062c00000000000000000000000000df8532681af85ec649e51c9e5c292b
Arg [125] : 6f03d0e0000000000000000000000000cb0cdf3f7df262e2e294524168f1d421
Arg [126] : c2512b01000000000000000000000000bc71a9e156ec8feea4f33dbc4469ffa8
Arg [127] : 662fd2fb000000000000000000000000d07b605e363ded3ca8f643ec225acccc
Arg [128] : 5f3de949000000000000000000000000c522a6f276999fa0a8574c837d91cf24
Arg [129] : 35f256bc000000000000000000000000afde7eae86fd37bd8e500bdac87a68e1
Arg [130] : 582133e1000000000000000000000000a79ceaf487a3933d08a0680ea5ea0963
Arg [131] : fee6d5b60000000000000000000000000b1f4bc6ef1282c065156c3cfc2d79f4
Arg [132] : d2803655000000000000000000000000a07c4aed3ee6f4425fcaa8b7926cca3f
Arg [133] : 3da97d55000000000000000000000000122555bdb0152564070453c447320aaa
Arg [134] : 0ab712ec0000000000000000000000008e9138a2ae378c4b1470699d4bd3a3b1
Arg [135] : f4bfcea300000000000000000000000090719a0fa1ed2902ddefc39369931477
Arg [136] : 12ad530300000000000000000000000094b4afa91c0e24e67b084ea56dda69ee
Arg [137] : 63ec0dd9000000000000000000000000ca8f5e2b46d1b736bd2363a9b70b70a4
Arg [138] : 08c2e062000000000000000000000000dd33fa00ae8e3b88b7e0c1b6be40c3ae
Arg [139] : b6047bd9000000000000000000000000bfab4eb93b8f6182110fb1d82cc6ed56
Arg [140] : 220aefc300000000000000000000000011716c7479d43737119dd10da4c8cf49
Arg [141] : 90cc7534000000000000000000000000555ef499a80519dec9f0fd305c6d679c
Arg [142] : 0ab2a4b800000000000000000000000043f2da6f301a87fccd2962c82bb5eb91
Arg [143] : 64919cb40000000000000000000000003f1e100b629763b5330e69ff129da8c5
Arg [144] : e603dfb9000000000000000000000000ad1b553c0a1a0c366ee062917cb66a43
Arg [145] : f1d79a4700000000000000000000000003149cbd44bbb9f72f651b4d0db48dd0
Arg [146] : f358ef3f000000000000000000000000248b1e5a3a157c65cfa2c8f43e8c55f9
Arg [147] : d8e41241000000000000000000000000c56f8419bc0d9bd669075de70aaea226
Arg [148] : 9354d5c700000000000000000000000084a7acd4a65ba22d6d16fea2df9908c4
Arg [149] : 7f2fabbd000000000000000000000000281614e111afbad37ef84aaff74c8315
Arg [150] : 39ed3e320000000000000000000000003612882d4149d18a3604a6392b459682
Arg [151] : 6c8fdc65000000000000000000000000ecb61494feddbdf4989ef2579ee8f9cc
Arg [152] : b91e473b0000000000000000000000000c6ca6f2c9b41884ec3abeb659ba1d1e
Arg [153] : ed82cb8f000000000000000000000000bec6eb5a834cd23738eb7ec293ef11af
Arg [154] : 9955c6720000000000000000000000008f767f33afd062b0fe5da47223529fda
Arg [155] : 412ba7910000000000000000000000006cb4dd53adb878858767a4666f2e4ee7
Arg [156] : cdf9d5cb0000000000000000000000000a3ba1da9d6203d28a208952323f44b9
Arg [157] : 29fda3a80000000000000000000000008efe37febecdae467ac83549464e37f7
Arg [158] : e25fd74b000000000000000000000000de0d970b653d352391c3a4cce0e70bd1
Arg [159] : 938546ba000000000000000000000000df43648a9748901a784c017821b05ba2
Arg [160] : 6274898c0000000000000000000000009999d29a1df911aa8bf4b0bf81eabb65
Arg [161] : dda05299000000000000000000000000111b35d671c7d8e80cc5cb01ec426796
Arg [162] : 5fbd648d00000000000000000000000081e955e967213fdf2476a451d97ac8cc
Arg [163] : c3399a98000000000000000000000000a7273df94c37e7c024761a13e1575104
Arg [164] : eeda1714000000000000000000000000c967d362468c0683cbbc29ca05fc0869
Arg [165] : 9674f403000000000000000000000000085d1113afdcd9709e3e9506e5a0e142
Arg [166] : c3d2e1dc000000000000000000000000d73b65cec8c2c1697db90dbb5a321bc7
Arg [167] : 741a640b000000000000000000000000869dbca06bc1d1f6b0f67abe9e7e4ee5
Arg [168] : 5cc2c57c000000000000000000000000ca1f8bcfb1edf02d2701923a20d395ec
Arg [169] : 4dbda60b000000000000000000000000af106234f2dfed3c1265c02c1702a9fe
Arg [170] : f8a80cc5000000000000000000000000dd39170089c49538a2b08827fa95413f
Arg [171] : 8428bdfc0000000000000000000000006f845d7fbdb121607f7f317e381b8081
Arg [172] : 99d5db8d0000000000000000000000007b56cac281a096bb42a48f807a4db75e
Arg [173] : 6b9686a7000000000000000000000000a7afbed971071011459cfc4781cb9ddd
Arg [174] : 7068fa040000000000000000000000008e11f754808929ee8cb7def770fc6979
Arg [175] : f74999af0000000000000000000000009db5e882011f89c338c63f59ad330e30
Arg [176] : dcf11787000000000000000000000000d34ea40ea7f07dbc5a7357a848d9a78b
Arg [177] : 986648a60000000000000000000000001084c027162ac971d4c2b26ec4168ec5
Arg [178] : c19b7f5500000000000000000000000067c14e9f4f2aade77da35bf24e36bd76
Arg [179] : de21060d0000000000000000000000009b4b0e8262725b7f896dd7dd97152cdd
Arg [180] : 18d97495000000000000000000000000de3f6d974e58f17a9fbe898beaf14220
Arg [181] : 0af599e700000000000000000000000000000000000000000000000000000000
Arg [182] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [183] : 000000000000000000000000f3cb1e06e72233e0350f7588d11a2585b268c7ad
Arg [184] : 000000000000000000000000b017dccc473499c83f1b553be564f3ceaf002254
Arg [185] : 000000000000000000000000e620e1f969bc3a24ac96d527220ad6b6e2d12843
Arg [186] : 000000000000000000000000e8d204d3b12e643888debd525e2f8034fc7eb855
Arg [187] : 000000000000000000000000fe231e979dae1d87cd961aa353221c0c754941d8
Arg [188] : 00000000000000000000000059c66c7e3d3f239961c87a4627f86a5a9049407c
Arg [189] : 000000000000000000000000a5e32d3fb342d9ed3135fd5cb59a102ac8ed7b85


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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
Loading...
Loading
[ 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.