<?xml version="1.0"?>
<!--
  ~ Copyright Magmodules.eu. All rights reserved.
  ~ See COPYING.txt for license details.
  -->

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Mollie\Payment\Api\Webapi\PaymentTokenRequestInterface" type="Mollie\Payment\Webapi\PaymentToken" />
    <preference for="Mollie\Payment\Api\Webapi\StartTransactionRequestInterface" type="Mollie\Payment\Webapi\StartTransaction" />
    <preference for="Mollie\Payment\Api\Webapi\GetCustomerOrderInterface" type="Mollie\Payment\Webapi\GetCustomerOrder" />
    <preference for="Mollie\Payment\Api\Webapi\GetPaymentLinkRedirectInterface" type="Mollie\Payment\Webapi\GetPaymentLinkRedirect" />
    <preference for="Mollie\Payment\Api\Webapi\ResetCartInterface" type="Mollie\Payment\Webapi\ResetCart" />
    <preference for="Mollie\Payment\Api\MagentoOrderRepositoryInterface" type="Mollie\Payment\Model\MagentoOrderRepository" />

    <preference for="Mollie\Payment\Api\PaymentTokenRepositoryInterface" type="Mollie\Payment\Model\PaymentTokenRepository"/>
    <preference for="Mollie\Payment\Api\Data\PaymentTokenInterface" type="Mollie\Payment\Model\Data\PaymentToken"/>

    <preference for="Mollie\Payment\Api\MollieCustomerRepositoryInterface" type="Mollie\Payment\Model\MollieCustomerRepository"/>
    <preference for="Mollie\Payment\Api\Data\MollieCustomerInterface" type="Mollie\Payment\Model\Data\MollieCustomer"/>

    <preference for="Mollie\Payment\Api\PendingPaymentReminderRepositoryInterface" type="Mollie\Payment\Model\PendingPaymentReminderRepository"/>
    <preference for="Mollie\Payment\Api\Data\PendingPaymentReminderInterface" type="Mollie\Payment\Model\Data\PendingPaymentReminder"/>
    <preference for="Mollie\Payment\Api\Data\PendingPaymentReminderSearchResultsInterface" type="Magento\Framework\Api\SearchResults"/>

    <preference for="Mollie\Payment\Api\SentPaymentReminderRepositoryInterface" type="Mollie\Payment\Model\SentPaymentReminderRepository"/>
    <preference for="Mollie\Payment\Api\Data\SentPaymentReminderInterface" type="Mollie\Payment\Model\Data\SentPaymentReminder"/>
    <preference for="Mollie\Payment\Api\Data\SentPaymentReminderSearchResultsInterface" type="Magento\Framework\Api\SearchResults"/>

    <preference for="Mollie\Payment\Api\ApiKeyFallbackRepositoryInterface" type="Mollie\Payment\Model\ApiKeyFallbackRepository" />
    <preference for="Mollie\Payment\Api\Data\ApiKeyFallbackInterface" type="Mollie\Payment\Model\Data\ApiKeyFallback"/>
    <preference for="Mollie\Payment\Api\Data\ApiKeyFallbackSearchResultsInterface" type="Magento\Framework\Api\SearchResults"/>

    <preference for="Mollie\Payment\Api\TransactionToOrderRepositoryInterface" type="Mollie\Payment\Model\TransactionToOrderRepository" />
    <preference for="Mollie\Payment\Api\Data\TransactionToOrderInterface" type="Mollie\Payment\Model\TransactionToOrder"/>
    <preference for="Mollie\Payment\Api\Data\TransactionToOrderSearchResultsInterface" type="Mollie\Payment\Model\TransactionToOrderSearchResults"/>
    <preference for="Mollie\Payment\Api\TransactionToOrderManagementInterface" type="Mollie\Payment\Model\TransactionToOrderManagement" />

    <preference for="Mollie\Payment\Api\Webapi\PaymentInformationMetaInterface" type="Mollie\Payment\Webapi\PaymentInformationMeta"/>
    <preference for="Mollie\Payment\Api\Data\MethodMetaInterface" type="Mollie\Payment\Model\MethodMeta" />
    <preference for="Mollie\Payment\Api\Data\IssuerInterface" type="Mollie\Payment\Model\Issuer" />
    <preference for="Mollie\Payment\Api\Data\TerminalInterface" type="Mollie\Payment\Model\Terminal" />

    <preference for="Mollie\Payment\Api\Data\TransactionToProcessInterface" type="Mollie\Payment\Model\Queue\TransactionToProcess"/>

    <preference for="Mollie\Payment\Api\Data\PaymentLinkRedirectResultInterface" type="Mollie\Payment\Service\Magento\PaymentLinkRedirectResult"/>

    <type name="Mollie\Payment\Config">
        <arguments>
            <argument name="productMetadata" xsi:type="object">Magento\Framework\App\ProductMetadataInterface\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Logger\MollieLogger">
        <arguments>
            <argument name="logger" xsi:type="object">mollieLogger</argument>
            <argument name="handler" xsi:type="object">Mollie\Payment\Logger\MollieHandler</argument>
        </arguments>
    </type>

    <virtualType name="mollieLogger" type="Monolog\Logger">
        <arguments>
            <argument name="name" xsi:type="string">mollie-logger</argument>
        </arguments>
    </virtualType>

    <!-- Set sensitive information -->
    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="payment/mollie_general/apikey_test" xsi:type="string">1</item>
                <item name="payment/mollie_general/apikey_live" xsi:type="string">1</item>
            </argument>
            <argument name="environment" xsi:type="array">
                <item name="payment/mollie_general/apikey_test" xsi:type="string">1</item>
                <item name="payment/mollie_general/apikey_live" xsi:type="string">1</item>
                <item name="payment/mollie_general/type" xsi:type="string">1</item>
                <item name="payment/mollie_general/debug" xsi:type="string">1</item>
                <item name="payment/mollie_general/use_webhooks" xsi:type="string">1</item>
                <item name="payment/mollie_general/custom_webhook_url" xsi:type="string">1</item>
                <item name="payment/mollie_general/use_custom_redirect_url" xsi:type="string">1</item>
                <item name="payment/mollie_general/custom_redirect_url" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Client\Orders">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Client\Payments">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Magento\Sales\Api\OrderRepositoryInterface">
        <plugin name="mollie_payment_fee_order" type="Mollie\Payment\Plugin\Sales\AddPaymentFeeToOrder" />
        <plugin name="mollie_payment_add_subscription_data" type="Mollie\Payment\Plugin\Sales\AddRecurringData" />
    </type>

    <type name="Magento\Sales\Api\OrderManagementInterface">
        <plugin name="mollie_order_management-plugin" type="Mollie\Payment\Plugin\Sales\Api\OrderManagementPlugin" />
    </type>

    <type name="Magento\Quote\Api\CartRepositoryInterface">
        <plugin name="mollie_add_paymentfee_extension_attributes" type="Mollie\Payment\Plugin\Sales\Cart\AddPaymentFeeToCart" />
    </type>

    <type name="Magento\Quote\Api\Data\CartInterface">
        <plugin name="mollie_parse_metadata" type="Mollie\Payment\Plugin\Quote\Api\ParseMollieMetadata" />
    </type>

    <type name="Magento\Quote\Api\Data\CartItemInterface">
        <plugin name="mollie_make_recurring_products_unique_in_cart" type="Mollie\Payment\Plugin\Quote\Api\Item\MakeRecurringProductsUniqueInCart" />
    </type>

    <type name="Mollie\Payment\Service\Order\BuildTransaction">
        <arguments>
            <argument name="parts" xsi:type="array">
                <item name="cardToken" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\CardToken</item>
                <item name="customerId" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\CustomerId</item>
                <item name="issuer" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\Issuer</item>
                <item name="applePayPaymentToken" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\ApplePayPaymentToken</item>
                <item name="sequenceTypeForVault" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\SequenceType</item>
                <item name="UseSavedPaymentMethod" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\UseSavedPaymentMethod</item>
                <item name="PhoneNumber" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\PhoneNumber</item>
                <item name="DateOfBirth" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\DateOfBirth</item>
                <item name="CaptureMode" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\CaptureMode</item>
                <item name="terminalId" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\TerminalId</item>
                <item name="LimitStreetLength" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\LimitStreetLength</item>
                <item name="LimitedMethods" xsi:type="object">Mollie\Payment\Service\Order\TransactionPart\LimitedMethods</item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\Order\Uncancel">
        <arguments>
            <argument name="uncancelOrderItemReservation" xsi:type="object">\Mollie\Payment\Service\Order\Uncancel\OrderReservation\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\Order\SecondChanceEmail">
        <arguments>
            <argument name="identityContainer" xsi:type="object">Magento\Sales\Model\Order\Email\Container\OrderIdentity</argument>
        </arguments>
    </type>

    <type name="Magento\Customer\Api\CustomerRepositoryInterface">
        <plugin name="mollie_customer_id_extension_attributes" type="Mollie\Payment\Plugin\Customer\CustomerId" />
    </type>

    <type name="Mollie\Payment\Service\Order\Lines\OrderLinesProcessor">
        <arguments>
            <argument name="processors" xsi:type="array">
                <item name="voucherCategory" xsi:type="object">Mollie\Payment\Service\Order\Lines\Processor\VoucherCategory</item>
                <item name="bundleWithoutDynamicPrice" xsi:type="object">Mollie\Payment\Service\Order\Lines\Processor\BundleWithoutDynamicPricing</item>
                <item name="mollie_buyrequest_to_metadata" xsi:type="object">Mollie\Payment\Service\Order\Lines\BuyRequestToMetadata</item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\Order\Lines\OrderLinesGenerator">
        <arguments>
            <argument name="generators" xsi:type="array">
                <item name="fooman_totals" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\FoomanTotals</item>
                <item name="weee_fee" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\WeeeFeeGenerator</item>
                <item name="mageworx_rewardpoints" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\MageWorxRewardPoints</item>
                <item name="amasty_extrafee" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\AmastyExtraFee</item>
                <item name="aheadworks_addfreegift" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\AheadworksAddFreeGift</item>
                <item name="magento_giftcard" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\MagentoGiftCard</item>
                <item name="magento_giftwrapping" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\MagentoGiftWrapping</item>
                <item name="geissweb_euvat" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\GeisswebEuvat</item>
                <item name="cart_rule_discount" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\ShippingDiscount</item>
                <item name="magento_reward_points" xsi:type="object">Mollie\Payment\Service\Order\Lines\Generator\MagentoRewardPoints</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="mollie_pending_payment_reminders_data_source" xsi:type="string">PendingPaymentReminderCollection</item>
                <item name="mollie_sent_payment_reminders_data_source" xsi:type="string">SentPaymentReminderCollection</item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Controller\ApplePay\PlaceOrder">
        <arguments>
            <argument xsi:type="object" name="checkoutSession">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Controller\ApplePay\BuyNowPlaceOrder">
        <arguments>
            <argument xsi:type="object" name="checkoutSession">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <virtualType name="PendingPaymentReminderCollection" type="Mollie\Payment\Ui\DataProvider\PaymentReminder\Listing\Pending\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">mollie_pending_payment_reminder</argument>
            <argument name="resourceModel" xsi:type="string">Mollie\Payment\Model\ResourceModel\PendingPaymentReminder</argument>
        </arguments>
    </virtualType>

    <virtualType name="SentPaymentReminderCollection" type="Mollie\Payment\Ui\DataProvider\PaymentReminder\Listing\Sent\Collection">
        <arguments>
            <argument name="mainTable" xsi:type="string">mollie_sent_payment_reminder</argument>
            <argument name="resourceModel" xsi:type="string">Mollie\Payment\Model\ResourceModel\SentPaymentReminder</argument>
        </arguments>
    </virtualType>

    <type name="Magento\Framework\View\Asset\Minification">
        <plugin name="disable_minification_for_components_js" type="Mollie\Payment\Plugin\Framework\View\Asset\DisableMinificationForComponentsJs" />
    </type>

    <type name="Mollie\Payment\Observer\ControllerActionPredispatchCheckoutIndexIndex\RestoreQuoteOfUnsuccessfulPayment">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Magento\Quote\Api\PaymentMethodManagementInterface">
        <plugin name="mollie_hide_methods_that_are_not_allowed" type="Mollie\Payment\Plugin\Quote\Api\PaymentMethodManagementPlugin" />
        <plugin name="mollie_hide_methods_when_cart_contains_recurring_product" type="Mollie\Payment\Plugin\Quote\Api\LimitMethodsForRecurringPayments" />
    </type>

    <type name="Mollie\Payment\Service\Order\TransactionProcessor">
        <arguments>
            <argument name="processors" xsi:type="array">
                <item name="saveRemainingAmount" xsi:type="object">Mollie\Payment\Service\Order\ProcessTransaction\SaveRemainingAmount</item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\Order\Reorder">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Magento\Config\Model\Config\Loader">
        <plugin name="mollie_load_correct_group" type="Mollie\Payment\Plugin\Config\LoadCorrectGroup" />
    </type>

    <type name="Magento\Catalog\Model\Attribute\Config">
        <plugin name="mollie_add_mealvoucher_category_to_loaded_attribute" type="Mollie\Payment\Plugin\Catalog\Model\AddMealVoucherCategoryToLoadedAttributes" />
    </type>

    <type name="Mollie\Payment\Service\Mollie\MethodParameters">
        <arguments>
            <argument name="parametersParts" xsi:type="array"></argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\LockService">
        <arguments>
            <argument name="resourceConnection" xsi:type="object">Magento\Framework\App\ResourceConnection\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Mollie">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Observer\CheckoutSubmitAllAfter\StartTransactionForInstantPurchaseOrders">
        <arguments>
            <argument name="mollie" xsi:type="object">Mollie\Payment\Model\Mollie\Proxy</argument>
        </arguments>
    </type>

    <type name="Magento\InstantPurchase\Controller\Button\PlaceOrder">
        <plugin name="mollie_add_redirect_url" type="Mollie\Payment\Plugin\InstantPurchase\Button\PlaceOrderAddRedirectUrl" />
    </type>

    <type name="Mollie\Payment\Model\Client\Orders\ProcessTransaction">
        <arguments>
            <argument name="orderProcessors" xsi:type="object">Mollie\Payment\Model\Client\Orders\OrderProcessors</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Client\Payments\ProcessTransaction">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Client\Orders\OrderProcessors">
        <arguments>
            <argument name="processors" xsi:type="array">
                <item name="preprocess" xsi:type="array">
                    <item name="add_additional_data" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\AddAdditionalInformation</item>
                    <item name="save_card_label" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\SaveCardDetails</item>
                    <item name="payment_link_save_payment_method" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\PaymentLinkPaymentMethod</item>
                </item>
                <item name="last_payment_status_is_failure" xsi:type="array">
                    <item name="last_payment_status_is_failure" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\LastPaymentStatusIsFailure</item>
                </item>
                <item name="created" xsi:type="array">
                    <item name="send_confirmation_email_for_banktransfer" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\SendConfirmationEmailForBanktransfer</item>
                </item>
                <item name="cancelled" xsi:type="array">
                    <item name="cancelled" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\CancelledProcessor</item>
                </item>
                <item name="expired" xsi:type="array">
                    <item name="expired" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\ExpiredProcessor</item>
                </item>
                <item name="is_successful" xsi:type="array">
                    <item name="is_successful" xsi:type="object">Mollie\Payment\Model\Client\Orders\Processors\SuccessfulPayment</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Model\Client\Payments\PaymentProcessors">
        <arguments>
            <argument name="processors" xsi:type="array">
                <item name="preprocess" xsi:type="array">
                    <item name="add_additional_data" xsi:type="object">Mollie\Payment\Model\Client\Payments\Processors\AddAdditionalInformation</item>
                </item>
                <item name="failed" xsi:type="array">
                    <item name="failed" xsi:type="object">Mollie\Payment\Model\Client\Payments\Processors\FailedStatusProcessor</item>
                </item>
                <item name="expired" xsi:type="array">
                    <item name="failed" xsi:type="object">Mollie\Payment\Model\Client\Payments\Processors\ExpiredStatusProcessor</item>
                </item>
                <item name="open" xsi:type="array">
                    <item name="open" xsi:type="object">Mollie\Payment\Model\Client\Payments\Processors\SendEmailForBanktransfer</item>
                </item>
                <item name="paid" xsi:type="array">
                    <item name="paid" xsi:type="object">Mollie\Payment\Model\Client\Payments\Processors\SuccessfulPayment</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\InventorySales\Model\IsProductSalableForRequestedQtyCondition\IsSalableWithReservationsCondition">
        <plugin name="mollie_disable_stock_check_for_admin_orders" type="Mollie\Payment\Plugin\InventorySales\Model\IsProductSalableForRequestedQtyCondition\IsSalableWithReservationsCondition\DisableCheckForAdminOrders" />
    </type>

    <type name="Mollie\Payment\Block\Applepay\Shortcut\Button">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Controller\ApplePay\ShippingMethods">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <virtualType name="ScandiPWA\Router\Controller\ConfigurableRouter" type="ScandiPWA\Router\Controller\Router">
        <arguments>
            <argument name="ignoredURLs" xsi:type="array">
                <item name="mollie-webhook" xsi:type="string">^/mollie/checkout/webhook.*</item>
                <item name="mollie-secondchance" xsi:type="string">^/mollie/checkout/secondchance.*</item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Mollie\Payment\Block\Checkout\CheckoutConfig">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>

    <type name="Mollie\Payment\Service\Mollie\MollieApiClient">
        <arguments>
            <argument name="fetchFallbackApiKeys" xsi:type="object">Mollie\Payment\Service\Mollie\Wrapper\FetchFallbackApiKeys\Proxy</argument>
        </arguments>
    </type>

    <type name="Magento\CustomerBalance\Observer\RevertStoreCreditObserver">
        <plugin name="mollie_prevent_double_credit_revert" type="Mollie\Payment\Plugin\CustomerBalance\Observer\PreventDoubleCreditRevert" />
    </type>

    <virtualType name="CleanExpiredOrdersCollectionFactory"
                 type="Magento\Sales\Model\ResourceModel\Order\CollectionFactory">
        <arguments>
            <argument name="instanceName" xsi:type="string">Mollie\Payment\Model\Cronjob\CleanExpiredOrdersCollection
            </argument>
        </arguments>
    </virtualType>

    <type name="Magento\Sales\Model\CronJob\CleanExpiredOrders">
        <arguments>
            <argument name="collectionFactory" xsi:type="object">CleanExpiredOrdersCollectionFactory</argument>
        </arguments>
    </type>

    <!-- Payment methods configuration start -->
    <!-- ApplePay -->
    <type name="Mollie\Payment\Model\Methods\ApplePay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieApplePayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieApplePayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieApplePayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieApplePayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieApplePayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieApplePayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieApplePayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\ApplePay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieApplePayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieApplePayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieApplePayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieApplePayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Alma -->
    <type name="Mollie\Payment\Model\Methods\Alma">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieAlmaValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieAlmaValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieAlmaValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieAlmaConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieAlmaConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieAlmaConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieAlmaConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Alma::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieAlmaValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieAlmaCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieAlmaCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieAlmaConfig</argument>
        </arguments>
    </virtualType>

    <!-- Bancontact -->
    <type name="Mollie\Payment\Model\Methods\Bancontact">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBancontactValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBancontactValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBancontactValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBancontactConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBancontactConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Bancontact::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBancontactCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBancontactConfig</argument>
        </arguments>
    </virtualType>

    <!-- Bancomatpay -->
    <type name="Mollie\Payment\Model\Methods\Bancomatpay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBancomatpayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBancomatpayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBancomatpayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBancomatpayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancomatpayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBancomatpayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancomatpayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Bancomatpay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancomatpayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBancomatpayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancomatpayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBancomatpayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Banktransfer -->
    <type name="Mollie\Payment\Model\Methods\Banktransfer">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBanktransferValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBanktransferValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBanktransferValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBanktransferConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBanktransferConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Banktransfer::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBanktransferCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBanktransferConfig</argument>
        </arguments>
    </virtualType>

    <!-- Bancontact -->
    <type name="Mollie\Payment\Model\Methods\Bancontact">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBancontactValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBancontactValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBancontactValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBancontactConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBancontactConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Bancontact::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBancontactCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBancontactCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBancontactConfig</argument>
        </arguments>
    </virtualType>

    <!-- Banktransfer -->
    <type name="Mollie\Payment\Model\Methods\Banktransfer">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBanktransferValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBanktransferValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBanktransferValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBanktransferConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBanktransferConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Banktransfer::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBanktransferCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBanktransferCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBanktransferConfig</argument>
        </arguments>
    </virtualType>

    <!-- Belfius -->
    <type name="Mollie\Payment\Model\Methods\Belfius">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBelfiusValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBelfiusValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBelfiusValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBelfiusConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBelfiusConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBelfiusConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBelfiusConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Belfius::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBelfiusValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBelfiusCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBelfiusCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBelfiusConfig</argument>
        </arguments>
    </virtualType>

    <!-- Billie -->
    <type name="Mollie\Payment\Model\Methods\Billie">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBillieValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBillieValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBillieValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBillieConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBillieConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBillieConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBillieConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Billie::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBillieValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBillieCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBillieCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBillieConfig</argument>
        </arguments>
    </virtualType>

    <!-- Bizum -->
    <type name="Mollie\Payment\Model\Methods\Bizum">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBizumValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBizumValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBizumValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBizumConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBizumConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBizumConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBizumConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Bizum::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBizumValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBizumCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBizumCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBizumConfig</argument>
        </arguments>
    </virtualType>

    <!-- Blik -->
    <type name="Mollie\Payment\Model\Methods\Blik">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieBlikValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieBlikValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieBlikValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieBlikConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBlikConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieBlikConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBlikConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Blik::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBlikValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieBlikCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieBlikCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieBlikConfig</argument>
        </arguments>
    </virtualType>

    <!-- Creditcard -->
    <type name="Mollie\Payment\Model\Methods\Creditcard">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieCreditcardValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCreditcardCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieCreditcardValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieCreditcardCommandPool" type="MollieCommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="vault_authorize" xsi:type="string">MollieCreditcardVaultAuthorizeCommand</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieCreditcardConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieCreditcardConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Creditcard::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieCreditcardCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieCreditcardConfig</argument>
        </arguments>
    </virtualType>

    <!-- Creditcard Vault -->
    <type name="Mollie\Payment\Model\Methods\CreditcardVault">
        <arguments>
            <argument name="config" xsi:type="object">MollieCreditcardVaultConfig</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieCreditcardVaultValueHandlerPool</argument>
            <argument name="vaultProvider" xsi:type="object">Mollie\Payment\Model\Methods\Creditcard</argument>
            <argument name="code" xsi:type="const">Mollie\Payment\Model\Methods\CreditcardVault::CODE</argument>
            <argument name="validatorPool" xsi:type="object">MollieCreditcardVaultValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieCreditcardVaultValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieCreditcardConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardVaultConfig" type="Mollie\Payment\Model\Data\CreditcardVaultConfig">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Creditcard::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardVaultValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieCreditcardVaultCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardVaultCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieCreditcardVaultConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCreditcardVaultAuthorizeCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
    </virtualType>

    <!-- Directdebit -->
    <type name="Mollie\Payment\Model\Methods\Directdebit">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieDirectdebitValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieDirectdebitValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieDirectdebitValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieDirectdebitConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieDirectdebitConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieDirectdebitConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieDirectdebitConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Directdebit::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieDirectdebitValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieDirectdebitCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieDirectdebitCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieDirectdebitConfig</argument>
        </arguments>
    </virtualType>

    <!-- Eps -->
    <type name="Mollie\Payment\Model\Methods\Eps">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieEpsValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieEpsValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieEpsValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieEpsConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieEpsConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieEpsConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieEpsConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Eps::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieEpsValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieEpsCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieEpsCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieEpsConfig</argument>
        </arguments>
    </virtualType>

    <!-- Giftcard -->
    <type name="Mollie\Payment\Model\Methods\Giftcard">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieGiftcardValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieGiftcardValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieGiftcardValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieGiftcardConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGiftcardConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieGiftcardConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGiftcardConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Giftcard::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGiftcardValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieGiftcardCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGiftcardCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieGiftcardConfig</argument>
        </arguments>
    </virtualType>

    <!-- Google Pay -->
    <type name="Mollie\Payment\Model\Methods\GooglePay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieGooglePayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieGooglePayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieGooglePayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieGooglePayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGooglePayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieGooglePayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGooglePayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\GooglePay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGooglePayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieGooglePayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGooglePayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieGooglePayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Ideal -->
    <type name="Mollie\Payment\Model\Methods\Ideal">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieIdealValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieIdealValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieIdealValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieIdealConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIdealConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieIdealConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIdealConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Ideal::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIdealValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieIdealCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIdealCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieIdealConfig</argument>
        </arguments>
    </virtualType>

    <!-- in3 -->
    <type name="Mollie\Payment\Model\Methods\In3">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieIn3ValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieIn3ValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieIn3ValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieIn3ConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIn3ConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieIn3Config</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIn3Config" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\In3::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIn3ValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieIn3CountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieIn3CountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieIn3Config</argument>
        </arguments>
    </virtualType>

    <!-- Kbc -->
    <type name="Mollie\Payment\Model\Methods\Kbc">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieKbcValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieKbcValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieKbcValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieKbcConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKbcConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieKbcConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKbcConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Kbc::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKbcValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieKbcCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKbcCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieKbcConfig</argument>
        </arguments>
    </virtualType>

    <!-- Klarna -->
    <type name="Mollie\Payment\Model\Methods\Klarna">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieKlarnaValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieKlarnaValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieKlarnaValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieKlarnaConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnaConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieKlarnaConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnaConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Klarna::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnaValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieKlarnaCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnaCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieKlarnaConfig</argument>
        </arguments>
    </virtualType>

    <!-- Klarnapaylater -->
    <type name="Mollie\Payment\Model\Methods\Klarnapaylater">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieKlarnapaylaterValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieKlarnapaylaterValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieKlarnapaylaterValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieKlarnapaylaterConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaylaterConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieKlarnapaylaterConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaylaterConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Klarnapaylater::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaylaterValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieKlarnapaylaterCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaylaterCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieKlarnapaylaterConfig</argument>
        </arguments>
    </virtualType>

    <!-- Klarnapaynow -->
    <type name="Mollie\Payment\Model\Methods\Klarnapaynow">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieKlarnapaynowValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieKlarnapaynowValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieKlarnapaynowValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieKlarnapaynowConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaynowConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieKlarnapaynowConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaynowConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Klarnapaynow::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaynowValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieKlarnapaynowCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnapaynowCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieKlarnapaynowConfig</argument>
        </arguments>
    </virtualType>

    <!-- Klarnasliceit -->
    <type name="Mollie\Payment\Model\Methods\Klarnasliceit">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieKlarnasliceitValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieKlarnasliceitValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieKlarnasliceitValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieKlarnasliceitConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnasliceitConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieKlarnasliceitConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnasliceitConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Klarnasliceit::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnasliceitValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieKlarnasliceitCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieKlarnasliceitCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieKlarnasliceitConfig</argument>
        </arguments>
    </virtualType>

    <!-- MbWay -->
    <type name="Mollie\Payment\Model\Methods\MbWay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieMbWayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieMbWayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieMbWayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieMbWayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMbWayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieMbWayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMbWayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\MbWay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMbWayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieMbWayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMbWayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieMbWayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Mobilepay -->
    <type name="Mollie\Payment\Model\Methods\Mobilepay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieMobilepayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieMobilepayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieMobilepayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieMobilepayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMobilepayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieMobilepayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMobilepayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Mobilepay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMobilepayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieMobilepayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMobilepayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieMobilepayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Multibanco -->
    <type name="Mollie\Payment\Model\Methods\Multibanco">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieMultibancoValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieMultibancoValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieMultibancoValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieMultibancoConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMultibancoConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieMultibancoConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMultibancoConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Multibanco::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMultibancoValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieMultibancoCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMultibancoCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieMultibancoConfig</argument>
        </arguments>
    </virtualType>

    <!-- MyBank -->
    <type name="Mollie\Payment\Model\Methods\MyBank">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieMyBankValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieMyBankValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieMyBankValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieMyBankConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMyBankConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieMyBankConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMyBankConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\MyBank::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMyBankValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieMyBankCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieMyBankCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieMyBankConfig</argument>
        </arguments>
    </virtualType>

    <!-- Paymentlink -->
    <type name="Mollie\Payment\Model\Methods\Paymentlink">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Mollie\Payment\Block\Form\Paymentlink</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Paymentlink</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePaymentlinkValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePaymentlinkValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePaymentlinkValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePaymentlinkConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaymentlinkConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePaymentlinkConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaymentlinkConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Paymentlink::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaymentlinkValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePaymentlinkCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaymentlinkCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePaymentlinkConfig</argument>
        </arguments>
    </virtualType>

    <!-- Paybybank -->
    <type name="Mollie\Payment\Model\Methods\Paybybank">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePaybybankValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePaybybankValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePaybybankValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePaybybankConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaybybankConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePaybybankConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaybybankConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Paybybank::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaybybankValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePaybybankCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaybybankCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePaybybankConfig</argument>
        </arguments>
    </virtualType>

    <!-- Paypal -->
    <type name="Mollie\Payment\Model\Methods\Paypal">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePaypalValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePaypalValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePaypalValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePaypalConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaypalConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePaypalConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaypalConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Paypal::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaypalValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePaypalCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaypalCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePaypalConfig</argument>
        </arguments>
    </virtualType>

    <!-- Paysafecard -->
    <type name="Mollie\Payment\Model\Methods\Paysafecard">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePaysafecardValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePaysafecardValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePaysafecardValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePaysafecardConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaysafecardConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePaysafecardConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaysafecardConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Paysafecard::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaysafecardValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePaysafecardCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePaysafecardCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePaysafecardConfig</argument>
        </arguments>
    </virtualType>

    <!-- Point Of Sale -->
    <type name="Mollie\Payment\Model\Methods\Pointofsale">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Mollie\Payment\Block\Form\Pointofsale</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePointofsaleValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePointofsaleValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePointofsaleValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePointofsaleConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePointofsaleConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePointofsaleConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePointofsaleConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Pointofsale::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePointofsaleValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePointofsaleCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePointofsaleCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePointofsaleConfig</argument>
        </arguments>
    </virtualType>

    <!-- Payconiq -->
    <type name="Mollie\Payment\Model\Methods\Payconiq">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePayconiqValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePayconiqValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePayconiqValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePayconiqConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePayconiqConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePayconiqConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePayconiqConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Payconiq::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePayconiqValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePayconiqCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePayconiqCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePayconiqConfig</argument>
        </arguments>
    </virtualType>

    <!-- Przelewy24 -->
    <type name="Mollie\Payment\Model\Methods\Przelewy24">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MolliePrzelewy24ValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MolliePrzelewy24ValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MolliePrzelewy24ValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MolliePrzelewy24ConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePrzelewy24ConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MolliePrzelewy24Config</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePrzelewy24Config" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Przelewy24::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePrzelewy24ValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MolliePrzelewy24CountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MolliePrzelewy24CountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MolliePrzelewy24Config</argument>
        </arguments>
    </virtualType>

    <!-- Reorder -->
    <type name="Mollie\Payment\Model\Methods\Reorder">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieReorderValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieReorderValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieReorderValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieReorderConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieReorderConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieReorderConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieReorderConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Reorder::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieReorderValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieReorderCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieReorderCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieReorderConfig</argument>
        </arguments>
    </virtualType>

    <!-- Riverty -->
    <type name="Mollie\Payment\Model\Methods\Riverty">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieRivertyValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieRivertyValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieRivertyValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieRivertyConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieRivertyConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieRivertyConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieRivertyConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Riverty::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieRivertyValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieRivertyCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieRivertyCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieRivertyConfig</argument>
        </arguments>
    </virtualType>

    <!-- Satispay -->
    <type name="Mollie\Payment\Model\Methods\Satispay">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieSatispayValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieSatispayValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieSatispayValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieSatispayConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSatispayConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieSatispayConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSatispayConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Satispay::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSatispayValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieSatispayCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSatispayCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieSatispayConfig</argument>
        </arguments>
    </virtualType>

    <!-- Sofort -->
    <type name="Mollie\Payment\Model\Methods\Sofort">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieSofortValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieSofortValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieSofortValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieSofortConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSofortConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieSofortConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSofortConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Sofort::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSofortValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieSofortCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSofortCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieSofortConfig</argument>
        </arguments>
    </virtualType>

    <!-- Swish -->
    <type name="Mollie\Payment\Model\Methods\Swish">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieSwishValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieSwishValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieSwishValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieSwishConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSwishConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieSwishConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSwishConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Swish::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSwishValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieSwishCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieSwishCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieSwishConfig</argument>
        </arguments>
    </virtualType>

    <!-- Trustly -->
    <type name="Mollie\Payment\Model\Methods\Trustly">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieTrustlyValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieTrustlyValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieTrustlyValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieTrustlyConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTrustlyConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieTrustlyConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTrustlyConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Trustly::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTrustlyValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieTrustlyCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTrustlyCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieTrustlyConfig</argument>
        </arguments>
    </virtualType>

    <!-- TWINT -->
    <type name="Mollie\Payment\Model\Methods\Twint">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieTwintValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieTwintValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieTwintValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieTwintConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTwintConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieTwintConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTwintConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Twint::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTwintValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieTwintCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieTwintCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieTwintConfig</argument>
        </arguments>
    </virtualType>

    <!-- Vipps -->
    <type name="Mollie\Payment\Model\Methods\Vipps">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieVippsValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieVippsValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieVippsValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieVippsConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVippsConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieVippsConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVippsConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Vipps::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVippsValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieVippsCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVippsCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieVippsConfig</argument>
        </arguments>
    </virtualType>

    <!-- Voucher -->
    <type name="Mollie\Payment\Model\Methods\Voucher">
        <arguments>
            <argument name="formBlockType" xsi:type="string">Magento\Payment\Block\Form</argument>
            <argument name="infoBlockType" xsi:type="string">Mollie\Payment\Block\Info\Base</argument>
            <argument name="valueHandlerPool" xsi:type="object">MollieVoucherValueHandlerPool</argument>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
            <argument name="validatorPool" xsi:type="object">MollieVoucherValidatorPool</argument>
        </arguments>
    </type>

    <virtualType name="MollieVoucherValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieVoucherConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVoucherConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieVoucherConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVoucherConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Methods\Voucher::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVoucherValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">MollieVoucherCountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieVoucherCountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">MollieVoucherConfig</argument>
        </arguments>
    </virtualType>

    <!-- Payment methods configuration end -->

    <virtualType name="MollieValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">MollieConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">MollieGenericConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieGenericConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Mollie\Payment\Model\Mollie::CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieCommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="order" xsi:type="string">MollieOrderCommand</item>
                <item name="authorize" xsi:type="string">MollieInitializeCommand</item>
                <item name="vault_authorize" xsi:type="string">MollieInitializeCommand</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieInitializeCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">MollieInitializeRequestBuilder</argument>
            <argument name="transferFactory" xsi:type="object">Mollie\Payment\Gateway\Http\TransferFactory</argument>
            <argument name="client" xsi:type="object">Mollie\Payment\Gateway\Http\Client\GenericClient</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieOrderCommand" type="MollieInitializeCommand">
        <arguments>
            <argument name="handler" xsi:type="object">Mollie\Payment\Gateway\Handler\OrderHandler</argument>
        </arguments>
    </virtualType>

    <virtualType name="MollieInitializeRequestBuilder" type="Magento\Payment\Gateway\Request\BuilderComposite" />

    <virtualType name="MollieSaleCommand" type="MollieAuthorizeCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">MollieSaleRequest</argument>
        </arguments>
    </virtualType>

    <type name="Magento\Payment\Gateway\Command\CommandManagerPool">
        <arguments>
            <argument name="executors" xsi:type="array">
                <item name="mollie_methods_creditcard" xsi:type="string">MollieCommandManager</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="MollieCommandManager" type="Magento\Payment\Gateway\Command\CommandManager">
        <arguments>
            <argument name="commandPool" xsi:type="object">MollieCommandPool</argument>
        </arguments>
    </virtualType>
</config>
