Contract 0x1bd2a26998dcecb695defd164e2b611f83ed37a4

Contract Overview

Balance:
0.025670597777811535 MATIC

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf213cb0b5ecb803f68cdafa1915e16e1475d93e02cee22d6bc8d49e6d895e701Transfer292991842022-11-23 16:44:043 days 22 hrs ago0x757c008f0ac1df63ff88ef1bb83ce05426273c95 IN  0x1bd2a26998dcecb695defd164e2b611f83ed37a41 MATIC0.000047385 1.500000008
0xab3264e1dce45cf136bdaddd8d64ee3d4f71928f8ceda9bf1f29de618d411a2eDeposit USDT292991422022-11-23 16:40:343 days 22 hrs ago0x757c008f0ac1df63ff88ef1bb83ce05426273c95 IN  0x1bd2a26998dcecb695defd164e2b611f83ed37a40 MATIC0.0000993920871.079000025
0xc11ceaec5170125d45e65af895712b850a341e8770690933b1f2236317899125Create Task292991412022-11-23 16:40:293 days 22 hrs ago0x757c008f0ac1df63ff88ef1bb83ce05426273c95 IN  0x1bd2a26998dcecb695defd164e2b611f83ed37a40.01 MATIC0.0023134796371.079000025
0xb3f3cdd1ababab7686853df361a21f334c1a561667141edc0a560dd2a53971ee0x61012060292991322022-11-23 16:39:433 days 22 hrs ago0x757c008f0ac1df63ff88ef1bb83ce05426273c95 IN  Create: swapHelperDiyTask20 MATIC0.0050675538291.079000025
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe866c75b70aad4b3e42250a7731d2ffbd59f783b04e840a18b68e1a674faa36e293158792022-11-24 15:59:402 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.0009961627917436 MATIC
0xb728626e23a1c1564100bfec61ae562ea540a717b0355d3924fbd2f40b65807c293158632022-11-24 15:58:202 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001014731954102854 MATIC
0x429b7d26329f817a3e5490adf64495910cf42e0fd40b40bd2c593b262e06632d293158492022-11-24 15:57:102 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000982613831550962 MATIC
0x2d37a343b8230ab1f01e464d33bea42c64bc15906bbce8771d6386bdeb952999293158352022-11-24 15:55:592 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000966071529754227 MATIC
0xe085161b4f15a7e9794589d6e7903b5bfbbea026da422cedea3bb78dda4e8f36293158092022-11-24 15:53:492 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001014631121539798 MATIC
0xce59c5d4dad0b77efb687c569b89bf077c0ed7ce9eaa283df0b50da5d31e6dff293158032022-11-24 15:53:192 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.00096951520591445 MATIC
0x64bc00a453f228909e02caa67eac19b69ff5225cb1e55430df256b4b77873c61293157892022-11-24 15:52:092 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001068896490288926 MATIC
0xc36ab2836247c9aef26dc96201739f251cd2f16106936526f530963da8f2ef61293157722022-11-24 15:50:432 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000996162792470937 MATIC
0x5c94a1a4a3e8823d6d451011de80fc6868ea49a2e0b4374c84ea58b9ad841a5b293157542022-11-24 15:49:132 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001000867446026136 MATIC
0x82740471f564543e02358410aca661c5aa4b94e8b4ff4e81743c88f379fafad4293157402022-11-24 15:48:032 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000983218815193485 MATIC
0x4e9d2fa1706dea86d386b79a4bda924b05992f05486bad4748e6d2e8d225d6e7293157242022-11-24 15:46:432 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000967069310288926 MATIC
0xb3cd8956417d68999e8c04c444a62e3afb4ad38067d1aa666e0c089b438d971f293156982022-11-24 15:44:322 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001022415847468617 MATIC
0xae73d95855ddf2324743bf317ee89efc44678d44389d36715832ced4d05703b5293156902022-11-24 15:43:522 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.0009868942985018 MATIC
0x83ab8c3242841b89173d5db438038a75bc55846cb6cd8287fc5121de21c1113e293156822022-11-24 15:43:122 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000982549529868803 MATIC
0x8ee7a9c7ad34f522f1f0cd1b49c36d3ab84c15b6aa0754c001e6dbd660df9dc6293156682022-11-24 15:42:022 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.00064783145068161 MATIC
0x350f246bf8e495004df73736039cad60c18246dba7bebf76005323e7a83d282e293156502022-11-24 15:40:322 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000982613830823625 MATIC
0xaeeaf940bb86cb54e97bc08b901773edf1f68a4f9c5961fd5d631fe73e49e13d293156362022-11-24 15:39:212 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.001003978654045757 MATIC
0x63ac86280d348299ca70789b85fcc1574ea61626fbdf2b443bc4aa9aaf7df752293156202022-11-24 15:38:012 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000972886934921525 MATIC
0x7b23c8eb39f10a95726663df22f50133865e0d4f86d68926f4b62ab705f6ddb7293155942022-11-24 15:35:512 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000999400380778261 MATIC
0x455fad28459c975e894afeb5330cdeebae4307dff9365e914a5c76f01935a9c2293155772022-11-24 15:34:252 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000983070460246875 MATIC
0xc06dfea20a0f0a65ffd563b579eca29f9f0bdb83ceebc3386ad9c3eb76b8d9b8293155612022-11-24 15:33:052 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.00100571794883326 MATIC
0xa79be0028db95c09e3984b6d155158da103b63e3b3d43f79eccfb8248fcc884f293155442022-11-24 15:31:402 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000961964841766838 MATIC
0xfc827952f46e88d00707a72060077b09acd725bb2e8b6463bd08b23690f167ca293155302022-11-24 15:30:302 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000985896079412166 MATIC
0x4c00bfeb99a537026ce49d32f5f2d4fdf77cf601fe880ecd7458ea405d8d98bd293155152022-11-24 15:29:142 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000968067090096288 MATIC
0x45c1a3a23f83de693d48b352cd8235ddb704d0cf9710010c7dfb60014f83f2c7293154982022-11-24 15:27:492 days 23 hrs ago 0x1bd2a26998dcecb695defd164e2b611f83ed37a4 0x25ad59adbe00c2d80c86d01e2e05e1294da848230.000996162790288926 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
swapHelperDiyTask2

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : createDiyTask2.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity =0.8.12;
    enum Module {
        RESOLVER,
        TIME,
        PROXY,
        SINGLE_EXEC
    }
    struct ModuleData {
        Module[] modules;
        bytes[] args;
    }
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "e5");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "e6");
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "e7");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "e8");
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "e9");
        return a % b;
    }
}

interface IOps {
    function createTask(
        address execAddress,
        bytes calldata execDataOrSelector,
        ModuleData calldata moduleData,
        address feeToken
    ) external returns (bytes32 taskId);

    function cancelTask(bytes32 taskId) external;

    function getFeeDetails() external view returns (uint256, address);

    function gelato() external view returns (address payable);

    function taskTreasury() external view returns (ITaskTreasuryUpgradable);
}

interface ITaskTreasuryUpgradable {
    function depositFunds(
        address receiver,
        address token,
        uint256 amount
    ) external payable;

    function withdrawFunds(
        address payable receiver,
        address token,
        uint256 amount
    ) external;
}

interface IOpsProxyFactory {
    function getProxyOf(address account) external view returns (address, bool);
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);

    function approve(address spender, uint value) external returns (bool);

    function allowance(address _owner, address spender) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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://consensys.net/diligence/blog/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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value : value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "e0");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "e1");
        }
    }
}

abstract contract OpsReady {
    IOps public immutable ops;
    address public immutable dedicatedMsgSender;
    address private immutable _gelato;
    address internal constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address private constant OPS_PROXY_FACTORY =
    0xC815dB16D4be6ddf2685C201937905aBf338F5D7;

    /**
     * @dev
     * Only tasks created by _taskCreator defined in constructor can call
     * the functions with this modifier.
     */
    modifier onlyDedicatedMsgSender() {
        require(msg.sender == dedicatedMsgSender, "Only dedicated msg.sender");
        _;
    }

    /**
     * @dev
     * _taskCreator is the address which will create tasks for this contract.
     */
    constructor(address _ops, address _taskCreator) {
        ops = IOps(_ops);
        _gelato = IOps(_ops).gelato();
        (dedicatedMsgSender,) = IOpsProxyFactory(OPS_PROXY_FACTORY).getProxyOf(
            _taskCreator
        );
    }

    /**
     * @dev
     * Transfers fee to gelato for synchronous fee payments.
     *
     * _fee & _feeToken should be queried from IOps.getFeeDetails()
     */
    function _transfer(uint256 _fee, address _feeToken) internal {
        if (_feeToken == ETH) {
            (bool success,) = _gelato.call{value : _fee}("");
            require(success, "_transfer: ETH transfer failed");
        } else {
            SafeERC20.safeTransfer(IERC20(_feeToken), _gelato, _fee);
        }
    }

    function _getFeeDetails()
    internal
    view
    returns (uint256 fee, address feeToken)
    {
        (fee, feeToken) = ops.getFeeDetails();
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "k002");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "k003");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

