<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <!-- ###############################################################################################-->
    <!-- ################                        RAPID IFRAME                           ################-->
    <!-- ###############################################################################################-->

    <!-- Add Secure Fields method to the Adapter -->
    <virtualType name="EwayRapidMethodAdapter">
        <arguments>
            <argument name="methodInstances" xsi:type="array">
                <item name="iframe" xsi:type="string">EwayRapidIFrameFieldsFacade</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Eway\EwayRapid\Model\Ui\ConfigProvider">
        <arguments>
            <argument name="methodSpecificConfig" xsi:type="array">
                <item name="iframe" xsi:type="object">\Eway\IFrame\Model\Ui\Config</item>
            </argument>
        </arguments>
    </type>
    <type name="\Eway\IFrame\Model\Ui\Config">
        <arguments>
            <argument name="config"         xsi:type="object">EwayRapidConfig</argument>
            <argument name="commandPool"    xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </type>

    <virtualType name="EwayRapidIFrameFieldsFacade" type="\Eway\IFrame\Model\Method\Adapter">
        <arguments>
            <argument name="code"               xsi:type="const">\Eway\EwayRapid\Model\Ui\ConfigProvider::CODE</argument>
            <argument name="formBlockType"      xsi:type="string">EwayRapidIFrameFormBlock</argument>
            <argument name="infoBlockType"      xsi:type="string">\Eway\EwayRapid\Block\Info\Cc</argument>
            <argument name="valueHandlerPool"   xsi:type="object">EwayRapidDefaultValueHandlerPool</argument>
            <argument name="validatorPool"      xsi:type="object">EwayRapidValidatorPool</argument>
            <argument name="commandPool"        xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </virtualType>

    <!-- Command Pool -->
    <virtualType name="EwayRapidIFrameCommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="get_access_code"            xsi:type="string">EwayRapidGetAccessCodeCommand</item>
                <item name="non_token_authorize"        xsi:type="string">EwayRapidIFrameAuthorizeCommand</item>
                <item name="create_token_authorize"     xsi:type="string">EwayRapidIFrameCreateTokenAuthorizeCommand</item>
                <item name="query_and_create_token"     xsi:type="string">EwayRapidIFrameQueryAndCreateTokenCommand</item>
                <item name="charge_token"               xsi:type="string">EwayRapidIFrameSecureFieldsChargeTokenCommand</item>
                <item name="authorize"                  xsi:type="string">EwayRapidIFrameAuthorizeStrategyCommand</item>
                <item name="sale"                       xsi:type="string">EwayRapidIFrameAuthorizeStrategyCommand</item>
                <item name="capture"                    xsi:type="string">EwayRapidIFrameCaptureStrategyCommand</item>
                <item name="pre_auth_capture"           xsi:type="string">EwayRapidPreAuthCaptureCommand</item>
                <item name="void"                       xsi:type="string">EwayRapidCancelTransactionCommand</item>
                <item name="cancel"                     xsi:type="string">EwayRapidCancelTransactionCommand</item>
                <item name="refund"                     xsi:type="string">EwayRapidRefundTransactionCommand</item>
                <item name="get_access_code_create"     xsi:type="string">EwayRapidGetAccessCodeCreateTokenCommand</item>
                <item name="get_access_code_update"     xsi:type="string">EwayRapidGetAccessCodeUpdateTokenCommand</item>
                <item name="query_access_code"          xsi:type="string">EwayRapidIFrameMycardQueryAccessCodeCommand</item>
                <item name="query_and_update_token"     xsi:type="string">EwayRapidIFrameQueryAndUpdateTokenCommand</item>
                <item name="create_token"               xsi:type="string">EwayRapidIFrameMyCardCreateUpdateToken</item>
                <item name="update_token"               xsi:type="string">EwayRapidIFrameDirectConnectionMyCardUpdateToken</item>
                <item name="query_transaction"          xsi:type="string">EwayRapidQueryTransactionByIdCommand</item>
                <item name="use_token_authorize_tr"     xsi:type="string">EwayRapidUseTokenAuthorizeTransparentCommand</item>
                <item name="get_access_code_multishipping"            xsi:type="string">EwayRapidGetAccessCodeMultishippingCommand</item>
                <item name="authorize_multishipping"                  xsi:type="string">EwayRapidIFrameAuthorizeMultishippingStrategyCommand</item>
                <item name="non_token_authorize_multishipping"        xsi:type="string">EwayRapidIFrameAuthorizeMultishippingCommand</item>
                <item name="create_token_authorize_multishipping"     xsi:type="string">EwayRapidIFrameCreateTokenAuthorizeMultiShippingCommand</item>
                <item name="charge_token_multishipping"               xsi:type="string">EwayRapidIFrameSecureFieldsChargeTokenMulishippingCommand</item>
                <item name="query_and_create_token_multishipping"     xsi:type="string">EwayRapidIFrameQueryAndCreateTokenMultishippingCommand</item>
                <item name="query_transaction_multishipping"          xsi:type="string">EwayRapidQueryTransactionByIdMultishippingCommand</item>
                <item name="use_token_authorize_tr_multishipping"     xsi:type="string">EwayRapidUseTokenAuthorizeTransparentMultishippingCommand</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidUseTokenAuthorizeTransparentCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryUseTokenHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidUseTokenAuthorizeTransparentMultishippingCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryUseTokenMultishippingHandler</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameAuthorizeCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryResponseHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameAuthorizeMultishippingCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryResponseMultishippingHandler</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameCreateTokenAuthorizeCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryCreateTokenHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameCreateTokenAuthorizeMultiShippingCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidTransactionQueryValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidTransactionQueryCreateTokenMultishippingHandler</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameQueryAndCreateTokenCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryToken</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTokenQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="handler"            xsi:type="object">EwayRapidCreateTokenHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameQueryAndCreateTokenMultishippingCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryToken</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTokenQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="handler"            xsi:type="object">EwayRapidCreateTokenMultishippingResponseHandler</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameQueryAndUpdateTokenCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryToken</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTokenQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="handler"            xsi:type="object">EwayRapidUpdateTokenHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameCaptureStrategyCommand" type="\Eway\EwayRapid\Gateway\Command\CaptureStrategyCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameAuthorizeStrategyCommand" type="\Eway\IFrame\Gateway\Command\AuthorizeStrategyCommand">
        <arguments>
            <argument name="commandPool"    xsi:type="object">EwayRapidIFrameCommandPool</argument>
            <argument name="config"         xsi:type="object">EwayRapidConfig</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameAuthorizeMultishippingStrategyCommand" type="\Eway\IFrame\Gateway\Command\AuthorizeStrategyMultishippingCommand">
        <arguments>
            <argument name="commandPool"    xsi:type="object">EwayRapidIFrameCommandPool</argument>
            <argument name="config"         xsi:type="object">EwayRapidConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameMycardQueryAccessCodeCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientQueryTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidTransactionQueryDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidQueryAccessCodeValidator</argument>
            <argument name="handler"            xsi:type="object">\Eway\IFrame\Gateway\Response\TransactionQueryTokenHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameMyCardCreateUpdateToken" type="\Eway\IFrame\Gateway\Command\MyCardCreateUpdateTokenCommand">
        <arguments>
            <argument name="commandPool" xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameDirectConnectionMyCardUpdateToken" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientUpdateCustomer</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidDirectCreateTokenDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidCreateTokenValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidUpdateTokenHandler</argument>
        </arguments>
    </virtualType>
    <type name="\Eway\IFrame\Model\GetAccessCodeTransactionService">
        <arguments>
            <argument name="config"         xsi:type="object">EwayRapidConfig</argument>
            <argument name="commandPool"    xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </type>

    <type name="Eway\IFrame\Model\QueryTransactionService">
        <arguments>
            <argument name="commandPool"    xsi:type="object">EwayRapidIFrameCommandPool</argument>
        </arguments>
    </type>

    <virtualType name="EwayRapidGetAccessCodeCommand" type="\Eway\IFrame\Gateway\Command\GetAccessCodeCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientCreateTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidGetAccessCodeDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidGetAccessCodeMultishippingCommand" type="\Eway\IFrame\Gateway\Command\GetAccessCodeMultishippingCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientCreateTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidGetAccessCodeDataMultishippingBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidGetAccessCodeCreateTokenCommand" type="\Eway\IFrame\Gateway\Command\GetAccessCodeCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientCreateCustomer</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidMyCardGetAccessCodeDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidGetAccessCodeUpdateTokenCommand" type="\Eway\IFrame\Gateway\Command\GetAccessCodeCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientUpdateCustomer</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidMyCardGetAccessCodeDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameSecureFieldsChargeTokenCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientCreateTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidIFrameSecureFieldsChargeTokenDataBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidIFrameDirectValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidDirectResponseHandler</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidIFrameSecureFieldsChargeTokenMulishippingCommand" type="\Eway\EwayRapid\Gateway\Command\GenericCommand">
        <arguments>
            <argument name="client"             xsi:type="object">EwayRapidClientCreateTransaction</argument>
            <argument name="requestBuilder"     xsi:type="object">EwayRapidIFrameSecureFieldsChargeTokenDataMultishippingBuilder</argument>
            <argument name="transferFactory"    xsi:type="object">EwayRapidTransferFactory</argument>
            <argument name="validator"          xsi:type="object">EwayRapidDirectMultishippingValidator</argument>
            <argument name="handler"            xsi:type="object">EwayRapidDirectMultishippingResponseHandler</argument>
        </arguments>
    </virtualType>

    <!-- Request Builder -->
    <virtualType name="EwayRapidGetAccessCodeDataBuilder" type="\Eway\IFrame\Gateway\Request\AccessCodeBuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="base_request"       xsi:type="string">\Eway\EwayRapid\Gateway\Request\BaseRequestDataBuilder</item>
                <item name="customer"           xsi:type="string">\Eway\EwayRapid\Gateway\Request\CustomerDataBuilder</item>
                <item name="shipping_address"   xsi:type="string">\Eway\EwayRapid\Gateway\Request\ShippingAddressDataBuilder</item>
                <item name="items"              xsi:type="string">\Eway\EwayRapid\Gateway\Request\ItemsDataBuilder</item>
                <item name="payment"            xsi:type="string">\Eway\EwayRapid\Gateway\Request\PaymentDataBuilder</item>
                <item name="callback_url"       xsi:type="string">\Eway\IFrame\Gateway\Request\CallbackUrlBuilder</item>
                <item name="customer_token"     xsi:type="string">\Eway\EwayRapid\Gateway\Request\TokenDataBuilder</item>
                <item name="additional"         xsi:type="string">\Eway\IFrame\Gateway\Request\AdditionalDataBuilder</item>
            </argument>
            <argument name="config" xsi:type="object">EwayRapidConfig</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidGetAccessCodeDataMultishippingBuilder" type="\Eway\IFrame\Gateway\Request\AccessCodeBuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="base_request"       xsi:type="string">\Eway\EwayRapid\Gateway\Request\BaseRequestDataBuilder</item>
                <item name="customer"           xsi:type="string">\Eway\EwayRapid\Gateway\Request\CustomerDataBuilder</item>
                <item name="shipping_address"   xsi:type="string">\Eway\EwayRapid\Gateway\Request\ShippingAddressDataBuilder</item>
                <item name="items"              xsi:type="string">\Eway\IFrame\Gateway\Request\MultishippingItemsDataBuilder</item>
                <item name="payment"            xsi:type="string">\Eway\IFrame\Gateway\Request\PaymentMultiShippingDataBuilder</item>
                <item name="callback_url"       xsi:type="string">\Eway\IFrame\Gateway\Request\MultishippingCallbackUrlBuilder</item>
                <item name="customer_token"     xsi:type="string">\Eway\EwayRapid\Gateway\Request\TokenDataBuilder</item>
                <item name="additional"         xsi:type="string">\Eway\IFrame\Gateway\Request\AdditionalDataBuilder</item>
            </argument>
            <argument name="config" xsi:type="object">EwayRapidConfig</argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidMyCardGetAccessCodeDataBuilder" type="\Eway\IFrame\Gateway\Request\AccessCodeBuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="base_request"       xsi:type="string">\Eway\EwayRapid\Gateway\Request\BaseRequestDataBuilder</item>
                <item name="customer"           xsi:type="string">\Eway\EwayRapid\Gateway\Request\CustomerTokenDataBuilder</item>
                <item name="callback_url"       xsi:type="string">\Eway\IFrame\Gateway\Request\MyCardCallbackUrlBuilder</item>
            </argument>
            <argument name="config" xsi:type="object">EwayRapidConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidTokenQueryDataBuilder"       type="\Eway\IFrame\Gateway\Request\TokenQueryDataBuilder" />
    <virtualType name="EwayRapidTransactionQueryDataBuilder" type="\Eway\IFrame\Gateway\Request\TransactionQueryDataBuilder" />
    <virtualType name="EwayRapidIFrameSecureFieldsChargeTokenDataBuilder" type="\Eway\EwayRapid\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="base_request"       xsi:type="string">\Eway\EwayRapid\Gateway\Request\BaseRequestDataBuilder</item>
                <item name="customer"           xsi:type="string">\Eway\EwayRapid\Gateway\Request\CustomerDataBuilder</item>
                <item name="shipping_address"   xsi:type="string">\Eway\EwayRapid\Gateway\Request\ShippingAddressDataBuilder</item>
                <item name="items"              xsi:type="string">\Eway\EwayRapid\Gateway\Request\ItemsDataBuilder</item>
                <item name="payment"            xsi:type="string">\Eway\EwayRapid\Gateway\Request\PaymentDataBuilder</item>
                <item name="customer_token"     xsi:type="string">\Eway\EwayRapid\Gateway\Request\TokenDataBuilder</item>
                <item name="secured_card_data"  xsi:type="string">\Eway\IFrame\Gateway\Request\SecuredCardDataBuilder</item>
                <item name="three_d_secure_auth" xsi:type="string">\Eway\DirectConnection\Gateway\Request\ThreeDSecureAuthBuilder</item>
            </argument>
            <argument name="method" xsi:type="const">\Eway\Rapid\Enum\ApiMethod::DIRECT</argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidIFrameSecureFieldsChargeTokenDataMultishippingBuilder" type="\Eway\EwayRapid\Gateway\Request\BuilderComposite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="base_request"       xsi:type="string">\Eway\EwayRapid\Gateway\Request\BaseRequestDataBuilder</item>
                <item name="customer"           xsi:type="string">\Eway\EwayRapid\Gateway\Request\CustomerDataBuilder</item>
                <item name="shipping_address"   xsi:type="string">\Eway\EwayRapid\Gateway\Request\ShippingAddressDataBuilder</item>
                <item name="items"              xsi:type="string">\Eway\EwayRapid\Gateway\Request\MultishippingItemsDataBuilder</item>
                <item name="payment"            xsi:type="string">\Eway\EwayRapid\Gateway\Request\PaymentMultiShippingDataBuilder</item>
                <item name="customer_token"     xsi:type="string">\Eway\EwayRapid\Gateway\Request\TokenDataBuilder</item>
                <item name="secured_card_data"  xsi:type="string">\Eway\IFrame\Gateway\Request\SecuredCardDataBuilder</item>
                <item name="three_d_secure_auth" xsi:type="string">\Eway\DirectConnection\Gateway\Request\ThreeDSecureAuthBuilder</item>
            </argument>
            <argument name="method" xsi:type="const">\Eway\Rapid\Enum\ApiMethod::DIRECT</argument>
        </arguments>
    </virtualType>

    <!-- Response Handlers -->
    <virtualType name="EwayRapidTransactionQueryResponseHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="card_details"       xsi:type="string">\Eway\EwayRapid\Gateway\Response\CardDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidTransactionQueryResponseMultishippingHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="card_details"       xsi:type="string">\Eway\EwayRapid\Gateway\Response\CardDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
                <item name="response_storage"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\Multishipping\QueryTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidTransactionQueryCreateTokenHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
                <item name="customer_token_id"  xsi:type="string">\Eway\IFrame\Gateway\Response\TransactionQueryTokenHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidTransactionQueryCreateTokenMultishippingHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
                <item name="customer_token_id"  xsi:type="string">\Eway\IFrame\Gateway\Response\TransactionQueryTokenHandler</item>
                <item name="response_storage"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\Multishipping\QueryTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="EwayRapidTransactionQueryUseTokenHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="card_details"       xsi:type="string">\Eway\EwayRapid\Gateway\Response\CardDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
                <item name="customer_token_id"  xsi:type="string">\Eway\IFrame\Gateway\Response\TransactionQueryTokenHandler</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="EwayRapidTransactionQueryUseTokenMultishippingHandler" type="Magento\Payment\Gateway\Response\HandlerChain">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="payment_details"    xsi:type="string">\Eway\EwayRapid\Gateway\Response\PaymentDetailsHandler</item>
                <item name="card_details"       xsi:type="string">\Eway\EwayRapid\Gateway\Response\CardDetailsHandler</item>
                <item name="response_messages"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\ResponseMessagesHandler</item>
                <item name="customer_token_id"  xsi:type="string">\Eway\IFrame\Gateway\Response\TransactionQueryTokenHandler</item>
                <item name="response_storage"  xsi:type="string">\Eway\EwayRapid\Gateway\Response\Multishipping\QueryTransactionHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <!-- Response Validator -->
    <virtualType name="EwayRapidTransactionQueryValidator" type="\Eway\IFrame\Gateway\Validator\TransactionQueryResponseValidator" />
    <virtualType name="EwayRapidQueryAccessCodeValidator" type="\Eway\IFrame\Gateway\Validator\QueryAccessCodeResponseValidator" />
    <virtualType name="EwayRapidIFrameDirectValidator" type="\Eway\IFrame\Gateway\Validator\DirectResponseValidator" />

    <!-- Blocks -->
    <virtualType name="EwayRapidIFrameMycardForm" type="\Magento\Framework\View\Element\Template">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="template" xsi:type="string">Eway_IFrame::form/mycard.phtml</item>
            </argument>
        </arguments>
    </virtualType>
</config>
