interface IERC3156FlashBorrower {

    /**
     * @dev Receive a flash loan.
     * @param initiator The initiator of the loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param fee The additional amount of tokens to repay.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
     */
    function onFlashLoan(
        address initiator,
        address token,
        uint256 amount,
        uint256 fee,
        bytes calldata data
    ) external returns (bytes32);
}
// Dependency file: contracts/interfaces/IERC3156FlashBorrower.sol
// pragma solidity >=0.6.0 <=0.8.0;
function onFlashLoan(
    address initiator,
    address token,
    uint256 amount,
    uint256 fee,
    bytes calldata data
) external returns (bytes32);

/**
 * @dev Receive a flash loan.
 * @param initiator The initiator of the loan.
 * @param token The loan currency.
 * @param amount The amount of tokens lent.
 * @param fee The additional amount of tokens to repay.
 * @param data Arbitrary data structure, intended to contain user-defined parameters.
 * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
 */