//interface IAocoRouter01 {
//    function factory() external pure returns (address);
//
//    function WETH() external pure returns (address);
//
//    // function addLiquidity(
//    //     address tokenA,
//    //     address tokenB,
//    //     uint amountADesired,
//    //     uint amountBDesired,
//    //     uint amountAMin,
//    //     uint amountBMin,
//    //     address to,
//    //     uint deadline
//    // ) external returns (uint amountA, uint amountB, uint liquidity);
//
//    // function addLiquidityETH(
//    //     address token,
//    //     uint amountTokenDesired,
//    //     uint amountTokenMin,
//    //     uint amountETHMin,
//    //     address to,
//    //     uint deadline
//    // ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
//
//    // function removeLiquidity(
//    //     address tokenA,
//    //     address tokenB,
//    //     uint liquidity,
//    //     uint amountAMin,
//    //     uint amountBMin,
//    //     address to,
//    //     uint deadline
//    // ) external returns (uint amountA, uint amountB);
//
//    // function removeLiquidityETH(
//    //     address token,
//    //     uint liquidity,
//    //     uint amountTokenMin,
//    //     uint amountETHMin,
//    //     address to,
//    //     uint deadline
//    // ) external returns (uint amountToken, uint amountETH);
//
//    // function removeLiquidityWithPermit(
//    //     address tokenA,
//    //     address tokenB,
//    //     uint liquidity,
//    //     uint amountAMin,
//    //     uint amountBMin,
//    //     address to,
//    //     uint deadline,
//    //     bool approveMax, uint8 v, bytes32 r, bytes32 s
//    // ) external returns (uint amountA, uint amountB);
//
//    // function removeLiquidityETHWithPermit(
//    //     address token,
//    //     uint liquidity,
//    //     uint amountTokenMin,
//    //     uint amountETHMin,
//    //     address to,
//    //     uint deadline,
//    //     bool approveMax, uint8 v, bytes32 r, bytes32 s
//    // ) external returns (uint amountToken, uint amountETH);
//
//    function swapExactTokensForTokens(
//        uint amountIn,
//        uint amountOutMin,
//        address[] calldata path,
//        address to,
//        uint deadline
//    ) external returns (uint[] memory amounts);
//
//    function swapTokensForExactTokens(
//        uint amountOut,
//        uint amountInMax,
//        address[] calldata path,
//        address to,
//        uint deadline
//    ) external returns (uint[] memory amounts);
//
//    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
//    external
//    payable
//    returns (uint[] memory amounts);
//
//    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
//    external
//    returns (uint[] memory amounts);
//
//    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
//    external
//    returns (uint[] memory amounts);
//
//    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
//    external
//    payable
//    returns (uint[] memory amounts);
//
//    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
//
//    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, address token0, address token1, address factory_) external view returns (uint amountOut);
//
//    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, address token0, address token1, address factory_) external view returns (uint amountIn);
//
//    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
//
//    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
//}

interface IAocoRouter02 {
    // function removeLiquidityETHSupportingFeeOnTransferTokens(
    //     address token,
    //     uint liquidity,
    //     uint amountTokenMin,
    //     uint amountETHMin,
    //     address to,
    //     uint deadline
    // ) external returns (uint amountETH);

    // function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
    //     address token,
    //     uint liquidity,
    //     uint amountTokenMin,
    //     uint amountETHMin,
    //     address to,
    //     uint deadline,
    //     bool approveMax, uint8 v, bytes32 r, bytes32 s
    // ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    //    function swapExactETHForTokensSupportingFeeOnTransferTokens(
    //        uint amountOutMin,
    //        address[] calldata path,
    //        address to,
    //        uint deadline
    //    ) external payable;
    //
    //    function swapExactTokensForETHSupportingFeeOnTransferTokens(
    //        uint amountIn,
    //        uint amountOutMin,
    //        address[] calldata path,
    //        address to,
    //        uint deadline
    //    ) external;
}

abstract contract OpsTaskCreator is OpsReady {
    using SafeERC20 for IERC20;

    address public immutable fundsOwner;
    ITaskTreasuryUpgradable public immutable taskTreasury;

    constructor(address _ops, address _fundsOwner)
    OpsReady(_ops, address(this))
    {
        fundsOwner = _fundsOwner;
        taskTreasury = ops.taskTreasury();
    }

    /**
     * @dev
     * Withdraw funds from this contract's Gelato balance to fundsOwner.
     */
    function withdrawFunds(uint256 _amount, address _token) external {
        require(
            msg.sender == fundsOwner,
            "Only funds owner can withdraw funds"
        );

        taskTreasury.withdrawFunds(payable(fundsOwner), _token, _amount);
    }

    function _depositFunds(uint256 _amount, address _token) internal {
        uint256 ethValue = _token == ETH ? _amount : 0;
        taskTreasury.depositFunds{value : ethValue}(
            address(this),
            _token,
            _amount
        );
    }

    function _createTask(
        address _execAddress,
        bytes memory _execDataOrSelector,
        ModuleData memory _moduleData,
        address _feeToken
    ) internal returns (bytes32) {
        return
        ops.createTask(
            _execAddress,
            _execDataOrSelector,
            _moduleData,
            _feeToken
        );
    }

    function _cancelTask(bytes32 _taskId) internal {
        ops.cancelTask(_taskId);
    }

    function _resolverModuleArg(
        address _resolverAddress,
        bytes memory _resolverData
    ) internal pure returns (bytes memory) {
        return abi.encode(_resolverAddress, _resolverData);
    }

    function _timeModuleArg(uint256 _startTime, uint256 _interval)
    internal
    pure
    returns (bytes memory)
    {
        return abi.encode(uint128(_startTime), uint128(_interval));
    }

    function _proxyModuleArg() internal pure returns (bytes memory) {
        return bytes("");
    }

    function _singleExecModuleArg() internal pure returns (bytes memory) {
        return bytes("");
    }
}

interface USDTPool {
    function userInfoList(address _user) external view returns (bool _canClaim, uint256 _maxAmount);

    function claimUSDT(address _user, uint256 _amount) external;

    function USDT() external view returns (IERC20);

    function swapRate() external view returns (uint256);

    function swapAllRate() external view returns (uint256);
}

