0xda9aba4eacf54e0273f56dffee6b8f1e20b23bba

deployer: unknown relevance score: 0 status: partially_identified bytecode: 18865 bytes

DECOMPILED SOLIDITY (Heimdall)

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @title            Decompiled Contract
/// @author           Jonathan Becker <jonathan@jbecker.dev>
/// @custom:version   heimdall-rs v0.9.2
///
/// @notice           This contract was decompiled using the heimdall-rs decompiler.
///                     It was generated directly by tracing the EVM opcodes from this contract.
///                     As a result, it may not compile or even be valid solidity code.
///                     Despite this, it should be obvious what each function does. Overall
///                     logic should have been preserved throughout decompiling.
///
/// @custom:github    You can find the open-source decompiler here:
///                       https://heimdall.rs

contract DecompiledContract {
    uint256 public constant factoryV1 = 131789380479456781418607120658294569224194728205;
    uint256 public constant factoryV2 = 239297211893549498868921720216425080735220090147;
    uint256 public constant WETH9 = 919314261072992390246123622467725103438511446567;
    
    address public stableSwapInfo;
    
    
    /// @custom:selector    0x3068c554
    /// @custom:signature   Unresolved_3068c554(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_3068c554(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xd4ef38de
    /// @custom:signature   unwrapWETH9WithFee(uint256 arg0, uint256 arg1, address arg2) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["address", "uint160", "bytes20", "int160"]
    function unwrapWETH9WithFee(uint256 arg0, uint256 arg1, address arg2) public payable {
        require(arg2 == (address(arg2)));
        require(!arg1 > 0);
        require(!arg1 > 0x64);
        address var_b = address(this);
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).Unresolved_70a08231(var_b); // staticcall
        require(!(ret0.length < 0x20), "Insufficient WETH9");
        require(!(var_c.length < arg0), "Insufficient WETH9");
        require(!var_c.length);
        var_b = var_c.length;
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }Unresolved_2e1a7d4d(var_b); // call
        require(!var_c.length, "STE");
        require(!var_c.length, "STE");
        require(0x2710, "STE");
        require(!0, "STE");
        uint256 var_c = var_c + 0x20;
        require(var_c.length < 0x20, "STE");
        require((var_c.length + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0) < 0x20, "STE");
        (bool success, bytes memory ret0) = address(arg2).transfer(0);
        require(ret0.length == 0, "STE");
        require(var_c.length);
        require(((arg1 * var_c.length) / var_c.length) == arg1);
        require(0x2710);
        require(arg1 > 0);
    }
    
    /// @custom:selector    0x4aa94288
    /// @custom:signature   Unresolved_4aa94288(uint256 arg0, uint256 arg1) public pure
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_4aa94288(uint256 arg0, uint256 arg1) public pure {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        require(!arg1 > 0xffffffffffffffff);
    }
    
    /// @custom:selector    0xdf2ab5bb
    /// @custom:signature   Unresolved_df2ab5bb(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_df2ab5bb(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xc8bb1856
    /// @custom:signature   Unresolved_c8bb1856(uint256 arg0, uint256 arg1) public pure
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_c8bb1856(uint256 arg0, uint256 arg1) public pure {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        require(!arg1 > 0xffffffffffffffff);
    }
    
    /// @custom:selector    0xa4a78f0c
    /// @custom:signature   selfPermitAllowedIfNecessary(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg4 ["uint256", "bytes32", "int256"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    function selfPermitAllowedIfNecessary(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable {
        require(arg0 == (address(arg0)));
        require(arg3 == (bytes1(arg3)));
        address var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).Unresolved_dd62ed3e(var_b); // staticcall
        require(!ret0.length < 0x20);
        require(!var_d.length < 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }Unresolved_8fcbaf0c(var_b); // call
    }
    
    /// @custom:selector    0xf3995c67
    /// @custom:signature   selfPermit(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg4 ["uint256", "bytes32", "int256"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    function selfPermit(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable {
        require(arg0 == (address(arg0)));
        require(arg3 == (bytes1(arg3)));
        address var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }Unresolved_d505accf(var_b); // call
    }
    
    /// @custom:selector    0x9b5c7a81
    /// @custom:signature   swapExactTokensForTokensV1(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["address", "uint160", "bytes20", "int160"]
    function swapExactTokensForTokensV1(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable {
        require(!arg2 > 0xffffffffffffffff);
        require(!(arg2) > 0xffffffffffffffff);
        require(arg3 == (address(arg3)));
        require(arg0);
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0);
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0x01 < (arg2));
        require(!(((0x20 + ((0x04 + arg2) + 0x20)) + 0x20) - (0x20 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0x20 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20))));
        require(!(address(0 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20)))), "STF");
        require(address(0 + (arg2 + 0x20)) < (address(0x20 + (arg2 + 0x20))), "STF");
        require(address(0 + (arg2 + 0x20)), "STF");
        uint256 var_d = var_d + 0x48;
        var_d = var_d + 0xbd;
        require(!(address(0 + (arg2 + 0x20)) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27), "STF");
        require(!(!address(this).balance < arg0), "STF");
        require(!(address(this) == (address(this))), "STF");
        var_d = var_d + 0x84;
        require(var_d.length < 0x20, "STF");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "STF");
        require(!0x01 == (address(arg3)));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require(!0x02 == (address(arg3)));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require(!var_u);
        require(!var_u < 0x20);
        var_d = var_d + (uint248(ret0.length + 0x3f));
        require(!var_d.length, "STF");
        require(!var_d.length, "STF");
        var_l = arg0;
        var_d = var_d + 0x64;
        require(var_d.length < 0x20, "ST");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "ST");
        require(!var_u);
        require(!var_u < 0x20);
        var_d = var_d + (uint248(ret0.length + 0x3f));
        require(!var_d.length, "ST");
        require(!var_d.length, "ST");
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: var_l }deposit(); // call
        uint256 var_aa = address(keccak256(var_h));
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }many_msg_babbage(var_aa); // call
        require(!ret0.length < 0x20);
        if (!(address(0 + (arg2 + 0x20))) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27) {
        }
        require(0 < (arg2));
        require(arg2);
    }
    
    /// @custom:selector    0xcafe95a0
    /// @custom:signature   swapTokensForExactTokensV2(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["address", "uint160", "bytes20", "int160"]
    function swapTokensForExactTokensV2(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable returns (uint256) {
        require(!arg2 > 0xffffffffffffffff);
        require(!(arg2) > 0xffffffffffffffff);
        require(arg3 == (address(arg3)));
        uint256 var_a = var_a + (0x20 + (0x20 * (arg2)));
        uint256 var_b = (arg2);
        require(!var_a.length < 0x02);
        require(!var_a.length > 0xffffffffffffffff);
        var_a = var_a + (0x20 + (0x20 * var_a.length));
        require(!var_a.length, "Too much requested");
        var_c = msg.data[4:4];
        require((var_a.length - 0x01) < var_a.length, "Too much requested");
        require(!(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length), "Too much requested");
        require(!(var_c > arg1), "Too much requested");
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0x01 < (arg2));
        require(!(((0x20 + ((0x04 + arg2) + 0x20)) + 0x20) - (0x20 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0x20 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20))));
        require(!(address(0 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20)))), "STF");
        require(address(0 + (arg2 + 0x20)) < (address(0x20 + (arg2 + 0x20))), "STF");
        require(address(0 + (arg2 + 0x20)), "STF");
        var_a = var_a + 0x48;
        var_a = var_a + 0xbd;
        require(!(address(0 + (arg2 + 0x20)) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27), "STF");
        require(!(!address(this).balance < (var_c)), "STF");
        require(!(address(this) == (address(msg.sender))), "STF");
        var_a = var_a + 0x84;
        require(var_a.length < 0x20, "STF");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "STF");
        require(!(0x01 == (address(arg3))), "STF");
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        require(!(0x02 == (address(arg3))), "STF");
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        require(!var_aa, "STF");
        require(!(var_aa < 0x20), "STF");
        require(var_b, "STF");
        var_a = var_a + (uint248(ret0.length + 0x3f));
        if (!var_a.length) {
        }
        var_a = var_a + 0x64;
        require(var_a.length < 0x20, "ST");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "ST");
        require(!var_aa, "ST");
        require(!(var_aa < 0x20), "ST");
        require(var_b, "ST");
        var_a = var_a + (uint248(ret0.length + 0x3f));
        if (!var_a.length) {
        }
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: var_c }deposit(); // call
        uint256 var_af = address(keccak256(var_c));
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }many_msg_babbage(var_af); // call
        require(!ret0.length < 0x20);
        if (!(address(0 + (arg2 + 0x20))) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27) {
        }
        require(((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) - 0x01) < var_a.length);
        require((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) < var_a.length);
        require(!(address(var_ag)) == (address(var_ah)));
        require(address(var_ag) < (address(var_ah)));
        require(address(var_ag));
        require(!(address(var_ag)) == (address(var_ah)));
        require(address(var_ag) < (address(var_ah)));
        require(address(var_ag));
        var_a = var_a + 0x48;
        var_a = var_a + 0xbd;
        require(address(keccak256(var_c)).code.length);
        (bool success, bytes memory ret0) = address(keccak256(var_c)).getReserves(); // staticcall
        require(!ret0.length < 0x60);
        require(address(var_ag) == (address(var_ag)));
        require((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) < var_a.length);
        require(var_ah > 0);
        require(!(uint112(var_u)) > 0);
        require(uint112(var_a.length) > 0);
        require(!uint112(var_u));
        require(uint112(var_u));
        require(var_ah * (uint112(var_u)) / (uint112(var_u)) == (var_ah));
    }
    
    /// @custom:selector    0xe0e189a0
    /// @custom:signature   Unresolved_e0e189a0(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_e0e189a0(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xab0acea4
    /// @custom:signature   swapExactTokensForTokensV2(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["address", "uint160", "bytes20", "int160"]
    function swapExactTokensForTokensV2(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable {
        require(!arg2 > 0xffffffffffffffff);
        require(!(arg2) > 0xffffffffffffffff);
        require(arg3 == (address(arg3)));
        require(arg0);
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0);
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0x01 < (arg2));
        require(!(((0x20 + ((0x04 + arg2) + 0x20)) + 0x20) - (0x20 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0x20 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20))));
        require(!(address(0 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20)))), "STF");
        require(address(0 + (arg2 + 0x20)) < (address(0x20 + (arg2 + 0x20))), "STF");
        require(address(0 + (arg2 + 0x20)), "STF");
        uint256 var_d = var_d + 0x48;
        var_d = var_d + 0xbd;
        require(!(address(0 + (arg2 + 0x20)) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27), "STF");
        require(!(!address(this).balance < arg0), "STF");
        require(!(address(this) == (address(this))), "STF");
        var_d = var_d + 0x84;
        require(var_d.length < 0x20, "STF");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "STF");
        require(!0x01 == (address(arg3)));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require(!0x02 == (address(arg3)));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require((arg2 + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < (arg2));
        require(!var_u);
        require(!var_u < 0x20);
        var_d = var_d + (uint248(ret0.length + 0x3f));
        require(!var_d.length, "STF");
        require(!var_d.length, "STF");
        var_l = arg0;
        var_d = var_d + 0x64;
        require(var_d.length < 0x20, "ST");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "ST");
        require(!var_u);
        require(!var_u < 0x20);
        var_d = var_d + (uint248(ret0.length + 0x3f));
        require(!var_d.length, "ST");
        require(!var_d.length, "ST");
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: var_l }deposit(); // call
        uint256 var_aa = address(keccak256(var_h));
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }many_msg_babbage(var_aa); // call
        require(!ret0.length < 0x20);
        if (!(address(0 + (arg2 + 0x20))) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27) {
        }
        require(0 < (arg2));
        require(arg2);
    }
    
    /// @custom:selector    0x5ae401dc
    /// @custom:signature   multicall(uint256 arg0, bytes[] arg1) public payable returns (bytes memory)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function multicall(uint256 arg0, bytes[] arg1) public payable returns (bytes memory) {
        require(!arg1 > 0xffffffffffffffff);
        require(!(arg1) > 0xffffffffffffffff);
        require(!block.timestamp > arg0);
        require(!(arg1) > 0xffffffffffffffff);
        uint256 var_b = var_b + (0x20 + (0x20 * (arg1)));
        require(!arg1);
        require(arg1 - 0x01);
        require(!0 < (arg1));
        require(0 < (arg1));
        require(!((arg1 + 0x20) + ((arg1 + 0x20) + 0)) > 0xffffffffffffffff);
        (bool success, bytes memory ret0) = address(this).Unresolved_(var_e); // delegatecall
        require(ret0.length == 0);
        require(!var_f < 0x44);
        require(!((0x84 + var_g) - 0x84) < 0x20);
        require(!var_h > 0xffffffffffffffff);
        require(((0x84 + var_h) + 0x1f) < (0x84 + var_g), "");
        require(!(var_i > 0xffffffffffffffff), "");
        require(!((((var_b + (uint248(var_i + 0x1f))) + 0x20) > 0xffffffffffffffff) | (((var_b + (uint248(var_i + 0x1f))) + 0x20) < var_b)), "");
        var_b = (var_b + (uint248(var_i + 0x1f))) + 0x20;
        require(!((0x84 + var_g) < (0x20 + (var_i + (0x84 + var_h)))), "");
        require(!(0 < (var_i)), "");
        require(!(0 > (var_i)), "");
        require(!(0 > var_b.length), "");
        var_b = var_b + (uint248(ret0.length + 0x3f));
        return abi.encodePacked(0x20, var_b.length);
    }
    
    /// @custom:selector    0x4659a494
    /// @custom:signature   selfPermitAllowed(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg4 ["uint256", "bytes32", "int256"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    function selfPermitAllowed(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable {
        require(arg0 == (address(arg0)));
        require(arg3 == (bytes1(arg3)));
        address var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }Unresolved_8fcbaf0c(var_b); // call
    }
    
    /// @custom:selector    0x12210e8a
    /// @custom:signature   refundETH() public payable
    function refundETH() public payable {
        require(!address(this).balance, "STE");
        uint256 var_b = var_b + 0x20;
        require(var_b.length < 0x20, "STE");
        require((var_b.length + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0) < 0x20, "STE");
        (bool success, bytes memory ret0) = address(msg.sender).transfer(address(this).balance);
        require(ret0.length == 0, "STE");
    }
    
    /// @custom:selector    0x9b2c0a37
    /// @custom:signature   Unresolved_9b2c0a37(uint256 arg0, address arg1) public pure
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_9b2c0a37(uint256 arg0, address arg1) public pure {
        require(arg1 == (address(arg1)));
    }
    
    /// @custom:selector    0xac9650d8
    /// @custom:signature   Unresolved_ac9650d8(uint256 arg0, uint256 arg1) public payable returns (bytes memory)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_ac9650d8(uint256 arg0, uint256 arg1) public payable returns (bytes memory) {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        uint256 var_b = var_b + (0x20 + (0x20 * (arg0)));
        require(!arg0);
        require(arg0 - 0x01);
        require(!0 < (arg0));
        require(0 < (arg0));
        require(!((arg0 + 0x20) + ((arg0 + 0x20) + 0)) > 0xffffffffffffffff);
        (bool success, bytes memory ret0) = address(this).Unresolved_(var_e); // delegatecall
        require(ret0.length == 0);
        require(!var_f < 0x44);
        require(!((0x84 + var_g) - 0x84) < 0x20);
        require(!var_h > 0xffffffffffffffff);
        require(((0x84 + var_h) + 0x1f) < (0x84 + var_g), "");
        require(!(var_i > 0xffffffffffffffff), "");
        require(!((((var_b + (uint248(var_i + 0x1f))) + 0x20) > 0xffffffffffffffff) | (((var_b + (uint248(var_i + 0x1f))) + 0x20) < var_b)), "");
        var_b = (var_b + (uint248(var_i + 0x1f))) + 0x20;
        require(!((0x84 + var_g) < (0x20 + (var_i + (0x84 + var_h)))), "");
        require(!(0 < (var_i)), "");
        require(!(0 > (var_i)), "");
        require(!(0 > var_b.length), "");
        var_b = var_b + (uint248(ret0.length + 0x3f));
        return abi.encodePacked(0x20, var_b.length);
    }
    
    /// @custom:selector    0x49616997
    /// @custom:signature   unwrapWETH9(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function unwrapWETH9(uint256 arg0) public payable {
        address var_b = address(this);
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).Unresolved_70a08231(var_b); // staticcall
        require(!(ret0.length < 0x20), "Insufficient WETH9");
        require(!(var_c.length < arg0), "Insufficient WETH9");
        require(!var_c.length);
        var_b = var_c.length;
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }Unresolved_2e1a7d4d(var_b); // call
        uint256 var_c = var_c + 0x20;
        require(var_c.length < 0x20, "STE");
        require((var_c.length + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0) < 0x20, "STE");
        (bool success, bytes memory ret0) = address(msg.sender).transfer(var_c.length);
        require(ret0.length == 0, "STE");
    }
    
    /// @custom:selector    0x1c58db4f
    /// @custom:signature   wrapETH(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function wrapETH(uint256 arg0) public payable {
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: arg0 }deposit(); // call
    }
    
    /// @custom:selector    0xe90a182f
    /// @custom:signature   sweepToken(address arg0, uint256 arg1) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function sweepToken(address arg0, uint256 arg1) public payable {
        require(arg0 == (address(arg0)));
        address var_b = address(this);
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).Unresolved_70a08231(var_b); // staticcall
        require(!(ret0.length < 0x20), "Insufficient token");
        require(!(var_c.length < arg1), "Insufficient token");
        require(!var_c.length, "ST");
        uint256 var_c = var_c + 0x64;
        require(var_c.length < 0x20, "ST");
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "ST");
        require(!var_l);
        require(!var_l < 0x20);
        var_c = var_c + (uint248(ret0.length + 0x3f));
        require(!var_c.length, "ST");
        require(!var_c.length, "ST");
    }
    
    /// @custom:selector    0x49404b7c
    /// @custom:signature   unwrapWETH9(uint256 arg0, address arg1) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function unwrapWETH9(uint256 arg0, address arg1) public payable {
        require(arg1 == (address(arg1)));
        address var_b = address(this);
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).Unresolved_70a08231(var_b); // staticcall
        require(!(ret0.length < 0x20), "Insufficient WETH9");
        require(!(var_c.length < arg0), "Insufficient WETH9");
        require(!var_c.length);
        var_b = var_c.length;
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }Unresolved_2e1a7d4d(var_b); // call
        uint256 var_c = var_c + 0x20;
        require(var_c.length < 0x20, "STE");
        require((var_c.length + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0) < 0x20, "STE");
        (bool success, bytes memory ret0) = address(arg1).transfer(var_c.length);
        require(ret0.length == 0, "STE");
    }
    
    /// @custom:selector    0xf2d5d56b
    /// @custom:signature   pull(address arg0, uint256 arg1) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function pull(address arg0, uint256 arg1) public payable {
        require(arg0 == (address(arg0)));
        uint256 var_e = var_e + 0x84;
        require(var_e.length < 0x20, "STF");
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "STF");
        require(!var_l);
        require(!var_l < 0x20);
        var_e = var_e + (uint248(ret0.length + 0x3f));
        require(!var_e.length, "STF");
        require(!var_e.length, "STF");
    }
    
    /// @custom:selector    0xc2e3140a
    /// @custom:signature   selfPermitIfNecessary(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["bool", "uint8", "bytes1", "int8"]
    /// @param              arg4 ["uint256", "bytes32", "int256"]
    /// @param              arg5 ["uint256", "bytes32", "int256"]
    function selfPermitIfNecessary(address arg0, uint256 arg1, uint256 arg2, uint8 arg3, bytes32 arg4, bytes32 arg5) public payable {
        require(arg0 == (address(arg0)));
        require(arg3 == (bytes1(arg3)));
        address var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).Unresolved_dd62ed3e(var_b); // staticcall
        require(!ret0.length < 0x20);
        require(!var_d.length < arg1);
        var_b = msg.sender;
        require(address(arg0).code.length);
        (bool success, bytes memory ret0) = address(arg0).{ value: 0 ether }Unresolved_d505accf(var_b); // call
    }
    
    /// @custom:selector    0x1d4389f5
    /// @custom:signature   swapTokensForExactTokensV1(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    /// @param              arg2 ["uint256", "bytes32", "int256"]
    /// @param              arg3 ["address", "uint160", "bytes20", "int160"]
    function swapTokensForExactTokensV1(uint256 arg0, uint256 arg1, address[] arg2, address arg3) public payable returns (uint256) {
        require(!arg2 > 0xffffffffffffffff);
        require(!(arg2) > 0xffffffffffffffff);
        require(arg3 == (address(arg3)));
        uint256 var_a = var_a + (0x20 + (0x20 * (arg2)));
        uint256 var_b = (arg2);
        require(!var_a.length < 0x02);
        require(!var_a.length > 0xffffffffffffffff);
        var_a = var_a + (0x20 + (0x20 * var_a.length));
        require(!var_a.length, "Too much requested");
        var_c = msg.data[4:4];
        require((var_a.length - 0x01) < var_a.length, "Too much requested");
        require(!(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length), "Too much requested");
        require(!(var_c > arg1), "Too much requested");
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0 < (arg2));
        require(!(((0 + ((0x04 + arg2) + 0x20)) + 0x20) - (0 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0 + (arg2 + 0x20)) == (address(0 + (arg2 + 0x20))));
        require(0x01 < (arg2));
        require(!(((0x20 + ((0x04 + arg2) + 0x20)) + 0x20) - (0x20 + ((0x04 + arg2) + 0x20))) < 0x20);
        require((0x20 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20))));
        require(!(address(0 + (arg2 + 0x20)) == (address(0x20 + (arg2 + 0x20)))), "STF");
        require(address(0 + (arg2 + 0x20)) < (address(0x20 + (arg2 + 0x20))), "STF");
        require(address(0 + (arg2 + 0x20)), "STF");
        var_a = var_a + 0x48;
        var_a = var_a + 0xbd;
        require(!(address(0 + (arg2 + 0x20)) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27), "STF");
        require(!(!address(this).balance < (var_c)), "STF");
        require(!(address(this) == (address(msg.sender))), "STF");
        var_a = var_a + 0x84;
        require(var_a.length < 0x20, "STF");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "STF");
        require(!(0x01 == (address(arg3))), "STF");
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        require(!(0x02 == (address(arg3))), "STF");
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        var_a = var_a + (0x20 + (0x20 * (arg2)));
        var_c = msg.data[36:36];
        require(!(0 < (var_a.length - 0x01)), "STF");
        return var_c;
        require(!var_aa, "STF");
        require(!(var_aa < 0x20), "STF");
        require(var_b, "STF");
        var_a = var_a + (uint248(ret0.length + 0x3f));
        if (!var_a.length) {
        }
        var_a = var_a + 0x64;
        require(var_a.length < 0x20, "ST");
        (bool success, bytes memory ret0) = address(0 + (arg2 + 0x20)).{ value: 0 ether }adfepixw(); // call
        require(ret0.length == 0, "ST");
        require(!var_aa, "ST");
        require(!(var_aa < 0x20), "ST");
        require(var_b, "ST");
        var_a = var_a + (uint248(ret0.length + 0x3f));
        if (!var_a.length) {
        }
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: var_c }deposit(); // call
        uint256 var_af = address(keccak256(var_c));
        require(address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).code.length);
        (bool success, bytes memory ret0) = address(0xa1077a294dde1b09bb078844df40758a5d0f9a27).{ value: 0 ether }many_msg_babbage(var_af); // call
        require(!ret0.length < 0x20);
        if (!(address(0 + (arg2 + 0x20))) == 0xa1077a294dde1b09bb078844df40758a5d0f9a27) {
        }
        require(((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) - 0x01) < var_a.length);
        require((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) < var_a.length);
        require(!(address(var_ag)) == (address(var_ah)));
        require(address(var_ag) < (address(var_ah)));
        require(address(var_ag));
        require(!(address(var_ag)) == (address(var_ah)));
        require(address(var_ag) < (address(var_ah)));
        require(address(var_ag));
        var_a = var_a + 0x48;
        var_a = var_a + 0xbd;
        require(address(keccak256(var_c)).code.length);
        (bool success, bytes memory ret0) = address(keccak256(var_c)).getReserves(); // staticcall
        require(!ret0.length < 0x60);
        require(address(var_ag) == (address(var_ag)));
        require((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + var_a.length) < var_a.length);
        require(var_ah > 0);
        require(!(uint112(var_u)) > 0);
        require(uint112(var_a.length) > 0);
        require(!uint112(var_u));
        require(uint112(var_u));
        require(var_ah * (uint112(var_u)) / (uint112(var_u)) == (var_ah));
    }
    
    /// @custom:selector    0x1f0464d1
    /// @custom:signature   multicall(bytes32 arg0, bytes[] arg1) public payable returns (bytes memory)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function multicall(bytes32 arg0, bytes[] arg1) public payable returns (bytes memory) {
        require(!arg1 > 0xffffffffffffffff);
        require(!(arg1) > 0xffffffffffffffff);
        require(blockhash(block.number - 0x01) == arg0, "Blockhash");
        var_b = 0x20;
        require(!(arg1) > 0xffffffffffffffff);
        uint256 var_e = var_e + (0x20 + (0x20 * (arg1)));
        require(!arg1);
        require(arg1 - 0x01);
        require(!0 < (arg1));
        require(0 < (arg1));
        require(!((arg1 + 0x20) + ((arg1 + 0x20) + 0)) > 0xffffffffffffffff);
        (bool success, bytes memory ret0) = address(this).Unresolved_(var_h); // delegatecall
        require(ret0.length == 0);
        require(!var_i < 0x44);
        require(!((0x84 + var_j) - 0x84) < 0x20);
        require(!var_b > 0xffffffffffffffff);
        require(((0x84 + var_b) + 0x1f) < (0x84 + var_j), "");
        require(!(var_k > 0xffffffffffffffff), "");
        require(!((((var_e + (uint248(var_k + 0x1f))) + 0x20) > 0xffffffffffffffff) | (((var_e + (uint248(var_k + 0x1f))) + 0x20) < var_e)), "");
        var_e = (var_e + (uint248(var_k + 0x1f))) + 0x20;
        require(!((0x84 + var_j) < (0x20 + (var_k + (0x84 + var_b)))), "");
        require(!(0 < (var_k)), "");
        require(!(0 > (var_k)), "");
        require(!(0 > var_e.length), "");
        var_e = var_e + (uint248(ret0.length + 0x3f));
        return abi.encodePacked(0x20, var_e.length);
    }
}

ABI

[
  {
    "type": "function",
    "name": "Unresolved_3068c554",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_4aa94288",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_9b2c0a37",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_ac9650d8",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "Unresolved_c8bb1856",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_df2ab5bb",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_e0e189a0",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "WETH9",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "factoryV1",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "factoryV2",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "multicall",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "bytes[]"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "pull",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "refundETH",
    "inputs": [],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "selfPermit",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint8"
      },
      {
        "name": "arg4",
        "type": "bytes32"
      },
      {
        "name": "arg5",
        "type": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "selfPermitAllowed",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint8"
      },
      {
        "name": "arg4",
        "type": "bytes32"
      },
      {
        "name": "arg5",
        "type": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "selfPermitAllowedIfNecessary",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint8"
      },
      {
        "name": "arg4",
        "type": "bytes32"
      },
      {
        "name": "arg5",
        "type": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "selfPermitIfNecessary",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "uint256"
      },
      {
        "name": "arg3",
        "type": "uint8"
      },
      {
        "name": "arg4",
        "type": "bytes32"
      },
      {
        "name": "arg5",
        "type": "bytes32"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "stableSwapInfo",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "swapExactTokensForTokensV1",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "address[]"
      },
      {
        "name": "arg3",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "swapExactTokensForTokensV2",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "address[]"
      },
      {
        "name": "arg3",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "swapTokensForExactTokensV1",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "address[]"
      },
      {
        "name": "arg3",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "swapTokensForExactTokensV2",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "address[]"
      },
      {
        "name": "arg3",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sweepToken",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "unwrapWETH9",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "unwrapWETH9WithFee",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      },
      {
        "name": "arg2",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "wrapETH",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  }
]

UNKNOWN SELECTORS (5)

0xc8bb1856unknown
0x9b5c7a81unknown
0xcafe95a0unknown
0x1d4389f5unknown
0x4aa94288unknown
These selectors are not yet in the research database — they are being investigated and will be added as known functions once identified. They are also marked in red in the decompiled Solidity above.

KNOWN CLUSTER ADDRESSES IN THIS BYTECODE (0)

(none)