```\n    IERC20(asset).safeTransferFrom(msg.sender, address(this), amount);\n    (address approveTarget, address swapTarget, bytes memory data) = abi\n    .decode(param, (address, address, bytes));\n    // if usdt\n    IERC20(asset).approve(approveTarget, 0);\n    IERC20(asset).approve(approveTarget, amount);\n    (bool success, ) = swapTarget.call(data);\n    if (success == false) {\n        assembly {\n            let ptr := mload(0x40)\n            let size := returndatasize()\n            returndatacopy(ptr, 0, size)\n            revert(ptr, size)\n        }\n    }\n```\n