contract swapHelperDiyTask2 is OpsTaskCreator, Ownable {
    using SafeMath for uint256;
    uint256 public approveAmount;
    uint256 public taskAmount;
    USDTPool public USDTPoolAddress;
    mapping(uint256 => bytes32) public taskList;
    mapping(address => userInfoItem) public userInfoList;
    mapping(address => bytes32[]) public userTaskList;
    mapping(bytes32 => bool) public md5List;
    mapping(bytes32 => bytes32) public md5TaskList;
    mapping(bytes32 => taskConfig) public taskConfigList;
    mapping(bytes32 => uint256) public lastExecutedTimeList;
    mapping(bytes32 => uint256) public lastTimeIntervalIndexList;
    mapping(bytes32 => uint256) public lastSwapAmountIndexList;

    struct userInfoItem {
        uint256 ethDepositAmount;
        uint256 ethAmount;
        uint256 usdtAmount;
        uint256 ethUsedAmount;
    }

    struct swapTokenItem {
        uint256 startGas;
        uint256 swapAmount;
        uint256 tokenAmount;
        address swapInToken;
        address swapOutToken;
        uint256 balanceOfIn0;
        uint256 balanceOfOut0;
        uint256 balanceOfOut1;
        uint256 balanceOfIn1;
        uint256 spendSwapInToken;
        uint256 gasUsed;
    }

    struct taskDataItem {
        address _execAddress;
        bytes _execDataOrSelector;
        ModuleData _moduleData;
        address _feeToken;
        bool _status;
        string _taskName;
        uint256[] _start_end_Time;
        uint256[] _timeList;
        uint256[] _timeIntervalList;
        uint256[] _swapAmountList;
    }

    struct taskConfig {
        IAocoRouter02 _routerAddress;
        address _owner;
        address[] _swapRouter;
        address[] _swapRouter2;
        uint256 _interval;
        uint256 _taskExTimes;
        uint256 _index;
        bytes32 _md5;
        taskDataItem _taskData;
    }

    event CounterTaskCreated(uint256 _time, address _user, uint256 _taskAmount, bytes32 _taskId);
    event swapToenEvent(address _tx_origin, address _msg_sender, uint256 _gasUsed, uint256 _spendSwapInToken, uint256 _timestamp, address _user);
    event swapToenTaskEvent(uint256 _index, address _user, bytes32 _md5, bytes32 _taskID);

    constructor(uint256 _approveAmount, address payable _ops, address _fundsOwner, USDTPool _USDTPoolAddress) OpsTaskCreator(_ops, _fundsOwner){
        setDefaultSwapInfo(_approveAmount);
        setUSDTPoolAddress(_USDTPoolAddress);
    }

    function setDefaultSwapInfo(uint256 _approveAmount) public onlyOwner {
        approveAmount = _approveAmount;
    }

    function setUSDTPoolAddress(USDTPool _USDTPoolAddress) public onlyOwner {
        USDTPoolAddress = _USDTPoolAddress;
    }

    function setSwapInfo(IAocoRouter02 _routerAddress, address[] memory _swapRouter, address[] memory _swapRouter2) private {
        require(_swapRouter[0] == address(USDTPoolAddress.USDT()) && _swapRouter2[_swapRouter2.length - 1] == address(USDTPoolAddress.USDT()), "e001");
        require(_swapRouter2[0] != address(USDTPoolAddress.USDT()) && _swapRouter[_swapRouter2.length - 1] != address(USDTPoolAddress.USDT()), "e002");
        require(_swapRouter[0] == _swapRouter2[_swapRouter2.length - 1], "e003");
        require(_swapRouter2[0] == _swapRouter[_swapRouter2.length - 1], "e004");
        IERC20(_swapRouter[0]).approve(address(_routerAddress), approveAmount);
        IERC20(_swapRouter2[0]).approve(address(_routerAddress), approveAmount);
    }

    struct createTaskItem {
        bytes32 _md5;
        bytes _execData;
        bytes32 _id;
        ModuleData _moduleData;
        taskConfig _taskConfig;
    }

    function createTask(string memory _taskName, IAocoRouter02 _routerAddress, address[] memory _swapRouter, address[] memory _swapRouter2, uint256 _interval, uint256[] memory _start_end_Time, uint256[] memory _timeList, uint256[] memory _timeIntervalList, uint256[] memory _swapAmountList) external payable {
        createTaskItem memory _createTaskItem = new createTaskItem[](1)[0];
        setSwapInfo(_routerAddress, _swapRouter, _swapRouter2);
        _createTaskItem._md5 = keccak256(abi.encodePacked(_taskName, block.timestamp, block.difficulty, msg.sender, _start_end_Time));
        require(!md5List[_createTaskItem._md5], "e001");
        md5List[_createTaskItem._md5] = true;
        userInfoList[msg.sender].ethDepositAmount = userInfoList[msg.sender].ethDepositAmount.add(msg.value);
        userInfoList[msg.sender].ethAmount = userInfoList[msg.sender].ethAmount.add(msg.value);
        _createTaskItem._execData = abi.encodeCall(this.swapToken, (msg.sender, _createTaskItem._md5));
        //ModuleData memory moduleData;
        // if (_interval > 0) {
        //     moduleData = ModuleData({
        //     modules : new Module[](2),
        //     args : new bytes[](2)
        //     });
        //     moduleData.modules[0] = Module.TIME;
        //     moduleData.modules[1] = Module.PROXY;
        //     moduleData.args[0] = _timeModuleArg(block.timestamp, _interval);
        //     moduleData.args[1] = _proxyModuleArg();
        // } else {
        _createTaskItem._moduleData = ModuleData({
        modules : new Module[](1),
        args : new bytes[](1)
        });
        //            moduleData.modules[0] = Module.PROXY;
        //            moduleData.modules[1] = Module.SINGLE_EXEC;
        //            moduleData.args[0] = _proxyModuleArg();
        //            moduleData.args[1] = _singleExecModuleArg();
        //测试whenever
        _createTaskItem._moduleData.modules[0] = Module.PROXY;
        //            moduleData.modules[1] = Module.SINGLE_EXEC;
        _createTaskItem._moduleData.args[0] = _proxyModuleArg();
        //            moduleData.args[1] = _singleExecModuleArg();
        // }
        _createTaskItem._id = _createTask(address(this), _createTaskItem._execData, _createTaskItem._moduleData, ETH);
        taskList[taskAmount] = _createTaskItem._id;
        userTaskList[msg.sender].push(_createTaskItem._id);
        md5TaskList[_createTaskItem._md5] = _createTaskItem._id;
        //_createTaskItem._taskConfig = taskConfig(_routerAddress, msg.sender, _swapRouter, _swapRouter2, _swapAmount, _interval, 0, taskAmount, _createTaskItem._md5, taskDataItem(address(this), _createTaskItem._execData, _createTaskItem._moduleData, ETH, true, _taskName, _start_end_Time, _timeList));
        _createTaskItem._taskConfig = new taskConfig[](1)[0];

        /**
        IAocoRouter02 _routerAddress;
        address _owner;
        address[] _swapRouter;
        address[] _swapRouter2;
        uint256 _swapAmount;
        uint256 _interval;
        uint256 _taskExTimes;
        uint256 _index;
        bytes32 _md5;
        taskDataItem _taskData;
        **/
        _createTaskItem._taskConfig._routerAddress = _routerAddress;
        _createTaskItem._taskConfig._owner = msg.sender;
        _createTaskItem._taskConfig._swapRouter = _swapRouter;
        _createTaskItem._taskConfig._swapRouter2 = _swapRouter2;
        _createTaskItem._taskConfig._interval = _interval;
        _createTaskItem._taskConfig._taskExTimes = 0;
        _createTaskItem._taskConfig._index = taskAmount;
        _createTaskItem._taskConfig._md5 = _createTaskItem._md5;
        /**
        address _execAddress;
        bytes _execDataOrSelector;
        ModuleData _moduleData;
        address _feeToken;
        bool _status;
        string _taskName;
        uint256[] _start_end_Time;
        uint256[] _timeList;
        uint256[] _timeIntervalList;
        **/
        _createTaskItem._taskConfig._taskData._execAddress = address(this);
        _createTaskItem._taskConfig._taskData._execDataOrSelector = _createTaskItem._execData;
        _createTaskItem._taskConfig._taskData._moduleData = _createTaskItem._moduleData;
        _createTaskItem._taskConfig._taskData._feeToken = ETH;
        _createTaskItem._taskConfig._taskData._status = true;
        _createTaskItem._taskConfig._taskData._taskName = _taskName;
        _createTaskItem._taskConfig._taskData._start_end_Time = _start_end_Time;
        _createTaskItem._taskConfig._taskData._timeList = _timeList;
        _createTaskItem._taskConfig._taskData._timeIntervalList = _timeIntervalList;
        _createTaskItem._taskConfig._taskData._swapAmountList = _swapAmountList;
        taskConfigList[_createTaskItem._id] = _createTaskItem._taskConfig;
        emit CounterTaskCreated(block.timestamp, msg.sender, taskAmount, _createTaskItem._id);
        taskAmount = taskAmount.add(1);
    }

    modifier onlyEditer(bytes32 _taskID) {
        taskConfig storage y = taskConfigList[_taskID];
        require(msg.sender == owner() || msg.sender == y._owner, "e003");
        _;
    }

    function editTaskSwapAmountList(bytes32 _taskID, uint256[] memory _swapAmountList) external onlyEditer(_taskID) {
        taskConfig storage y = taskConfigList[_taskID];
        y._taskData._swapAmountList = _swapAmountList;
        lastSwapAmountIndexList[_taskID] = 0;
    }

    function editTaskInterval(bytes32 _taskID, uint256 _interval) external onlyEditer(_taskID) {
        taskConfig storage y = taskConfigList[_taskID];
        y._interval = _interval;
    }

    function editTaskStartEndTime(bytes32 _taskID, uint256[] memory _start_end_Time) external onlyEditer(_taskID) {
        require((_start_end_Time.length == 2) && (_start_end_Time[1] > _start_end_Time[0]), "e001");
        taskConfig storage y = taskConfigList[_taskID];
        y._taskData._start_end_Time = _start_end_Time;
    }

    function editTaskTimeList(bytes32 _taskID, uint256[] memory _timeList) external onlyEditer(_taskID) {
        require(_timeList.length % 2 == 0, "e001");
        taskConfig storage y = taskConfigList[_taskID];
        y._taskData._timeList = _timeList;
    }

    function editTaskTimeIntervalList(bytes32 _taskID, uint256[] memory _timeIntervalList) external onlyEditer(_taskID) {
        require(_timeIntervalList.length > 0, "e001");
        taskConfig storage y = taskConfigList[_taskID];
        y._taskData._timeIntervalList = _timeIntervalList;
        lastTimeIntervalIndexList[_taskID] = 0;
    }

    function getInTimeZone(uint256[] memory _start_end_Time, uint256[] memory _timeList) public view returns (bool _inTimeZone) {
        _inTimeZone = false;
        uint256 all = (block.timestamp + 3600 * 8) % (3600 * 24);
        uint256 TimeListLength = _timeList.length / 2;
        for (uint256 i = 0; i < TimeListLength; i++) {
            if (all >= _timeList[i * 2] && all < _timeList[i * 2 + 1] && block.timestamp >= _start_end_Time[0] && block.timestamp <= _start_end_Time[1]) {
                _inTimeZone = true;
                break;
            }
        }
    }

    // function getAddTime(uint256 _interval) public view returns (uint256) {
    //     uint256 all = (block.number + _interval + 1) * (block.timestamp - _interval - 1);
    //     return _interval + all % _interval;
    // }

    modifier onlyTime(bytes32 _md5) {
        taskConfig memory y = taskConfigList[md5TaskList[_md5]];
        uint256 _interval = 0;
        if (y._taskData._timeIntervalList.length == 0) {
            _interval = y._interval;
        } else {
            _interval = y._taskData._timeIntervalList[lastTimeIntervalIndexList[md5TaskList[_md5]]];
        }
        require(block.timestamp >= (lastExecutedTimeList[_md5]).add(_interval), "m001");
        require(getInTimeZone(y._taskData._start_end_Time, y._taskData._timeList), "m002");
        _;
    }

    function swapToken(address _user, bytes32 _md5) external onlyDedicatedMsgSender onlyTime(_md5) {
        bytes32 taskID = md5TaskList[_md5];
        taskConfig storage y = taskConfigList[taskID];
        swapTokenItem memory x = swapTokenItem(gasleft(), 0, 0, y._swapRouter[0], y._swapRouter[1], 0, 0, 0, 0, 0, 0);
        x.swapAmount = y._taskData._swapAmountList[lastSwapAmountIndexList[taskID]];
        x.tokenAmount = x.swapAmount;
        if (x.tokenAmount == 0) {
            return;
        } else {
            if (address(USDTPoolAddress.USDT()) == x.swapInToken) {
                USDTPoolAddress.claimUSDT(_user, x.tokenAmount);
            }
            if (IERC20(x.swapInToken).allowance(address(this), address(y._routerAddress)) < x.tokenAmount) {
                IERC20(x.swapInToken).approve(address(y._routerAddress), approveAmount);
            }
            x.balanceOfIn0 = IERC20(x.swapInToken).balanceOf(address(this));
            x.balanceOfOut0 = IERC20(x.swapOutToken).balanceOf(address(this));
            y._routerAddress.swapExactTokensForTokensSupportingFeeOnTransferTokens(x.tokenAmount, 0, y._swapRouter, address(this), block.timestamp);
            x.balanceOfOut1 = IERC20(x.swapOutToken).balanceOf(address(this));
            x.tokenAmount = x.balanceOfOut1.sub(x.balanceOfOut0);
            if (IERC20(x.swapOutToken).allowance(address(this), address(y._routerAddress)) < x.tokenAmount) {
                IERC20(x.swapOutToken).approve(address(y._routerAddress), approveAmount);
            }
            y._routerAddress.swapExactTokensForTokensSupportingFeeOnTransferTokens(x.tokenAmount, 0, y._swapRouter2, address(this), block.timestamp);
            x.balanceOfIn1 = IERC20(x.swapInToken).balanceOf(address(this));
            x.spendSwapInToken = x.balanceOfIn0.sub(x.balanceOfIn1);
            x.gasUsed = x.startGas - gasleft();
            emit swapToenEvent(tx.origin, msg.sender, x.gasUsed, x.spendSwapInToken, block.timestamp, _user);
            emit swapToenTaskEvent(y._index, _user, y._md5, taskID);
            (uint256 fee, address feeToken) = _getFeeDetails();
            _transfer(fee, feeToken);
            require(userInfoList[_user].ethAmount >= fee);
            userInfoList[_user].ethAmount = userInfoList[_user].ethAmount.sub(fee);
            userInfoList[_user].ethUsedAmount = userInfoList[_user].ethUsedAmount.add(fee);
            y._taskExTimes = y._taskExTimes.add(1);
            if (address(USDTPoolAddress.USDT()) == x.swapInToken) {
                uint256 poolFee = x.swapAmount.mul(USDTPoolAddress.swapRate()).div(USDTPoolAddress.swapAllRate());
                uint256 allFee = x.spendSwapInToken.add(poolFee);
                require(userInfoList[_user].usdtAmount >= allFee, "m003");
                userInfoList[_user].usdtAmount = userInfoList[_user].usdtAmount.sub(allFee);
                IERC20(x.swapInToken).transfer(address(USDTPoolAddress), x.swapAmount.add(poolFee));
            }
        }
        lastExecutedTimeList[_md5] = block.timestamp;
        if (y._taskData._timeIntervalList.length > 0) {
            lastTimeIntervalIndexList[taskID] = lastTimeIntervalIndexList[taskID].add(1);
            if (lastTimeIntervalIndexList[taskID] >= y._taskData._timeIntervalList.length) {
                lastTimeIntervalIndexList[taskID] = 0;
            }
        }
        if (y._taskData._swapAmountList.length > 0) {
            lastSwapAmountIndexList[taskID] = lastSwapAmountIndexList[taskID].add(1);
            if (lastSwapAmountIndexList[taskID] >= y._taskData._swapAmountList.length) {
                lastSwapAmountIndexList[taskID] = 0;
            }
        }
    }

    function depositUSDT(uint256 _amount) external {
        USDTPoolAddress.USDT().transferFrom(msg.sender, address(this), _amount);
        userInfoList[msg.sender].usdtAmount = userInfoList[msg.sender].usdtAmount.add(_amount);
    }

    function withdrawUSDT(uint256 _amount) external {
        require(_amount <= userInfoList[msg.sender].usdtAmount, "e001");
        USDTPoolAddress.USDT().transfer(msg.sender, _amount);
        userInfoList[msg.sender].usdtAmount = userInfoList[msg.sender].usdtAmount.sub(_amount);
    }

    function depositEth() external payable {
        userInfoList[msg.sender].ethDepositAmount = userInfoList[msg.sender].ethDepositAmount.add(msg.value);
        userInfoList[msg.sender].ethAmount = userInfoList[msg.sender].ethAmount.add(msg.value);
    }

    function withdrawETH(uint256 _amount) external {
        require(_amount <= userInfoList[msg.sender].ethAmount, "e001");
        payable(msg.sender).transfer(_amount);
        userInfoList[msg.sender].ethAmount = userInfoList[msg.sender].ethAmount.sub(_amount);
    }

    function claimToken(IERC20 _token, uint256 _amount) external onlyOwner {
        _token.transfer(msg.sender, _amount);
    }

    function claimEth(uint256 _amount) external onlyOwner {
        payable(msg.sender).transfer(_amount);
    }

    function cancelTask(bytes32 _taskID) external {
        taskConfig storage y = taskConfigList[_taskID];
        require(y._owner == msg.sender, "e001");
        require(y._taskData._status, "e002");
        _cancelTask(_taskID);
        y._taskData._status = false;
    }

    function restartTask(bytes32 _taskID) external {
        taskConfig storage y = taskConfigList[_taskID];
        require(y._owner == msg.sender, "e001");
        require(!y._taskData._status, "e002");
        _createTask(y._taskData._execAddress, y._taskData._execDataOrSelector, y._taskData._moduleData, y._taskData._feeToken);
        y._taskData._status = true;
    }

    function getUserTaskList(address _user) external view returns (bytes32[] memory) {
        return userTaskList[_user];
    }

    function getUserTaskListNum(address _user) external view returns (uint256) {
        return userTaskList[_user].length;
    }

    function getUserTaskListByList(address _user, uint256[] memory _indexList) external view returns (bytes32[] memory taskIdList) {
        taskIdList = new bytes32[](_indexList.length);
        for (uint256 i = 0; i < _indexList.length; i++) {
            taskIdList[i] = userTaskList[_user][_indexList[i]];
        }
    }

    receive() external payable {
        userInfoList[msg.sender].ethDepositAmount = userInfoList[msg.sender].ethDepositAmount.add(msg.value);
        userInfoList[msg.sender].ethAmount = userInfoList[msg.sender].ethAmount.add(msg.value);
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_approveAmount","type":"uint256"},{"internalType":"address payable","name":"_ops","type":"address"},{"internalType":"address","name":"_fundsOwner","type":"address"},{"internalType":"contract USDTPool","name":"_USDTPoolAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_taskAmount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_taskId","type":"bytes32"}],"name":"CounterTaskCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tx_origin","type":"address"},{"indexed":false,"internalType":"address","name":"_msg_sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_gasUsed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_spendSwapInToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"swapToenEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_index","type":"uint256"},{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"bytes32","name":"_md5","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"_taskID","type":"bytes32"}],"name":"swapToenTaskEvent","type":"event"},{"inputs":[],"name":"USDTPoolAddress","outputs":[{"internalType":"contract USDTPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approveAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"}],"name":"cancelTask","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_taskName","type":"string"},{"internalType":"contract IAocoRouter02","name":"_routerAddress","type":"address"},{"internalType":"address[]","name":"_swapRouter","type":"address[]"},{"internalType":"address[]","name":"_swapRouter2","type":"address[]"},{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256[]","name":"_start_end_Time","type":"uint256[]"},{"internalType":"uint256[]","name":"_timeList","type":"uint256[]"},{"internalType":"uint256[]","name":"_timeIntervalList","type":"uint256[]"},{"internalType":"uint256[]","name":"_swapAmountList","type":"uint256[]"}],"name":"createTask","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dedicatedMsgSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"editTaskInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"},{"internalType":"uint256[]","name":"_start_end_Time","type":"uint256[]"}],"name":"editTaskStartEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"},{"internalType":"uint256[]","name":"_swapAmountList","type":"uint256[]"}],"name":"editTaskSwapAmountList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"},{"internalType":"uint256[]","name":"_timeIntervalList","type":"uint256[]"}],"name":"editTaskTimeIntervalList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"},{"internalType":"uint256[]","name":"_timeList","type":"uint256[]"}],"name":"editTaskTimeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_start_end_Time","type":"uint256[]"},{"internalType":"uint256[]","name":"_timeList","type":"uint256[]"}],"name":"getInTimeZone","outputs":[{"internalType":"bool","name":"_inTimeZone","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTaskList","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256[]","name":"_indexList","type":"uint256[]"}],"name":"getUserTaskListByList","outputs":[{"internalType":"bytes32[]","name":"taskIdList","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTaskListNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"lastExecutedTimeList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"lastSwapAmountIndexList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"lastTimeIntervalIndexList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"md5List","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"md5TaskList","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ops","outputs":[{"internalType":"contract IOps","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_taskID","type":"bytes32"}],"name":"restartTask","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_approveAmount","type":"uint256"}],"name":"setDefaultSwapInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract USDTPool","name":"_USDTPoolAddress","type":"address"}],"name":"setUSDTPoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32","name":"_md5","type":"bytes32"}],"name":"swapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taskAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"taskConfigList","outputs":[{"internalType":"contract IAocoRouter02","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256","name":"_taskExTimes","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes32","name":"_md5","type":"bytes32"},{"components":[{"internalType":"address","name":"_execAddress","type":"address"},{"internalType":"bytes","name":"_execDataOrSelector","type":"bytes"},{"components":[{"internalType":"enum Module[]","name":"modules","type":"uint8[]"},{"internalType":"bytes[]","name":"args","type":"bytes[]"}],"internalType":"struct ModuleData","name":"_moduleData","type":"tuple"},{"internalType":"address","name":"_feeToken","type":"address"},{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"string","name":"_taskName","type":"string"},{"internalType":"uint256[]","name":"_start_end_Time","type":"uint256[]"},{"internalType":"uint256[]","name":"_timeList","type":"uint256[]"},{"internalType":"uint256[]","name":"_timeIntervalList","type":"uint256[]"},{"internalType":"uint256[]","name":"_swapAmountList","type":"uint256[]"}],"internalType":"struct swapHelperDiyTask2.taskDataItem","name":"_taskData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taskList","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taskTreasury","outputs":[{"internalType":"contract ITaskTreasuryUpgradable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfoList","outputs":[{"internalType":"uint256","name":"ethDepositAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"},{"internalType":"uint256","name":"ethUsedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userTaskList","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101206040523480156200001257600080fd5b506040516200562a3803806200562a83398101604081905262000035916200031b565b82828130816001600160a01b03166080816001600160a01b031681525050816001600160a01b031663573ea5756040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b8919062000377565b6001600160a01b0390811660c0526040516337b6269f60e21b8152908216600482015273c815db16d4be6ddf2685c201937905abf338f5d79063ded89a7c906024016040805180830381865afa15801562000117573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013d91906200039e565b506001600160a01b0390811660a05283811660e0526080516040805163e60a321360e01b8152905191909216935063e60a3213925060048083019260209291908290030181865afa15801562000197573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bd919062000377565b6001600160a01b03166101005250620001d8905033620001f8565b620001e38462000248565b620001ee816200029b565b50505050620003e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620002965760405162461bcd60e51b81526004016200028d906020808252600490820152633598181960e11b604082015260600190565b60405180910390fd5b600155565b6000546001600160a01b03163314620002e05760405162461bcd60e51b81526004016200028d906020808252600490820152633598181960e11b604082015260600190565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146200031857600080fd5b50565b600080600080608085870312156200033257600080fd5b845193506020850151620003468162000302565b6040860151909350620003598162000302565b60608601519092506200036c8162000302565b939692955090935050565b6000602082840312156200038a57600080fd5b8151620003978162000302565b9392505050565b60008060408385031215620003b257600080fd5b8251620003bf8162000302565b60208401519092508015158114620003d657600080fd5b809150509250929050565b60805160a05160c05160e051610100516151cc6200045e6000396000818161079101526115c001526000818161044d015281816114f90152611589015260008181613ec70152613f8c0152600081816103170152611df20152600081816107c501528181613d3a01528181613e16015261406301526151cc6000f3fe60806040526004361061024a5760003560e01c8063a9c0c08211610139578063d30c6ac3116100b6578063ee8ca3b51161007a578063ee8ca3b514610807578063f14210a614610827578063f29dd91414610847578063f2fde38b1461087d578063f8741ea31461089d578063fceb0f3b146108bd57600080fd5b8063d30c6ac314610732578063d9981a8a1461075f578063e60a32131461077f578063e70abe92146107b3578063e7c80f17146107e757600080fd5b8063bbd6c391116100fd578063bbd6c3911461068f578063c326b0d0146106af578063c3a33ee9146106c5578063cb1ef20c146106e5578063cbd998681461071257600080fd5b8063a9c0c082146105dc578063b1836f73146105fc578063b21213961461061c578063b8e999c01461063c578063b9bd065d1461066f57600080fd5b806348d43153116101c75780637c2eafd51161018b5780637c2eafd5146105115780637fd57176146105315780638d5a6d36146105715780638da5cb5b1461059e57806391f61de7146105bc57600080fd5b806348d431531461046f5780634e9412e51461048257806371416964146104af578063715018a6146104dc578063744bfe61146104f157600080fd5b80633ea521ef1161020e5780633ea521ef146103915780634081dd20146103b1578063439370b11461041357806344ce90a81461041b57806346ee3c591461043b57600080fd5b8063028b6d1e146102a35780631698755f146102c55780631a4ee63a146102e557806328f150eb146103055780632a1c52a51461035657600080fd5b3661029e573360009081526005602052604090205461026990346108d3565b3360009081526005602052604090209081556001015461028990346108d3565b33600090815260056020526040902060010155005b600080fd5b3480156102af57600080fd5b506102c36102be366004614752565b610925565b005b3480156102d157600080fd5b506102c36102e03660046147ae565b6109e7565b3480156102f157600080fd5b506102c36103003660046147da565b610a87565b34801561031157600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036257600080fd5b506103836103713660046147fc565b60046020526000908152604090205481565b60405190815260200161034d565b34801561039d57600080fd5b506102c36103ac3660046147fc565b610b07565b3480156103bd57600080fd5b506103f36103cc366004614815565b60056020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034d565b6102c3610c54565b34801561042757600080fd5b50600354610339906001600160a01b031681565b34801561044757600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b6102c361047d366004614916565b610ca3565b34801561048e57600080fd5b5061038361049d3660046147fc565b600b6020526000908152604090205481565b3480156104bb57600080fd5b506104cf6104ca366004614a4c565b6113df565b60405161034d9190614a86565b3480156104e857600080fd5b506102c36114b8565b3480156104fd57600080fd5b506102c361050c366004614aca565b6114ee565b34801561051d57600080fd5b506104cf61052c366004614815565b611618565b34801561053d57600080fd5b5061056161054c3660046147fc565b60076020526000908152604090205460ff1681565b604051901515815260200161034d565b34801561057d57600080fd5b5061038361058c3660046147fc565b60086020526000908152604090205481565b3480156105aa57600080fd5b506000546001600160a01b0316610339565b3480156105c857600080fd5b506105616105d7366004614afa565b611684565b3480156105e857600080fd5b506102c36105f73660046147fc565b611795565b34801561060857600080fd5b506102c3610617366004614752565b6117c4565b34801561062857600080fd5b506102c3610637366004614752565b611869565b34801561064857600080fd5b5061065c6106573660046147fc565b61192f565b60405161034d9796959493929190614cba565b34801561067b57600080fd5b5061038361068a3660046147ae565b611db6565b34801561069b57600080fd5b506102c36106aa3660046147ae565b611de7565b3480156106bb57600080fd5b5061038360025481565b3480156106d157600080fd5b506102c36106e0366004614752565b6130ff565b3480156106f157600080fd5b506103836107003660046147fc565b600c6020526000908152604090205481565b34801561071e57600080fd5b506102c361072d3660046147fc565b6131ee565b34801561073e57600080fd5b5061038361074d3660046147fc565b600a6020526000908152604090205481565b34801561076b57600080fd5b506102c361077a3660046147fc565b613249565b34801561078b57600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b3480156107bf57600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b3480156107f357600080fd5b506102c36108023660046147fc565b6134e2565b34801561081357600080fd5b506102c36108223660046147fc565b6135f0565b34801561083357600080fd5b506102c36108423660046147fc565b61366f565b34801561085357600080fd5b50610383610862366004614815565b6001600160a01b031660009081526006602052604090205490565b34801561088957600080fd5b506102c3610898366004614815565b613702565b3480156108a957600080fd5b506102c36108b8366004614815565b613777565b3480156108c957600080fd5b5061038360015481565b6000806108e08385614e29565b90508381101561091c5760405162461bcd60e51b8152602060048201526002602482015261653560f01b60448201526064015b60405180910390fd5b90505b92915050565b600082815260096020526040902082906109476000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610972575060018101546001600160a01b031633145b61098e5760405162461bcd60e51b815260040161091390614e41565b6002835161099c9190614e75565b156109b95760405162461bcd60e51b815260040161091390614e89565b6000848152600960209081526040909120845190916109df91600f8401918701906142bd565b505050505050565b6000546001600160a01b03163314610a115760405162461bcd60e51b815260040161091390614ea7565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610a3f9033908590600401614ec5565b6020604051808303816000875af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190614ede565b505050565b60008281526009602052604090208290610aa96000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610ad4575060018101546001600160a01b031633145b610af05760405162461bcd60e51b815260040161091390614e41565b505060009182526009602052604090912060040155565b33600090815260056020526040902060020154811115610b395760405162461bcd60e51b815260040161091390614e89565b600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190614f00565b6001600160a01b031663a9059cbb33836040518363ffffffff1660e01b8152600401610bdd929190614ec5565b6020604051808303816000875af1158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c209190614ede565b5033600090815260056020526040902060020154610c3e90826137c3565b3360009081526005602052604090206002015550565b33600090815260056020526040902054610c6e90346108d3565b33600090815260056020526040902090815560010154610c8e90346108d3565b33600090815260056020526040902060010155565b604080516001808252818301909252600091816020015b610cc2614308565b815260200190600190039081610cba57905050600081518110610ce757610ce7614f1d565b60200260200101519050610cfc89898961380e565b8942443388604051602001610d15959493929190614f33565b60408051601f1981840301815291815281516020928301208084526000908152600790925290205460ff1615610d5d5760405162461bcd60e51b815260040161091390614e89565b80516000908152600760209081526040808320805460ff191660011790553383526005909152902054610d9090346108d3565b33600090815260056020526040902090815560010154610db090346108d3565b33600081815260056020526040908190206001019290925582519151309263bbd6c39192610de392909190602401614ec5565b60408051601f19818403018152918152602080830180516001600160e01b031660e09590951b94909417909352848301919091528051600181830181815260808301909352909350839260608401908036833701905050815260408051600180825281830190925260209092019190816020015b6060815260200190600190039081610e5757505090526060820181905251805160029190600090610e8a57610e8a614f1d565b60200260200101906003811115610ea357610ea3614bac565b90816003811115610eb657610eb6614bac565b905250604080516020810190915260008152816060015160200151600081518110610ee357610ee3614f1d565b6020026020010181905250610f16308260200151836060015173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee613d20565b60408281018281526002546000908152600460209081528382209490945533815260068452828120825181546001808201845592845286842001559151855182526008855290839020558151818152808301909252909182015b610f7861435d565b815260200190600190039081610f7057905050600081518110610f9d57610f9d614f1d565b60200260200101518160800181905250888160800151600001906001600160a01b031690816001600160a01b031681525050338160800151602001906001600160a01b031690816001600160a01b031681525050878160800151604001819052508681608001516060018190525085816080015160800181815250506000816080015160a0018181525050600254816080015160c00181815250508060000151816080015160e00181815250503081608001516101000151600001906001600160a01b031690816001600160a01b031681525050806020015181608001516101000151602001819052508060600151816080015161010001516040018190525073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81608001516101000151606001906001600160a01b031690816001600160a01b0316815250506001816080015161010001516080019015159081151581525050898160800151610100015160a00181905250848160800151610100015160c00181905250838160800151610100015160e0018190525082816080015161010001516101000181905250818160800151610100015161012001819052508060800151600960008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020190805190602001906111e09291906143be565b50606082015180516111fc9160038401916020909101906143be565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015180516008830180546001600160a01b0319166001600160a01b0390921691909117815560208083015180516112669260098701920190614413565b50604082015180518051600284019161128491839160200190614486565b50602082810151805161129d9260018501920190614535565b505050606082015160048201805460808501511515600160a01b026001600160a81b03199091166001600160a01b039093169290921791909117905560a082015180516112f4916005840191602090910190614413565b5060c082015180516113109160068401916020909101906142bd565b5060e0820151805161132c9160078401916020909101906142bd565b5061010082015180516113499160088401916020909101906142bd565b5061012082015180516113669160098401916020909101906142bd565b505060025460408086015181514281523360208201529182019290925260608101919091527f75d79f1179f9c22b409e032daf360405a38481f3f67b40b383e3eda586ae7bff935060800191506113ba9050565b60405180910390a16002546113d09060016108d3565b60025550505050505050505050565b6060815167ffffffffffffffff8111156113fb576113fb61467c565b604051908082528060200260200182016040528015611424578160200160208202803683370190505b50905060005b82518110156114b1576001600160a01b0384166000908152600660205260409020835184908390811061145f5761145f614f1d565b60200260200101518154811061147757611477614f1d565b906000526020600020015482828151811061149457611494614f1d565b6020908102919091010152806114a981614fa5565b91505061142a565b5092915050565b6000546001600160a01b031633146114e25760405162461bcd60e51b815260040161091390614ea7565b6114ec6000613dc1565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115725760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792066756e6473206f776e65722063616e2077697468647261772066756044820152626e647360e81b6064820152608401610913565b604051631c20fadd60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528281166024830152604482018490527f00000000000000000000000000000000000000000000000000000000000000001690631c20fadd90606401600060405180830381600087803b15801561160457600080fd5b505af11580156109df573d6000803e3d6000fd5b6001600160a01b03811660009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561167857602002820191906000526020600020905b815481526020019060010190808311611664575b50505050509050919050565b6000806201518061169742617080614e29565b6116a19190614e75565b90506000600284516116b39190614fc0565b905060005b8181101561178c57846116cc826002614fd4565b815181106116dc576116dc614f1d565b602002602001015183101580156117205750846116fa826002614fd4565b611705906001614e29565b8151811061171557611715614f1d565b602002602001015183105b801561174657508560008151811061173a5761173a614f1d565b60200260200101514210155b801561176c57508560018151811061176057611760614f1d565b60200260200101514211155b1561177a576001935061178c565b8061178481614fa5565b9150506116b8565b50505092915050565b6000546001600160a01b031633146117bf5760405162461bcd60e51b815260040161091390614ea7565b600155565b600082815260096020526040902082906117e66000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480611811575060018101546001600160a01b031633145b61182d5760405162461bcd60e51b815260040161091390614e41565b6000848152600960209081526040909120845190916118539160118401918701906142bd565b50505060009283525050600c6020526040812055565b6000828152600960205260409020829061188b6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806118b6575060018101546001600160a01b031633145b6118d25760405162461bcd60e51b815260040161091390614e41565b60008351116118f35760405162461bcd60e51b815260040161091390614e89565b6000848152600960209081526040909120845190916119199160108401918701906142bd565b50505060009283525050600b6020526040812055565b60096020818152600092835260409283902080546001820154600483015460058401546006850154600786015489516101408101909a526008870180546001600160a01b039081168c529988018054978b169b9a9096169994989397929691959294939092908401916119a190614ff3565b80601f01602080910402602001604051908101604052809291908181526020018280546119cd90614ff3565b8015611a1a5780601f106119ef57610100808354040283529160200191611a1a565b820191906000526020600020905b8154815290600101906020018083116119fd57829003601f168201915b505050505081526020016002820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611ab257602002820191906000526020600020906000905b82829054906101000a900460ff166003811115611a9057611a90614bac565b815260206001928301818104948501949093039092029101808411611a715790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b82821015611b8c578382906000526020600020018054611aff90614ff3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2b90614ff3565b8015611b785780601f10611b4d57610100808354040283529160200191611b78565b820191906000526020600020905b815481529060010190602001808311611b5b57829003601f168201915b505050505081526020019060010190611ae0565b50505091525050815260048201546001600160a01b0381166020830152600160a01b900460ff1615156040820152600582018054606090920191611bcf90614ff3565b80601f0160208091040260200160405190810160405280929190818152602001828054611bfb90614ff3565b8015611c485780601f10611c1d57610100808354040283529160200191611c48565b820191906000526020600020905b815481529060010190602001808311611c2b57829003601f168201915b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611ca057602002820191906000526020600020905b815481526020019060010190808311611c8c575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611cf857602002820191906000526020600020905b815481526020019060010190808311611ce4575b5050505050815260200160088201805480602002602001604051908101604052809291908181526020018280548015611d5057602002820191906000526020600020905b815481526020019060010190808311611d3c575b5050505050815260200160098201805480602002602001604051908101604052809291908181526020018280548015611da857602002820191906000526020600020905b815481526020019060010190808311611d94575b505050505081525050905087565b60066020528160005260406000208181548110611dd257600080fd5b90600052602060002001600091509150505481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e5f5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920646564696361746564206d73672e73656e646572000000000000006044820152606401610913565b60008181526008602090815260408083205483526009825280832081516101208101835281546001600160a01b039081168252600183015416818501526002820180548451818702810187018652818152889796939586019390929190830182828015611ef557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ed7575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611f5757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f39575b505050505081526020016004820154815260200160058201548152602001600682015481526020016007820154815260200160088201604051806101400160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182018054611fd890614ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461200490614ff3565b80156120515780601f1061202657610100808354040283529160200191612051565b820191906000526020600020905b81548152906001019060200180831161203457829003601f168201915b5050505050815260200160028201604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156120e957602002820191906000526020600020906000905b82829054906101000a900460ff1660038111156120c7576120c7614bac565b8152602060019283018181049485019490930390920291018084116120a85790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156121c357838290600052602060002001805461213690614ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461216290614ff3565b80156121af5780601f10612184576101008083540402835291602001916121af565b820191906000526020600020905b81548152906001019060200180831161219257829003601f168201915b505050505081526020019060010190612117565b50505091525050815260048201546001600160a01b0381166020830152600160a01b900460ff161515604082015260058201805460609092019161220690614ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461223290614ff3565b801561227f5780601f106122545761010080835404028352916020019161227f565b820191906000526020600020905b81548152906001019060200180831161226257829003601f168201915b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156122d757602002820191906000526020600020905b8154815260200190600101908083116122c3575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561232f57602002820191906000526020600020905b81548152602001906001019080831161231b575b505050505081526020016008820180548060200260200160405190810160405280929190818152602001828054801561238757602002820191906000526020600020905b815481526020019060010190808311612373575b50505050508152602001600982018054806020026020016040519081016040528092919081815260200182805480156123df57602002820191906000526020600020905b8154815260200190600101908083116123cb575b50505050508152505081525050905060008161010001516101000151516000141561240f5750608081015161244f565b6101008083015101516000848152600860209081526040808320548352600b9091529020548151811061244457612444614f1d565b602002602001015190505b6000838152600a602052604090205461246890826108d3565b4210156124a05760405162461bcd60e51b8152600401610913906020808252600490820152636d30303160e01b604082015260600190565b6124bc82610100015160c0015183610100015160e00151611684565b6124f15760405162461bcd60e51b8152600401610913906020808252600490820152633698181960e11b604082015260600190565b600084815260086020908152604080832054808452600990925280832081516101608101909252919290805a815260200160008152602001600081526020018360020160008154811061254657612546614f1d565b600091825260209182902001546001600160a01b031682526002850180549290910191600190811061257a5761257a614f1d565b60009182526020808320909101546001600160a01b031683528281018290526040808401839052606084018390526080840183905260a0840183905260c0909301829052868252600c905220546011840180549293509181106125df576125df614f1d565b6000918252602091829020015490820181905260408201819052612605575050506130f8565b80606001516001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268a9190614f00565b6001600160a01b03161415612702576003546040808301519051630726edd760e01b81526001600160a01b0390921691630726edd7916126cf918c9190600401614ec5565b600060405180830381600087803b1580156126e957600080fd5b505af11580156126fd573d6000803e3d6000fd5b505050505b604081810151606083015184549251636eb1769f60e11b81523060048201526001600160a01b0393841660248201529192169063dd62ed3e90604401602060405180830381865afa15801561275b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277f919061502e565b1015612802576060810151825460015460405163095ea7b360e01b81526001600160a01b039384169363095ea7b3936127bd93911691600401614ec5565b6020604051808303816000875af11580156127dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128009190614ede565b505b60608101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061502e565b60a082015260808101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e3919061502e565b60c082015281546040808301519051635c11d79560e01b81526001600160a01b0390921691635c11d7959161292691600090600288019030904290600401615047565b600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b50505060808201516040516370a0823160e01b81523060048201526001600160a01b0390911691506370a0823190602401602060405180830381865afa1580156129a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c6919061502e565b60e0820181905260c08201516129dc91906137c3565b6040828101829052608083015184549151636eb1769f60e11b81523060048201526001600160a01b03928316602482015291169063dd62ed3e90604401602060405180830381865afa158015612a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5a919061502e565b1015612add576080810151825460015460405163095ea7b360e01b81526001600160a01b039384169363095ea7b393612a9893911691600401614ec5565b6020604051808303816000875af1158015612ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adb9190614ede565b505b81546040808301519051635c11d79560e01b81526001600160a01b0390921691635c11d79591612b1b91600090600388019030904290600401615047565b600060405180830381600087803b158015612b3557600080fd5b505af1158015612b49573d6000803e3d6000fd5b50505060608201516040516370a0823160e01b81523060048201526001600160a01b0390911691506370a0823190602401602060405180830381865afa158015612b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbb919061502e565b610100820181905260a0820151612bd1916137c3565b6101208201525a8151612be491906150bd565b6101408201819052610120820151604080513281523360208201529081019290925260608201524260808201526001600160a01b03891660a08201527fa0d9b65f09b17e1dcced5c00595ea6716a194b77d97686eab539c0ebb7cc03b89060c00160405180910390a160068201546007830154604080519283526001600160a01b038b166020840152820152606081018490527f80e5c66e5ffb3aad0b45468110664d533ae9d7488b0b67ef7fe3c2c96e9a28ac9060800160405180910390a1600080612caf613e11565b91509150612cbd8282613e9e565b6001600160a01b038a16600090815260056020526040902060010154821115612ce557600080fd5b6001600160a01b038a16600090815260056020526040902060010154612d0b90836137c3565b6001600160a01b038b166000908152600560205260409020600181019190915560030154612d3990836108d3565b6001600160a01b038b16600090815260056020819052604090912060030191909155840154612d699060016108d3565b846005018190555082606001516001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df69190614f00565b6001600160a01b03161415613043576000612f01600360009054906101000a90046001600160a01b03166001600160a01b031663253244f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e81919061502e565b6003546040805163698518e560e01b81529051612efb926001600160a01b03169163698518e59160048083019260209291908290030181865afa158015612ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef0919061502e565b602088015190613fb1565b9061400b565b90506000612f1d828661012001516108d390919063ffffffff16565b6001600160a01b038d16600090815260056020526040902060020154909150811115612f745760405162461bcd60e51b8152600401610913906020808252600490820152636d30303360e01b604082015260600190565b6001600160a01b038c16600090815260056020526040902060020154612f9a90826137c3565b6001600160a01b03808e166000908152600560209081526040909120600201929092556060870151600354928801519082169263a9059cbb921690612fdf90866108d3565b6040518363ffffffff1660e01b8152600401612ffc929190614ec5565b6020604051808303816000875af115801561301b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303f9190614ede565b5050505b50506000878152600a602052604090204290556010820154156130a5576000838152600b602052604090205461307a9060016108d3565b6000848152600b602052604090208190556010830154116130a5576000838152600b60205260408120555b6011820154156130f4576000838152600c60205260409020546130c99060016108d3565b6000848152600c602052604090208190556011830154116130f4576000838152600c60205260408120555b5050505b5050505050565b600082815260096020526040902082906131216000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316148061314c575060018101546001600160a01b031633145b6131685760405162461bcd60e51b815260040161091390614e41565b825160021480156131ac57508260008151811061318757613187614f1d565b6020026020010151836001815181106131a2576131a2614f1d565b6020026020010151115b6131c85760405162461bcd60e51b815260040161091390614e89565b6000848152600960209081526040909120845190916109df91600e8401918701906142bd565b6000546001600160a01b031633146132185760405162461bcd60e51b815260040161091390614ea7565b604051339082156108fc029083906000818181858888f19350505050158015613245573d6000803e3d6000fd5b5050565b600081815260096020526040902060018101546001600160a01b031633146132835760405162461bcd60e51b815260040161091390614e89565b600c810154600160a01b900460ff16156132af5760405162461bcd60e51b8152600401610913906150d4565b60088101546009820180546134ca926001600160a01b031691906132d290614ff3565b80601f01602080910402602001604051908101604052809291908181526020018280546132fe90614ff3565b801561334b5780601f106133205761010080835404028352916020019161334b565b820191906000526020600020905b81548152906001019060200180831161332e57829003601f168201915b505060408051600a8901805460606020820284018101855293830181815292965090945085935090918491908401828280156133d657602002820191906000526020600020906000905b82829054906101000a900460ff1660038111156133b4576133b4614bac565b8152602060019283018181049485019490930390920291018084116133955790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156134b057838290600052602060002001805461342390614ff3565b80601f016020809104026020016040519081016040528092919081815260200182805461344f90614ff3565b801561349c5780601f106134715761010080835404028352916020019161349c565b820191906000526020600020905b81548152906001019060200180831161347f57829003601f168201915b505050505081526020019060010190613404565b50505091525050600c8501546001600160a01b0316613d20565b50600c01805460ff60a01b1916600160a01b17905550565b600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135599190614f00565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b0391909116906323b872dd906064016020604051808303816000875af11580156135ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d29190614ede565b5033600090815260056020526040902060020154610c3e90826108d3565b600081815260096020526040902060018101546001600160a01b0316331461362a5760405162461bcd60e51b815260040161091390614e89565b600c810154600160a01b900460ff166136555760405162461bcd60e51b8152600401610913906150d4565b61365e8261404d565b600c01805460ff60a01b1916905550565b336000908152600560205260409020600101548111156136a15760405162461bcd60e51b815260040161091390614e89565b604051339082156108fc029083906000818181858888f193505050501580156136ce573d6000803e3d6000fd5b50336000908152600560205260409020600101546136ec90826137c3565b3360009081526005602052604090206001015550565b6000546001600160a01b0316331461372c5760405162461bcd60e51b815260040161091390614ea7565b6001600160a01b03811661376b5760405162461bcd60e51b8152600401610913906020808252600490820152636b30303360e01b604082015260600190565b61377481613dc1565b50565b6000546001600160a01b031633146137a15760405162461bcd60e51b815260040161091390614ea7565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156137fa5760405162461bcd60e51b8152602060048201526002602482015261329b60f11b6044820152606401610913565b600061380683856150bd565b949350505050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138859190614f00565b6001600160a01b0316826000815181106138a1576138a1614f1d565b60200260200101516001600160a01b031614801561396c5750600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561390d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139319190614f00565b6001600160a01b0316816001835161394991906150bd565b8151811061395957613959614f1d565b60200260200101516001600160a01b0316145b6139885760405162461bcd60e51b815260040161091390614e89565b600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ff9190614f00565b6001600160a01b031681600081518110613a1b57613a1b614f1d565b60200260200101516001600160a01b031614158015613ae85750600360009054906101000a90046001600160a01b03166001600160a01b031663c54e44eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190614f00565b6001600160a01b03168260018351613ac491906150bd565b81518110613ad457613ad4614f1d565b60200260200101516001600160a01b031614155b613b045760405162461bcd60e51b8152600401610913906150d4565b8060018251613b1391906150bd565b81518110613b2357613b23614f1d565b60200260200101516001600160a01b031682600081518110613b4757613b47614f1d565b60200260200101516001600160a01b031614613b755760405162461bcd60e51b815260040161091390614e41565b8160018251613b8491906150bd565b81518110613b9457613b94614f1d565b60200260200101516001600160a01b031681600081518110613bb857613bb8614f1d565b60200260200101516001600160a01b031614613bff5760405162461bcd60e51b815260040161091390602080825260049082015263194c0c0d60e21b604082015260600190565b81600081518110613c1257613c12614f1d565b60200260200101516001600160a01b031663095ea7b3846001546040518363ffffffff1660e01b8152600401613c49929190614ec5565b6020604051808303816000875af1158015613c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8c9190614ede565b5080600081518110613ca057613ca0614f1d565b60200260200101516001600160a01b031663095ea7b3846001546040518363ffffffff1660e01b8152600401613cd7929190614ec5565b6020604051808303816000875af1158015613cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1a9190614ede565b50505050565b604051633323b46760e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633323b46790613d759088908890889088906004016150f2565b6020604051808303816000875af1158015613d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db8919061502e565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b810c6366040518163ffffffff1660e01b81526004016040805180830381865afa158015613e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e95919061513b565b90939092509050565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415613f865760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405160006040518083038185875af1925050503d8060008114613f30576040519150601f19603f3d011682016040523d82523d6000602084013e613f35565b606091505b5050905080610a825760405162461bcd60e51b815260206004820152601e60248201527f5f7472616e736665723a20455448207472616e73666572206661696c656400006044820152606401610913565b613245817f0000000000000000000000000000000000000000000000000000000000000000846140c3565b600082613fc05750600061091f565b6000613fcc8385614fd4565b905082613fd98583614fc0565b1461091c5760405162461bcd60e51b8152602060048201526002602482015261653760f01b6044820152606401610913565b60008082116140415760405162461bcd60e51b81526020600482015260026024820152610ca760f31b6044820152606401610913565b60006138068385614fc0565b60405163ee8ca3b560e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee8ca3b590602401600060405180830381600087803b1580156140af57600080fd5b505af11580156130f8573d6000803e3d6000fd5b610a828363a9059cbb60e01b84846040516024016140e2929190614ec5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600061414e8260405180604001604052806002815260200161065360f41b815250856001600160a01b031661419d9092919063ffffffff16565b805190915015610a82578080602001905181019061416c9190614ede565b610a825760405162461bcd60e51b8152602060048201526002602482015261653160f01b6044820152606401610913565b6060613806848460008585600080866001600160a01b031685876040516141c49190615160565b60006040518083038185875af1925050503d8060008114614201576040519150601f19603f3d011682016040523d82523d6000602084013e614206565b606091505b509150915061421787838387614222565b979650505050505050565b6060831561428e578251614287576001600160a01b0385163b6142875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610913565b5081613806565b61380683838151156142a35781518083602001fd5b8060405162461bcd60e51b8152600401610913919061517c565b8280548282559060005260206000209081019282156142f8579160200282015b828111156142f85782518255916020019190600101906142dd565b5061430492915061458e565b5090565b6040518060a0016040528060008019168152602001606081526020016000801916815260200161434b604051806040016040528060608152602001606081525090565b815260200161435861435d565b905290565b60405180610120016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600080191681526020016143586145a3565b8280548282559060005260206000209081019282156142f8579160200282015b828111156142f857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906143de565b82805461441f90614ff3565b90600052602060002090601f01602090048101928261444157600085556142f8565b82601f1061445a57805160ff19168380011785556142f8565b828001600101855582156142f857918201828111156142f85782518255916020019190600101906142dd565b82805482825590600052602060002090601f016020900481019282156142f85791602002820160005b838211156144fb57835183826101000a81548160ff021916908360038111156144da576144da614bac565b021790555092602001926001016020816000010492830192600103026144af565b80156145285782816101000a81549060ff02191690556001016020816000010492830192600103026144fb565b505061430492915061458e565b828054828255906000526020600020908101928215614582579160200282015b828111156145825782518051614572918491602090910190614413565b5091602001919060010190614555565b50614304929150614625565b5b80821115614304576000815560010161458f565b60405180610140016040528060006001600160a01b03168152602001606081526020016145e3604051806040016040528060608152602001606081525090565b815260200160006001600160a01b0316815260200160001515815260200160608152602001606081526020016060815260200160608152602001606081525090565b808211156143045760006146398282614642565b50600101614625565b50805461464e90614ff3565b6000825580601f1061465e575050565b601f016020900490600052602060002090810190613774919061458e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156146bb576146bb61467c565b604052919050565b600067ffffffffffffffff8211156146dd576146dd61467c565b5060051b60200190565b600082601f8301126146f857600080fd5b8135602061470d614708836146c3565b614692565b82815260059290921b8401810191818101908684111561472c57600080fd5b8286015b848110156147475780358352918301918301614730565b509695505050505050565b6000806040838503121561476557600080fd5b82359150602083013567ffffffffffffffff81111561478357600080fd5b61478f858286016146e7565b9150509250929050565b6001600160a01b038116811461377457600080fd5b600080604083850312156147c157600080fd5b82356147cc81614799565b946020939093013593505050565b600080604083850312156147ed57600080fd5b50508035926020909101359150565b60006020828403121561480e57600080fd5b5035919050565b60006020828403121561482757600080fd5b813561091c81614799565b600082601f83011261484357600080fd5b813567ffffffffffffffff81111561485d5761485d61467c565b614870601f8201601f1916602001614692565b81815284602083860101111561488557600080fd5b816020850160208301376000918101602001919091529392505050565b80356148ad81614799565b919050565b600082601f8301126148c357600080fd5b813560206148d3614708836146c3565b82815260059290921b840181019181810190868411156148f257600080fd5b8286015b8481101561474757803561490981614799565b83529183019183016148f6565b60008060008060008060008060006101208a8c03121561493557600080fd5b893567ffffffffffffffff8082111561494d57600080fd5b6149598d838e01614832565b9a5061496760208d016148a2565b995060408c013591508082111561497d57600080fd5b6149898d838e016148b2565b985060608c013591508082111561499f57600080fd5b6149ab8d838e016148b2565b975060808c0135965060a08c01359150808211156149c857600080fd5b6149d48d838e016146e7565b955060c08c01359150808211156149ea57600080fd5b6149f68d838e016146e7565b945060e08c0135915080821115614a0c57600080fd5b614a188d838e016146e7565b93506101008c0135915080821115614a2f57600080fd5b50614a3c8c828d016146e7565b9150509295985092959850929598565b60008060408385031215614a5f57600080fd5b8235614a6a81614799565b9150602083013567ffffffffffffffff81111561478357600080fd5b6020808252825182820181905260009190848201906040850190845b81811015614abe57835183529284019291840191600101614aa2565b50909695505050505050565b60008060408385031215614add57600080fd5b823591506020830135614aef81614799565b809150509250929050565b60008060408385031215614b0d57600080fd5b823567ffffffffffffffff80821115614b2557600080fd5b614b31868387016146e7565b93506020850135915080821115614b4757600080fd5b5061478f858286016146e7565b60005b83811015614b6f578181015183820152602001614b57565b83811115613d1a5750506000910152565b60008151808452614b98816020860160208601614b54565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b805160408084528151908401819052600091602091908201906060860190845b81811015614c1d5783516004808210614c0a57634e487b7160e01b6000526021815260246000fd5b5083529284019291840191600101614be2565b505084830151868203878501528051808352908401925081840190600581901b8301850160005b82811015614c7257601f19858303018452614c60828751614b80565b95870195938701939150600101614c44565b5098975050505050505050565b600081518084526020808501945080840160005b83811015614caf57815187529582019590820190600101614c93565b509495945050505050565b600060018060a01b03808a1683528089166020840152508660408301528560608301528460808301528360a083015260e060c0830152614d0660e0830184516001600160a01b03169052565b60208301516101406101008181860152614d24610220860184614b80565b9250604086015160df19610120818887030181890152614d448684614bc2565b955060608901519250614d61858901846001600160a01b03169052565b6080890151151561016089015260a089015188870383016101808a01529450614d8a8686614b80565b955060c0890151945081888703016101a0890152614da88686614c7f565b955060e0890151945081888703016101c0890152614dc68686614c7f565b955083890151945081888703016101e0890152614de38686614c7f565b9550808901519450508087860301610200880152505050614e048282614c7f565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115614e3c57614e3c614e13565b500190565b6020808252600490820152636530303360e01b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082614e8457614e84614e5f565b500690565b6020808252600490820152636530303160e01b604082015260600190565b6020808252600490820152633598181960e11b604082015260600190565b6001600160a01b03929092168252602082015260400190565b600060208284031215614ef057600080fd5b8151801515811461091c57600080fd5b600060208284031215614f1257600080fd5b815161091c81614799565b634e487b7160e01b600052603260045260246000fd5b600086516020614f468285838c01614b54565b818401915087825286818301526bffffffffffffffffffffffff198660601b166040830152605482019150845181860160005b82811015614f9557815185529383019390830190600101614f79565b50929a9950505050505050505050565b6000600019821415614fb957614fb9614e13565b5060010190565b600082614fcf57614fcf614e5f565b500490565b6000816000190483118215151615614fee57614fee614e13565b500290565b600181811c9082168061500757607f821691505b6020821081141561502857634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561504057600080fd5b5051919050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b8181101561509c5784546001600160a01b031683526001948501949284019201615077565b50506001600160a01b03969096166060850152505050608001529392505050565b6000828210156150cf576150cf614e13565b500390565b6020808252600490820152633298181960e11b604082015260600190565b600060018060a01b038087168352608060208401526151146080840187614b80565b83810360408501526151268187614bc2565b92505080841660608401525095945050505050565b6000806040838503121561514e57600080fd5b825191506020830151614aef81614799565b60008251615172818460208701614b54565b9190910192915050565b60208152600061518f6020830184614b80565b939250505056fea26469706673582212205af93f3e7ce2ca01346626c37ed1201fe36fb53c9d776e5e0d1481fc31ad553c64736f6c634300080c00330000000000000000000000000000000000c097ce7bc90715b34b9f1000000000000000000000000000000000b3f5503f93d5ef84b06993a1975b9d21b962892f000000000000000000000000757c008f0ac1df63ff88ef1bb83ce05426273c95000000000000000000000000cfb22d402ce8c45bc4bea494fb4a1e57b9086737

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

0000000000000000000000000000000000c097ce7bc90715b34b9f1000000000000000000000000000000000b3f5503f93d5ef84b06993a1975b9d21b962892f000000000000000000000000757c008f0ac1df63ff88ef1bb83ce05426273c95000000000000000000000000cfb22d402ce8c45bc4bea494fb4a1e57b9086737

-----Decoded View---------------
Arg [0] : _approveAmount (uint256): 1000000000000000000000000000000000000
Arg [1] : _ops (address): 0xb3f5503f93d5ef84b06993a1975b9d21b962892f
Arg [2] : _fundsOwner (address): 0x757c008f0ac1df63ff88ef1bb83ce05426273c95
Arg [3] : _USDTPoolAddress (address): 0xcfb22d402ce8c45bc4bea494fb4a1e57b9086737

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000c097ce7bc90715b34b9f1000000000
Arg [1] : 000000000000000000000000b3f5503f93d5ef84b06993a1975b9d21b962892f
Arg [2] : 000000000000000000000000757c008f0ac1df63ff88ef1bb83ce05426273c95
Arg [3] : 000000000000000000000000cfb22d402ce8c45bc4bea494fb4a1e57b9086737


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading