From ad5216fa62d69efd77819e323060d613c86e09c3 Mon Sep 17 00:00:00 2001 From: Goran Stamenkovski Date: Mon, 14 Aug 2023 13:09:01 +0200 Subject: [PATCH] Release 4.0.0 --- .github/CODEOWNERS | 1 - .github/workflows/main.yml | 31 - .gitignore | 62 +- .php-cs-fixer.dist.php | 93 - AdyenApi/HttpClient/ClientFactory.php | 57 - .../HttpClient/ClientFactoryInterface.php | 13 - AdyenApi/HttpClient/ClientMemoise.php | 31 - .../HttpClient/ClientMemoiseInterface.php | 13 - AdyenApi/HttpClient/ConfigValidator.php | 85 - .../HttpClient/ConfigValidatorInterface.php | 12 - AdyenApi/Model/ApiResponse.php | 40 - .../Recurring/DisableTokenRequestHandler.php | 58 - .../DisableTokenRequestHandlerInterface.php | 13 - AdyenApi/TransportFactory.php | 35 - AdyenApi/TransportFactoryInterface.php | 15 - AdyenPayment.php | 374 +- .../ArchiveNotAccessibleException.php | 13 - .../ArchiveNotExtractedException.php | 13 - .../Exception/FileNotDownloadedException.php | 28 - .../Exception/FileNotWrittenException.php | 13 - .../AssociationFileInstaller.php | 15 - .../InstallHandler/ArchiveInstaller.php | 53 - .../InstallHandler/DownloadInstaller.php | 71 - .../InstallHandler/Installer.php | 12 - .../MerchantAssociationFileInstaller.php | 39 - .../Model/InstallResult.php | 60 - .../RewriteUrl/UrlWriter.php | 10 - .../MerchantAssociation/StorageFilesystem.php | 72 - .../TraceableFileInstaller.php | 43 - Basket/Restore/DetailAttributesRestorer.php | 83 - Bootstrap/Bootstrap.php | 352 + Collection/Payment/PaymentMeanCollection.php | 134 - .../Payment/PaymentMethodCollection.php | 132 - Commands/ImportPaymentMethodsCommand.php | 58 - Commands/ProcessNotifications.php | 86 - .../Builder/PaymentMethodOptionsBuilder.php | 37 - .../PaymentMethodOptionsBuilderInterface.php | 10 - .../EnrichedPaymentMeanProvider.php | 100 - .../EnrichedPaymentMeanProviderInterface.php | 12 - .../Adyen/PaymentMethod/ImageLogoProvider.php | 21 - .../ImageLogoProviderInterface.php | 10 - .../PaymentMethod/PaymentMethodsProvider.php | 60 - .../PaymentMethodsProviderInterface.php | 13 - .../StoredPaymentMeanProvider.php | 54 - .../StoredPaymentMeanProviderInterface.php | 13 - .../TraceableEnrichedPaymentMeanProvider.php | 39 - Components/Adyen/PaymentMethodService.php | 124 - .../Adyen/PaymentMethodServiceInterface.php | 25 - Components/Adyen/RefundService.php | 80 - .../ApplePay}/SeoUrlWriter.php | 4 +- Components/BasketHelper.php | 96 + Components/BasketService.php | 311 - Components/Builder/NotificationBuilder.php | 126 - .../Calculator/PriceCalculationService.php | 21 - Components/CheckoutConfigProvider.php | 250 + .../NotificationProcessorCompilerPass.php | 25 - Components/Configuration.php | 177 - .../Configuration/ConfigurationService.php | 67 + Components/ConfigurationInterface.php | 25 - Components/DataConversion.php | 13 - Components/ErrorMessageProvider.php | 63 + Components/FifoNotificationLoader.php | 40 - Components/FifoTextNotificationLoader.php | 28 - Components/IncomingNotificationManager.php | 127 - Components/Integration/FileService.php | 80 + ...ntReferenceNormalizationWebhookHandler.php | 56 + Components/Integration/OrderService.php | 108 + .../Integration/PaymentMethodService.php | 610 + .../PaymentProcessors/AddressProcessor.php | 108 + .../BasketItemsProcessor.php | 94 + .../PaymentProcessors/BirthdayProcessor.php | 32 + .../PaymentProcessors/L2L3DataProcessor.php | 133 + .../PaymentProcessors/LineItemsProcessor.php | 63 + .../ShopperEmailProcessor.php | 32 + .../ShopperLocaleProcessor.php | 20 + .../ShopperNameProcessor.php | 38 + .../ShopperReferenceProcessor.php | 31 + Components/Integration/StoreService.php | 212 + Components/Integration/SystemInfoService.php | 54 + Components/Integration/VersionService.php | 25 + Components/Integration/WebhookUrlService.php | 51 + Components/LastOpenTimeService.php | 67 + Components/Logger/LoggerService.php | 85 + Components/Manager/AdyenManager.php | 48 - Components/Manager/OrderManager.php | 39 - Components/Manager/OrderManagerInterface.php | 17 - Components/Manager/UserPreferenceManager.php | 25 - .../UserPreferenceManagerInterface.php | 12 - {Session => Components}/MessageProvider.php | 2 +- Components/NotificationManager.php | 134 - Components/NotificationProcessor.php | 190 - .../NotificationProcessor/Authorisation.php | 105 - .../NotificationProcessor/Cancellation.php | 78 - Components/NotificationProcessor/Capture.php | 108 - .../NotificationProcessor/CaptureFailed.php | 61 - .../NotificationProcessor/Chargeback.php | 81 - .../ChargebackReversed.php | 81 - .../ManualReviewAccept.php | 55 - .../ManualReviewReject.php | 86 - .../NotificationProcessorInterface.php | 28 - .../NotificationProcessor/OfferClosed.php | 76 - Components/NotificationProcessor/Refund.php | 75 - .../NotificationProcessor/RefundFailed.php | 70 - .../RefundedReversed.php | 73 - Components/OrderMailService.php | 90 - Components/Payload/Chain.php | 36 - Components/Payload/PaymentContext.php | 102 - Components/Payload/PaymentPayloadProvider.php | 13 - .../Providers/ApplicationInfoProvider.php | 82 - .../Payload/Providers/BrowserInfoProvider.php | 27 - .../Providers/LineItemsInfoProvider.php | 119 - .../Payload/Providers/OrderInfoProvider.php | 29 - .../Providers/PaymentMethodProvider.php | 21 - .../RecurringOneOffPaymentTokenProvider.php | 27 - .../Providers/RecurringPaymentProvider.php | 27 - .../Payload/Providers/ShopperInfoProvider.php | 40 - .../Providers/StorePaymentProvider.php | 18 - Components/PaymentMeansEnricher.php | 296 + Components/PaymentStatusUpdate.php | 105 - Components/ShopwareVersionCheck.php | 25 +- Components/TextNotificationManager.php | 39 - Components/TransactionDetailsService.php | 38 + Components/UninstallService.php | 92 + .../WebComponents/ApplePayConfigProvider.php | 50 - Components/WebComponents/ConfigContext.php | 41 - Components/WebComponents/ConfigProvider.php | 10 - .../WebComponents/GooglePayConfigProvider.php | 53 - Controllers/Backend/AdyenAuthorization.php | 53 + Controllers/Backend/AdyenAutoTest.php | 71 + Controllers/Backend/AdyenDebug.php | 34 + Controllers/Backend/AdyenDisconnect.php | 76 + Controllers/Backend/AdyenGeneralSettings.php | 52 + Controllers/Backend/AdyenGivingSettings.php | 110 + Controllers/Backend/AdyenMerchant.php | 25 + Controllers/Backend/AdyenMerchantActions.php | 75 + Controllers/Backend/AdyenNotifications.php | 94 + Controllers/Backend/AdyenOrderStatusMap.php | 39 + Controllers/Backend/AdyenOrderStatuses.php | 25 + Controllers/Backend/AdyenPayment.php | 169 + Controllers/Backend/AdyenPaymentMain.php | 143 + ...enPaymentNotificationsListingExtension.php | 68 - Controllers/Backend/AdyenPaymentRefund.php | 30 - Controllers/Backend/AdyenShopInformation.php | 54 + .../Backend/AdyenShopNotifications.php | 110 + Controllers/Backend/AdyenState.php | 23 + Controllers/Backend/AdyenSystemInfo.php | 159 + Controllers/Backend/AdyenTransaction.php | 62 + .../Backend/AdyenValidateConnection.php | 37 + Controllers/Backend/AdyenVersion.php | 16 + .../Backend/AdyenWebhookNotifications.php | 95 + .../Backend/AdyenWebhookValidation.php | 51 + Controllers/Backend/ImportPaymentMethods.php | 64 - .../InstallApplePayMerchantAssociation.php | 60 - .../RegisterApplePayAssociationUrl.php | 35 - Controllers/Backend/TestAdyenApi.php | 56 - Controllers/Common/AjaxResponseSetter.php | 37 + Controllers/Frontend/Adyen.php | 354 - Controllers/Frontend/AdyenAsyncProcess.php | 55 + Controllers/Frontend/AdyenConfig.php | 81 - Controllers/Frontend/AdyenDonations.php | 100 + Controllers/Frontend/AdyenExpressCheckout.php | 100 + Controllers/Frontend/AdyenPaymentProcess.php | 365 + Controllers/Frontend/AdyenWebhook.php | 67 + .../Frontend/ApplePayMerchantAssociation.php | 47 +- .../Frontend/DisableRecurringToken.php | 86 - Controllers/Frontend/Notification.php | 148 - Controllers/Frontend/Process.php | 216 - Dbal/BasketDetailAttributes.php | 54 - Dbal/OrderDetailAttributes.php | 30 - Dbal/Remover/PaymentMeanSubShopRemover.php | 25 - .../PaymentMeanSubShopRemoverInterface.php | 10 - .../Payment/PaymentMeansSubShopsWriter.php | 33 - .../PaymentMeansSubShopsWriterInterface.php | 10 - Doctrine/Writer/PaymentAttributeWriter.php | 54 - .../PaymentAttributeWriterInterface.php | 12 - Doctrine/Writer/PaymentMethodWriter.php | 88 - .../Writer/PaymentMethodWriterInterface.php | 14 - ...ableLegacyPaymentMethodWriterDecorator.php | 81 - Enricher/Payment/PaymentMethodEnricher.php | 84 - .../PaymentMethodEnricherInterface.php | 12 - Entities/LastOpenTime.php | 43 + Exceptions/AuthorizationException.php | 9 - Exceptions/DuplicateNotificationException.php | 28 - Exceptions/InvalidAuthenticationException.php | 18 - Exceptions/InvalidHmacException.php | 20 - Exceptions/InvalidParameterException.php | 16 - .../InvalidPaymentsResponseException.php | 13 - Exceptions/InvalidRequestPayloadException.php | 18 - .../NoNotificationProcessorFoundException.php | 20 - Exceptions/OrderNotFoundException.php | 20 - Exceptions/PaymentExistsException.php | 13 - .../PaymentMeanDoesNotExistException.php | 15 + Exceptions/PaymentNotImportedException.php | 30 - ...RecurringPaymentTokenNotFoundException.php | 28 - ...RecurringPaymentTokenNotSavedException.php | 15 - Exceptions/StoreDoesNotExistException.php | 15 + .../UmbrellaPaymentMeanNotFoundException.php | 13 - Http/Response/ApiJsonResponse.php | 24 - Http/Response/FrontendJsonResponse.php | 42 - Http/Response/NotificationResponseFactory.php | 46 - .../Notification/AuthenticationValidator.php | 38 - Http/Validator/Notification/Chain.php | 26 - Http/Validator/Notification/HmacValidator.php | 46 - ...LoggingAuthorizationValidatorDecorator.php | 37 - .../NotificationValidatorInterface.php | 15 - Import/PaymentMethodImporter.php | 81 - Import/PaymentMethodImporterInterface.php | 20 - Import/TraceablePaymentMethodImporter.php | 68 - Models/AdyenEntity.php | 18 + Models/BaseEntity.php | 278 + Models/Enum/Channel.php | 13 - Models/Enum/NotificationStatus.php | 26 - Models/Enum/PaymentMethod/ImportStatus.php | 70 - Models/Enum/PaymentMethod/PluginType.php | 59 - Models/Enum/PaymentMethod/SourceType.php | 50 - Models/Event.php | 107 - Models/Feedback/NotificationItemFeedback.php | 52 - .../NotificationProcessorFeedback.php | 65 - .../Feedback/TextNotificationItemFeedback.php | 52 - Models/Notification.php | 427 - Models/NotificationException.php | 32 - Models/NotificationsEntity.php | 15 + Models/Payment/PaymentFactory.php | 67 - Models/Payment/PaymentFactoryInterface.php | 15 - Models/Payment/PaymentGroup.php | 54 - Models/Payment/PaymentMean.php | 112 - Models/Payment/PaymentMethod.php | 119 - Models/Payment/PaymentType.php | 44 - Models/PaymentInfo.php | 309 - Models/PaymentMethod/ImportResult.php | 88 - Models/PaymentMethodInfo.php | 50 - Models/PaymentResultCode.php | 120 - Models/QueueEntity.php | 21 + .../RecurringPaymentToken.php | 211 - .../RecurringProcessingModel.php | 58 - .../RecurringPayment/ShopperInteraction.php | 60 - Models/Refund.php | 167 - Models/TextNotification.php | 114 - Models/TokenIdentifier.php | 39 - Models/TransactionLogEntity.php | 15 + README.md | 9 +- Recurring/RecurringTokenFactory.php | 33 - Recurring/RecurringTokenFactoryInterface.php | 12 - Repositories/AdyenGivingRepository.php | 18 + Repositories/BaseRepository.php | 485 + .../BaseRepositoryWithConditionalDeletes.php | 52 + Repositories/NotificationsRepository.php | 18 + Repositories/PaymentMethodRepository.php | 18 + Repositories/QueueItemRepository.php | 234 + Repositories/TransactionLogRepository.php | 18 + Repositories/Wrapper/OrderRepository.php | 153 + .../Wrapper/PaymentMeanRepository.php | 37 + Repositories/Wrapper/StoreRepository.php | 104 + .../RecurringPaymentTokenRepository.php | 60 - ...curringPaymentTokenRepositoryInterface.php | 14 - ...aceableRecurringPaymentTokenRepository.php | 62 - .../view/applepaymerchantassociation.js | 20 - Resources/config.xml | 189 - Resources/cronjob.xml | 18 - .../frontend/js/adyen-checkout-controller.js | 336 + .../frontend/js/adyen-donations-controller.js | 86 + .../js/jquery.adyen-checkout-error.js | 114 - .../frontend/js/jquery.adyen-confirm-order.js | 401 +- ...adyen-cookie-consent-visibility-handler.js | 44 + .../frontend/js/jquery.adyen-donations.js | 46 + .../js/jquery.adyen-express-checkout.js | 111 + .../frontend/js/jquery.adyen-finish-order.js | 23 - .../jquery.adyen-payment-additional-action.js | 57 + ....adyen-payment-method-state-data-setter.js | 34 + .../js/jquery.adyen-payment-selection.js | 678 +- .../js/jquery.adyen-state-data-cleanup.js | 27 + Resources/frontend/js/jquery.plugin-loader.js | 21 +- Resources/frontend/less/all.less | 9 + Resources/menu.xml | 12 +- Resources/services/adyen-api.xml | 20 - Resources/services/adyen.xml | 8 - Resources/services/applepay-merchant.xml | 43 - Resources/services/basket.xml | 12 - Resources/services/commands.xml | 18 - Resources/services/components.xml | 191 +- Resources/services/dbal.xml | 19 - Resources/services/doctrine.xml | 24 - Resources/services/enrichers.xml | 11 - Resources/services/factory.xml | 11 - Resources/services/http.xml | 8 - Resources/services/importers.xml | 20 - Resources/services/logger.xml | 14 + Resources/services/loggers.xml | 40 - Resources/services/managers.xml | 29 - Resources/services/payload-providers.xml | 58 - Resources/services/providers.xml | 17 - Resources/services/repositories.xml | 27 - Resources/services/rules.xml | 28 - Resources/services/serializers.xml | 10 - Resources/services/session.xml | 13 - Resources/services/shopware.xml | 15 - Resources/services/subscribers-cronjob.xml | 24 - Resources/services/subscribers.xml | 124 +- Resources/services/validators.xml | 33 - Resources/services/web-components.xml | 11 - .../snippets/backend/adyen/configuration.ini | 30 + .../snippets/frontend/adyen/checkout.ini | 17 + Resources/views/backend/_base/layout.tpl | 18 + .../assets/fonts/Fakt/Fakt-Blond.woff | Bin 0 -> 33496 bytes .../assets/fonts/Fakt/Fakt-Blond.woff2 | Bin 0 -> 25016 bytes .../assets/fonts/Fakt/Fakt-BlondItalic.woff | Bin 0 -> 35368 bytes .../assets/fonts/Fakt/Fakt-BlondItalic.woff2 | Bin 0 -> 26240 bytes .../assets/fonts/Fakt/Fakt-Normal.woff | Bin 0 -> 31696 bytes .../assets/fonts/Fakt/Fakt-Normal.woff2 | Bin 0 -> 23564 bytes .../assets/fonts/Fakt/Fakt-NormalItalic.woff | Bin 0 -> 33996 bytes .../assets/fonts/Fakt/Fakt-NormalItalic.woff2 | Bin 0 -> 25176 bytes .../assets/fonts/Fakt/Fakt-SemiBold.woff | Bin 0 -> 33824 bytes .../assets/fonts/Fakt/Fakt-SemiBold.woff2 | Bin 0 -> 25240 bytes .../fonts/Fakt/Fakt-SemiBoldItalic.woff | Bin 0 -> 35604 bytes .../fonts/Fakt/Fakt-SemiBoldItalic.woff2 | Bin 0 -> 26584 bytes .../assets/fonts/FaktPro/FaktPro-Blond.ttf | Bin 0 -> 171672 bytes .../assets/fonts/FaktPro/FaktPro-Blond.woff | Bin 0 -> 80281 bytes .../fonts/FaktPro/FaktPro-BlondItalic.ttf | Bin 0 -> 68848 bytes .../fonts/FaktPro/FaktPro-BlondItalic.woff | Bin 0 -> 87360 bytes .../assets/fonts/FaktPro/FaktPro-Normal.ttf | Bin 0 -> 190656 bytes .../assets/fonts/FaktPro/FaktPro-Normal.woff | Bin 0 -> 64500 bytes .../fonts/FaktPro/FaktPro-NormalItalic.ttf | Bin 0 -> 69236 bytes .../fonts/FaktPro/FaktPro-NormalItalic.woff | Bin 0 -> 83476 bytes .../assets/fonts/FaktPro/FaktPro-SemiBold.ttf | Bin 0 -> 171200 bytes .../fonts/FaktPro/FaktPro-SemiBold.woff | Bin 0 -> 80771 bytes .../assets/fonts/ad-icons/ad-icons.eot | Bin 0 -> 7188 bytes .../assets/fonts/ad-icons/ad-icons.svg | 36 + .../assets/fonts/ad-icons/ad-icons.ttf | Bin 0 -> 7020 bytes .../assets/fonts/ad-icons/ad-icons.woff | Bin 0 -> 7096 bytes .../assets/fonts/adl-icons/adl-icons.eot | Bin 0 -> 7388 bytes .../assets/fonts/adl-icons/adl-icons.svg | 37 + .../assets/fonts/adl-icons/adl-icons.ttf | Bin 0 -> 7216 bytes .../assets/fonts/adl-icons/adl-icons.woff | Bin 0 -> 7292 bytes .../backend/_resources/css/adyen-core.css | 2916 +++++ .../views/backend/_resources/css/adyen.css | 0 .../views/backend/_resources/favicon.ico | Bin 0 -> 1150 bytes .../backend/_resources/images/adyen-logo.png | Bin 0 -> 592 bytes .../_resources/js/AdyenShopNotifications.js | 53 + .../backend/_resources/js/AjaxService.js | 177 + .../_resources/js/ConnectionController.js | 490 + .../_resources/js/DataTableComponent.js | 168 + .../_resources/js/DropdownComponent.js | 136 + .../backend/_resources/js/ElementGenerator.js | 691 ++ .../backend/_resources/js/ModalComponent.js | 139 + .../js/MultiselectDropdownComponent.js | 179 + .../_resources/js/NotificationsController.js | 415 + .../_resources/js/PageControllerFactory.js | 28 + .../_resources/js/PaymentsController.js | 1542 +++ .../backend/_resources/js/ResponseService.js | 56 + .../_resources/js/SettingsController.js | 966 ++ .../backend/_resources/js/StateController.js | 490 + .../_resources/js/TableFilterComponent.js | 320 + .../backend/_resources/js/TemplateService.js | 77 + .../_resources/js/TranslationService.js | 125 + .../backend/_resources/js/UtilityService.js | 168 + .../_resources/js/ValidationService.js | 267 + .../views/backend/_resources/lang/de.json | 60 + .../views/backend/_resources/lang/en.json | 704 ++ .../backend/_resources/templates/sidebar.html | 86 + Resources/views/backend/adyen_detail/app.js | 8 + .../adyen_order_details_controller.js | 156 + .../backend/adyen_detail/model/transaction.js | 32 + .../backend/adyen_detail/store/transaction.js | 21 + .../view/adyen_order_detail_data.js | 292 + .../view/adyen_order_detail_list.js | 36 + .../views/backend/adyen_detail/view/window.js | 72 + .../backend/adyen_list/adyen_order_list.js | 51 + .../adyen_list/models/adyen_order_model.js | 7 + .../backend/adyen_payment_main/index.tpl | 84 + .../app.js | 29 - .../controller/main.js | 11 - .../model/notification.js | 41 - .../store/notification.js | 11 - .../list/extensions/notification_filter.js | 59 - .../view/list/notification.js | 101 - .../view/list/window.js | 18 - .../views/backend/adyen_payment_order/app.js | 10 - .../adyen_payment_order/model/order.js | 6 - .../view/detail/tabs/notifications.js | 53 - .../view/detail/tabs/notifications/detail.js | 41 - .../view/detail/tabs/notifications/list.js | 41 - .../view/detail/tabs/refunds.js | 29 - .../view/detail/tabs/refunds/detail.js | 96 - .../view/detail/transaction_details.js | 119 - .../view/detail/transaction_tabs.js | 50 - .../adyen_payment_order/view/detail/window.js | 77 - .../customer/adyen_payment_method/app.js | 4 - .../adyen_payment_method/view/list.js | 22 - .../views/backend/index/adyen_header.tpl | 9 + .../backend/order/adyen_payment_method/app.js | 4 - .../order/adyen_payment_method/view/list.js | 22 - .../frontend/adyen_payment_process/index.tpl | 33 + .../frontend/checkout/adyen_configuration.tpl | 5 - .../frontend/checkout/adyen_libaries.tpl | 15 +- Resources/views/frontend/checkout/cart.tpl | 45 + .../frontend/checkout/change_payment.tpl | 35 +- Resources/views/frontend/checkout/confirm.tpl | 65 +- Resources/views/frontend/checkout/finish.tpl | 50 + .../frontend/checkout/shipping_payment.tpl | 14 + Resources/views/frontend/detail/buy.tpl | 31 + Resources/views/frontend/detail/index.tpl | 11 + .../frontend/register/payment_fieldset.tpl | 23 +- Rule/AdyenApi/IsMainShopApiKeyRule.php | 25 - .../IsMainShopMerchantAccountRule.php | 25 - Rule/AdyenApi/MainShopConfigRule.php | 12 - Rule/AdyenApi/MainShopConfigRuleChain.php | 29 - Rule/AdyenApi/MainShopRule.php | 10 - Rule/AdyenApi/UsedFallbackConfigRule.php | 34 - .../UsedFallbackConfigRuleInterface.php | 10 - Rule/AdyenApi/UsedMainShopConfigRule.php | 26 - .../PaymentMeanCollectionSerializer.php | 15 - Serializer/PaymentMeanSerializer.php | 15 - Session/CustomerNumberProvider.php | 35 - Session/CustomerNumberProviderInterface.php | 10 - Session/ErrorMessageProvider.php | 42 - Setup/MigrateTransactionHistoryTask.php | 614 + Setup/Updater.php | 635 + Shopware/Crud/AttributeWriter.php | 51 - Shopware/Crud/AttributeWriterInterface.php | 13 - Shopware/Plugin/TraceablePluginIdProvider.php | 41 - Shopware/Provider/CheckoutBasketProvider.php | 29 - .../CheckoutBasketProviderInterface.php | 10 - Shopware/Provider/PaymentMeansProvider.php | 13 - .../PaymentMeansProviderInterface.php | 10 - Shopware/Repository/PaymentRepository.php | 59 - .../Repository/PaymentRepositoryInterface.php | 16 - .../SwPaymentMeanCollectionSerializer.php | 35 - .../Serializer/SwPaymentMeanSerializer.php | 22 - ...ber.php => SaveStoredMethodPreference.php} | 35 +- ...bscriber.php => AddErrorMessageToView.php} | 14 +- Subscriber/AddExpressCheckoutToView.php | 74 + Subscriber/AddPluginTemplatesSubscriber.php | 35 - .../AddSeoUrlSubscriber.php | 10 +- .../AddStoredMethodIdOnOrderSubscriber.php | 60 - ...> AddStoredMethodUserPreferenceToView.php} | 2 +- .../PerformanceLoaderSubscriber.php | 36 - .../RegisterUrlCountSubscriber.php | 24 - .../AssignPaymentMethodStateDataToSession.php | 49 + ...=> AssignStoredPaymentMethodToSession.php} | 20 +- Subscriber/Backend/BackendIndex.php | 40 + .../Backend/BackendJavascriptSubscriber.php | 93 - Subscriber/Backend/BackendOrderSubscriber.php | 86 - .../Backend/ExtendViewTemplateSubscriber.php | 38 - .../Backend/HideStoredPaymentsSubscriber.php | 21 +- .../ImportSubShopPaymentMethodsSubscriber.php | 85 - Subscriber/Backend/OrderUpdate.php | 156 + .../RemoveSubShopPaymentMethodSubscriber.php | 52 - Subscriber/BackendOrderSubscriber.php | 95 + Subscriber/BootstrapRegistration.php | 30 + .../AddAdyenSourceTypeToViewSubscriber.php | 29 - .../AddApplePayConfigToViewSubscriber.php | 22 - .../AddGooglePayConfigToViewSubscriber.php | 22 - ...AddPaymentMethodConfigToViewSubscriber.php | 81 - .../EnrichUmbrellaPaymentMeanSubscriber.php | 83 - .../EnrichUserAdditionalPaymentSubscriber.php | 73 - .../RegisterConfirmSnippetsSubscriber.php | 66 - .../RegisterPaymentSnippetsSubscriber.php | 57 - Subscriber/CheckoutSubscriber.php | 156 - Subscriber/ControllerPath.php | 51 + .../Cronjob/ImportPaymentMethodSubscriber.php | 32 - Subscriber/Cronjob/ProcessNotifications.php | 99 - Subscriber/EnrichPaymentSubscriber.php | 83 +- .../EnrichUserAdditionalPaymentSubscriber.php | 101 + Subscriber/ExtendOrderDetailsHandler.php | 45 + Subscriber/FinishPageSubscriber.php | 35 + Subscriber/LimitPercentageSurcharge.php | 73 + .../Notification/LogIncomingNotification.php | 43 - .../LogIncomingNotificationSubscriber.php | 36 - .../Notification/UpdateOrderPsPSubscriber.php | 47 - Subscriber/OrderEmailSubscriber.php | 134 - Subscriber/OrderListHandler.php | 53 + Subscriber/ShopDeletedSubscriber.php | 62 + Subscriber/TemplateRegistration.php | 56 + .../UpdateStoredPaymentMethodViewData.php | 37 + Utilities/Plugin.php | 61 + Utilities/Request.php | 18 + Utilities/Url.php | 56 + Utils/JsonUtil.php | 61 - Utils/RequestDataFormatter.php | 33 - Utils/Sanitize.php | 18 - Validator/ConstraintViolationFactory.php | 16 - bitbucket-pipelines.yml | 25 - composer.json | 25 +- composer.lock | 255 +- grumphp.yml.dist | 63 - phpcs.xml | 32 - phpunit.xml.dist | 29 +- plugin.xml | 90 +- psalm.xml.dist | 19 - ...oper-merchantid-domain-association.archive | Bin 3006 -> 0 bytes tests/BaseRepositoryWrapperTest.php | 259 + .../DisableTokenRequestHandlerTest.php | 15 - tests/PluginTest.php | 21 + tests/QueueItemRepositoryWrapperTest.php | 192 + .../BaseQueueItemRepositoryTestAdapter.php | 75 + .../BaseRepositoryTestAdapter.php | 66 + .../Components/TestBaseRepository.php | 10 + .../Components/TestDatabase.php | 40 + .../TestComponents/Components/TestEntity.php | 20 + .../Components/TestQueueItemRepository.php | 25 + tests/Unit/.gitkeep | 0 .../AdyenApi/HttpClient/ClientFactoryTest.php | 85 - .../AdyenApi/HttpClient/ClientMemoiseTest.php | 63 - .../HttpClient/ConfigValidatorTest.php | 159 - .../DisableTokenRequestHandlerTest.php | 105 - tests/Unit/AdyenApi/TransportFactoryTest.php | 86 - .../Exception/FileNotWrittenExceptionTest.php | 33 - .../Payment/PaymentMeanCollectionTest.php | 186 - .../Payment/PaymentMethodCollectionTest.php | 150 - .../EnrichedPaymentMeanProviderTest.php | 292 - .../StoredPaymentMeanProviderTest.php | 84 - ...aceableEnrichedPaymentMeanProviderTest.php | 78 - .../Manager/UserPreferenceManagerTest.php | 50 - ...ecurringOneOffPaymentTokenProviderTest.php | 60 - .../RecurringPaymentProviderTest.php | 60 - .../Payment/PaymentMethodEnricherTest.php | 120 - .../DuplicateNotificationExceptionTest.php | 50 - ...rringPaymentTokenNotFoundExceptionTest.php | 56 - ...rringPaymentTokenNotSavedExceptionTest.php | 40 - .../Response/FrontendJsonResponseTest.php | 57 - tests/Unit/Mock/ControllerActionMock.php | 9 - .../Unit/Models/Payment/PaymentGroupTest.php | 39 - tests/Unit/Models/Payment/PaymentMeanTest.php | 126 - .../Unit/Models/Payment/PaymentMethodTest.php | 118 - tests/Unit/Models/Payment/PaymentTypeTest.php | 47 - .../Models/PaymentMethod/ImportResultTest.php | 87 - tests/Unit/Models/PaymentResultCodeTest.php | 91 - .../RecurringPaymentTokenTest.php | 145 - .../RecurringProcessingModelTest.php | 74 - .../ShopperInteractionTest.php | 71 - tests/Unit/Models/TokenIdentifierTest.php | 56 - .../Recurring/RecurringTokenFactoryTest.php | 89 - .../RecurringPaymentTokenRepositoryTest.php | 113 - ...bleRecurringPaymentTokenRepositoryTest.php | 154 - .../Session/CustomerNumberProviderTest.php | 89 - .../Controllers/Frontend/CheckoutTest.php | 151 - .../Shopware/Plugin/PluginIdProviderTest.php | 61 - .../SwPaymentMeanSerializerTest.php | 65 - ...veStoredMethodPreferenceSubscriberTest.php | 205 - .../HideStoredPaymentsSubscriberTest.php | 119 - ...nrichUmbrellaPaymentMeanSubscriberTest.php | 176 - ...ichUserAdditionalPaymentSubscriberTest.php | 170 - .../PersistStoredMehtodIdSubscriberTest.php | 99 - .../EnrichUserPreferenceSubscriberTest.php | 107 - tests/Unit/Subscriber/SubscriberTestCase.php | 42 - tests/Unit/Utils/SanitizeTest.php | 27 - tests/bootstrap.php | 10 - tests/fixtures/applepay/ZipExtractor.zip | Bin 196 -> 0 bytes tools/composer.json | 18 - tools/composer.lock | 10184 ---------------- tools/deploy.sh | 4 +- tools/prerelease/CS-3947/AdyenPayment.zip | Bin 546053 -> 0 bytes tools/prerelease/CS-4030/AdyenPayment.zip | Bin 380277 -> 0 bytes tools/sw.phar | Bin 876928 -> 877973 bytes 554 files changed, 22996 insertions(+), 30933 deletions(-) delete mode 100644 .github/CODEOWNERS delete mode 100644 .github/workflows/main.yml delete mode 100644 .php-cs-fixer.dist.php delete mode 100755 AdyenApi/HttpClient/ClientFactory.php delete mode 100644 AdyenApi/HttpClient/ClientFactoryInterface.php delete mode 100755 AdyenApi/HttpClient/ClientMemoise.php delete mode 100644 AdyenApi/HttpClient/ClientMemoiseInterface.php delete mode 100644 AdyenApi/HttpClient/ConfigValidator.php delete mode 100644 AdyenApi/HttpClient/ConfigValidatorInterface.php delete mode 100755 AdyenApi/Model/ApiResponse.php delete mode 100755 AdyenApi/Recurring/DisableTokenRequestHandler.php delete mode 100644 AdyenApi/Recurring/DisableTokenRequestHandlerInterface.php delete mode 100755 AdyenApi/TransportFactory.php delete mode 100644 AdyenApi/TransportFactoryInterface.php delete mode 100644 Applepay/Exception/ArchiveNotAccessibleException.php delete mode 100644 Applepay/Exception/ArchiveNotExtractedException.php delete mode 100644 Applepay/Exception/FileNotDownloadedException.php delete mode 100644 Applepay/Exception/FileNotWrittenException.php delete mode 100644 Applepay/MerchantAssociation/AssociationFileInstaller.php delete mode 100755 Applepay/MerchantAssociation/InstallHandler/ArchiveInstaller.php delete mode 100755 Applepay/MerchantAssociation/InstallHandler/DownloadInstaller.php delete mode 100644 Applepay/MerchantAssociation/InstallHandler/Installer.php delete mode 100755 Applepay/MerchantAssociation/MerchantAssociationFileInstaller.php delete mode 100755 Applepay/MerchantAssociation/Model/InstallResult.php delete mode 100644 Applepay/MerchantAssociation/RewriteUrl/UrlWriter.php delete mode 100755 Applepay/MerchantAssociation/StorageFilesystem.php delete mode 100644 Applepay/MerchantAssociation/TraceableFileInstaller.php delete mode 100755 Basket/Restore/DetailAttributesRestorer.php create mode 100644 Bootstrap/Bootstrap.php delete mode 100644 Collection/Payment/PaymentMeanCollection.php delete mode 100755 Collection/Payment/PaymentMethodCollection.php delete mode 100755 Commands/ImportPaymentMethodsCommand.php delete mode 100755 Commands/ProcessNotifications.php delete mode 100644 Components/Adyen/Builder/PaymentMethodOptionsBuilder.php delete mode 100644 Components/Adyen/Builder/PaymentMethodOptionsBuilderInterface.php delete mode 100755 Components/Adyen/PaymentMethod/EnrichedPaymentMeanProvider.php delete mode 100644 Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderInterface.php delete mode 100644 Components/Adyen/PaymentMethod/ImageLogoProvider.php delete mode 100644 Components/Adyen/PaymentMethod/ImageLogoProviderInterface.php delete mode 100755 Components/Adyen/PaymentMethod/PaymentMethodsProvider.php delete mode 100644 Components/Adyen/PaymentMethod/PaymentMethodsProviderInterface.php delete mode 100755 Components/Adyen/PaymentMethod/StoredPaymentMeanProvider.php delete mode 100644 Components/Adyen/PaymentMethod/StoredPaymentMeanProviderInterface.php delete mode 100755 Components/Adyen/PaymentMethod/TraceableEnrichedPaymentMeanProvider.php delete mode 100755 Components/Adyen/PaymentMethodService.php delete mode 100644 Components/Adyen/PaymentMethodServiceInterface.php delete mode 100755 Components/Adyen/RefundService.php rename {Applepay/MerchantAssociation/RewriteUrl => Components/ApplePay}/SeoUrlWriter.php (81%) create mode 100644 Components/BasketHelper.php delete mode 100644 Components/BasketService.php delete mode 100755 Components/Builder/NotificationBuilder.php delete mode 100644 Components/Calculator/PriceCalculationService.php create mode 100644 Components/CheckoutConfigProvider.php delete mode 100644 Components/CompilerPass/NotificationProcessorCompilerPass.php delete mode 100755 Components/Configuration.php create mode 100644 Components/Configuration/ConfigurationService.php delete mode 100644 Components/ConfigurationInterface.php delete mode 100644 Components/DataConversion.php create mode 100644 Components/ErrorMessageProvider.php delete mode 100755 Components/FifoNotificationLoader.php delete mode 100755 Components/FifoTextNotificationLoader.php delete mode 100755 Components/IncomingNotificationManager.php create mode 100644 Components/Integration/FileService.php create mode 100644 Components/Integration/LegacyMerchantReferenceNormalizationWebhookHandler.php create mode 100644 Components/Integration/OrderService.php create mode 100644 Components/Integration/PaymentMethodService.php create mode 100644 Components/Integration/PaymentProcessors/AddressProcessor.php create mode 100644 Components/Integration/PaymentProcessors/BasketItemsProcessor.php create mode 100644 Components/Integration/PaymentProcessors/BirthdayProcessor.php create mode 100644 Components/Integration/PaymentProcessors/L2L3DataProcessor.php create mode 100644 Components/Integration/PaymentProcessors/LineItemsProcessor.php create mode 100644 Components/Integration/PaymentProcessors/ShopperEmailProcessor.php create mode 100644 Components/Integration/PaymentProcessors/ShopperLocaleProcessor.php create mode 100644 Components/Integration/PaymentProcessors/ShopperNameProcessor.php create mode 100644 Components/Integration/PaymentProcessors/ShopperReferenceProcessor.php create mode 100644 Components/Integration/StoreService.php create mode 100644 Components/Integration/SystemInfoService.php create mode 100644 Components/Integration/VersionService.php create mode 100644 Components/Integration/WebhookUrlService.php create mode 100644 Components/LastOpenTimeService.php create mode 100644 Components/Logger/LoggerService.php delete mode 100644 Components/Manager/AdyenManager.php delete mode 100755 Components/Manager/OrderManager.php delete mode 100644 Components/Manager/OrderManagerInterface.php delete mode 100755 Components/Manager/UserPreferenceManager.php delete mode 100644 Components/Manager/UserPreferenceManagerInterface.php rename {Session => Components}/MessageProvider.php (88%) delete mode 100644 Components/NotificationManager.php delete mode 100755 Components/NotificationProcessor.php delete mode 100755 Components/NotificationProcessor/Authorisation.php delete mode 100755 Components/NotificationProcessor/Cancellation.php delete mode 100755 Components/NotificationProcessor/Capture.php delete mode 100755 Components/NotificationProcessor/CaptureFailed.php delete mode 100755 Components/NotificationProcessor/Chargeback.php delete mode 100755 Components/NotificationProcessor/ChargebackReversed.php delete mode 100755 Components/NotificationProcessor/ManualReviewAccept.php delete mode 100755 Components/NotificationProcessor/ManualReviewReject.php delete mode 100644 Components/NotificationProcessor/NotificationProcessorInterface.php delete mode 100755 Components/NotificationProcessor/OfferClosed.php delete mode 100755 Components/NotificationProcessor/Refund.php delete mode 100755 Components/NotificationProcessor/RefundFailed.php delete mode 100755 Components/NotificationProcessor/RefundedReversed.php delete mode 100755 Components/OrderMailService.php delete mode 100755 Components/Payload/Chain.php delete mode 100755 Components/Payload/PaymentContext.php delete mode 100644 Components/Payload/PaymentPayloadProvider.php delete mode 100755 Components/Payload/Providers/ApplicationInfoProvider.php delete mode 100644 Components/Payload/Providers/BrowserInfoProvider.php delete mode 100755 Components/Payload/Providers/LineItemsInfoProvider.php delete mode 100644 Components/Payload/Providers/OrderInfoProvider.php delete mode 100644 Components/Payload/Providers/PaymentMethodProvider.php delete mode 100644 Components/Payload/Providers/RecurringOneOffPaymentTokenProvider.php delete mode 100644 Components/Payload/Providers/RecurringPaymentProvider.php delete mode 100644 Components/Payload/Providers/ShopperInfoProvider.php delete mode 100644 Components/Payload/Providers/StorePaymentProvider.php create mode 100644 Components/PaymentMeansEnricher.php delete mode 100755 Components/PaymentStatusUpdate.php mode change 100755 => 100644 Components/ShopwareVersionCheck.php delete mode 100644 Components/TextNotificationManager.php create mode 100644 Components/TransactionDetailsService.php create mode 100644 Components/UninstallService.php delete mode 100644 Components/WebComponents/ApplePayConfigProvider.php delete mode 100755 Components/WebComponents/ConfigContext.php delete mode 100644 Components/WebComponents/ConfigProvider.php delete mode 100755 Components/WebComponents/GooglePayConfigProvider.php create mode 100644 Controllers/Backend/AdyenAuthorization.php create mode 100644 Controllers/Backend/AdyenAutoTest.php create mode 100644 Controllers/Backend/AdyenDebug.php create mode 100644 Controllers/Backend/AdyenDisconnect.php create mode 100644 Controllers/Backend/AdyenGeneralSettings.php create mode 100644 Controllers/Backend/AdyenGivingSettings.php create mode 100644 Controllers/Backend/AdyenMerchant.php create mode 100644 Controllers/Backend/AdyenMerchantActions.php create mode 100644 Controllers/Backend/AdyenNotifications.php create mode 100644 Controllers/Backend/AdyenOrderStatusMap.php create mode 100644 Controllers/Backend/AdyenOrderStatuses.php create mode 100644 Controllers/Backend/AdyenPayment.php create mode 100644 Controllers/Backend/AdyenPaymentMain.php delete mode 100644 Controllers/Backend/AdyenPaymentNotificationsListingExtension.php delete mode 100644 Controllers/Backend/AdyenPaymentRefund.php create mode 100644 Controllers/Backend/AdyenShopInformation.php create mode 100644 Controllers/Backend/AdyenShopNotifications.php create mode 100644 Controllers/Backend/AdyenState.php create mode 100644 Controllers/Backend/AdyenSystemInfo.php create mode 100644 Controllers/Backend/AdyenTransaction.php create mode 100644 Controllers/Backend/AdyenValidateConnection.php create mode 100644 Controllers/Backend/AdyenVersion.php create mode 100644 Controllers/Backend/AdyenWebhookNotifications.php create mode 100644 Controllers/Backend/AdyenWebhookValidation.php delete mode 100755 Controllers/Backend/ImportPaymentMethods.php delete mode 100755 Controllers/Backend/InstallApplePayMerchantAssociation.php delete mode 100755 Controllers/Backend/RegisterApplePayAssociationUrl.php delete mode 100755 Controllers/Backend/TestAdyenApi.php create mode 100644 Controllers/Common/AjaxResponseSetter.php delete mode 100755 Controllers/Frontend/Adyen.php create mode 100644 Controllers/Frontend/AdyenAsyncProcess.php delete mode 100644 Controllers/Frontend/AdyenConfig.php create mode 100644 Controllers/Frontend/AdyenDonations.php create mode 100644 Controllers/Frontend/AdyenExpressCheckout.php create mode 100644 Controllers/Frontend/AdyenPaymentProcess.php create mode 100644 Controllers/Frontend/AdyenWebhook.php delete mode 100755 Controllers/Frontend/DisableRecurringToken.php delete mode 100755 Controllers/Frontend/Notification.php delete mode 100755 Controllers/Frontend/Process.php delete mode 100755 Dbal/BasketDetailAttributes.php delete mode 100755 Dbal/OrderDetailAttributes.php delete mode 100755 Dbal/Remover/PaymentMeanSubShopRemover.php delete mode 100644 Dbal/Remover/PaymentMeanSubShopRemoverInterface.php delete mode 100755 Dbal/Writer/Payment/PaymentMeansSubShopsWriter.php delete mode 100644 Dbal/Writer/Payment/PaymentMeansSubShopsWriterInterface.php delete mode 100644 Doctrine/Writer/PaymentAttributeWriter.php delete mode 100644 Doctrine/Writer/PaymentAttributeWriterInterface.php delete mode 100755 Doctrine/Writer/PaymentMethodWriter.php delete mode 100644 Doctrine/Writer/PaymentMethodWriterInterface.php delete mode 100755 Doctrine/Writer/TraceableLegacyPaymentMethodWriterDecorator.php delete mode 100755 Enricher/Payment/PaymentMethodEnricher.php delete mode 100644 Enricher/Payment/PaymentMethodEnricherInterface.php create mode 100644 Entities/LastOpenTime.php delete mode 100644 Exceptions/AuthorizationException.php delete mode 100644 Exceptions/DuplicateNotificationException.php delete mode 100644 Exceptions/InvalidAuthenticationException.php delete mode 100644 Exceptions/InvalidHmacException.php delete mode 100644 Exceptions/InvalidParameterException.php delete mode 100644 Exceptions/InvalidPaymentsResponseException.php delete mode 100644 Exceptions/InvalidRequestPayloadException.php delete mode 100644 Exceptions/NoNotificationProcessorFoundException.php delete mode 100644 Exceptions/OrderNotFoundException.php delete mode 100644 Exceptions/PaymentExistsException.php create mode 100644 Exceptions/PaymentMeanDoesNotExistException.php delete mode 100644 Exceptions/PaymentNotImportedException.php delete mode 100644 Exceptions/RecurringPaymentTokenNotFoundException.php delete mode 100644 Exceptions/RecurringPaymentTokenNotSavedException.php create mode 100644 Exceptions/StoreDoesNotExistException.php delete mode 100644 Exceptions/UmbrellaPaymentMeanNotFoundException.php delete mode 100644 Http/Response/ApiJsonResponse.php delete mode 100644 Http/Response/FrontendJsonResponse.php delete mode 100644 Http/Response/NotificationResponseFactory.php delete mode 100755 Http/Validator/Notification/AuthenticationValidator.php delete mode 100755 Http/Validator/Notification/Chain.php delete mode 100755 Http/Validator/Notification/HmacValidator.php delete mode 100755 Http/Validator/Notification/LoggingAuthorizationValidatorDecorator.php delete mode 100644 Http/Validator/Notification/NotificationValidatorInterface.php delete mode 100644 Import/PaymentMethodImporter.php delete mode 100644 Import/PaymentMethodImporterInterface.php delete mode 100755 Import/TraceablePaymentMethodImporter.php create mode 100644 Models/AdyenEntity.php create mode 100644 Models/BaseEntity.php delete mode 100644 Models/Enum/Channel.php delete mode 100644 Models/Enum/NotificationStatus.php delete mode 100644 Models/Enum/PaymentMethod/ImportStatus.php delete mode 100755 Models/Enum/PaymentMethod/PluginType.php delete mode 100755 Models/Enum/PaymentMethod/SourceType.php delete mode 100644 Models/Event.php delete mode 100755 Models/Feedback/NotificationItemFeedback.php delete mode 100755 Models/Feedback/NotificationProcessorFeedback.php delete mode 100755 Models/Feedback/TextNotificationItemFeedback.php delete mode 100755 Models/Notification.php delete mode 100755 Models/NotificationException.php create mode 100644 Models/NotificationsEntity.php delete mode 100755 Models/Payment/PaymentFactory.php delete mode 100644 Models/Payment/PaymentFactoryInterface.php delete mode 100755 Models/Payment/PaymentGroup.php delete mode 100755 Models/Payment/PaymentMean.php delete mode 100755 Models/Payment/PaymentMethod.php delete mode 100755 Models/Payment/PaymentType.php delete mode 100755 Models/PaymentInfo.php delete mode 100755 Models/PaymentMethod/ImportResult.php delete mode 100644 Models/PaymentMethodInfo.php delete mode 100755 Models/PaymentResultCode.php create mode 100644 Models/QueueEntity.php delete mode 100755 Models/RecurringPayment/RecurringPaymentToken.php delete mode 100755 Models/RecurringPayment/RecurringProcessingModel.php delete mode 100755 Models/RecurringPayment/ShopperInteraction.php delete mode 100755 Models/Refund.php delete mode 100755 Models/TextNotification.php delete mode 100755 Models/TokenIdentifier.php create mode 100644 Models/TransactionLogEntity.php delete mode 100644 Recurring/RecurringTokenFactory.php delete mode 100644 Recurring/RecurringTokenFactoryInterface.php create mode 100644 Repositories/AdyenGivingRepository.php create mode 100644 Repositories/BaseRepository.php create mode 100644 Repositories/BaseRepositoryWithConditionalDeletes.php create mode 100644 Repositories/NotificationsRepository.php create mode 100644 Repositories/PaymentMethodRepository.php create mode 100644 Repositories/QueueItemRepository.php create mode 100644 Repositories/TransactionLogRepository.php create mode 100644 Repositories/Wrapper/OrderRepository.php create mode 100644 Repositories/Wrapper/PaymentMeanRepository.php create mode 100644 Repositories/Wrapper/StoreRepository.php delete mode 100755 Repository/RecurringPayment/RecurringPaymentTokenRepository.php delete mode 100644 Repository/RecurringPayment/RecurringPaymentTokenRepositoryInterface.php delete mode 100755 Repository/RecurringPayment/TraceableRecurringPaymentTokenRepository.php delete mode 100644 Resources/backend/performance/view/applepaymerchantassociation.js delete mode 100755 Resources/config.xml delete mode 100644 Resources/cronjob.xml create mode 100644 Resources/frontend/js/adyen-checkout-controller.js create mode 100644 Resources/frontend/js/adyen-donations-controller.js delete mode 100644 Resources/frontend/js/jquery.adyen-checkout-error.js create mode 100644 Resources/frontend/js/jquery.adyen-cookie-consent-visibility-handler.js create mode 100644 Resources/frontend/js/jquery.adyen-donations.js create mode 100644 Resources/frontend/js/jquery.adyen-express-checkout.js delete mode 100644 Resources/frontend/js/jquery.adyen-finish-order.js create mode 100644 Resources/frontend/js/jquery.adyen-payment-additional-action.js create mode 100644 Resources/frontend/js/jquery.adyen-payment-method-state-data-setter.js create mode 100644 Resources/frontend/js/jquery.adyen-state-data-cleanup.js delete mode 100644 Resources/services/adyen-api.xml delete mode 100644 Resources/services/adyen.xml delete mode 100644 Resources/services/applepay-merchant.xml delete mode 100644 Resources/services/basket.xml delete mode 100644 Resources/services/commands.xml delete mode 100644 Resources/services/dbal.xml delete mode 100644 Resources/services/doctrine.xml delete mode 100644 Resources/services/enrichers.xml delete mode 100644 Resources/services/factory.xml delete mode 100644 Resources/services/http.xml delete mode 100644 Resources/services/importers.xml create mode 100644 Resources/services/logger.xml delete mode 100644 Resources/services/loggers.xml delete mode 100644 Resources/services/managers.xml delete mode 100644 Resources/services/payload-providers.xml delete mode 100644 Resources/services/providers.xml delete mode 100644 Resources/services/repositories.xml delete mode 100644 Resources/services/rules.xml delete mode 100644 Resources/services/serializers.xml delete mode 100644 Resources/services/session.xml delete mode 100644 Resources/services/shopware.xml delete mode 100644 Resources/services/subscribers-cronjob.xml delete mode 100644 Resources/services/validators.xml delete mode 100644 Resources/services/web-components.xml create mode 100644 Resources/snippets/backend/adyen/configuration.ini create mode 100644 Resources/snippets/frontend/adyen/checkout.ini create mode 100644 Resources/views/backend/_base/layout.tpl create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-NormalItalic.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-NormalItalic.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff2 create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Blond.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Blond.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-BlondItalic.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-BlondItalic.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Normal.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Normal.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-NormalItalic.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-NormalItalic.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-SemiBold.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-SemiBold.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.eot create mode 100644 Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.svg create mode 100644 Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.woff create mode 100644 Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.eot create mode 100644 Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.svg create mode 100644 Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.ttf create mode 100644 Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.woff create mode 100644 Resources/views/backend/_resources/css/adyen-core.css rename tests/Integration/.gitkeep => Resources/views/backend/_resources/css/adyen.css (100%) create mode 100644 Resources/views/backend/_resources/favicon.ico create mode 100644 Resources/views/backend/_resources/images/adyen-logo.png create mode 100644 Resources/views/backend/_resources/js/AdyenShopNotifications.js create mode 100644 Resources/views/backend/_resources/js/AjaxService.js create mode 100644 Resources/views/backend/_resources/js/ConnectionController.js create mode 100644 Resources/views/backend/_resources/js/DataTableComponent.js create mode 100644 Resources/views/backend/_resources/js/DropdownComponent.js create mode 100644 Resources/views/backend/_resources/js/ElementGenerator.js create mode 100644 Resources/views/backend/_resources/js/ModalComponent.js create mode 100644 Resources/views/backend/_resources/js/MultiselectDropdownComponent.js create mode 100644 Resources/views/backend/_resources/js/NotificationsController.js create mode 100644 Resources/views/backend/_resources/js/PageControllerFactory.js create mode 100644 Resources/views/backend/_resources/js/PaymentsController.js create mode 100644 Resources/views/backend/_resources/js/ResponseService.js create mode 100644 Resources/views/backend/_resources/js/SettingsController.js create mode 100644 Resources/views/backend/_resources/js/StateController.js create mode 100644 Resources/views/backend/_resources/js/TableFilterComponent.js create mode 100644 Resources/views/backend/_resources/js/TemplateService.js create mode 100644 Resources/views/backend/_resources/js/TranslationService.js create mode 100644 Resources/views/backend/_resources/js/UtilityService.js create mode 100644 Resources/views/backend/_resources/js/ValidationService.js create mode 100644 Resources/views/backend/_resources/lang/de.json create mode 100644 Resources/views/backend/_resources/lang/en.json create mode 100644 Resources/views/backend/_resources/templates/sidebar.html create mode 100644 Resources/views/backend/adyen_detail/app.js create mode 100644 Resources/views/backend/adyen_detail/controller/adyen_order_details_controller.js create mode 100644 Resources/views/backend/adyen_detail/model/transaction.js create mode 100644 Resources/views/backend/adyen_detail/store/transaction.js create mode 100644 Resources/views/backend/adyen_detail/view/adyen_order_detail_data.js create mode 100644 Resources/views/backend/adyen_detail/view/adyen_order_detail_list.js create mode 100644 Resources/views/backend/adyen_detail/view/window.js create mode 100644 Resources/views/backend/adyen_list/adyen_order_list.js create mode 100644 Resources/views/backend/adyen_list/models/adyen_order_model.js create mode 100644 Resources/views/backend/adyen_payment_main/index.tpl delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/app.js delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/controller/main.js delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/model/notification.js delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/store/notification.js delete mode 100644 Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/extensions/notification_filter.js delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/notification.js delete mode 100755 Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/window.js delete mode 100644 Resources/views/backend/adyen_payment_order/app.js delete mode 100644 Resources/views/backend/adyen_payment_order/model/order.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/detail.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/list.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds/detail.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/transaction_details.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/transaction_tabs.js delete mode 100644 Resources/views/backend/adyen_payment_order/view/detail/window.js delete mode 100644 Resources/views/backend/customer/adyen_payment_method/app.js delete mode 100644 Resources/views/backend/customer/adyen_payment_method/view/list.js create mode 100644 Resources/views/backend/index/adyen_header.tpl delete mode 100644 Resources/views/backend/order/adyen_payment_method/app.js delete mode 100644 Resources/views/backend/order/adyen_payment_method/view/list.js create mode 100644 Resources/views/frontend/adyen_payment_process/index.tpl delete mode 100644 Resources/views/frontend/checkout/adyen_configuration.tpl create mode 100755 Resources/views/frontend/checkout/cart.tpl create mode 100644 Resources/views/frontend/checkout/finish.tpl create mode 100755 Resources/views/frontend/detail/buy.tpl create mode 100644 Resources/views/frontend/detail/index.tpl delete mode 100755 Rule/AdyenApi/IsMainShopApiKeyRule.php delete mode 100755 Rule/AdyenApi/IsMainShopMerchantAccountRule.php delete mode 100644 Rule/AdyenApi/MainShopConfigRule.php delete mode 100755 Rule/AdyenApi/MainShopConfigRuleChain.php delete mode 100644 Rule/AdyenApi/MainShopRule.php delete mode 100644 Rule/AdyenApi/UsedFallbackConfigRule.php delete mode 100644 Rule/AdyenApi/UsedFallbackConfigRuleInterface.php delete mode 100755 Rule/AdyenApi/UsedMainShopConfigRule.php delete mode 100644 Serializer/PaymentMeanCollectionSerializer.php delete mode 100644 Serializer/PaymentMeanSerializer.php delete mode 100755 Session/CustomerNumberProvider.php delete mode 100644 Session/CustomerNumberProviderInterface.php delete mode 100644 Session/ErrorMessageProvider.php create mode 100644 Setup/MigrateTransactionHistoryTask.php create mode 100644 Setup/Updater.php delete mode 100755 Shopware/Crud/AttributeWriter.php delete mode 100644 Shopware/Crud/AttributeWriterInterface.php delete mode 100755 Shopware/Plugin/TraceablePluginIdProvider.php delete mode 100644 Shopware/Provider/CheckoutBasketProvider.php delete mode 100644 Shopware/Provider/CheckoutBasketProviderInterface.php delete mode 100644 Shopware/Provider/PaymentMeansProvider.php delete mode 100644 Shopware/Provider/PaymentMeansProviderInterface.php delete mode 100755 Shopware/Repository/PaymentRepository.php delete mode 100644 Shopware/Repository/PaymentRepositoryInterface.php delete mode 100644 Shopware/Serializer/SwPaymentMeanCollectionSerializer.php delete mode 100644 Shopware/Serializer/SwPaymentMeanSerializer.php rename Subscriber/Account/{SaveStoredMethodPreferenceSubscriber.php => SaveStoredMethodPreference.php} (62%) rename Subscriber/{Checkout/AddErrorMessageToViewSubscriber.php => AddErrorMessageToView.php} (61%) create mode 100755 Subscriber/AddExpressCheckoutToView.php delete mode 100755 Subscriber/AddPluginTemplatesSubscriber.php rename Subscriber/{Applepay/MerchantAssociation => }/AddSeoUrlSubscriber.php (63%) delete mode 100644 Subscriber/AddStoredMethodIdOnOrderSubscriber.php rename Subscriber/{EnrichUserPreferenceSubscriber.php => AddStoredMethodUserPreferenceToView.php} (95%) delete mode 100755 Subscriber/Applepay/MerchantAssociation/PerformanceLoaderSubscriber.php delete mode 100644 Subscriber/Applepay/MerchantAssociation/RegisterUrlCountSubscriber.php create mode 100755 Subscriber/AssignPaymentMethodStateDataToSession.php rename Subscriber/{Checkout/PersistStoredMethodIdSubscriber.php => AssignStoredPaymentMethodToSession.php} (58%) create mode 100644 Subscriber/Backend/BackendIndex.php delete mode 100755 Subscriber/Backend/BackendJavascriptSubscriber.php delete mode 100755 Subscriber/Backend/BackendOrderSubscriber.php delete mode 100644 Subscriber/Backend/ExtendViewTemplateSubscriber.php delete mode 100644 Subscriber/Backend/ImportSubShopPaymentMethodsSubscriber.php create mode 100644 Subscriber/Backend/OrderUpdate.php delete mode 100755 Subscriber/Backend/RemoveSubShopPaymentMethodSubscriber.php create mode 100644 Subscriber/BackendOrderSubscriber.php create mode 100644 Subscriber/BootstrapRegistration.php delete mode 100644 Subscriber/Checkout/AddAdyenSourceTypeToViewSubscriber.php delete mode 100644 Subscriber/Checkout/AddApplePayConfigToViewSubscriber.php delete mode 100644 Subscriber/Checkout/AddGooglePayConfigToViewSubscriber.php delete mode 100644 Subscriber/Checkout/BaseAddPaymentMethodConfigToViewSubscriber.php delete mode 100755 Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriber.php delete mode 100755 Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriber.php delete mode 100644 Subscriber/Checkout/RegisterConfirmSnippetsSubscriber.php delete mode 100755 Subscriber/Checkout/RegisterPaymentSnippetsSubscriber.php delete mode 100755 Subscriber/CheckoutSubscriber.php create mode 100644 Subscriber/ControllerPath.php delete mode 100755 Subscriber/Cronjob/ImportPaymentMethodSubscriber.php delete mode 100644 Subscriber/Cronjob/ProcessNotifications.php create mode 100755 Subscriber/EnrichUserAdditionalPaymentSubscriber.php create mode 100644 Subscriber/ExtendOrderDetailsHandler.php create mode 100644 Subscriber/FinishPageSubscriber.php create mode 100755 Subscriber/LimitPercentageSurcharge.php delete mode 100755 Subscriber/Notification/LogIncomingNotification.php delete mode 100755 Subscriber/Notification/LogIncomingNotificationSubscriber.php delete mode 100755 Subscriber/Notification/UpdateOrderPsPSubscriber.php delete mode 100644 Subscriber/OrderEmailSubscriber.php create mode 100644 Subscriber/OrderListHandler.php create mode 100644 Subscriber/ShopDeletedSubscriber.php create mode 100644 Subscriber/TemplateRegistration.php create mode 100755 Subscriber/UpdateStoredPaymentMethodViewData.php create mode 100644 Utilities/Plugin.php create mode 100644 Utilities/Request.php create mode 100644 Utilities/Url.php delete mode 100644 Utils/JsonUtil.php delete mode 100644 Utils/RequestDataFormatter.php delete mode 100644 Utils/Sanitize.php delete mode 100644 Validator/ConstraintViolationFactory.php delete mode 100644 bitbucket-pipelines.yml delete mode 100644 grumphp.yml.dist delete mode 100644 phpcs.xml delete mode 100644 psalm.xml.dist delete mode 100644 storage/apple-developer-merchantid-domain-association.archive create mode 100644 tests/BaseRepositoryWrapperTest.php delete mode 100644 tests/Integration/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php create mode 100644 tests/PluginTest.php create mode 100644 tests/QueueItemRepositoryWrapperTest.php create mode 100644 tests/TestComponents/BaseQueueItemRepositoryTestAdapter.php create mode 100644 tests/TestComponents/BaseRepositoryTestAdapter.php create mode 100644 tests/TestComponents/Components/TestBaseRepository.php create mode 100644 tests/TestComponents/Components/TestDatabase.php create mode 100644 tests/TestComponents/Components/TestEntity.php create mode 100644 tests/TestComponents/Components/TestQueueItemRepository.php delete mode 100644 tests/Unit/.gitkeep delete mode 100755 tests/Unit/AdyenApi/HttpClient/ClientFactoryTest.php delete mode 100755 tests/Unit/AdyenApi/HttpClient/ClientMemoiseTest.php delete mode 100644 tests/Unit/AdyenApi/HttpClient/ConfigValidatorTest.php delete mode 100644 tests/Unit/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php delete mode 100755 tests/Unit/AdyenApi/TransportFactoryTest.php delete mode 100644 tests/Unit/Applepay/Exception/FileNotWrittenExceptionTest.php delete mode 100644 tests/Unit/Collection/Payment/PaymentMeanCollectionTest.php delete mode 100644 tests/Unit/Collection/Payment/PaymentMethodCollectionTest.php delete mode 100755 tests/Unit/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderTest.php delete mode 100755 tests/Unit/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderTest.php delete mode 100755 tests/Unit/Components/Adyen/PaymentMethod/TraceableEnrichedPaymentMeanProviderTest.php delete mode 100755 tests/Unit/Components/Manager/UserPreferenceManagerTest.php delete mode 100755 tests/Unit/Components/Payload/Providers/RecurringOneOffPaymentTokenProviderTest.php delete mode 100755 tests/Unit/Components/Payload/Providers/RecurringPaymentProviderTest.php delete mode 100755 tests/Unit/Enricher/Payment/PaymentMethodEnricherTest.php delete mode 100755 tests/Unit/Exceptions/DuplicateNotificationExceptionTest.php delete mode 100755 tests/Unit/Exceptions/RecurringPaymentTokenNotFoundExceptionTest.php delete mode 100755 tests/Unit/Exceptions/RecurringPaymentTokenNotSavedExceptionTest.php delete mode 100755 tests/Unit/Http/Response/FrontendJsonResponseTest.php delete mode 100644 tests/Unit/Mock/ControllerActionMock.php delete mode 100755 tests/Unit/Models/Payment/PaymentGroupTest.php delete mode 100755 tests/Unit/Models/Payment/PaymentMeanTest.php delete mode 100755 tests/Unit/Models/Payment/PaymentMethodTest.php delete mode 100755 tests/Unit/Models/Payment/PaymentTypeTest.php delete mode 100755 tests/Unit/Models/PaymentMethod/ImportResultTest.php delete mode 100755 tests/Unit/Models/PaymentResultCodeTest.php delete mode 100755 tests/Unit/Models/RecurringPayment/RecurringPaymentTokenTest.php delete mode 100755 tests/Unit/Models/RecurringPayment/RecurringProcessingModelTest.php delete mode 100755 tests/Unit/Models/RecurringPayment/ShopperInteractionTest.php delete mode 100755 tests/Unit/Models/TokenIdentifierTest.php delete mode 100644 tests/Unit/Recurring/RecurringTokenFactoryTest.php delete mode 100755 tests/Unit/Repository/RecurringPayment/RecurringPaymentTokenRepositoryTest.php delete mode 100755 tests/Unit/Repository/RecurringPayment/TraceableRecurringPaymentTokenRepositoryTest.php delete mode 100755 tests/Unit/Session/CustomerNumberProviderTest.php delete mode 100644 tests/Unit/Shopware/Controllers/Frontend/CheckoutTest.php delete mode 100644 tests/Unit/Shopware/Plugin/PluginIdProviderTest.php delete mode 100755 tests/Unit/Shopware/Serializer/SwPaymentMeanSerializerTest.php delete mode 100755 tests/Unit/Subscriber/Account/SaveStoredMethodPreferenceSubscriberTest.php delete mode 100755 tests/Unit/Subscriber/Backend/HideStoredPaymentsSubscriberTest.php delete mode 100755 tests/Unit/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriberTest.php delete mode 100755 tests/Unit/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriberTest.php delete mode 100755 tests/Unit/Subscriber/Checkout/PersistStoredMehtodIdSubscriberTest.php delete mode 100755 tests/Unit/Subscriber/EnrichUserPreferenceSubscriberTest.php delete mode 100644 tests/Unit/Subscriber/SubscriberTestCase.php delete mode 100644 tests/Unit/Utils/SanitizeTest.php delete mode 100644 tests/bootstrap.php delete mode 100644 tests/fixtures/applepay/ZipExtractor.zip delete mode 100644 tools/composer.json delete mode 100644 tools/composer.lock delete mode 100644 tools/prerelease/CS-3947/AdyenPayment.zip delete mode 100644 tools/prerelease/CS-4030/AdyenPayment.zip diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index a1d103ce..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @acampos1916 @peterojo diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 781e0b5f..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,31 +0,0 @@ -on: ["push", "pull_request"] -name: Main Workflow - -jobs: - run: - name: Run - runs-on: ubuntu-latest - - steps: - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - - - name: Checkout - uses: actions/checkout@v2 - - - name: Make sure we are using composer v1 - run: sudo composer self-update --1 && sudo chown $USER $HOME/.composer - - - name: Validate composer.json and composer.lock - run: composer validate - - - name: Install dependencies - run: composer install --prefer-dist --no-progress - - - name: Run PHP Code Sniffer - run: vendor/bin/phpcs . - - - name: Make sure project files are compilable - run: find -L . -path ./vendor -prune -o -path ./tests -prune -o -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l diff --git a/.gitignore b/.gitignore index db2e5096..9e59d36b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,53 @@ -#development +# These are some examples of commonly ignored file patterns. +# You should customize this list as applicable to your project. +# Learn more about .gitignore: +# https://www.atlassian.com/git/tutorials/saving-changes/gitignore + +# Node artifact files +node_modules/ +dist/ + +# Compiled Java class files +*.class + +# Compiled Python bytecode +*.py[cod] + +# Log files +*.log + +# Package files +*.jar + +# Maven +target/ +dist/ + +# JetBrains IDE .idea/ -*.iml + +# Unit test reports +TEST*.xml + +# Generated by MacOS .DS_Store -#composer +# Generated by Windows +Thumbs.db + +# Applications +*.app +*.exe +*.war + +# Large media files +*.mp4 +*.tiff +*.avi +*.flv +*.mov +*.wmv + vendor/ -composer.lock - -# project -.php-cs-fixer.php -psalm.xml -grumphp.yml -.*.cache -tools/vendor + tools/AdyenPayment.zip -!tools/composer.lock -tests/fixtures/applepay/* -!tests/fixtures/applepay/ZipExtractor.zip \ No newline at end of file diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php deleted file mode 100644 index bd0abb31..00000000 --- a/.php-cs-fixer.dist.php +++ /dev/null @@ -1,93 +0,0 @@ -setFinder( - PhpCsFixer\Finder::create() - ->in([__DIR__]) - ->exclude([ - 'vendor', - 'Controllers' // Contains SW5 specific code - ]) - ->notPath([ - '/Models\/(Notification|PaymentInfo|Refund|TextNotification)\.php/', // TODO: update doctrine entity mapping - '/Components/Builder/NotificationBuilder.php', // TODO: update doctrine entity mapping - ]) - ->name('*.php')) - ->setRiskyAllowed(true) - ->setRules([ - '@PSR12' => true, - '@Symfony' => true, - 'align_multiline_comment' => true, - 'array_indentation' => true, - 'array_syntax' => ['syntax' => 'short'], - 'backtick_to_shell_exec' => true, - 'blank_line_before_statement' => true, - 'combine_consecutive_issets' => true, - 'combine_consecutive_unsets' => true, - 'comment_to_phpdoc' => true, - 'phpdoc_to_comment' => false, - 'compact_nullable_typehint' => true, -// 'date_time_immutable' => true, // TODO: update doctrine entity mapping - 'declare_strict_types' => true, - 'doctrine_annotation_array_assignment' => true, - 'doctrine_annotation_braces' => true, - 'doctrine_annotation_indentation' => true, - 'doctrine_annotation_spaces' => true, - 'escape_implicit_backslashes' => true, - 'explicit_indirect_variable' => true, - 'explicit_string_variable' => true, - 'final_internal_class' => false, - 'fully_qualified_strict_types' => true, - 'general_phpdoc_annotation_remove' => false, - 'header_comment' => false, - 'heredoc_to_nowdoc' => false, - 'linebreak_after_opening_tag' => true, - 'list_syntax' => ['syntax' => 'short'], - 'mb_str_functions' => true, - 'method_chaining_indentation' => true, - 'multiline_comment_opening_closing' => true, - 'multiline_whitespace_before_semicolons' => true, - 'native_function_invocation' => false, - 'no_alternative_syntax' => true, - 'no_blank_lines_before_namespace' => false, - 'no_null_property_initialization' => true, - 'no_php4_constructor' => true, - 'echo_tag_syntax' => true, - 'no_superfluous_elseif' => true, - 'no_unreachable_default_argument_value' => true, - 'no_useless_else' => true, - 'no_useless_return' => true, - 'not_operator_with_space' => false, - 'not_operator_with_successor_space' => false, - 'ordered_class_elements' => false, - 'ordered_imports' => true, - 'php_unit_dedicate_assert' => false, - 'php_unit_expectation' => false, - 'php_unit_mock' => false, - 'php_unit_namespaced' => false, - 'php_unit_no_expectation_annotation' => false, - 'phpdoc_order_by_value' => true, - 'php_unit_set_up_tear_down_visibility' => true, - 'php_unit_strict' => false, - 'php_unit_test_annotation' => false, - 'php_unit_test_class_requires_covers' => false, - 'phpdoc_add_missing_param_annotation' => true, - 'phpdoc_order' => true, - 'phpdoc_types_order' => ['null_adjustment' => 'always_last'], - 'php_unit_method_casing' => ['case' =>'snake_case'], - 'pow_to_exponentiation' => true, - 'psr_autoloading' => true, - 'random_api_migration' => false, - 'simplified_null_return' => true, - 'static_lambda' => true, // can collide with Prohpecy - 'strict_comparison' => true, - 'strict_param' => true, - 'string_line_ending' => true, - 'ternary_to_null_coalescing' => true, - 'void_return' => true, - 'yoda_style' => true, - 'single_line_throw' => false, - 'class_attributes_separation' => ['elements' =>['property' => 'only_if_meta', 'const' => 'only_if_meta']], - 'function_declaration' => ['closure_function_spacing' => 'none'], - ]); diff --git a/AdyenApi/HttpClient/ClientFactory.php b/AdyenApi/HttpClient/ClientFactory.php deleted file mode 100755 index add3464d..00000000 --- a/AdyenApi/HttpClient/ClientFactory.php +++ /dev/null @@ -1,57 +0,0 @@ -configuration = $configuration; - $this->logger = $logger; - } - - /** - * @throws AdyenException - */ - public function provide(Shop $shop): Client - { - return $this->createClient( - $this->configuration->getMerchantAccount($shop), - $this->configuration->getApiKey($shop), - $this->configuration->getEnvironment($shop), - $this->configuration->getApiUrlPrefix($shop) - ); - } - - private function createClient( - string $merchantAccount, - string $apiKey, - string $environment, - ?string $prefix = null - ): Client { - $urlPrefix = Environment::LIVE === $environment ? $prefix : null; - - $adyenClient = new Client(); - $adyenClient->setMerchantAccount($merchantAccount); - $adyenClient->setXApiKey($apiKey); - $adyenClient->setEnvironment($environment, $urlPrefix); - $adyenClient->setLogger($this->logger); - - return $adyenClient; - } -} diff --git a/AdyenApi/HttpClient/ClientFactoryInterface.php b/AdyenApi/HttpClient/ClientFactoryInterface.php deleted file mode 100644 index 6cd6fb44..00000000 --- a/AdyenApi/HttpClient/ClientFactoryInterface.php +++ /dev/null @@ -1,13 +0,0 @@ - */ - private $memoisedClients = []; - - /** @var ClientFactoryInterface */ - private $factory; - - public function __construct(ClientFactoryInterface $factory) - { - $this->factory = $factory; - } - - public function lookup(Shop $shop): Client - { - if (!array_key_exists($shop->getId(), $this->memoisedClients)) { - $this->memoisedClients[$shop->getId()] = $this->factory->provide($shop); - } - - return $this->memoisedClients[$shop->getId()]; - } -} diff --git a/AdyenApi/HttpClient/ClientMemoiseInterface.php b/AdyenApi/HttpClient/ClientMemoiseInterface.php deleted file mode 100644 index da6263eb..00000000 --- a/AdyenApi/HttpClient/ClientMemoiseInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -adyenApiFactory = $adyenApiFactory; - $this->configuration = $configuration; - $this->shopRepository = $shopRepository; - } - - public function validate(int $shopId): ConstraintViolationList - { - $shop = $this->shopRepository->find($shopId); - if (null === $shop) { - return new ConstraintViolationList([ - ConstraintViolationFactory::create('Shop not found for ID "'.$shopId.'".'), - ]); - } - - $violations = $this->validateConfig($shop); - if ($violations->count()) { - return $violations; - } - - return $this->validateConnection($shop); - } - - private function validateConfig(Shop $shop): ConstraintViolationList - { - $violations = new ConstraintViolationList(); - $shopApiKey = $this->configuration->getApiKey($shop); - $shopMerchantAccount = $this->configuration->getMerchantAccount($shop); - if ('' === $shopApiKey) { - $violations->add(ConstraintViolationFactory::create('Missing configuration: API key.')); - } - - if ('' === $shopMerchantAccount) { - $violations->add(ConstraintViolationFactory::create('Missing configuration: merchant account.')); - } - - return $violations; - } - - private function validateConnection(Shop $shop): ConstraintViolationList - { - try { - $adyenClient = $this->adyenApiFactory->provide($shop); - $checkout = new Checkout($adyenClient); - $checkout->paymentMethods([ - 'merchantAccount' => $this->configuration->getMerchantAccount($shop), - ]); - } catch (AdyenException $exception) { - return new ConstraintViolationList([ - ConstraintViolationFactory::create('Adyen API failed, check error logs'), - ]); - } - - return new ConstraintViolationList(); - } -} diff --git a/AdyenApi/HttpClient/ConfigValidatorInterface.php b/AdyenApi/HttpClient/ConfigValidatorInterface.php deleted file mode 100644 index 610542b9..00000000 --- a/AdyenApi/HttpClient/ConfigValidatorInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -success = $success; - $this->message = $message; - } - - public static function create(bool $success, string $message): self - { - return new self($success, $message); - } - - public static function empty(): self - { - return new self(false, 'Customer number not found.'); - } - - public function isSuccess(): bool - { - return $this->success; - } - - public function message(): string - { - return $this->message; - } -} diff --git a/AdyenApi/Recurring/DisableTokenRequestHandler.php b/AdyenApi/Recurring/DisableTokenRequestHandler.php deleted file mode 100755 index a9fd2c67..00000000 --- a/AdyenApi/Recurring/DisableTokenRequestHandler.php +++ /dev/null @@ -1,58 +0,0 @@ -transportFactory = $transportFactory; - $this->customerNumberProvider = $customerNumberProvider; - } - - public function disableToken(string $recurringTokenId, Shop $shop): ApiResponse - { - $customerNumber = ($this->customerNumberProvider)(); - if ('' === $customerNumber) { - return ApiResponse::empty(); - } - $recurringTransport = $this->transportFactory->recurring($shop); - - $payload = [ - 'shopperReference' => $customerNumber, - 'recurringDetailReference' => $recurringTokenId, - ]; - - $result = $recurringTransport->disable($payload); - - $response = (string) ($result['response'] ?? ''); - $resultMessage = (string) ($result['message'] ?? ''); - $isSuccessfullyDisabled = $this->isSuccessfullyDisabled($response); - - return ApiResponse::create($isSuccessfullyDisabled, $resultMessage); - } - - private function isSuccessfullyDisabled(string $response): bool - { - if (false === mb_strpos($response, 'successfully-disabled')) { - return false; - } - - return true; - } -} diff --git a/AdyenApi/Recurring/DisableTokenRequestHandlerInterface.php b/AdyenApi/Recurring/DisableTokenRequestHandlerInterface.php deleted file mode 100644 index 27317f1e..00000000 --- a/AdyenApi/Recurring/DisableTokenRequestHandlerInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -apiFactory = $apiFactory; - } - - public function recurring(Shop $shop): Recurring - { - return new Recurring( - $this->apiFactory->provide($shop) - ); - } - - public function checkout(Shop $shop): Checkout - { - return new Checkout( - $this->apiFactory->provide($shop) - ); - } -} diff --git a/AdyenApi/TransportFactoryInterface.php b/AdyenApi/TransportFactoryInterface.php deleted file mode 100644 index e79d876c..00000000 --- a/AdyenApi/TransportFactoryInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -addCompilerPass(new NotificationProcessorCompilerPass()); - parent::build($container); + $container->setParameter('adyen_payment.plugin_dir', $this->getPath()); - //set default logger level for 5.4 - if (!$container->hasParameter('kernel.default_error_level')) { - $container->setParameter('kernel.default_error_level', Logger::ERROR); - } + parent::build($container); $this->loadServices($container); } - private function loadServices(ContainerBuilder $container): void - { - $loader = new GlobFileLoader($container, $fileLocator = new FileLocator()); - $loader->setResolver(new LoaderResolver([new XmlFileLoader($container, $fileLocator)])); - - $loader->load(__DIR__.'/Resources/services/*.xml'); - - /** @var ShopwareVersionCheck $versionCheck */ - $versionCheck = $container->get('adyen_payment.components.shopware_version_check'); - if ($versionCheck && $versionCheck->isHigherThanShopwareVersion('v5.6.2')) { - $loader->load(__DIR__.'/Resources/services/version/563/*.xml'); - } - } - /** - * @throws \Exception + * Adds the widget to the database and creates the database schema. + * + * @param Plugin\Context\InstallContext $installContext */ - public function install(InstallContext $context): void + public function install(Plugin\Context\InstallContext $installContext) { - $this->installAttributes(); - $this->installStoredPaymentUmbrella($context); + parent::install($installContext); - $tool = new SchemaTool($this->container->get('models')); - $classes = $this->getModelMetaData(); - $tool->updateSchema($classes, true); + $this->container->get('shopware.snippet_database_handler')->loadToDatabase( + $this->getPath() . '/Resources/snippets/' + ); - $context->scheduleClearCache(InstallContext::CACHE_LIST_FRONTEND); + $this->updateSchema(); + $this->installStoredPaymentUmbrella(); + + $installContext->scheduleClearCache(InstallContext::CACHE_LIST_FRONTEND); } public function update(UpdateContext $context): void { - $this->installAttributes(); - $this->installStoredPaymentUmbrella($context); + Bootstrap::init(); - if (version_compare($context->getCurrentVersion(), '3.9.7', '<=')) { - $this->activatePaymentsForEsd(); - } + $this->container->get('shopware.snippet_database_handler')->loadToDatabase( + $this->getPath() . '/Resources/snippets/' + ); - $tool = new SchemaTool($this->container->get('models')); - $classes = $this->getModelMetaData(); - $tool->updateSchema($classes, true); + $this->updateSchema(); + + $updater = new Updater( + $context, + $this->container->get('shopware.plugin.cached_config_reader'), + ServiceRegister::getService(ConnectionService::class), + $this->container->get(StoreRepository::class), + ServiceRegister::getService(PaymentMethodConfigRepository::class), + $this->container->get('snippets'), + $this->container->get('cron'), + ServiceRegister::getService(QueueService::class), + ServiceRegister::getService(ConnectionSettingsRepository::class) + ); + $updater->update(); + + $this->installStoredPaymentUmbrella(); $context->scheduleClearCache(InstallContext::CACHE_LIST_FRONTEND); + $this->migrateLegacySchema(); parent::update($context); } + public function deactivate(DeactivateContext $context): void + { + /** @var PaymentMethodService $paymentMethodService */ + $paymentMethodService = ServiceRegister::getService(ShopPaymentService::class); + $paymentMethodService->deletePaymentMethodsForAllStores(); + $this->installStoredPaymentUmbrella(false); + + $context->scheduleClearCache(InstallContext::CACHE_LIST_ALL); + } + + public function activate(ActivateContext $context): void + { + $this->initServices(); + /** @var PaymentMethodService $paymentMethodService */ + $paymentMethodService = ServiceRegister::getService(ShopPaymentService::class); + $paymentMethodService->enableAllPaymentMethods(); + $this->installStoredPaymentUmbrella(); + + $context->scheduleClearCache(InstallContext::CACHE_LIST_ALL); + } + /** - * @throws \Exception + * Remove widget and remove database schema. + * + * @param Plugin\Context\UninstallContext $uninstallContext + * + * @throws Exception + * @throws NotFoundExceptionInterface + * @throws ContainerExceptionInterface */ - public function uninstall(UninstallContext $context): void + public function uninstall(Plugin\Context\UninstallContext $uninstallContext) { - if (!$context->keepUserData()) { - $this->uninstallAttributes($context); + parent::uninstall($uninstallContext); + $this->initServices(); + + if ($uninstallContext->keepUserData()) { + /** @var PaymentMethodService $paymentService */ + $paymentService = ServiceRegister::getService(ShopPaymentService::class); + $paymentService->deletePaymentMethodsForAllStores(); + $this->installStoredPaymentUmbrella(false); + + return; + } - $tool = new SchemaTool($this->container->get('models')); - $classes = $this->getModelMetaData(); - $tool->dropSchema($classes); + $uninstallService = new UninstallService( + new StoreService( + new StoreRepository(Shopware()->Models()->getRepository(Shop::class)), + new OrderRepository(Shopware()->Models()->getRepository(Order::class)), + RepositoryRegistry::getRepository(ConnectionSettings::getClassName()) + ) + ); + try { + $uninstallService->uninstall(); + } catch (Exception $exception) { + $this->container->get('corelogger')->warning($exception->getMessage()); } - if ($context->getPlugin()->getActive()) { - $context->scheduleClearCache(InstallContext::CACHE_LIST_ALL); + $this->installStoredPaymentUmbrella(false); + + $this->removeSchema(); + } + + private function loadServices(ContainerBuilder $container): void + { + $loader = new GlobFileLoader($container, $fileLocator = new FileLocator()); + $loader->setResolver(new LoaderResolver([new XmlFileLoader($container, $fileLocator)])); + + $loader->load(__DIR__ . '/Resources/services/*.xml'); + + $versionCheck = $container->get('adyen_payment.components.shopware_version_check'); + if ($versionCheck && $versionCheck->isHigherThanShopwareVersion('v5.6.2')) { + $loader->load(__DIR__ . '/Resources/services/version/563/*.xml'); } } - public function deactivate(DeactivateContext $context): void + /** + * Creates/updates database tables on base of doctrine models + */ + private function updateSchema() { - $context->scheduleClearCache(InstallContext::CACHE_LIST_ALL); + $tool = new SchemaTool($this->container->get('models')); + + $tool->updateSchema($this->getModelMetaData(), true); } - public function activate(ActivateContext $context): void + private function removeSchema(): void { - $this->installStoredPaymentUmbrella($context); - $context->scheduleClearCache(InstallContext::CACHE_LIST_ALL); + $tool = new SchemaTool($this->container->get('models')); + + $tool->dropSchema($this->getModelMetaData()); + $this->removeLegacySchema(); } - /** - * @throws \Exception - */ - private function uninstallAttributes(UninstallContext $uninstallContext): void + private function removeLegacySchema(): void { - $crudService = $this->container->get('shopware_attribute.crud_service'); - $crudService->delete('s_core_paymentmeans_attributes', self::ADYEN_CODE); + $sql = 'DROP TABLE IF EXISTS `s_plugin_adyen_order_notification`; + DROP TABLE IF EXISTS `s_plugin_adyen_order_payment_info`; + DROP TABLE IF EXISTS `s_plugin_adyen_order_refund`; + DROP TABLE IF EXISTS `s_plugin_adyen_text_notification`; + DROP TABLE IF EXISTS `s_plugin_adyen_payment_recurring_payment_token`;'; - $this->rebuildAttributeModels(); + $this->container->get('dbal_connection')->exec($sql); } - /** - * @throws \Exception - */ - private function installAttributes(): void + private function migrateLegacySchema() { - $crudService = $this->container->get('shopware_attribute.crud_service'); - $crudService->update( - 's_core_paymentmeans_attributes', - self::ADYEN_CODE, - TypeMapping::TYPE_STRING, - [ - 'displayInBackend' => true, - 'readonly' => true, - 'label' => 'Adyen payment type', - ] - ); + $sql = 'DROP TABLE IF EXISTS `s_plugin_adyen_order_payment_info`; + DROP TABLE IF EXISTS `s_plugin_adyen_order_refund`; + DROP TABLE IF EXISTS `s_plugin_adyen_payment_recurring_payment_token`;'; - $this->rebuildAttributeModels(); + $this->container->get('dbal_connection')->exec($sql); } private function getModelMetaData(): array @@ -179,75 +244,71 @@ private function getModelMetaData(): array $entityManager = $this->container->get('models'); return [ - $entityManager->getClassMetadata(Notification::class), - $entityManager->getClassMetadata(PaymentInfo::class), - $entityManager->getClassMetadata(Refund::class), - $entityManager->getClassMetadata(TextNotification::class), + $entityManager->getClassMetadata(AdyenEntity::class), + $entityManager->getClassMetadata(NotificationsEntity::class), + $entityManager->getClassMetadata(QueueEntity::class), + $entityManager->getClassMetadata(TransactionLogEntity::class), $entityManager->getClassMetadata(UserPreference::class), - $entityManager->getClassMetadata(RecurringPaymentToken::class), ]; } - private function rebuildAttributeModels(): void + private function installStoredPaymentUmbrella($isActive = true): void { - $metaDataCache = $this->container->get('models')->getConfiguration()->getMetadataCacheImpl(); - if ($metaDataCache) { - $metaDataCache->deleteAll(); - } - - $this->container->get('models')->generateAttributeModels( - ['s_user_attributes', 's_core_paymentmeans_attributes'] + /** @var PaymentInstaller $installer */ + $installer = $this->container->get('shopware.plugin_payment_installer'); + $installer->createOrUpdate( + self::NAME, + [ + 'name' => self::STORED_PAYMENT_UMBRELLA_NAME, + 'description' => 'Adyen Stored Payment Method', + 'additionalDescription' => 'Adyen Stored Payment Method', + 'active' => $isActive, + 'esdActive' => $isActive, + 'hide' => true, + 'action' => 'AdyenPaymentProcess', + 'source' => self::PAYMENT_METHOD_SOURCE, + ] ); } - private function installStoredPaymentUmbrella(InstallContext $context): void + private function initServices(): void { - $database = $this->container->get('db'); - /** @var ModelManager $modelsManager */ - $modelsManager = $this->container->get('shopware.model_manager'); - - $models = $this->container->get('models'); - $shops = $models->getRepository(Shop::class)->findAll(); - - $payment = new Payment(); - $payment->setActive(true); - $payment->setEsdActive(true); - $payment->setName(self::ADYEN_STORED_PAYMENT_UMBRELLA_CODE); - $payment->setSource(SourceType::adyen()->getType()); - $payment->setHide(true); - $payment->setPluginId($context->getPlugin()->getId()); - $payment->setDescription($description = 'Adyen Stored Payment Method'); - $payment->setAdditionalDescription($description); - $payment->setShops($shops); - - $paymentInDb = $database->fetchRow( - 'SELECT `id`, `active` FROM `s_core_paymentmeans` WHERE `name` = :name', - [':name' => self::ADYEN_STORED_PAYMENT_UMBRELLA_CODE] + Bootstrap::init(); + + ServiceRegister::registerService( + ShopPaymentService::class, + static function () { + return new PaymentMethodService( + ServiceRegister::getService(StoreContext::class), + Shopware()->Models(), + new StoreRepository(Shopware()->Models()->getRepository(Shop::class)), + Shopware()->Container()->get('shopware.plugin_payment_installer'), + ServiceRegister::getService(FileService::class), + ServiceRegister::getService(PaymentMethodConfigRepository::class), + ServiceRegister::getService(StoreServiceInterface::class) + ); + } ); - $paymentId = $paymentInDb['id'] ?? null; - - if (null === $paymentId) { - $modelsManager->persist($payment); - $modelsManager->flush($payment); - } - - if (null !== $paymentId && !$paymentInDb['active']) { - $database->update( - 's_core_paymentmeans', - ['active' => true, 'esdactive' => true], - ['id = ?' => $paymentId] - ); - } - } + ServiceRegister::registerService( + StoreServiceInterface::class, + static function () { + return new StoreService( + new StoreRepository(Shopware()->Models()->getRepository(Shop::class)), + new OrderRepository(Shopware()->Models()->getRepository(Order::class)), + RepositoryRegistry::getRepository(ConnectionSettings::getClassName()) + ); + } + ); - private function activatePaymentsForEsd(): void - { - $database = $this->container->get('db'); - $database->update( - 's_core_paymentmeans', - ['esdactive' => true], - ['source = ?' => SourceType::adyen()->getType()] + ServiceRegister::registerService( + OrderServiceInterface::class, + static function () { + return new OrderService( + new OrderRepository(Shopware()->Models()->getRepository(Order::class)), + Shopware()->Modules() + ); + } ); } } @@ -255,4 +316,3 @@ private function activatePaymentsForEsd(): void if (AdyenPayment::isPackage()) { require_once AdyenPayment::getPackageVendorAutoload(); } -//phpcs:enable PSR1.Files.SideEffects diff --git a/Applepay/Exception/ArchiveNotAccessibleException.php b/Applepay/Exception/ArchiveNotAccessibleException.php deleted file mode 100644 index eeb2f613..00000000 --- a/Applepay/Exception/ArchiveNotAccessibleException.php +++ /dev/null @@ -1,13 +0,0 @@ -getCode(), - $exception - ); - } - - public static function fromResponse(Response $response): self - { - return new self( - 'Could not download Adyen ApplePay merchant id domain association file. The returned download response ' . - 'is with status ' . $response->getStatusCode(), - $response->getStatusCode() - ); - } -} diff --git a/Applepay/Exception/FileNotWrittenException.php b/Applepay/Exception/FileNotWrittenException.php deleted file mode 100644 index 31d36cf8..00000000 --- a/Applepay/Exception/FileNotWrittenException.php +++ /dev/null @@ -1,13 +0,0 @@ -|InstallResult[] - */ - public function __invoke(): \Generator; -} diff --git a/Applepay/MerchantAssociation/InstallHandler/ArchiveInstaller.php b/Applepay/MerchantAssociation/InstallHandler/ArchiveInstaller.php deleted file mode 100755 index 103085ec..00000000 --- a/Applepay/MerchantAssociation/InstallHandler/ArchiveInstaller.php +++ /dev/null @@ -1,53 +0,0 @@ -archivePath = $archivePath; - $this->storageFilesystem = $storageFilesystem; - } - - public function isFallback(): bool - { - return true; - } - - public function install(): void - { - $archive = new \ZipArchive(); - $result = $archive->open($this->archivePath); - if (true !== $result) { - throw ArchiveNotAccessibleException::fromErrorCode((int) $result, $this->archivePath); - } - - $this->storageFilesystem->resetStorage(); - $extracted = $archive->extractTo( - dirname($this->storageFilesystem->storagePath()), - [self::ARCHIVED_FILE_NAME] - ); - if (!$extracted) { - $archive->close(); - - throw ArchiveNotExtractedException::fromPaths($this->archivePath, $this->storageFilesystem->storagePath()); - } - $this->storageFilesystem->updateFilePermissions(); - $archive->close(); - } -} diff --git a/Applepay/MerchantAssociation/InstallHandler/DownloadInstaller.php b/Applepay/MerchantAssociation/InstallHandler/DownloadInstaller.php deleted file mode 100755 index 8930ee64..00000000 --- a/Applepay/MerchantAssociation/InstallHandler/DownloadInstaller.php +++ /dev/null @@ -1,71 +0,0 @@ -client = $client; - $this->storageFilesystem = $storageFilesystem; - $this->logger = $logger; - $this->baseUri = $baseUri; - } - - public function isFallback(): bool - { - return false; - } - - public function install(): void - { - try { - $this->storageFilesystem->resetStorage(); - - $url = $this->baseUri . '/.well-known/apple-developer-merchantid-domain-association'; - - $this->logger->info("Sending request:\n GET $url"); - $response = $this->client->get($url); - - $this->logger->info( - "Received response:\n".$response->getStatusCode(), - ['response' => $response] - ); - - if ((int)$response->getStatusCode() > 400) { - $this->logger->error('Error completing request', ['response' => $response]); - throw FileNotDownloadedException::fromResponse($response); - } - - $this->storageFilesystem->createFile($this->storageFilesystem->storagePath(), $response->getBody()); - $this->storageFilesystem->updateFilePermissions(); - } catch (RequestException $exception) { - throw FileNotDownloadedException::fromException($exception); - } - } -} diff --git a/Applepay/MerchantAssociation/InstallHandler/Installer.php b/Applepay/MerchantAssociation/InstallHandler/Installer.php deleted file mode 100644 index 3f0a96fb..00000000 --- a/Applepay/MerchantAssociation/InstallHandler/Installer.php +++ /dev/null @@ -1,12 +0,0 @@ -installers = $installers; - } - - /** - * {@inheritdoc} - */ - public function __invoke(): \Generator - { - foreach ($this->installers as $installer) { - try { - $installer->install(); - - yield InstallResult::fromSuccess() - ->withFallback($installer->isFallback()); - - return; - } catch (\Exception $exception) { - yield InstallResult::fromException($exception) - ->withFallback($installer->isFallback()); - } - } - } -} diff --git a/Applepay/MerchantAssociation/Model/InstallResult.php b/Applepay/MerchantAssociation/Model/InstallResult.php deleted file mode 100755 index caef285b..00000000 --- a/Applepay/MerchantAssociation/Model/InstallResult.php +++ /dev/null @@ -1,60 +0,0 @@ -success = $success; - $this->fallback = false; - $this->exception = null; - } - - public static function fromSuccess(): self - { - return new self(true); - } - - public static function fromException(\Exception $exception): self - { - $new = new self(false); - $new->exception = $exception; - - return $new; - } - - public function withFallback(bool $fallback): self - { - $new = clone $this; - $new->fallback = $fallback; - - return $new; - } - - public function fallback(): bool - { - return $this->fallback; - } - - public function success(): bool - { - return $this->success; - } - - public function exception(): ?\Exception - { - return $this->exception; - } -} diff --git a/Applepay/MerchantAssociation/RewriteUrl/UrlWriter.php b/Applepay/MerchantAssociation/RewriteUrl/UrlWriter.php deleted file mode 100644 index a7e07461..00000000 --- a/Applepay/MerchantAssociation/RewriteUrl/UrlWriter.php +++ /dev/null @@ -1,10 +0,0 @@ -filesystem = $filesystem; - $this->storagePath = $storagePath; - } - - public function storageFileExists(): bool - { - return $this->filesystem->exists($this->storagePath); - } - - public function storagePath(): string - { - return $this->storagePath; - } - - public function resetStorage(): void - { - $this->createDirectory(); - $this->removeFile(); - } - - public function updateFilePermissions(): void - { - if (!$this->filesystem->exists($this->storagePath)) { - return; - } - - $this->filesystem->chmod($this->storagePath, 0664); - } - - public function createDirectory(): void - { - $directory = dirname($this->storagePath); - if ($this->filesystem->exists($directory)) { - return; - } - - $this->filesystem->mkdir($directory); - $this->filesystem->chmod($directory, 0764); - } - - public function createFile($fileName, $content) - { - $this->filesystem->dumpFile($fileName, $content); - } - - private function removeFile(): void - { - if (!$this->filesystem->exists($this->storagePath)) { - return; - } - - $this->filesystem->remove($this->storagePath); - } -} diff --git a/Applepay/MerchantAssociation/TraceableFileInstaller.php b/Applepay/MerchantAssociation/TraceableFileInstaller.php deleted file mode 100644 index a2a9a69c..00000000 --- a/Applepay/MerchantAssociation/TraceableFileInstaller.php +++ /dev/null @@ -1,43 +0,0 @@ -installer = $installer; - $this->logger = $logger; - } - - /** - * {@inheritdoc} - */ - public function __invoke(): \Generator - { - $installers = ($this->installer)(); - foreach ($installers as $installResult) { - if ($installResult->success()) { - yield $installResult; - - continue; - } - - if ($installResult->exception() instanceof \Exception) { - $this->logger->error($installResult->exception()->getMessage()); - } - - yield $installResult; - } - } -} diff --git a/Basket/Restore/DetailAttributesRestorer.php b/Basket/Restore/DetailAttributesRestorer.php deleted file mode 100755 index b1a9abe6..00000000 --- a/Basket/Restore/DetailAttributesRestorer.php +++ /dev/null @@ -1,83 +0,0 @@ -modelManager = $modelManager; - $this->basketDetailAttributes = $basketDetailAttributes; - $this->orderDetailAttributes = $orderDetailAttributes; - } - - /** - * Copies attributes from the supplied order detail article ID to a basket detail ID. - * - * @throws Zend_Db_Adapter_Exception - */ - public function restore(int $orderDetailId, int $basketDetailId): void - { - $orderDetailAttributes = $this->orderDetailAttributes->fetchByOrderDetailId((string) $orderDetailId); - if (!count($orderDetailAttributes)) { - return; - } - - $attributes = $this->provideFillableAttributeColumns(); - - if (!count($attributes)) { - return; - } - - // Updating the basket attributes with the order attribute values - $attributeValues = []; - foreach ($attributes as $attribute) { - if (!empty($orderDetailAttributes[$attribute])) { - $attributeValues[$attribute] = $orderDetailAttributes[$attribute]; - } - } - - if (!count($attributeValues)) { - return; - } - - $this->basketDetailAttributes->hasBasketDetails($basketDetailId) - ? $this->basketDetailAttributes->update($basketDetailId, $attributeValues) - : $this->basketDetailAttributes->insert($basketDetailId, $attributeValues); - } - - private function provideFillableAttributeColumns(): array - { - // Getting order attributes columns to possibly fill - $basketAttributesColumns = $this->modelManager - ->getClassMetadata('Shopware\Models\Attribute\OrderDetail') - ->getColumnNames(); - - // These columns shouldn't be translated from the order detail to the basket detail - $columnsToSkip = [ - 'id', - 'detailID', - ]; - - return array_diff($basketAttributesColumns, $columnsToSkip); - } -} diff --git a/Bootstrap/Bootstrap.php b/Bootstrap/Bootstrap.php new file mode 100644 index 00000000..1df08d32 --- /dev/null +++ b/Bootstrap/Bootstrap.php @@ -0,0 +1,352 @@ +Container()->get(LoggerService::class); + } + ); + + ServiceRegister::registerService( + Configuration::CLASS_NAME, + static function () { + return ConfigurationService::getInstance(); + } + ); + + ServiceRegister::registerService( + HttpClient::CLASS_NAME, + static function () { + return new CurlHttpClient(); + } + ); + + ServiceRegister::registerService( + FileService::class, + static function () { + return new FileService(Shopware()->Container()->get('shopware_media.media_service')); + } + ); + + ServiceRegister::registerService( + OrderServiceInterface::class, + static function () { + return Shopware()->Container()->get(OrderService::class); + } + ); + + ServiceRegister::registerService( + ShopPaymentService::class, + static function () { + return new PaymentMethodService( + ServiceRegister::getService(StoreContext::class), + Shopware()->Models(), + Shopware()->Container()->get(StoreRepository::class), + Shopware()->Container()->get('shopware.plugin_payment_installer'), + ServiceRegister::getService(FileService::class), + ServiceRegister::getService(PaymentMethodConfigRepository::class), + ServiceRegister::getService(StoreServiceInterface::class) + ); + } + ); + + ServiceRegister::registerService( + StoreServiceInterface::class, + static function () { + return new StoreService( + Shopware()->Container()->get(StoreRepository::class), + Shopware()->Container()->get(OrderRepository::class), + RepositoryRegistry::getRepository(ConnectionSettings::getClassName()) + ); + } + ); + + ServiceRegister::registerService( + WebhookUrlService::class, + static function () { + return new \AdyenPayment\Components\Integration\WebhookUrlService( + ServiceRegister::getService(StoreContext::class) + ); + } + ); + + // Override WebhookHandler to swap old plugin merchant reference to a new one (old order number -> new order temporary id) + ServiceRegister::registerService( + WebhookHandler::class, + new SingleInstance(static function () { + return new LegacyMerchantReferenceNormalizationWebhookHandler( + Shopware()->Container()->get(OrderRepository::class), + ServiceRegister::getService(WebhookSynchronizationServiceInterface::class), + ServiceRegister::getService(QueueService::class) + ); + }) + ); + + ServiceRegister::registerService( + BaseTransactionDetailsServiceAlias::class, + static function () { + return new TransactionDetailsService( + ServiceRegister::getService(ConnectionService::class), + ServiceRegister::getService(TransactionHistoryService::class) + ); + } + ); + + ServiceRegister::registerService( + LastOpenTimeService::class, + static function () { + return new LastOpenTimeService( + RepositoryRegistry::getRepository(LastOpenTime::getClassName()) + ); + } + ); + + ServiceRegister::registerService( + SystemInfoServiceInterface::class, + static function () { + return new SystemInfoService( + ServiceRegister::getService(Configuration::CLASS_NAME), + Shopware()->Container()->get(StoreRepository::class)); + } + ); + + ServiceRegister::registerService( + UninstallService::class, + static function () { + return new UninstallService( + ServiceRegister::getService(StoreServiceInterface::class) + ); + } + ); + } + + public static function initPaymentRequestProcessors(): void + { + parent::initPaymentRequestProcessors(); + + ServiceRegister::registerService( + L2L3DataProcessor::class, + static function () { + /** @noinspection NullPointerExceptionInspection */ + return new IntegrationL2L3DataProcessor( + ServiceRegister::getService(PaymentService::class), + Shopware()->Container()->get('models')->getRepository(Country::class) + ); + } + ); + + ServiceRegister::registerService( + BasketItemsProcessor::class, + static function () { + /** @noinspection NullPointerExceptionInspection */ + return new \AdyenPayment\Components\Integration\PaymentProcessors\BasketItemsProcessor( + ServiceRegister::getService(GeneralSettingsService::class), + Shopware()->Container()->get('models')->getRepository(Article::class) + ); + } + ); + + ServiceRegister::registerService( + AddressProcessor::class, + static function () { + /** @noinspection NullPointerExceptionInspection */ + return new IntegrationAddressProcessor( + Shopware()->Container()->get('models')->getRepository(Country::class) + ); + } + ); + + ServiceRegister::registerService( + BirthdayProcessor::class, + static function () { + return new IntegrationBirthdayProcessor(); + } + ); + + ServiceRegister::registerService( + LineItemsProcessor::class, + static function () { + /** @noinspection NullPointerExceptionInspection */ + return new IntegrationLineItemsProcessor( + Shopware()->Container()->get('models')->getRepository(Article::class) + ); + } + ); + + ServiceRegister::registerService( + ShopperEmailProcessor::class, + static function () { + return new IntegrationShopperEmailProcessor(); + } + ); + + ServiceRegister::registerService( + ShopperNameProcessor::class, + static function () { + return new IntegrationShopperNameProcessor(); + } + ); + + ServiceRegister::registerService( + ShopperReferenceProcessor::class, + static function () { + return new IntegrationShopperReferenceProcessor(); + } + ); + + ServiceRegister::registerService( + \Adyen\Core\BusinessLogic\Domain\Integration\Processors\ShopperLocaleProcessor::class, + static function () { + return new ShopperLocaleProcessor(); + } + ); + + ServiceRegister::registerService( + VersionService::class, + static function () { + return new \AdyenPayment\Components\Integration\VersionService(); + } + ); + } + + /** + * @inheritDoc + * + * @throws RepositoryClassException + */ + protected static function initRepositories(): void + { + parent::initRepositories(); + + RepositoryRegistry::registerRepository(Process::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(ConfigEntity::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(QueueItem::getClassName(), QueueItemRepository::getClassName()); + RepositoryRegistry::registerRepository(LogData::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository( + ConnectionSettings::getClassName(), + BaseRepositoryWithConditionalDeletes::getClassName() + ); + RepositoryRegistry::registerRepository(AdyenGivingSettings::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(GeneralSettings::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(WebhookConfig::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(PaymentMethod::getClassName(), PaymentMethodRepository::getClassName()); + RepositoryRegistry::registerRepository(OrderStatusMapping::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository( + TransactionHistory::getClassName(), + TransactionLogRepository::getClassName() + ); + RepositoryRegistry::registerRepository( + TransactionLog::getClassName(), + TransactionLogRepository::getClassName() + ); + RepositoryRegistry::registerRepository(DonationsData::getClassName(), AdyenGivingRepository::getClassName()); + RepositoryRegistry::registerRepository(Notification::getClassName(), NotificationsRepository::getClassName()); + RepositoryRegistry::registerRepository(LastOpenTime::getClassName(), BaseRepository::getClassName()); + RepositoryRegistry::registerRepository(DisconnectTime::getClassName(), BaseRepository::getClassName()); + } +} diff --git a/Collection/Payment/PaymentMeanCollection.php b/Collection/Payment/PaymentMeanCollection.php deleted file mode 100644 index fc78a25d..00000000 --- a/Collection/Payment/PaymentMeanCollection.php +++ /dev/null @@ -1,134 +0,0 @@ -paymentMeans = $paymentMeans; - } - - public static function createFromShopwareArray(array $paymentMeans): self - { - return new self(...array_map( - static function(array $paymentMean): PaymentMean { - return PaymentMean::createFromShopwareArray($paymentMean); - }, - $paymentMeans - )); - } - - /** - * @return \Generator - */ - public function getIterator(): \Traversable - { - yield from $this->paymentMeans; - } - - public function count(): int - { - return \count($this->paymentMeans); - } - - public function map(callable $callable): array - { - return array_filter(array_map($callable, $this->paymentMeans)); - } - - public function filter(callable $filter): self - { - return new self(...array_filter($this->paymentMeans, $filter)); - } - - public function filterBySource(SourceType $source): self - { - return $this->filter( - static function(PaymentMean $paymentMean) use ($source): bool { - return $source->equals($paymentMean->getSource()); - } - ); - } - - public function filterExcludeAdyen(): self - { - return $this->filter( - static function(PaymentMean $paymentMean): bool { - return !$paymentMean->getSource()->equals(SourceType::adyen()); - } - ); - } - - public function filterExcludeHidden(): self - { - return new self(...array_filter( - $this->paymentMeans, - static function(PaymentMean $paymentMean): bool { - return !$paymentMean->isHidden(); - } - )); - } - - public function fetchStoredMethodUmbrellaPaymentMean(): ?PaymentMean - { - foreach ($this->paymentMeans as $paymentMean) { - if (AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE === $paymentMean->getValue('name')) { - return $paymentMean; - } - } - - return null; - } - - public function fetchById(int $paymentId): ?PaymentMean - { - foreach ($this->paymentMeans as $paymentMean) { - if ($paymentMean->getId() === $paymentId) { - return $paymentMean; - } - } - - return null; - } - - public function fetchByStoredMethodId(string $storedMethodId): ?PaymentMean - { - foreach ($this->paymentMeans as $paymentMean) { - if ($paymentMean->getValue('stored_method_id') === $storedMethodId) { - return $paymentMean; - } - } - - return null; - } - - public function fetchByUmbrellaStoredMethodId(string $storedMethodId): ?PaymentMean - { - foreach ($this->paymentMeans as $paymentMean) { - if ($paymentMean->getValue('stored_method_umbrella_id') === $storedMethodId) { - return $paymentMean; - } - } - - return null; - } - - public function toShopwareArray(): array - { - return array_reduce($this->paymentMeans, static function(array $payload, PaymentMean $paymentMean): array { - $payload[$paymentMean->getId()] = $paymentMean->getRaw(); - - return $payload; - }, []); - } -} diff --git a/Collection/Payment/PaymentMethodCollection.php b/Collection/Payment/PaymentMethodCollection.php deleted file mode 100755 index de9b63f7..00000000 --- a/Collection/Payment/PaymentMethodCollection.php +++ /dev/null @@ -1,132 +0,0 @@ -paymentMethods = $paymentMethods; - } - - /** - * @return \Generator - */ - public function getIterator(): \Traversable - { - yield from $this->paymentMethods; - } - - public function count(): int - { - return count($this->paymentMethods); - } - - public static function fromAdyenMethods(array $adyenMethods): self - { - return new self( - ...array_map( - static function(array $paymentMethod) { - return PaymentMethod::fromRaw($paymentMethod); - }, - $adyenMethods['paymentMethods'] ?? [] - ), - ...array_map( - static function(array $paymentMethod) { - return PaymentMethod::fromRaw($paymentMethod); - }, - $adyenMethods['storedPaymentMethods'] ?? [] - ) - ); - } - - public function withImportLocale(PaymentMethodCollection $importLocalePaymentMethods): self - { - $importPaymentMethods = iterator_to_array($importLocalePaymentMethods); - - return new self(...array_map( - static function(int $index, PaymentMethod $paymentMethod) use ($importPaymentMethods): PaymentMethod { - /** @var PaymentMethod $importMethod */ - $importLocaleMethod = $importPaymentMethods[$index] ?? null; - if (!$importLocaleMethod) { - return $paymentMethod; - } - - return $paymentMethod->withCode($importLocaleMethod->name()); - }, - array_keys($this->paymentMethods), - array_values($this->paymentMethods) - )); - } - - public function map(callable $callback): array - { - return array_map($callback, $this->paymentMethods); - } - - public function mapToRaw(): array - { - return array_map( - static function(PaymentMethod $paymentMethod) { - return $paymentMethod->rawData(); - }, - $this->paymentMethods - ); - } - - /** - * $identifierOrStoredId is the Adyen "unique identifier" or Adyen "stored payment id" - * NOT the Shopware id. - */ - private function fetchByIdentifierOrStoredId(string $identifierOrStoredId): ?PaymentMethod - { - foreach ($this->paymentMethods as $paymentMethod) { - if ($paymentMethod->getStoredPaymentMethodId() === $identifierOrStoredId) { - return $paymentMethod; - } - - if ($paymentMethod->code() === $identifierOrStoredId) { - return $paymentMethod; - } - } - - return null; - } - - public function fetchByPaymentMean(PaymentMean $paymentMean): ?PaymentMethod - { - if ('' === $paymentMean->getAdyenStoredMethodId() && '' === $paymentMean->getAdyenCode()) { - return null; - } - - if ($paymentMean->getAdyenStoredMethodId()) { - return $this->fetchByIdentifierOrStoredId($paymentMean->getAdyenStoredMethodId()); - } - - return $this->fetchByIdentifierOrStoredId($paymentMean->getAdyenCode()); - } - - public function filter(callable $filter): self - { - return new self(...array_filter($this->paymentMethods, $filter)); - } - - public function filterByPaymentType(PaymentGroup $group): self - { - return new self(...array_filter( - $this->paymentMethods, - static function(PaymentMethod $paymentMethod) use ($group) { - return $paymentMethod->group()->equals($group); - } - )); - } -} diff --git a/Commands/ImportPaymentMethodsCommand.php b/Commands/ImportPaymentMethodsCommand.php deleted file mode 100755 index c1e9ad0b..00000000 --- a/Commands/ImportPaymentMethodsCommand.php +++ /dev/null @@ -1,58 +0,0 @@ -importer = $importer; - parent::__construct(); - } - - protected function configure(): void - { - $this->setDescription('Import Adyen payment methods for all stores'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $total = $success = 0; - $io = new SymfonyStyle($input, $output); - - foreach ($this->importer->importAll() as $result) { - ++$total; - - if (!$result->isSuccess()) { - $io->warning(sprintf('Could not import payment method %s for store %s, message: %s.', - $result->getPaymentMethod() ? $result->getPaymentMethod()->adyenType()->type() : 'n/a', - $result->getShop()->getName(), - $result->getException() ? $result->getException()->getMessage() : 'n/a' - )); - - continue; - } - - ++$success; - $io->text(sprintf('Imported payment method %s for store %s', - $result->getPaymentMethod() ? $result->getPaymentMethod()->adyenType()->type() : 'n/a', - $result->getShop()->getName() - )); - } - - $io->success(sprintf('Successfully imported %s of %s Payment Method(s)', $success, $total)); - - return 0; - } -} diff --git a/Commands/ProcessNotifications.php b/Commands/ProcessNotifications.php deleted file mode 100755 index f7ddc7c6..00000000 --- a/Commands/ProcessNotifications.php +++ /dev/null @@ -1,86 +0,0 @@ -loader = $fifoNotificationLoader; - $this->notificationProcessor = $notificationProcessor; - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setDescription('Process notifications in queue') - ->addOption( - 'number', - 'no', - InputOption::VALUE_OPTIONAL, - 'Number of notifications to process. Defaults to '. - ProcessNotificationsCronjob::NUMBER_OF_NOTIFICATIONS_TO_HANDLE.'.', - ProcessNotificationsCronjob::NUMBER_OF_NOTIFICATIONS_TO_HANDLE - ); - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Enlight_Event_Exception - */ - protected function execute(InputInterface $input, OutputInterface $output): void - { - $number = $input->getOption('number'); - - $feedback = $this->notificationProcessor->processMany( - $this->loader->load((int) $number) - ); - - $totalCount = 0; - $successCount = 0; - - /** @var NotificationProcessorFeedback $item */ - foreach ($feedback as $item) { - ++$totalCount; - $successCount += (int) $item->isSuccess(); - $output->writeln($item->getNotification()->getId().': '.$item->getMessage()); - } - - $output->writeln(sprintf( - 'Imported %d items. %s OK, %s FAILED', - $totalCount, - $successCount, - $totalCount - $successCount - )); - } -} diff --git a/Components/Adyen/Builder/PaymentMethodOptionsBuilder.php b/Components/Adyen/Builder/PaymentMethodOptionsBuilder.php deleted file mode 100644 index df5e1225..00000000 --- a/Components/Adyen/Builder/PaymentMethodOptionsBuilder.php +++ /dev/null @@ -1,37 +0,0 @@ -Session() - ->sOrderVariables['sUserData']['additional']['country']['countryiso'] ?? '' - ); - if (!$countryCode) { - $countryCode = (string) ( - Shopware()->Modules()->Admin() - ->sGetUserData()['additional']['country']['countryiso'] - ); - } - - $currencyName = Shopware()->Session()->sOrderVariables['sBasket']['sCurrencyName'] ?? ''; - $currency = $currencyName ?: Shopware()->Shop()->getCurrency()->getCurrency(); - - $value = (float) ( - Shopware()->Session()->sOrderVariables['sBasket']['AmountNumeric'] - ?? Shopware()->Modules()->Basket()->sGetAmount()['totalAmount'] - ?? 1.0 - ); - - return [ - 'countryCode' => $countryCode, - 'currency' => $currency, - 'value' => $value, - ]; - } -} diff --git a/Components/Adyen/Builder/PaymentMethodOptionsBuilderInterface.php b/Components/Adyen/Builder/PaymentMethodOptionsBuilderInterface.php deleted file mode 100644 index 47452008..00000000 --- a/Components/Adyen/Builder/PaymentMethodOptionsBuilderInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -paymentMethodService = $paymentMethodService; - $this->paymentMethodOptionsBuilder = $paymentMethodOptionsBuilder; - $this->paymentMethodEnricher = $paymentMethodEnricher; - } - - public function __invoke(PaymentMeanCollection $paymentMeans): PaymentMeanCollection - { - $paymentMethodOptions = ($this->paymentMethodOptionsBuilder)(); - if (0.0 === $paymentMethodOptions['value']) { - return $paymentMeans->filterExcludeAdyen(); - } - - $adyenPaymentMethods = $this->paymentMethodService->getPaymentMethods( - $paymentMethodOptions['countryCode'], - $paymentMethodOptions['currency'], - $paymentMethodOptions['value'] - ); - - $umbrellaPaymentMean = $paymentMeans->fetchStoredMethodUmbrellaPaymentMean(); - if (null === $umbrellaPaymentMean) { - throw UmbrellaPaymentMeanNotFoundException::missingUmbrellaPaymentMean(); - } - - return new PaymentMeanCollection( - ...$this->provideEnrichedPaymentMeans($paymentMeans, $adyenPaymentMethods), - ...$this->provideEnrichedStoredPaymentMeans($adyenPaymentMethods, $umbrellaPaymentMean) - ); - } - - private function provideEnrichedPaymentMeans( - PaymentMeanCollection $paymentMeans, - PaymentMethodCollection $adyenPaymentMethods - ): array { - $enricher = $this->paymentMethodEnricher; - - return $paymentMeans - ->filterExcludeHidden() - ->map(static function(PaymentMean $paymentMean) use ($adyenPaymentMethods, $enricher): ?PaymentMean { - if (!$paymentMean->getSource()->equals(SourceType::adyen())) { - return $paymentMean; - } - - $paymentMethod = $adyenPaymentMethods->fetchByPaymentMean($paymentMean); - if (null === $paymentMethod) { - return null; - } - - return PaymentMean::createFromShopwareArray(($enricher)($paymentMean->getRaw(), $paymentMethod)); - }); - } - - private function provideEnrichedStoredPaymentMeans( - PaymentMethodCollection $adyenPaymentMethods, - PaymentMean $umbrellaPaymentMean - ): array { - $enricher = $this->paymentMethodEnricher; - $storedAdyenMethods = $adyenPaymentMethods->filterByPaymentType(PaymentGroup::stored()); - - return $storedAdyenMethods->map( - static function(PaymentMethod $paymentMethod) use ($umbrellaPaymentMean, $enricher): PaymentMean { - return PaymentMean::createFromShopwareArray( - ($enricher)($umbrellaPaymentMean->getRaw(), $paymentMethod) - ); - } - ); - } -} diff --git a/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderInterface.php b/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderInterface.php deleted file mode 100644 index 2ad862e8..00000000 --- a/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - 'card', - 'yandex_money' => 'yandex', - ]; - - public function provideByType(string $type): string - { - //Some payment method codes don't match the logo filename - $logoType = self::PM_LOGO_FILENAME[$type] ?? $type; - - return sprintf('https://checkoutshopper-live.adyen.com/checkoutshopper/images/logos/%s.svg', $logoType); - } -} diff --git a/Components/Adyen/PaymentMethod/ImageLogoProviderInterface.php b/Components/Adyen/PaymentMethod/ImageLogoProviderInterface.php deleted file mode 100644 index 57dd24f8..00000000 --- a/Components/Adyen/PaymentMethod/ImageLogoProviderInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -configuration = $configuration; - $this->adyenApiFactory = $adyenApiFactory; - $this->logger = $logger; - } - - public function __invoke(Shop $shop): PaymentMethodCollection - { - try { - $merchantAccount = $this->configuration->getMerchantAccount($shop); - $adyenClient = $this->adyenApiFactory->provide($shop); - $checkout = new Checkout($adyenClient); - - $paymentMethods = PaymentMethodCollection::fromAdyenMethods($checkout->paymentMethods([ - 'merchantAccount' => $merchantAccount, - 'shopperLocale' => PaymentMethodService::IMPORT_LOCALE, - ])); - - return $paymentMethods->withImportLocale($paymentMethods); - } catch (AdyenException $e) { - $this->logger->error($e->getMessage(), [ - 'merchantAccount' => $merchantAccount ?? 'n/a', - 'Shop' => $shop->getName(), - 'trace' => $e->getTraceAsString(), - ]); - } - - return new PaymentMethodCollection(); - } -} diff --git a/Components/Adyen/PaymentMethod/PaymentMethodsProviderInterface.php b/Components/Adyen/PaymentMethod/PaymentMethodsProviderInterface.php deleted file mode 100644 index df4acfe1..00000000 --- a/Components/Adyen/PaymentMethod/PaymentMethodsProviderInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -enrichedPaymentMeanProvider = $enrichedPaymentMeanProvider; - $this->connection = $connection; - } - - public function fromRequest(Enlight_Controller_Request_Request $request): ?PaymentMean - { - $registerPayment = $request->getParam('register', [])['payment'] ?? null; - if (null === $registerPayment) { - return null; - } - - $enrichedPaymentMeans = ($this->enrichedPaymentMeanProvider)( - PaymentMeanCollection::createFromShopwareArray($this->fetchUmbrellaMethod()) - ); - - return $enrichedPaymentMeans->fetchByUmbrellaStoredMethodId($registerPayment); - } - - private function fetchUmbrellaMethod(): array - { - $queryBuilder = $this->connection->createQueryBuilder(); - - return $queryBuilder->select('*') - ->from('s_core_paymentmeans') - ->where('name = :umbrellaMethodName') - ->setParameter(':umbrellaMethodName', AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE) - ->execute() - ->fetchAll(); - } -} diff --git a/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderInterface.php b/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderInterface.php deleted file mode 100644 index e7ade33a..00000000 --- a/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -enrichedPaymentMeanProvider = $enrichedPaymentMeanProvider; - $this->logger = $logger; - } - - /** - * @throws \Adyen\AdyenException - */ - public function __invoke(PaymentMeanCollection $paymentMeans): PaymentMeanCollection - { - try { - return ($this->enrichedPaymentMeanProvider)($paymentMeans); - } catch (\Exception $exception) { - $this->logger->critical($exception->getMessage(), ['exception' => $exception]); - } - - return new PaymentMeanCollection(); - } -} diff --git a/Components/Adyen/PaymentMethodService.php b/Components/Adyen/PaymentMethodService.php deleted file mode 100755 index b9d928ba..00000000 --- a/Components/Adyen/PaymentMethodService.php +++ /dev/null @@ -1,124 +0,0 @@ -apiClientMap = $apiClientMap; - $this->configuration = $configuration; - $this->logger = $logger; - $this->customerNumberProvider = $customerNumberProvider; - } - - public function getPaymentMethods( - ?string $countryCode = null, - ?string $currency = null, - ?float $value = null, - ?string $locale = null, - bool $cache = true - ): PaymentMethodCollection { - $cache = $cache && $this->configuration->isPaymentmethodsCacheEnabled(); - $cacheKey = $this->getCacheKey($countryCode ?? '', $currency ?? '', (string) ($value ?? '')); - if ($cache && isset($this->cache[$cacheKey])) { - return $this->cache[$cacheKey]; - } - - $locale = $locale ?: Shopware()->Shop()->getLocale()->getLocale(); - - $checkout = $this->getCheckout(); - $adyenCurrency = new Currency(); - - $requestParams = [ - 'merchantAccount' => $this->configuration->getMerchantAccount(), - 'countryCode' => $countryCode, - 'amount' => [ - 'currency' => $currency, - 'value' => $adyenCurrency->sanitize($value, $currency), - ], - 'channel' => Channel::WEB, - 'shopperLocale' => $locale, - 'shopperReference' => ($this->customerNumberProvider)(), - ]; - - try { - $paymentMethods = PaymentMethodCollection::fromAdyenMethods( - $checkout->paymentMethods($requestParams) - ); - - // get payment methods import locale (important for code) - $paymentMethods = self::IMPORT_LOCALE === $locale - ? $paymentMethods->withImportLocale($paymentMethods) - : $paymentMethods->withImportLocale( - PaymentMethodCollection::fromAdyenMethods($checkout->paymentMethods( - array_replace($requestParams, ['shopperLocale' => self::IMPORT_LOCALE]) - )) - ); - } catch (AdyenException $e) { - $this->logger->critical('Adyen Exception', [ - 'message' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'errorType' => $e->getErrorType(), - 'status' => $e->getStatus(), - ]); - - return new PaymentMethodCollection(); - } - - if ($cache) { - $this->cache[$cacheKey] = $paymentMethods; - } - - return $paymentMethods; - } - - private function getCacheKey(string ...$keys): string - { - return md5(implode(',', $keys)); - } - - public function getCheckout(): Checkout - { - return new Checkout( - $this->apiClientMap->lookup( - Shopware()->Shop() - ) - ); - } -} diff --git a/Components/Adyen/PaymentMethodServiceInterface.php b/Components/Adyen/PaymentMethodServiceInterface.php deleted file mode 100644 index d7344319..00000000 --- a/Components/Adyen/PaymentMethodServiceInterface.php +++ /dev/null @@ -1,25 +0,0 @@ -apiClientMap = $apiClientMap; - $this->modelManager = $modelManager; - $this->notificationManager = $notificationManager; - } - - /** - * @throws AdyenException - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function doRefund(int $orderId): Refund - { - /** @var Order $order */ - $order = $this->modelManager->find(Order::class, $orderId); - $modification = new Modification( - $this->apiClientMap->lookup($order->getShop()) - ); - - $notification = $this->provideNotification($orderId); - $request = [ - 'originalReference' => $notification->getPspReference(), - 'modificationAmount' => [ - 'value' => $notification->getAmountValue(), - 'currency' => $notification->getAmountCurrency(), - ], - 'merchantAccount' => $notification->getMerchantAccountCode(), - ]; - $refund = $modification->refund($request); - - $orderRefund = new Refund(); - $orderRefund->setOrderId($orderId); - $orderRefund->setCreatedAt(new \DateTime()); - $orderRefund->setUpdatedAt(new \DateTime()); - $orderRefund->setPspReference($refund['pspReference']); - $this->modelManager->persist($orderRefund); - $this->modelManager->flush(); - - return $orderRefund; - } - - /** - * @throws NonUniqueResultException - */ - private function provideNotification(int $orderId): Notification - { - return $this->notificationManager->getAuthorisationNotificationForOrderId($orderId); - } -} diff --git a/Applepay/MerchantAssociation/RewriteUrl/SeoUrlWriter.php b/Components/ApplePay/SeoUrlWriter.php similarity index 81% rename from Applepay/MerchantAssociation/RewriteUrl/SeoUrlWriter.php rename to Components/ApplePay/SeoUrlWriter.php index 8358a394..c0257d00 100755 --- a/Applepay/MerchantAssociation/RewriteUrl/SeoUrlWriter.php +++ b/Components/ApplePay/SeoUrlWriter.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace AdyenPayment\Applepay\MerchantAssociation\RewriteUrl; +namespace AdyenPayment\Components\ApplePay; use Shopware_Components_Modules; -final class SeoUrlWriter implements UrlWriter +final class SeoUrlWriter { /** @var Shopware_Components_Modules */ private $modules; diff --git a/Components/BasketHelper.php b/Components/BasketHelper.php new file mode 100644 index 00000000..56a4acd9 --- /dev/null +++ b/Components/BasketHelper.php @@ -0,0 +1,96 @@ +basket = $basket; + $this->connection = $connection; + $this->session = $session; + } + + public function forceBasketContentFor(string $articleOrderNumber): void + { + $this->basket->sDeleteBasket(); + $this->basket->sAddArticle($articleOrderNumber); + $this->basket->sRefreshBasket(); + } + + public function getTotalAmountFor( + Shopware_Controllers_Frontend_Checkout $coController, + ?string $articleOrderNumber = null + ): Amount { + if (!$articleOrderNumber) { + return $this->getCurrentCartAmount($coController); + } + + $this->backupCurrentBasket(); + $this->forceBasketContentFor($articleOrderNumber); + $totalAmount = $this->getCurrentCartAmount($coController); + $this->restoreBasketFromBackup(); + + + return $totalAmount; + } + + private function getCurrentCartAmount(Shopware_Controllers_Frontend_Checkout $coController): Amount + { + $basket = $coController->getBasket(); + $totalAmount = array_key_exists('sAmountWithTax', $basket) ? $basket['sAmountWithTax'] : $basket['sAmount']; + $currencyName = Shopware()->Shop() ? Shopware()->Shop()->getCurrency()->getCurrency() : null; + + return Amount::fromFloat( + $totalAmount, + $currencyName ? Currency::fromIsoCode($currencyName) : Currency::getDefault() + ); + } + + private function backupCurrentBasket(): void + { + $this->connection->update( + 's_order_basket', + ['sessionID' => $this->session->get('sessionId') . '_adyen_backup'], + ['sessionID' => $this->session->get('sessionId')] + ); + } + + private function restoreBasketFromBackup(): void + { + $this->basket->sDeleteBasket(); + + $this->connection->update( + 's_order_basket', + ['sessionID' => $this->session->get('sessionId')], + ['sessionID' => $this->session->get('sessionId') . '_adyen_backup'] + ); + + $this->basket->sRefreshBasket(); + } +} diff --git a/Components/BasketService.php b/Components/BasketService.php deleted file mode 100644 index 12feeaae..00000000 --- a/Components/BasketService.php +++ /dev/null @@ -1,311 +0,0 @@ -sBasket = Shopware()->Modules()->Basket(); - $this->events = $events; - $this->modelManager = $modelManager; - $this->db = $db; - $this->session = $session; - - $this->statusRepository = $modelManager->getRepository(Status::class); - $this->orderRepository = $modelManager->getRepository(Order::class); - $this->voucherRepository = $modelManager->getRepository(Voucher::class); - $this->voucherCodeRepository = $modelManager->getRepository(Code::class); - $this->detailAttributesRestorer = $detailAttributesRestorer; - } - - /** - * @throws ORMException - * @throws OptimisticLockException - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - */ - public function cancelAndRestoreByOrderNumber(string $orderNumber): void - { - $order = $this->getOrderByOrderNumber($orderNumber); - if (!$order) { - return; - } - - $this->restoreFromOrder($order); - $this->cancelOrder($order); - } - - public function getOrderByOrderNumber(string $orderNumber): ?Order - { - return $this->orderRepository->findOneBy(['number' => $orderNumber]); - } - - /** - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - */ - public function restoreFromOrder(Order $order): void - { - $this->sBasket->sDeleteBasket(); - $orderDetails = $order->getDetails(); - foreach ($orderDetails as $orderDetail) { - $this->processOrderDetail($order, $orderDetail); - } - - $this->events->notify(Event::BASKET_RESTORE_FROM_ORDER, [ - 'order' => $order, - ]); - - $this->sBasket->sRefreshBasket(); - } - - /** - * @throws ORMException - * @throws OptimisticLockException - */ - public function cancelOrder(Order $order): void - { - /** @var Status $statusCanceled */ - $statusCanceled = $this->statusRepository->find(Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED); - - $order->setPaymentStatus($statusCanceled); - - $this->modelManager->persist($order); - $this->modelManager->flush($order); - } - - /** - * @throws Enlight_Event_Exception - */ - private function processOrderDetail(Order $order, Detail $orderDetail): void - { - $orderDetailFiltered = $this->events->filter(Event::BASKET_BEFORE_PROCESS_ORDER_DETAIL, $orderDetail, [ - 'order' => $order, - 'orderDetail' => $orderDetail, - ]); - - if (!$orderDetailFiltered instanceof Detail) { - $this->events->notify(Event::BASKET_STOPPED_PROCESS_ORDER_DETAIL, [ - 'order' => $order, - 'orderDetail' => $orderDetailFiltered, - 'originalOrderDetail' => $orderDetail, - ]); - - return; - } - - switch ($orderDetailFiltered->getMode()) { - case self::MODE_PRODUCT: - case self::MODE_SURCHARGE_DISCOUNT: - $this->addArticle($orderDetailFiltered); - - break; - case self::MODE_PREMIUM_PRODUCT: - $this->addPremium($orderDetailFiltered); - - break; - case self::MODE_VOUCHER: - $this->addVoucher($orderDetailFiltered); - - break; - case self::MODE_REBATE: - break; - } - - $this->events->notify(Event::BASKET_AFTER_PROCESS_ORDER_DETAIL, [ - 'order' => $order, - 'orderDetail' => $orderDetailFiltered, - 'originalOrderDetail' => $orderDetail, - ]); - } - - /** - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - * @throws Zend_Db_Select_Exception - * @throws Zend_Db_Statement_Exception - */ - private function addArticle(Detail $orderDetail): void - { - // The order item doesn't have an article number or it isn't a regular Shopware article - // add it to the basket manually - if ('' !== $orderDetail->getArticleNumber() || !$this->isArticlesDetails($orderDetail->getArticleNumber())) { - $basketDetailId = $this->insertInToBasket($orderDetail); - $this->detailAttributesRestorer->restore($orderDetail->getId(), $basketDetailId); - - return; - } - - $basketDetailId = $this->sBasket->sAddArticle($orderDetail->getArticleNumber(), $orderDetail->getQuantity()); - $this->detailAttributesRestorer->restore($orderDetail->getId(), $basketDetailId); - } - - /** - * Searches in the s_articles_details table with the ordernumber column and returns true if an article is found. - * - * @throws Zend_Db_Select_Exception - * @throws Zend_Db_Statement_Exception - */ - private function isArticlesDetails(string $articleDetailNumber): bool - { - $result = $this->db->select() - ->from('s_articles_details') - ->where('ordernumber=?', $articleDetailNumber) - ->query() - ->fetch(); - - return !empty($result); - } - - /** - * Inserts data from a order detail row into a basket detail and returns the inserted ID. - * - * @throws Zend_Db_Adapter_Exception - */ - private function insertInToBasket(Detail $optionData): int - { - $this->db->insert('s_order_basket', [ - 'sessionID' => $this->session->get('sessionId'), - 'userID' => $this->session->get('sUserId') ?? 0, - 'articlename' => $optionData->getArticleName(), - 'ordernumber' => $optionData->getArticleNumber(), - 'articleID' => $optionData->getArticleId(), - 'quantity' => $optionData->getQuantity(), - 'price' => $optionData->getPrice(), - 'netprice' => null === $optionData->getPrice() - ? 0 - : $optionData->getPrice() / (1 + ($optionData->getTaxRate() / 100)), - 'tax_rate' => $optionData->getTaxRate(), - 'modus' => $optionData->getMode(), - 'esdarticle' => $optionData->getEsdArticle(), - 'config' => $optionData->getConfig(), - 'datum' => (new \DateTimeImmutable())->format('Y-m-d H:i:s'), - 'currencyFactor' => Shopware()->Shop()->getCurrency()->getFactor(), - ]); - - return (int) $this->db->lastInsertId(); - } - - /** - * @throws Zend_Db_Adapter_Exception - */ - private function addPremium(Detail $orderDetail): void - { - Shopware()->Front()->Request()->setQuery('sAddPremium', $orderDetail->getArticleNumber()); - $this->sBasket->sInsertPremium(); - } - - /** - * @throws ORMException - * @throws OptimisticLockException - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - */ - private function addVoucher(Detail $orderDetail): void - { - /** @var Voucher $voucher */ - $voucher = $this->voucherRepository->findOneBy(['orderCode' => $orderDetail->getArticleNumber()]); - - if (!$voucher) { - return; - } - - $voucherCode = $voucher->getVoucherCode(); - - if (1 === $voucher->getModus()) { - /** @var Code $voucherCodeObject */ - $voucherCodeObject = $this->voucherCodeRepository->findOneBy([ - 'voucherId' => $voucher->getId(), - 'id' => $orderDetail->getArticleId(), - ]); - if ($voucherCodeObject) { - $voucherCode = $voucherCodeObject->getCode(); - $voucherCodeObject->setCustomerId(null); - $voucherCodeObject->setCashed(0); - $this->modelManager->persist($voucherCodeObject); - } - } - $this->modelManager->remove($orderDetail); - $this->modelManager->flush(); - - $this->sBasket->sAddVoucher( - $voucherCode - ); - } -} diff --git a/Components/Builder/NotificationBuilder.php b/Components/Builder/NotificationBuilder.php deleted file mode 100755 index cb83737e..00000000 --- a/Components/Builder/NotificationBuilder.php +++ /dev/null @@ -1,126 +0,0 @@ -modelManager = $modelManager; - $this->orderRepository = $modelManager->getRepository(Order::class); - $this->currency = new Currency(); - } - - /** - * Builds Notification object from Adyen webhook params. - * - * @param $params - * - * @throws OrderNotFoundException - * @throws InvalidParameterException - */ - public function fromParams($params): Notification - { - $notification = new Notification(); - - $notification->setStatus(NotificationStatus::STATUS_RECEIVED); - - if (!isset($params['merchantReference'])) { - throw InvalidParameterException::missingParameter('merchantReference'); - } - - /** @var Order $order */ - $order = $this->orderRepository->findOneBy(['number' => $params['merchantReference']]); - if (!$order) { - throw new OrderNotFoundException($params['merchantReference']); - } - - $notification->setOrder($order); - $notification->setOrderId($order->getId()); - - if (isset($params['pspReference'])) { - $notification->setPspReference($params['pspReference']); - } - if (isset($params['eventCode'])) { - $notification->setEventCode($params['eventCode']); - } - - if (isset($params['paymentMethod'])) { - $notification->setPaymentMethod($params['paymentMethod']); - } - - if (!isset($params['paymentMethod']) && isset($params['additionalData']['paymentMethodVariant'])) { - $notification->setPaymentMethod($params['additionalData']['paymentMethodVariant']); - } - - if (isset($params['success'])) { - $notification->setSuccess('true' === $params['success']); - } - if (isset($params['merchantAccountCode'])) { - $notification->setMerchantAccountCode($params['merchantAccountCode']); - } - if (isset($params['amount']['value'], $params['amount']['currency'])) { - $notification->setAmountValue($params['amount']['value']); - $notification->setAmountCurrency($params['amount']['currency']); - } - if (isset($params['reason'])) { - $notification->setErrorDetails($params['reason']); - } - - if (isset($params['eventCode'], $params['success'])) { - $notification->setScheduledProcessingTime($this->getProcessingTime($notification)); - } - - return $notification; - } - - /** - * Set delay in processing time for certain notifications. - */ - private function getProcessingTime(Notification $notification): \DateTime - { - $processingTime = new \DateTime(); - switch ($notification->getEventCode()) { - case 'AUTHORISATION': - if (!$notification->isSuccess()) { - $processingTime = $processingTime->add(new \DateInterval('PT30M')); - } - - break; - case 'OFFER_CLOSED': - $processingTime = $processingTime->add(new \DateInterval('PT30M')); - - break; - default: - break; - } - - return $processingTime; - } -} diff --git a/Components/Calculator/PriceCalculationService.php b/Components/Calculator/PriceCalculationService.php deleted file mode 100644 index b399c5e1..00000000 --- a/Components/Calculator/PriceCalculationService.php +++ /dev/null @@ -1,21 +0,0 @@ -getAmountExcludingTax($amount, $tax), 2); - } -} diff --git a/Components/CheckoutConfigProvider.php b/Components/CheckoutConfigProvider.php new file mode 100644 index 00000000..a50179cb --- /dev/null +++ b/Components/CheckoutConfigProvider.php @@ -0,0 +1,250 @@ + + */ + private $checkoutConfigCache = []; + + /** + * @var Enlight_Components_Session_Namespace + */ + private $session; + + public function __construct(Enlight_Components_Session_Namespace $session) + { + $this->session = $session; + } + + /** + * @return Response + * @throws InvalidCurrencyCode + */ + public function getCheckoutConfig(?Amount $forceAmount = null): Response + { + $request = $this->buildConfigRequest($forceAmount); + + $response = $this->getCheckoutConfigResponse($request, false, static function (PaymentCheckoutConfigRequest $request) { + return CheckoutAPI::get() + ->checkoutConfig(Shopware()->Shop()->getId()) + ->getPaymentCheckoutConfig($request); + }); + + if (!$response->isSuccessful()) { + return $response; + } + + $userData = Shopware()->Modules()->Admin()->sGetUserData(); + if ( + !empty($userData['additional']['user']['accountmode']) && + (int)$userData['additional']['user']['accountmode'] === Customer::ACCOUNT_MODE_FAST_LOGIN + ) { + $this->disableCardsSingleClickPayment($response); + } + + return $response; + } + + /** + * @param Amount|null $forceAmount + * @return Response + * @throws InvalidCurrencyCode + */ + public function getExpressCheckoutConfig(Amount $forceAmount): Response + { + $request = $this->buildConfigRequest($forceAmount); + + return $this->getCheckoutConfigResponse($request, true, static function (PaymentCheckoutConfigRequest $request) { + return CheckoutAPI::get() + ->checkoutConfig(Shopware()->Shop()->getId()) + ->getExpressPaymentCheckoutConfig($request); + }); + } + + /** + * @param Amount|null $forceAmount + * @return PaymentCheckoutConfigRequest + * @throws InvalidCurrencyCode + */ + private function buildConfigRequest(?Amount $forceAmount = null): PaymentCheckoutConfigRequest + { + $country = null; + if ($this->getUser() && isset($this->getUser()['additional']['country']['countryiso'])) { + $country = Country::fromIsoCode($this->getUser()['additional']['country']['countryiso']); + } + + if ( + !$country && + Shopware()->Modules() && + ($sAdmin = Shopware()->Modules()->Admin()) && + ($userData = $sAdmin->sGetUserData()) && + isset($userData['additional']['country']['countryiso']) + ) { + $country = Country::fromIsoCode($userData['additional']['country']['countryiso']); + } + + $shop = Shopware()->Shop(); + $userId = (int)$this->session->offsetGet('sUserId'); + $shopperReference = ($userId !== 0) ? $shop->getHost() . '_' . $shop->getId() . '_' . $userId : null; + + return new PaymentCheckoutConfigRequest( + $this->getAmount($forceAmount), + $country, + Shopware()->Shop()->getLocale()->getLocale(), + $shopperReference + ); + } + + /** + * Gets the response from cache or makes the response and cache the result by calling $responseCallback + * + * @param PaymentCheckoutConfigRequest $request + * @param callable $responseCallback + * @return Response|PaymentCheckoutConfigResponse + */ + private function getCheckoutConfigResponse( + PaymentCheckoutConfigRequest $request, + bool $isExpressCheckout, + callable $responseCallback + ): Response { + $cacheKey = implode('-', [ + $request->getShopperLocale(), + $request->getAmount()->getValue(), + (string)$request->getAmount()->getCurrency(), + (string)$request->getCountry(), + $request->getShopperReference(), + $isExpressCheckout ? 'express' : 'standard' + ]); + + if (array_key_exists($cacheKey, $this->checkoutConfigCache)) { + return $this->checkoutConfigCache[$cacheKey]; + } + + $configResponse = $responseCallback($request); + + if (!$configResponse->isSuccessful()) { + return $configResponse; + } + + $this->checkoutConfigCache[$cacheKey] = $configResponse; + + return $this->checkoutConfigCache[$cacheKey]; + } + + /** + * @param Amount|null $forceAmount + * @return Amount + * @throws InvalidCurrencyCode + */ + private function getAmount(?Amount $forceAmount = null): Amount + { + if ($forceAmount) { + return $forceAmount; + } + + $currencyName = $this->getBasket()['sCurrencyName'] ?? null; + if (!$currencyName && Shopware()->Shop() && Shopware()->Shop()->getCurrency()) { + $currencyName = Shopware()->Shop()->getCurrency()->getCurrency(); + } + + $cartAmount = $this->getBasketAmount(); + if (!$cartAmount && Shopware()->Modules()->Basket()) { + $cartAmount = (float)Shopware()->Modules()->Basket()->sGetAmount()['totalAmount']; + } + + return Amount::fromFloat( + $cartAmount, + Currency::fromIsoCode($currencyName ?? 'EUR') + ); + } + + /** + * Returns the full user data as array. + * + * @return array|null + */ + private function getUser(): ?array + { + if (!empty($this->session->sOrderVariables['sUserData'])) { + return $this->session->sOrderVariables['sUserData']; + } + + return null; + } + + /** + * Returns the full basket data as array. + * + * @return array|null + */ + private function getBasket(): ?array + { + if (!empty($this->session->sOrderVariables['sBasket'])) { + return $this->session->sOrderVariables['sBasket']; + } + + return null; + } + + /** + * Return the full amount to pay. + * + * @return float|null + */ + private function getBasketAmount(): ?float + { + $user = $this->getUser(); + $basket = $this->getBasket(); + if (!empty($user['additional']['charge_vat'])) { + return empty($basket['AmountWithTaxNumeric']) ? $basket['AmountNumeric'] : $basket['AmountWithTaxNumeric']; + } + + return $basket['AmountNetNumeric']; + } + + private function disableCardsSingleClickPayment(PaymentCheckoutConfigResponse $response): void + { + foreach ($response->getPaymentMethodsConfiguration() as $method) { + if (PaymentMethodCode::scheme()->equals($method->getCode())) { + /** @var CardConfig $additionalData */ + $additionalData = $method->getAdditionalData(); + $method->setAdditionalData(new CardConfig( + $additionalData->isShowLogos(), + false, + $additionalData->isInstallments(), + $additionalData->isInstallmentAmounts(), + $additionalData->isSendBasket(), + $additionalData->getInstallmentCountries(), + $additionalData->getMinimumAmount(), + $additionalData->getNumberOfInstallments() + )); + + return; + } + } + } +} diff --git a/Components/CompilerPass/NotificationProcessorCompilerPass.php b/Components/CompilerPass/NotificationProcessorCompilerPass.php deleted file mode 100644 index 358cb4bd..00000000 --- a/Components/CompilerPass/NotificationProcessorCompilerPass.php +++ /dev/null @@ -1,25 +0,0 @@ -getDefinition('AdyenPayment\Components\NotificationProcessor'); - $taggedServices = $container->findTaggedServiceIds('adyen.payment.notificationprocessor'); - - foreach ($taggedServices as $id => $tags) { - $definition->addMethodCall('addProcessor', [new Reference($id)]); - } - } -} diff --git a/Components/Configuration.php b/Components/Configuration.php deleted file mode 100755 index f6726efd..00000000 --- a/Components/Configuration.php +++ /dev/null @@ -1,177 +0,0 @@ -cachedConfigReader = $cachedConfigReader; - $this->connection = $connection; - } - - /** - * @param false|Shop $shop - */ - public function getEnvironment($shop = false): string - { - return self::ENV_LIVE === mb_strtoupper($this->getConfig('environment', $shop)) - ? Environment::LIVE - : Environment::TEST; - } - - /** - * @param bool $shop - */ - public function isTestMode($shop = false): bool - { - return Environment::TEST === $this->getEnvironment($shop); - } - - /** - * @param false|Shop $shop - */ - public function getMerchantAccount($shop = false): string - { - return (string) $this->getConfig('merchant_account', $shop); - } - - /** - * @param false|Shop $shop - */ - public function getConfig(?string $key = null, $shop = false) - { - if (!$shop) { - try { - $shop = Shopware()->Shop(); - } catch (ServiceNotFoundException $exception) { - //The Shop service is not available in the context (i.e. getting the config from the Backend) - $shop = null; - } - } - - $config = $this->cachedConfigReader->getByPluginName(AdyenPayment::NAME, $shop); - if (null === $key) { - return $config; - } - - if (array_key_exists($key, $config)) { - return $config[$key]; - } - } - - /** - * @param false|Shop $shop - */ - public function getApiKey($shop = false): string - { - return (string) $this->getConfig( - 'api_key_'.$this->getEnvironment($shop), - $shop - ); - } - - /** - * @param false|Shop $shop - */ - public function getApiUrlPrefix($shop = false): string - { - return (string) $this->getConfig('api_url_prefix', $shop); - } - - public function getClientKey(Shop $shop): string - { - return (string) $this->getConfig('client_key_'.$this->getEnvironment($shop), $shop); - } - - /** - * @param bool|Shop $shop - */ - public function getNotificationHmac($shop = false): string - { - return (string) $this->getConfig( - 'notification_hmac_'.$this->getEnvironment($shop), - $shop - ); - } - - /** - * @param bool $shop - */ - public function getNotificationAuthUsername($shop = false): string - { - return (string) $this->getConfig( - 'notification_auth_username_'.$this->getEnvironment($shop), - $shop - ); - } - - /** - * @param bool $shop - */ - public function getNotificationAuthPassword($shop = false): string - { - return (string) $this->getConfig( - 'notification_auth_password_'.$this->getEnvironment($shop), - $shop - ); - } - - /** - * @param bool $shop - */ - public function getGoogleMerchantId($shop = false): string - { - return (string) $this->getConfig('google_merchant_id', $shop); - } - - /** - * @param bool $shop - */ - public function isPaymentmethodsCacheEnabled($shop = false): bool - { - return (bool) $this->getConfig('paymentmethods_cache', $shop); - } - - /** - * @param bool $shop - */ - public function getManualReviewRejectAction($shop = false): string - { - return (string) $this->getConfig('manual_review_rejected_action', $shop); - } - - /** - * @throws \Doctrine\DBAL\DBALException - */ - public function getCurrentPluginVersion(): int - { - $sql = 'SELECT version FROM s_core_plugins WHERE plugin_name = ? ORDER BY version DESC'; - $stmt = $this->connection->prepare($sql); - $stmt->execute([AdyenPayment::NAME]); - - return (int) $stmt->fetchColumn(); - } -} diff --git a/Components/Configuration/ConfigurationService.php b/Components/Configuration/ConfigurationService.php new file mode 100644 index 00000000..92e4c1c8 --- /dev/null +++ b/Components/Configuration/ConfigurationService.php @@ -0,0 +1,67 @@ + $guid]; + if ($this->isAutoTestMode()) { + $params['auto-test'] = 1; + } + + return Url::getFrontUrl('AdyenAsyncProcess', 'run', $params); + } + + /** + * @return string + */ + public function getIntegrationVersion(): string + { + /** @var ShopwareVersionCheck $versionCheck */ + $versionCheck = Shopware()->Container()->get('adyen_payment.components.shopware_version_check'); + + return $versionCheck->getShopwareVersion(); + } + + /** + * @return string + */ + public function getIntegrationName(): string + { + return self::INTEGRATION_NAME; + } + + /** + * @return string + */ + public function getPluginName(): string + { + return 'AdyenPayment'; + } + + /** + * @return string + */ + public function getPluginVersion(): string + { + return Plugin::getVersion(); + } +} diff --git a/Components/ConfigurationInterface.php b/Components/ConfigurationInterface.php deleted file mode 100644 index e7841e66..00000000 --- a/Components/ConfigurationInterface.php +++ /dev/null @@ -1,25 +0,0 @@ -session = $session; + } + + public function hasMessages(): bool + { + return (bool)$this->session->get(self::ERROR_MESSAGES_SESSION_KEY) || + (bool)$this->session->get(self::SUCCESS_MESSAGES_SESSION_KEY); + } + + public function add(string ...$messages): void + { + $this->session->offsetSet( + self::ERROR_MESSAGES_SESSION_KEY, + array_merge( + array_values($this->read()), + array_values($messages) + ) + ); + } + + public function addSuccessMessage(string ...$messages): void + { + $this->session->offsetSet( + self::SUCCESS_MESSAGES_SESSION_KEY, + array_merge( + [$this->readSuccessMessages()], + array_values($messages) + ) + ); + } + + public function read(): array + { + $messages = (array)($this->session->offsetGet(self::ERROR_MESSAGES_SESSION_KEY) ?? []); + $this->session->offsetUnset(self::ERROR_MESSAGES_SESSION_KEY); + + return $messages; + } + + public function readSuccessMessages(): string + { + $messages = ($this->session->offsetGet(self::SUCCESS_MESSAGES_SESSION_KEY)); + $this->session->offsetUnset(self::SUCCESS_MESSAGES_SESSION_KEY); + + return !empty($messages) ? $messages[0] : ''; + } +} diff --git a/Components/FifoNotificationLoader.php b/Components/FifoNotificationLoader.php deleted file mode 100755 index b9c4826c..00000000 --- a/Components/FifoNotificationLoader.php +++ /dev/null @@ -1,40 +0,0 @@ -notificationManager = $notificationManager; - } - - public function load(int $amount): \Generator - { - try { - yield $this->notificationManager->getNextNotificationToHandle(); - if ($amount > 1) { - yield from $this->load($amount - 1); - } - } catch (NoResultException $exception) { - return; - } catch (NonUniqueResultException $exception) { - return; - } - } -} diff --git a/Components/FifoTextNotificationLoader.php b/Components/FifoTextNotificationLoader.php deleted file mode 100755 index cce21c33..00000000 --- a/Components/FifoTextNotificationLoader.php +++ /dev/null @@ -1,28 +0,0 @@ -textNotificationManager = $textNotificationManager; - } - - public function get(): array - { - return $this->textNotificationManager->getTextNextNotificationsToHandle(); - } -} diff --git a/Components/IncomingNotificationManager.php b/Components/IncomingNotificationManager.php deleted file mode 100755 index 07da0055..00000000 --- a/Components/IncomingNotificationManager.php +++ /dev/null @@ -1,127 +0,0 @@ -logger = $logger; - $this->notificationBuilder = $notificationBuilder; - $this->entityManager = $entityManager; - $this->notificationManager = $notificationManager; - } - - /** - * @param TextNotification[] $textNotifications - * - * @throws ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function convertNotifications(array $textNotifications): void - { - foreach ($textNotifications as $textNotificationItem) { - try { - if (!empty($textNotificationItem->getTextNotification())) { - $notification = $this->notificationBuilder->fromParams( - json_decode($textNotificationItem->getTextNotification(), true) - ); - - $this->notificationManager->guardDuplicate($notification); - - $this->entityManager->persist($notification); - } - } catch (InvalidParameterException $exception) { - $this->logger->warning( - $exception->getMessage().' '.$textNotificationItem->getTextNotification() - ); - } catch (OrderNotFoundException $exception) { - $this->logger->warning( - $exception->getMessage().' '.$textNotificationItem->getTextNotification() - ); - } catch (DuplicateNotificationException $exception) { - $this->logger->notice( - $exception->getMessage() - ); - } - $this->entityManager->remove($textNotificationItem); - $this->entityManager->flush(); - } - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function saveTextNotification(array $textNotificationItems): \Generator - { - foreach ($textNotificationItems as $textNotificationItem) { - try { - if (!empty($textNotificationItem['NotificationRequestItem'])) { - if ($this->skipNotification($textNotificationItem['NotificationRequestItem'])) { - $this->logger->info( - 'Skipped notification', - ['eventCode' => $textNotificationItem['eventCode'] ?? ''] - ); - - continue; - } - - $textNotification = new TextNotification(); - $textNotification->setTextNotification( - json_encode($textNotificationItem['NotificationRequestItem']) - ); - $this->entityManager->persist($textNotification); - } - } catch (ORMException $exception) { - $this->logger->warning($exception->getMessage()); - yield new TextNotificationItemFeedback($exception->getMessage(), $textNotificationItem); - } - } - $this->entityManager->flush(); - } - - private function skipNotification(array $notificationRequest): bool - { - if (!empty($notificationRequest['eventCode']) && - false !== mb_strpos($notificationRequest['eventCode'], 'REPORT_')) { - return true; - } - - return false; - } -} diff --git a/Components/Integration/FileService.php b/Components/Integration/FileService.php new file mode 100644 index 00000000..a9259934 --- /dev/null +++ b/Components/Integration/FileService.php @@ -0,0 +1,80 @@ +mediaService = $mediaService; + } + + /** + * @param string $fileContent + * @param string $name + * + * @return void + */ + public function write(string $fileContent, string $name): void + { + $path = 'media/image/' . $name . '.png'; + + if ($this->mediaService->has($path)) { + $this->delete($path); + } + $this->mediaService->write($path, $fileContent); + } + + /** + * @param string $name + * + * @return false|string + */ + public function read(string $name) + { + return $this->mediaService->read('media/image/' . $name . '.png'); + } + + /** + * @param string $name + * + * @return string|null + */ + public function getLogoUrl(string $name): ?string + { + if ($this->mediaService->has('media/image/' . $name . '.png')) { + return $this->mediaService->getUrl('media/image/' . $name . '.png'); + } + + return ''; + } + + /** + * @param string $name + * + * @return void + */ + public function delete(string $name): void + { + if (!$this->mediaService->has('media/image/' . $name . '.png')) { + return; + } + + $this->mediaService->delete('media/image/' . $name . '.png'); + } +} diff --git a/Components/Integration/LegacyMerchantReferenceNormalizationWebhookHandler.php b/Components/Integration/LegacyMerchantReferenceNormalizationWebhookHandler.php new file mode 100644 index 00000000..62f6f99b --- /dev/null +++ b/Components/Integration/LegacyMerchantReferenceNormalizationWebhookHandler.php @@ -0,0 +1,56 @@ +orderRepository = $orderRepository; + + parent::__construct($synchronizationService, $queueService); + } + + public function handle(Webhook $webhook): void + { + $legacyOrderMap = $this->orderRepository->getOrdersByNumbers([$webhook->getMerchantReference()]); + if (array_key_exists($webhook->getMerchantReference(), $legacyOrderMap)) { + $webhook = new Webhook( + $webhook->getAmount(), + $webhook->getEventCode(), + $webhook->getEventDate(), + $webhook->getHmacSignature(), + $webhook->getMerchantAccountCode(), + $legacyOrderMap[$webhook->getMerchantReference()]->getTemporaryId(), + $webhook->getPspReference(), + $webhook->getPaymentMethod(), + $webhook->getReason(), + $webhook->isSuccess(), + $webhook->getOriginalReference(), + $webhook->getRiskScore(), + $webhook->isLive() + ); + } + + parent::handle($webhook); + } +} diff --git a/Components/Integration/OrderService.php b/Components/Integration/OrderService.php new file mode 100644 index 00000000..6d5611f3 --- /dev/null +++ b/Components/Integration/OrderService.php @@ -0,0 +1,108 @@ +orderRepository = $orderRepository; + $this->modules = $modules; + } + + /** + * @inheritDoc + */ + public function orderExists(string $merchantReference): bool + { + $order = $this->orderRepository->getOrderByTemporaryId($merchantReference); + + return !empty($order) && $order->getShop()->getId() === (int)StoreContext::getInstance()->getStoreId(); + } + + /** + * @inheritDoc + */ + public function updateOrderStatus(Webhook $webhook, string $statusId): void + { + $order = $this->orderRepository->getOrderByTemporaryId($webhook->getMerchantReference()); + + if (!$order) { + return; + } + + /** @var sOrder $sOrder */ + $sOrder = $this->modules->getModule('sOrder'); + $sOrder->setPaymentStatus($order->getId(), $statusId); + + if ($order->getTransactionId() === $order->getTemporaryId()) { + $originalReference = $webhook->getPspReference(); + $order->setTransactionId($originalReference); + $this->orderRepository->updateOrder($order); + } + } + + /** + * @param string $merchantReference + * + * @return string + */ + public function getOrderCurrency(string $merchantReference): string + { + $order = $this->orderRepository->getOrderByTemporaryId($merchantReference); + + return $order ? $order->getCurrency() : ''; + } + + /** + * @param string $merchantReference + * + * @return string + */ + public function getOrderUrl(string $merchantReference): string + { + $order = $this->orderRepository->getOrderByTemporaryId($merchantReference); + + return $order ? $this->getOrderUrlForId((int)$order->getId()) : 'javascript:'; + } + + public function getOrderUrlForId(int $orderId): string + { + return implode('', [ + 'javascript:' . + 'postMessageApi.openModule({' . + "name: 'Shopware.apps.Order', " . + "action: 'detail', " . + "params: {" . + "orderId: {$orderId}" . + "}" . + "}) && undefined;" + ]); + } +} diff --git a/Components/Integration/PaymentMethodService.php b/Components/Integration/PaymentMethodService.php new file mode 100644 index 00000000..2aec1b21 --- /dev/null +++ b/Components/Integration/PaymentMethodService.php @@ -0,0 +1,610 @@ +storeContext = $storeContext; + $this->entityManager = $entityManager; + $this->storeRepository = $storeRepository; + $this->paymentInstaller = $paymentInstaller; + $this->fileService = $fileService; + $this->paymentRepository = $paymentRepository; + $this->storeService = $storeService; + } + + /** + * Creates new payment method in Shopware. + * + * @param PaymentMethod $method + * + * @return void + * + * @throws ORMException + * @throws OptimisticLockException + * @throws StoreDoesNotExistException + */ + public function createPaymentMethod(PaymentMethod $method): void + { + $store = $this->getCurrentStore(); + + $this->savePaymentMean($method, $store); + } + + /** + * @inheritDoc + * + * @throws ORMException + * @throws OptimisticLockException + * @throws PaymentMeanDoesNotExistException + * @throws StoreDoesNotExistException + * @throws Exception + */ + public function updatePaymentMethod(PaymentMethod $method): void + { + $store = $this->getCurrentStore(); + $payment = $this->getPaymentMeanByName(self::ADYEN_NAME_PREFIX . $method->getCode()); + + if (!$payment && $method->getCode() !== (string)PaymentMethodCode::oney()) { + throw new PaymentMeanDoesNotExistException( + 'Payment mean with name ' . self::ADYEN_NAME_PREFIX + . $method->getCode() . ' does not exist.' + ); + } + + $this->savePaymentMean($method, $store); + } + + /** + * @inheritDoc + * + * @throws BaseException + * @throws Exception + */ + public function deletePaymentMethod(string $methodId): void + { + $method = $this->getPaymentService()->getPaymentMethodById($methodId); + + if ($method === null) { + throw new BaseException('Payment method with id ' . $methodId . 'does not exist.'); + } + + if ($method->getCode() === (string)PaymentMethodCode::oney()) { + $this->removeOneyMethods($method); + + return; + } + + $this->disablePaymentMean(self::ADYEN_NAME_PREFIX . $method->getCode()); + } + + /** + * @return void + * + * @throws OptimisticLockException + * @throws \Doctrine\ORM\Exception\ORMException + * @throws Exception + */ + public function deleteAllPaymentMethods(): void + { + $paymentMeans = $this->getConfiguredPaymentMeans(); + + if (empty($paymentMeans)) { + return; + } + + foreach ($paymentMeans as $paymentMean) { + $this->disableMean($paymentMean); + } + + $this->entityManager->flush(); + } + + /** + * @return void + * + * @throws OptimisticLockException + * @throws StoreDoesNotExistException + * @throws \Doctrine\ORM\Exception\ORMException + * @throws Exception + */ + public function deletePaymentMethodsForAllStores(): void + { + $paymentMeans = $this->getConfiguredPaymentMeans(); + + if (empty($paymentMeans)) { + return; + } + + foreach ($paymentMeans as $paymentMean) { + $this->deleteMean($paymentMean); + } + + $this->entityManager->flush(); + } + + /** + * @return void + * + * @throws OptimisticLockException + * @throws \Doctrine\ORM\Exception\ORMException + * @throws Exception + */ + public function enableAllPaymentMethods(): void + { + $paymentMeans = $this->getConfiguredPaymentMeans(); + + if (empty($paymentMeans)) { + return; + } + + foreach ($paymentMeans as $paymentMean) { + $paymentMean->setHide(false); + $paymentMean->setActive(true); + $this->entityManager->persist($paymentMean); + } + + $this->entityManager->flush(); + } + + /** + * @return array|Payment[] + * + * @throws Exception + */ + private function getConfiguredPaymentMeans(): array + { + $methods = $this->paymentRepository->getConfiguredPaymentMethodsForAllShops(); + + if (StoreContext::getInstance()->getStoreId()) { + $methods = $this->paymentRepository->getConfiguredPaymentMethods(); + } + + if (empty($methods)) { + return []; + } + + $names = []; + + foreach ($methods as $method) { + $names[] = self::ADYEN_NAME_PREFIX . $method->getCode(); + + if ($method->getCode() === (string)PaymentMethodCode::oney()) { + /** @var Oney $additionalData */ + $additionalData = $method->getAdditionalData(); + $installments = $additionalData->getSupportedInstallments(); + + foreach ($installments as $installment) { + $names[] = self::ADYEN_NAME_PREFIX . 'facilypay_' . $installment . 'x'; + } + } + } + + return $this->getPaymentMeansByName($names); + } + + /** + * @param string $name + * + * @return Payment|null + */ + private function getPaymentMeanByName(string $name): ?Payment + { + $repository = Shopware()->Models()->getRepository(Payment::class); + $query = $repository->createQueryBuilder('paymentmeans'); + $query->where('paymentmeans.name = :name') + ->setParameter('name', $name); + + $paymentMeans = $query->getQuery()->getResult(); + + return $paymentMeans[0] ?? null; + } + + /** + * @param array $names + * + * @return Payment[] + */ + private function getPaymentMeansByName(array $names): array + { + $repository = Shopware()->Models()->getRepository(Payment::class); + $query = $repository->createQueryBuilder('paymentmeans'); + $query->where('paymentmeans.name in (:names)') + ->setParameter('names', $names, Connection::PARAM_STR_ARRAY); + + return $query->getQuery()->getResult(); + } + + /** + * @param PaymentMethod $method + * @param ShopwareStore $store + * + * @return void + * + * @throws ORMException + * @throws OptimisticLockException + * @throws Exception + */ + private function savePaymentMean(PaymentMethod $method, ShopwareStore $store): void + { + if ($method->getCode() === (string)PaymentMethodCode::oney()) { + $this->saveOneyMeans($method, $store); + + return; + } + + $payment = $this->getPaymentMeanByName(self::ADYEN_NAME_PREFIX . $method->getCode()); + + $shops = array_merge([$store], $this->storeRepository->getShopwareLanguageShops([$store->getId()])); + + if ($payment) { + /** @var ShopwareStore $enabledShop */ + foreach ($payment->getShops()->toArray() as $enabledShop) { + foreach ($shops as $shop) { + if ($shop->getId() === $enabledShop->getId()) { + continue 2; + } + } + + $shops[] = $enabledShop; + } + } + + $this->paymentInstaller->createOrUpdate( + AdyenPayment::NAME, + [ + 'name' => self::ADYEN_NAME_PREFIX . $method->getCode(), + 'description' => $method->getName(), + 'additionalDescription' => $method->getDescription(), + 'active' => true, + 'esdActive' => true, + 'hide' => false, + 'position' => $this->getPosition($method), + 'action' => 'AdyenPaymentProcess', + 'source' => AdyenPayment::PAYMENT_METHOD_SOURCE, + 'debitPercent' => $method->getPercentSurcharge() ?? 0, + 'surcharge' => $method->getFixedSurcharge(), + 'countries' => $this->getCountries(), + 'shops' => new ArrayCollection($shops), + ] + ); + } + + /** + * @param PaymentMethod $method + * @param ShopwareStore $store + * + * @return void + * + * @throws Exception + */ + private function saveOneyMeans(PaymentMethod $method, ShopwareStore $store): void + { + /** @var Oney $additionalData */ + $additionalData = $method->getAdditionalData(); + $installments = $additionalData->getSupportedInstallments(); + + foreach ($installments as $installment) { + $payment = $this->getPaymentMeanByName(self::ADYEN_NAME_PREFIX . 'facilypay_' . $installment . 'x'); + + $shops = array_merge([$store], $this->storeRepository->getShopwareLanguageShops([$store->getId()])); + + if ($payment) { + /** @var ShopwareStore $enabledShop */ + foreach ($payment->getShops()->toArray() as $enabledShop) { + foreach ($shops as $shop) { + if ($shop->getId() === $enabledShop->getId()) { + continue 2; + } + } + + $shops[] = $enabledShop; + } + } + + $this->paymentInstaller->createOrUpdate( + AdyenPayment::NAME, + [ + 'name' => self::ADYEN_NAME_PREFIX . 'facilypay_' . $installment . 'x', + 'description' => $method->getName() . ' ' . $installment . 'X', + 'additionalDescription' => $method->getDescription(), + 'active' => true, + 'esdActive' => true, + 'hide' => false, + 'position' => $this->getPosition($method), + 'action' => 'AdyenPaymentProcess', + 'source' => AdyenPayment::PAYMENT_METHOD_SOURCE, + 'debitPercent' => $method->getPercentSurcharge() ?? 0, + 'surcharge' => $method->getFixedSurcharge(), + 'countries' => $this->getCountries(), + 'shops' => new ArrayCollection($shops), + ] + ); + } + + $this->disableOneyInstallments($method); + } + + private function disableOneyInstallments(PaymentMethod $method) + { + $oneyMeans = $this->getOneyPaymentMeans(); + $enabledInstallments = $method->getAdditionalData()->getSupportedInstallments(); + + foreach ($oneyMeans as $mean) { + $installment = str_replace(self::ADYEN_NAME_PREFIX . 'facilypay_', '', $mean->getName()); + $installment = str_replace('x', '', $installment); + + if (!in_array($installment, $enabledInstallments)) { + $name = self::ADYEN_NAME_PREFIX . 'facilypay_' . $installment . 'x'; + + $this->disablePaymentMean($name); + } + } + } + + /** + * @return array + */ + private function getOneyPaymentMeans(): array + { + $repository = Shopware()->Models()->getRepository(Payment::class); + $query = $repository->createQueryBuilder('paymentmeans'); + $query->where('paymentmeans.name LIKE :name') + ->setParameter('name', '%' . self::ADYEN_NAME_PREFIX . 'facilypay_%'); + + $paymentMeans = $query->getQuery()->getResult(); + + return $paymentMeans ?? []; + } + + /** + * @param PaymentMethod $method + * + * @return void + * + * @throws StoreDoesNotExistException + * @throws \Doctrine\ORM\Exception\ORMException + */ + private function removeOneyMethods(PaymentMethod $method): void + { + /** @var Oney $additionalData */ + $additionalData = $method->getAdditionalData(); + $installments = $additionalData->getSupportedInstallments(); + $this->fileService->delete($method->getMethodId()); + + foreach ($installments as $installment) { + $name = self::ADYEN_NAME_PREFIX . 'facilypay_' . $installment . 'x'; + + $this->disablePaymentMean($name); + } + } + + /** + * @param $name + * + * @return void + * + * @throws StoreDoesNotExistException + * @throws \Doctrine\ORM\Exception\ORMException + */ + private function disablePaymentMean($name): void + { + $payment = $this->getPaymentMeanByName($name); + + if (!$payment) { + return; + } + + $this->disableMean($payment); + } + + /** + * @param Payment $paymentMean + * + * @return void + * + * @throws OptimisticLockException + * @throws StoreDoesNotExistException + * @throws \Doctrine\ORM\Exception\ORMException + */ + private function deleteMean(Payment $paymentMean) + { + $storesForRemoval = $this->getStoresForRemoval(); + $stores = $paymentMean->getShops(); + + foreach ($storesForRemoval as $store) { + $stores->removeElement($store); + } + + if ($stores->isEmpty()) { + $paymentMean->setActive(false); + } + + $paymentMean->setShops($stores); + $this->entityManager->persist($paymentMean); + $this->entityManager->flush(); + } + + /** + * @param Payment $paymentMean + * + * @return void + * + * @throws OptimisticLockException + * @throws \Doctrine\ORM\Exception\ORMException + */ + private function disableMean(Payment $paymentMean) + { + $stores = $paymentMean->getShops(); + + foreach ($stores as $store) { + if ($store->getId() . '' === StoreContext::getInstance()->getStoreId()) { + $stores->removeElement($store); + } + } + + if ($stores->isEmpty()) { + $paymentMean->setActive(false); + } + + $paymentMean->setShops($stores); + $this->entityManager->persist($paymentMean); + $this->entityManager->flush(); + } + + /** + * @return ArrayCollection + */ + private function getCountries(): ArrayCollection + { + $repository = Shopware()->Models()->getRepository(Country::class); + $queryBuilder = $repository->createQueryBuilder('country'); + + return new ArrayCollection($queryBuilder->getQuery()->getResult()); + } + + /** + * @param PaymentMethod $method + * + * @return int + * + * @throws Exception + */ + private function getPosition(PaymentMethod $method): int + { + $availableMethods = $this->getPaymentService()->getAvailableMethods(); + $position = 0; + + foreach ($availableMethods as $availableMethod) { + if ($availableMethod->getCode() === $method->getCode()) { + return $position; + } + + $position++; + } + + return 0; + } + + /** + * @return array + */ + private function getStoresForRemoval(): array + { + $stores = $this->storeService->getConnectedStores(); + $shopwareStores = []; + + foreach ($stores as $store){ + $shopwareStores[] = $this->storeRepository->getStoreById($store); + } + + return $shopwareStores; + } + + /** + * @return ShopwareStore + * + * @throws StoreDoesNotExistException + */ + private function getCurrentStore(): ShopwareStore + { + $store = $this->storeRepository->getStoreById($this->storeContext->getStoreId()); + + if (!$store) { + throw new StoreDoesNotExistException( + 'Store with id ' . $this->storeContext->getStoreId() + . ' does not exist.' + ); + } + + return $store; + } + + /** + * @return PaymentService + */ + private function getPaymentService(): PaymentService + { + return ServiceRegister::getService(PaymentService::class); + } +} diff --git a/Components/Integration/PaymentProcessors/AddressProcessor.php b/Components/Integration/PaymentProcessors/AddressProcessor.php new file mode 100644 index 00000000..317db9bf --- /dev/null +++ b/Components/Integration/PaymentProcessors/AddressProcessor.php @@ -0,0 +1,108 @@ +countryRepository = $countryRepository; + } + + public function process(PaymentRequestBuilder $builder, StartTransactionRequestContext $context): void + { + $billingAddressRawData = $context->getStateData()->get('billingAddress'); + $stateDataCountry = $context->getStateData()->get('countryCode'); + $deliveryAddressRawData = $context->getStateData()->get('deliveryAddress'); + + $userData = $context->getCheckoutSession()->get('user'); + + if (empty($userData)) { + return; + } + + if (!empty($userData['billingaddress'])) { + /** @var Country[] $country */ + $country = $this->countryRepository->getCountryQuery($userData['billingaddress']['countryId'])->getResult(); + + $this->setBillingAddress($billingAddressRawData, $country[0] ?: null, $userData, $builder); + $this->setCountryCode($stateDataCountry, $country[0] ?: null, $builder); + } + + if (!empty($userData['shippingaddress']) && empty($deliveryAddressRawData)) { + /** @var Country[] $country */ + $country = $this->countryRepository->getCountryQuery($userData['shippingaddress']['countryId'])->getResult(); + $state = null; + + if (!empty($userData['shippingaddress']['stateID'])) { + $state = Shopware()->Models()->getRepository('Shopware\Models\Country\State')->findOneBy(['id' => $userData['shippingaddress']['stateID']]); + } + + $countryIso = $country[0] ? $country[0]->getIso() : ''; + + $deliveryAddress = new DeliveryAddress( + $userData['shippingaddress']['city'] ?? '', + $countryIso, + '', + $userData['shippingaddress']['zipcode'] ?? '', + $state ? $state->getName() : $countryIso, + $userData['shippingaddress']['street'] ?? '' + ); + + $builder->setDeliveryAddress($deliveryAddress); + } + } + + private function setBillingAddress( + ?array $billingAddressRawData, + ?Country $country, + array $userData, + PaymentRequestBuilder $builder + ): void + { + if (!empty($billingAddressRawData)) { + return; + } + + $billingAddress = new BillingAddress( + $userData['billingaddress']['city'] ?? '', + $country ? $country->getIso() : '', + '', + $userData['billingaddress']['zipcode'] ?? '', + '', + $userData['billingaddress']['street'] ?? '' + ); + + $builder->setBillingAddress($billingAddress); + } + + private function setCountryCode(?array $stateDataCountry, ?Country $country, PaymentRequestBuilder $builder): void + { + if (!empty($stateDataCountry)) { + return; + } + + $builder->setCountryCode($country ? $country->getIso() : ''); + } +} diff --git a/Components/Integration/PaymentProcessors/BasketItemsProcessor.php b/Components/Integration/PaymentProcessors/BasketItemsProcessor.php new file mode 100644 index 00000000..2f4f91ab --- /dev/null +++ b/Components/Integration/PaymentProcessors/BasketItemsProcessor.php @@ -0,0 +1,94 @@ +generalSettingsService = $generalSettingsService; + $this->articleRepository = $articleRepository; + } + + /** + * @throws RepositoryOperationFailedException + */ + public function process(PaymentRequestBuilder $builder, StartTransactionRequestContext $context): void + { + $generalSettings = $this->generalSettingsService->getGeneralSettings(); + $basket = $context->getCheckoutSession()->get('basket'); + $user = $context->getCheckoutSession()->get('user'); + + $additionalData = new AdditionalData( + ($generalSettings && $generalSettings->isBasketItemSync()) + ? new RiskData($this->getItems($basket, $user)) : null); + + $builder->setAdditionalData($additionalData); + } + + + /** + * @param array $basket + * @param array $user + * + * @return BasketItem[] + */ + private function getItems(array $basket, array $user): array + { + $items = []; + $basketContent = $basket['content']; + + foreach ($basketContent as $item) { + /** @var Article[] $articles */ + $articles = $this->articleRepository->getArticleQuery($item['additional_details']['articleID'])->getResult(); + $article = $articles[0] ?? null; + + $items[] = new BasketItem( + $item['additional_details']['articleID'] ?? '', + '', + 0, + $article ? $article->getCategories()->first()->getName() : '', + '', + $basket['sCurrencyName'] ?? '', + '', + $item['articlename'] ?? '', + $item['quantity'] ?? 0, + $user['additional']['user']['email'] ?? '', + '', + '', + $item['additional_details']['ean'] ?? '' + ); + } + + return $items; + } +} diff --git a/Components/Integration/PaymentProcessors/BirthdayProcessor.php b/Components/Integration/PaymentProcessors/BirthdayProcessor.php new file mode 100644 index 00000000..133170ca --- /dev/null +++ b/Components/Integration/PaymentProcessors/BirthdayProcessor.php @@ -0,0 +1,32 @@ +getStateData()->get('dateOfBirth'); + + if (!empty($stateDataBirthday)) { + return; + } + + $user = $context->getCheckoutSession()->get('user'); + + if (empty($user) || !isset($user['additional']['user']['birthday'])) { + return; + } + + $builder->setDateOfBirth($user['additional']['user']['birthday']); + } +} diff --git a/Components/Integration/PaymentProcessors/L2L3DataProcessor.php b/Components/Integration/PaymentProcessors/L2L3DataProcessor.php new file mode 100644 index 00000000..e22cffe4 --- /dev/null +++ b/Components/Integration/PaymentProcessors/L2L3DataProcessor.php @@ -0,0 +1,133 @@ +paymentService = $paymentService; + $this->countryRepository = $countryRepository; + } + + /** + * @param PaymentRequestBuilder $builder + * @param StartTransactionRequestContext $context + * + * @return void + * + * @throws Exception + */ + public function process(PaymentRequestBuilder $builder, StartTransactionRequestContext $context): void + { + $basket = $context->getCheckoutSession()->get('basket'); + $user = $context->getCheckoutSession()->get('user'); + $country = $this->getCountryById($user['shippingaddress']['countryId']); + + if (!$this->shouldSyncL2L3Data((string)$context->getPaymentMethodCode())) { + return; + } + + $additionalData = new AdditionalData( + null, + new EnhancedSchemeData( + $basket['AmountNumeric'] - $basket['AmountNetNumeric'], + $user['additional']['user']['id'] ?? '', + $basket['sShippingcostsWithTax'] ?? '', + '', + (new \DateTime())->format('dMy'), + '', + $user['shippingaddress']['state'] ?? '', + $country ? $country->getIso() : '', + $user['shippingaddress']['zip'] ?? '', + $this->getDetails($basket['content'])) + ); + + $builder->setAdditionalData($additionalData); + } + + /** + * @param string $code + * + * @return bool + * + * @throws Exception + */ + private function shouldSyncL2L3Data(string $code): bool + { + $creditCardConfig = $this->paymentService->getPaymentMethodByCode($code); + + if ($creditCardConfig) { + return $creditCardConfig->getAdditionalData() !== null + && $creditCardConfig->getAdditionalData()->isSendBasket(); + } + + return false; + } + + /** + * @param array $basketContent + * + * @return ItemDetailLine[] + */ + private function getDetails(array $basketContent): array + { + $details = []; + + foreach ($basketContent as $item) { + $details[] = new ItemDetailLine( + $item['additional_details']['articleName'] ?? '', + $item['additional_details']['ean'] ?? '', + $item['quantity'] ?? 0, + '', + $item['additional_details']['price'] ?? 0, + '', + '', + '' + ); + } + + return $details; + } + + /** + * @param string $id + * + * @return Country|null + */ + private function getCountryById(string $id): ?Country + { + $country = $this->countryRepository->getCountryQuery($id)->getResult(); + + return $country[0] ?? null; + } +} diff --git a/Components/Integration/PaymentProcessors/LineItemsProcessor.php b/Components/Integration/PaymentProcessors/LineItemsProcessor.php new file mode 100644 index 00000000..307d7054 --- /dev/null +++ b/Components/Integration/PaymentProcessors/LineItemsProcessor.php @@ -0,0 +1,63 @@ +articleRepository = $articleRepository; + } + + public function process(PaymentRequestBuilder $builder, StartTransactionRequestContext $context): void + { + $basket = $context->getCheckoutSession()->get('basket'); + $basketContent = $basket['content']; + $lineItems = []; + + foreach ($basketContent as $item) { + $amountExcludingTax = $item['amountnetNumeric'] ? round($item['amountnetNumeric'], 2) : 0; + $taxPercentage = $item['tax_rate'] ?? 0; + $amountIncludingTax = $item['amountNumeric'] ?? 0; + $taxAmount = $amountIncludingTax - $amountExcludingTax; + /** @var Article[] $articles */ + $articles = $this->articleRepository->getArticleQuery($item['additional_details']['articleID'])->getResult(); + $article = $articles[0] ?? null; + + $lineItems[] = new LineItem( + $item['articleID'] ?? '', + $amountExcludingTax * 100, + $amountIncludingTax * 100, + $taxAmount * 100, + $taxPercentage * 100, + substr($item['additional_details']['description'] !== '' ? $item['additional_details']['description'] + : $item['additional_details']['description_long'], 0, 124), + $item['additional_details']['image']['source'] ?? '', + $article ? $article->getCategories()->first()->getName() : '', + $item['quantity'] ?? 0 + ); + } + + $builder->setLineItems($lineItems); + } +} diff --git a/Components/Integration/PaymentProcessors/ShopperEmailProcessor.php b/Components/Integration/PaymentProcessors/ShopperEmailProcessor.php new file mode 100644 index 00000000..4f340427 --- /dev/null +++ b/Components/Integration/PaymentProcessors/ShopperEmailProcessor.php @@ -0,0 +1,32 @@ +getStateData()->get('shopperEmail'); + + if (!empty($stateDataEmail)) { + return; + } + + $user = $context->getCheckoutSession()->get('user'); + + if (empty($user) || !isset($user['additional']['user']['email'])) { + return; + } + + $builder->setShopperEmail($user['additional']['user']['email']); + } +} diff --git a/Components/Integration/PaymentProcessors/ShopperLocaleProcessor.php b/Components/Integration/PaymentProcessors/ShopperLocaleProcessor.php new file mode 100644 index 00000000..659108f1 --- /dev/null +++ b/Components/Integration/PaymentProcessors/ShopperLocaleProcessor.php @@ -0,0 +1,20 @@ +setShopperLocale(Shopware()->Shop()->getLocale()->getLocale()); + } +} diff --git a/Components/Integration/PaymentProcessors/ShopperNameProcessor.php b/Components/Integration/PaymentProcessors/ShopperNameProcessor.php new file mode 100644 index 00000000..27cc08b5 --- /dev/null +++ b/Components/Integration/PaymentProcessors/ShopperNameProcessor.php @@ -0,0 +1,38 @@ +getStateData()->get('shopperName'); + + if (!empty($rawShopperName)) { + return; + } + + $user = $context->getCheckoutSession()->get('user'); + + if (empty($user) || !isset($user['additional']['user'])) { + return; + } + + $shopperName = new ShopperName( + $user['additional']['user']['firstname'] ?? '', + $user['additional']['user']['lastname'] ?? '' + ); + + $builder->setShopperName($shopperName); + } +} diff --git a/Components/Integration/PaymentProcessors/ShopperReferenceProcessor.php b/Components/Integration/PaymentProcessors/ShopperReferenceProcessor.php new file mode 100644 index 00000000..9dfe57f3 --- /dev/null +++ b/Components/Integration/PaymentProcessors/ShopperReferenceProcessor.php @@ -0,0 +1,31 @@ +getCheckoutSession()->get('user'); + + if (empty($user) || !isset($user['additional']['user']['id'])) { + return; + } + + $shop = Shopware()->Shop(); + + $builder->setShopperReference(ShopperReference::parse( + $shop->getHost() . '_' . $shop->getId() . '_' . $user['additional']['user']['id'] + )); + } +} diff --git a/Components/Integration/StoreService.php b/Components/Integration/StoreService.php new file mode 100644 index 00000000..3b66a9f2 --- /dev/null +++ b/Components/Integration/StoreService.php @@ -0,0 +1,212 @@ +storeRepository = $storeRepository; + $this->orderRepository = $orderRepository; + $this->connectionRepository = $connectionRepository; + } + + /** + * Returns store domain. If last character is /, delete it. + * + * @inheritDoc + */ + public function getStoreDomain(): string + { + $domain = Shopware()->Front()->Router()->assemble(['module' => 'frontend']); + + return rtrim($domain, '/'); + } + + /** + * @inheritDoc + * + * @throws Exception + */ + public function getStores(): array + { + return $this->transformStores($this->storeRepository->getShopwareSubShops()); + } + + /** + * @inheritDoc + * + * @throws Exception + */ + public function getDefaultStore(): ?Store + { + $defaultStore = $this->storeRepository->getShopwareDefaultShop(); + + return $defaultStore ? $this->transformStore($defaultStore) : null; + } + + /** + * @inheritDoc + * + * @throws Exception + */ + public function getStoreById(string $id): ?Store + { + $store = $this->storeRepository->getStoreById($id); + + return $store ? $this->transformStore($store) : null; + } + + /** + * @inheritDoc + * + * @throws InvalidShopOrderDataException + */ + public function getStoreOrderStatuses(): array + { + return $this->transformStoreOrderStatuses($this->orderRepository->getOrderStatuses()); + } + + /** + * @return array + */ + public function getDefaultOrderStatusMapping(): array + { + return [ + PaymentStates::STATE_IN_PROGRESS => Status::PAYMENT_STATE_THE_PAYMENT_HAS_BEEN_ORDERED, + PaymentStates::STATE_PENDING => Status::PAYMENT_STATE_OPEN, + PaymentStates::STATE_PAID => Status::PAYMENT_STATE_COMPLETELY_PAID, + PaymentStates::STATE_FAILED => Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED, + PaymentStates::STATE_CANCELLED => Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED, + PaymentStates::STATE_NEW => Status::PAYMENT_STATE_OPEN + ]; + } + + /** + * Retrieves connected stores ids. + * + * @return array + */ + public function getConnectedStores(): array + { + /** @var ConnectionSettings[] $settings */ + $settings = $this->connectionRepository->select(); + $result = []; + + foreach ($settings as $item) { + $result[] = $item->getStoreId(); + } + + return $result; + } + + /** + * @param array $shopwareStatuses + * + * @return array + * + * @throws InvalidShopOrderDataException + */ + private function transformStoreOrderStatuses(array $shopwareStatuses): array + { + /** @var StateTranslatorServiceInterface $stateTranslator */ + $stateTranslator = Shopware()->Container()->get('shopware.components.state_translator'); + $storeOrderStatuses = []; + + foreach ($shopwareStatuses as $status) { + $storeOrderStatuses[] = new StoreOrderStatus( + (string)$status['id'], + $stateTranslator->translateState(StateTranslatorService::STATE_PAYMENT, $status)['description'] + ); + } + + return $storeOrderStatuses; + } + + /** + * @param ShopwareStore $store + * + * @return Store + * + * @throws Exception + */ + private function transformStore(ShopwareStore $store): Store + { + $config = clone Shopware()->Container()->get('config'); + $config->setShop($store); + + return new Store( + (string)($store->getId() ?? ''), + $store->getName() ?? '', + $config->get('setOffline') + ); + } + + /** + * @param array $shopwareStores + * + * @return Store[] + * + * @throws Exception + */ + private function transformStores(array $shopwareStores): array + { + $stores = []; + $config = clone Shopware()->Container()->get('config'); + + foreach ($shopwareStores as $shopwareStore) { + $config->setShop($shopwareStore); + $stores[] = new Store( + $shopwareStore->getId() ?? '', + $shopwareStore->getName() ?? '', + $config->get('setOffline') + ); + } + + return $stores; + } +} diff --git a/Components/Integration/SystemInfoService.php b/Components/Integration/SystemInfoService.php new file mode 100644 index 00000000..14bb9819 --- /dev/null +++ b/Components/Integration/SystemInfoService.php @@ -0,0 +1,54 @@ +configuration = $configuration; + $this->storeRepository = $repository; + } + + /** + * @inheritDoc + */ + public function getSystemInfo(): SystemInfo + { + return new SystemInfo( + $this->configuration->getIntegrationVersion(), + $this->configuration->getPluginVersion() ?? '', + json_encode($this->storeRepository->getShopTheme()) ?? '', + Shopware()->Front()->Router()->assemble(['module' => 'frontend',]) ?? '', + Shopware()->Front()->Router()->assemble(['module' => 'backend']) ?? '', + $this->configuration->getAsyncProcessUrl('test') ?? '', + 'mysql', + Shopware()->Db()->getServerVersion() ?? '' + ); + } +} diff --git a/Components/Integration/VersionService.php b/Components/Integration/VersionService.php new file mode 100644 index 00000000..5d602399 --- /dev/null +++ b/Components/Integration/VersionService.php @@ -0,0 +1,25 @@ + '', + 'replace' => '', + ]; + + /** + * @param StoreContext $storeContext + */ + public function __construct(StoreContext $storeContext) + { + $this->storeContext = $storeContext; + } + + /** + * @return string + */ + public function getWebhookUrl(): string + { + $url = Url::getFrontUrl('AdyenWebhook', 'index', ['storeId' => $this->storeContext->getStoreId()]); + + // only for development purposes + if (!empty(static::$callbackMap['host']) && !empty(static::$callbackMap['replace'])) { + $url = str_replace(static::$callbackMap['host'], static::$callbackMap['replace'], $url); + } + + return $url; + } +} diff --git a/Components/LastOpenTimeService.php b/Components/LastOpenTimeService.php new file mode 100644 index 00000000..3e2e0afa --- /dev/null +++ b/Components/LastOpenTimeService.php @@ -0,0 +1,67 @@ +repository = $repository; + } + + /** + * @param DateTime $dateTime + * + * @return void + */ + public function saveLastOpenTime(DateTime $dateTime): void + { + /** @var LastOpenTime $lastOpenTime */ + $lastOpenTime = $this->repository->selectOne(); + + if (!$lastOpenTime) { + $lastOpenTime = new LastOpenTime(); + $lastOpenTime->setTimestamp($dateTime->getTimestamp()); + $this->repository->save($lastOpenTime); + + return; + } + + $lastOpenTime->setTimestamp($dateTime->getTimestamp()); + $this->repository->update($lastOpenTime); + } + + /** + * @return DateTime + */ + public function getLastOpenTime(): DateTime + { + /** @var LastOpenTime $lastOpenTime */ + $lastOpenTime = $this->repository->selectOne(); + + return $lastOpenTime ? (new DateTime())->setTimestamp($lastOpenTime->getTimestamp()) + : (new DateTime())->setTimestamp(0); + } +} diff --git a/Components/Logger/LoggerService.php b/Components/Logger/LoggerService.php new file mode 100644 index 00000000..4151b1c6 --- /dev/null +++ b/Components/Logger/LoggerService.php @@ -0,0 +1,85 @@ + 'ERROR', + Logger::WARNING => 'WARNING', + Logger::INFO => 'INFO', + Logger::DEBUG => 'DEBUG', + ); + + /** + * @var ShopwareLogger + */ + protected $logger; + + public function __construct(ShopwareLogger $logger) + { + $this->logger = $logger; + } + + /** + * Log message in system + * + * @param LogData $data + */ + public function logMessage(LogData $data) + { + /** @var Configuration $configService */ + $configService = ServiceRegister::getService(Configuration::CLASS_NAME); + $minLogLevel = $configService->getMinLogLevel(); + $logLevel = $data->getLogLevel(); + + if (($logLevel > $minLogLevel) && !$configService->isDebugModeEnabled()) { + return; + } + + $message = 'ADYEN LOG:' . ' | ' + . 'Date: ' . date('d/m/Y') . ' | ' + . 'Time: ' . date('H:i:s') . ' | ' + . 'Log level: ' . self::$logLevelName[$logLevel] . ' | ' + . 'Message: ' . $data->getMessage(); + $context = $data->getContext(); + if (!empty($context)) { + $contextData = array(); + foreach ($context as $item) { + $contextData[$item->getName()] = print_r($item->getValue(), true); + } + + $message .= ' | ' . 'Context data: [' . json_encode($contextData) . ']'; + } + + $message .= "\n"; + + switch ($logLevel) { + case Logger::ERROR: + $this->logger->error($message); + break; + case Logger::WARNING: + $this->logger->warning($message); + break; + case Logger::INFO: + $this->logger->info($message); + break; + case Logger::DEBUG: + $this->logger->debug($message); + } + } +} diff --git a/Components/Manager/AdyenManager.php b/Components/Manager/AdyenManager.php deleted file mode 100644 index 48db69e6..00000000 --- a/Components/Manager/AdyenManager.php +++ /dev/null @@ -1,48 +0,0 @@ -modelManager = $modelManager; - } - - public function storePaymentData(PaymentInfo $transaction, string $paymentData): void - { - $transaction->setPaymentData($paymentData); - $this->modelManager->persist($transaction); - $this->modelManager->flush(); - } - - public function fetchOrderPaymentData(?Order $order): string - { - if (!$order) { - return ''; - } - - /** @var PaymentInfo $transaction */ - $transaction = $this->getPaymentInfoRepository()->findOneBy(['orderId' => $order->getId()]); - - return $transaction ? $transaction->getPaymentData() : ''; - } - - private function getPaymentInfoRepository(): EntityRepository - { - return $this->modelManager->getRepository(PaymentInfo::class); - } -} diff --git a/Components/Manager/OrderManager.php b/Components/Manager/OrderManager.php deleted file mode 100755 index 7328239a..00000000 --- a/Components/Manager/OrderManager.php +++ /dev/null @@ -1,39 +0,0 @@ -modelManager = $modelManager; - } - - public function save(Order $order): void - { - $this->modelManager->persist($order); - $this->modelManager->flush($order); - } - - public function updatePspReference(Order $order, string $pspReference): void - { - $order = $order->setTransactionId($pspReference); - $this->modelManager->persist($order); - } - - public function updatePayment(Order $order, string $pspReference, Status $paymentStatus): void - { - $order->setPaymentStatus($paymentStatus); - $order = $order->setTransactionId($pspReference); - $this->modelManager->persist($order); - } -} diff --git a/Components/Manager/OrderManagerInterface.php b/Components/Manager/OrderManagerInterface.php deleted file mode 100644 index f57aa714..00000000 --- a/Components/Manager/OrderManagerInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -modelManager = $modelManager; - } - - public function save(UserPreference $userPreference): void - { - $this->modelManager->persist($userPreference); - $this->modelManager->flush($userPreference); - } -} diff --git a/Components/Manager/UserPreferenceManagerInterface.php b/Components/Manager/UserPreferenceManagerInterface.php deleted file mode 100644 index fe8e5262..00000000 --- a/Components/Manager/UserPreferenceManagerInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -modelManager = $modelManager; - $this->notificationRepository = $modelManager->getRepository(Notification::class); - } - - /** - * @throws NoResultException - * @throws NonUniqueResultException - */ - public function getNextNotificationToHandle() - { - $builder = $this->notificationRepository->createQueryBuilder('n'); - $builder->where('n.status = :statusReceived OR n.status = :statusRetry') - ->andWhere('(n.scheduledProcessingTime <= :processingTime OR n.scheduledProcessingTime IS NULL)') - ->orderBy('n.updatedAt', 'ASC') - ->setParameter('statusReceived', NotificationStatus::STATUS_RECEIVED) - ->setParameter('statusRetry', NotificationStatus::STATUS_RETRY) - ->setParameter('processingTime', new \DateTimeImmutable()) - ->setMaxResults(1); - - return $builder->getQuery()->getSingleResult(); - } - - /** - * @throws NonUniqueResultException - * - * @return mixed|null - */ - public function getLastNotificationForOrderId(int $orderId) - { - try { - $lastNotification = $this->notificationRepository->createQueryBuilder('n') - ->where('n.orderId = :orderId') - ->setMaxResults(1) - ->orderBy('n.createdAt', 'ASC') - ->setParameter('orderId', $orderId) - ->getQuery() - ->getSingleResult(); - - return $lastNotification; - } catch (NoResultException $ex) { - return; - } - } - - /** - * @throws NonUniqueResultException - * - * @return mixed|null - */ - public function getAuthorisationNotificationForOrderId(int $orderId) - { - try { - $notification = $this->notificationRepository->createQueryBuilder('n') - ->where('n.orderId = :orderId') - ->andWhere('n.eventCode = :eventCode') - ->setMaxResults(1) - ->orderBy('n.createdAt', 'ASC') - ->setParameter('orderId', $orderId) - ->setParameter('eventCode', 'AUTHORISATION') - ->getQuery() - ->getSingleResult(); - - return $notification; - } catch (NoResultException $ex) { - return; - } - } - - public function guardDuplicate(Notification $notification): void - { - $builder = $this->notificationRepository->createQueryBuilder('n'); - $builder - ->where('n.orderId = :orderId') - ->andWhere('n.pspReference = :pspReference') - ->andWhere('n.paymentMethod = :paymentMethod') - ->andWhere('n.success = :success') - ->andWhere('n.eventCode = :eventCode') - ->andWhere('n.merchantAccountCode = :merchantAccountCode') - ->andWhere('n.amountValue = :amountValue') - ->andWhere('n.amountCurrency = :amountCurrency') - ->setParameter('orderId', $notification->getOrderId()) - ->setParameter('pspReference', $notification->getPspReference()) - ->setParameter('paymentMethod', $notification->getPaymentMethod()) - ->setParameter('success', $notification->isSuccess()) - ->setParameter('eventCode', $notification->getEventCode()) - ->setParameter('merchantAccountCode', $notification->getMerchantAccountCode()) - ->setParameter('amountValue', $notification->getAmountValue()) - ->setParameter('amountCurrency', $notification->getAmountCurrency()) - ->setMaxResults(1); - - if ($this->modelManager->contains($notification) && $notification->getId()) { - $builder - ->andWhere('n.id <> :id') - ->setParameter('id', $notification->getId()); - } - - $record = $builder->getQuery()->getOneOrNullResult(); - - if ($record instanceof Notification) { - throw DuplicateNotificationException::withNotification($record); - } - } -} diff --git a/Components/NotificationProcessor.php b/Components/NotificationProcessor.php deleted file mode 100755 index 4fc2e8ee..00000000 --- a/Components/NotificationProcessor.php +++ /dev/null @@ -1,190 +0,0 @@ -logger = $logger; - $this->modelManager = $modelManager; - $this->eventManager = $eventManager; - $this->notificationManager = $notificationManager; - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Enlight_Event_Exception - * - * @psalm-return \Generator - */ - public function processMany(Traversable $notifications): \Generator - { - foreach ($notifications as $notification) { - try { - yield from $this->process($notification); - } catch (DuplicateNotificationException $exception) { - $notification->setStatus(NotificationStatus::STATUS_HANDLED); - $this->modelManager->persist($notification); - $this->logger->notice( - $exception->getMessage() - ); - } catch (NoNotificationProcessorFoundException $exception) { - $this->logger->notice( - 'No notification processor found', - [ - 'eventCode' => $notification->getEventCode(), - 'pspReference' => $notification->getPspReference(), - 'status' => $notification->getStatus(), - ] - ); - - yield new NotificationProcessorFeedback(false, $exception->getMessage(), $notification); - } catch (OrderNotFoundException $exception) { - $this->logger->error('No order found for notification', [ - 'eventCode' => $notification->getEventCode(), - 'status ' => $notification->getStatus(), - ]); - $this->eventManager->notify(Event::NOTIFICATION_NO_ORDER_FOUND, [ - 'notification' => $notification, - ]); - - yield new NotificationProcessorFeedback(false, $exception->getMessage(), $notification); - } finally { - $this->modelManager->flush($notification); - } - } - } - - /** - * @throws NoNotificationProcessorFoundException - * @throws OrderNotFoundException - * @throws \Doctrine\ORM\ORMException - * @throws \Enlight_Event_Exception - * - * @psalm-return \Generator - */ - private function process(Notification $notification): \Generator - { - $this->notificationManager->guardDuplicate($notification); - - $processors = $this->findProcessors($notification); - - if (empty($processors)) { - $notification->setStatus(NotificationStatus::STATUS_FATAL); - $this->modelManager->persist($notification); - - throw new NoNotificationProcessorFoundException((string) $notification->getId()); - } - - if (!$notification->getOrder()) { - $notification->setStatus(NotificationStatus::STATUS_FATAL); - $this->modelManager->persist($notification); - - throw new OrderNotFoundException((string) $notification->getOrderId()); - } - - $status = NotificationStatus::STATUS_HANDLED; - foreach ($processors as $processor) { - try { - $processor->process($notification); - } catch (NotificationException $exception) { - $status = NotificationStatus::STATUS_ERROR; - $this->logger->notice('NotificationException', [ - 'message' => $exception->getMessage(), - 'notificationId' => $exception->getNotification()->getId(), - ]); - yield new NotificationProcessorFeedback( - false, - 'NotificationException: '.$exception->getMessage(), - $notification - ); - } catch (\Exception $exception) { - $status = NotificationStatus::STATUS_FATAL; - $this->logger->notice('General Exception', [ - 'exception' => [ - 'message' => $exception->getMessage(), - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - ], - 'notificationId' => $notification->getId(), - ]); - yield new NotificationProcessorFeedback( - false, - 'General Exception: '.$exception->getMessage(), - $notification - ); - } - } - - $notification->setStatus($status); - $this->modelManager->persist($notification); - - yield new NotificationProcessorFeedback(true, 'Processed '.$notification->getId(), $notification); - } - - public function addProcessor(NotificationProcessorInterface $processor): void - { - $this->processors[] = $processor; - } - - /** - * Finds all processors that support this type of Notification. - * - * @param $notification - */ - private function findProcessors(Notification $notification): array - { - $processors = []; - foreach ($this->processors as $processor) { - if ($processor->supports($notification)) { - $processors[] = $processor; - } - } - - return $processors; - } -} diff --git a/Components/NotificationProcessor/Authorisation.php b/Components/NotificationProcessor/Authorisation.php deleted file mode 100755 index b4e59fca..00000000 --- a/Components/NotificationProcessor/Authorisation.php +++ /dev/null @@ -1,105 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - $this->modelManager = $modelManager; - $this->paymentInfoRepository = $modelManager->getRepository(PaymentInfo::class); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - if (!$order) { - return; - } - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_AUTHORISATION, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - $status = $notification->isSuccess() - ? Status::PAYMENT_STATE_COMPLETELY_PAID - : Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED; - - $this->paymentStatusUpdate->updatePaymentStatus($order, $status); - - if ($notification->isSuccess()) { - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $this->paymentInfoRepository->findOneBy([ - 'orderId' => $order->getId(), - ]); - if (!$paymentInfo) { - return; - } - - $paymentInfo->setPspReference($notification->getPspReference()); - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - } -} diff --git a/Components/NotificationProcessor/Cancellation.php b/Components/NotificationProcessor/Cancellation.php deleted file mode 100755 index ac54b55a..00000000 --- a/Components/NotificationProcessor/Cancellation.php +++ /dev/null @@ -1,78 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CANCELLATION, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - if ($notification->isSuccess()) { - $this->paymentStatusUpdate->updatePaymentStatus( - $order, - Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED - ); - } - } -} diff --git a/Components/NotificationProcessor/Capture.php b/Components/NotificationProcessor/Capture.php deleted file mode 100755 index 50425843..00000000 --- a/Components/NotificationProcessor/Capture.php +++ /dev/null @@ -1,108 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - $this->modelManager = $modelManager; - $this->paymentInfoRepository = $modelManager->getRepository(PaymentInfo::class); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws ORMException - * @throws OptimisticLockException - * @throws TransactionRequiredException - * @throws Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - if (!$order) { - return; - } - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CAPTURE, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - if ($notification->isSuccess()) { - $this->paymentStatusUpdate->updatePaymentStatus( - $order, - Status::PAYMENT_STATE_COMPLETELY_PAID - ); - - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $this->paymentInfoRepository->findOneBy([ - 'orderId' => $order->getId(), - ]); - if (!$paymentInfo) { - return; - } - - $paymentInfo->setPspReference($notification->getPspReference()); - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - } -} diff --git a/Components/NotificationProcessor/CaptureFailed.php b/Components/NotificationProcessor/CaptureFailed.php deleted file mode 100755 index 901b69d7..00000000 --- a/Components/NotificationProcessor/CaptureFailed.php +++ /dev/null @@ -1,61 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CAPTURE_FAILED, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - } -} diff --git a/Components/NotificationProcessor/Chargeback.php b/Components/NotificationProcessor/Chargeback.php deleted file mode 100755 index bbae06fc..00000000 --- a/Components/NotificationProcessor/Chargeback.php +++ /dev/null @@ -1,81 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - if (!$order) { - $this->logger->error('No order found', [ - 'eventCode' => $notification->getEventCode(), - 'status ' => $notification->getStatus(), - ]); - - return; - } - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CHARGEBACK, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - $this->paymentStatusUpdate->updatePaymentStatus($order, Status::PAYMENT_STATE_REVIEW_NECESSARY); - } -} diff --git a/Components/NotificationProcessor/ChargebackReversed.php b/Components/NotificationProcessor/ChargebackReversed.php deleted file mode 100755 index 280531f8..00000000 --- a/Components/NotificationProcessor/ChargebackReversed.php +++ /dev/null @@ -1,81 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - if (!$order) { - $this->logger->error('No order found', [ - 'eventCode' => $notification->getEventCode(), - 'status ' => $notification->getStatus(), - ]); - - return; - } - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CHARGEBACK_REVERSED, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - $this->paymentStatusUpdate->updatePaymentStatus($order, Status::PAYMENT_STATE_COMPLETELY_PAID); - } -} diff --git a/Components/NotificationProcessor/ManualReviewAccept.php b/Components/NotificationProcessor/ManualReviewAccept.php deleted file mode 100755 index 64b2a47e..00000000 --- a/Components/NotificationProcessor/ManualReviewAccept.php +++ /dev/null @@ -1,55 +0,0 @@ -eventManager = $eventManager; - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CANCELLATION, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - } -} diff --git a/Components/NotificationProcessor/ManualReviewReject.php b/Components/NotificationProcessor/ManualReviewReject.php deleted file mode 100755 index 4f13416d..00000000 --- a/Components/NotificationProcessor/ManualReviewReject.php +++ /dev/null @@ -1,86 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - $this->configuration = $configuration; - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_CANCELLATION, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - if ($notification->isSuccess()) { - if ('Cancel' === $this->configuration->getManualReviewRejectAction()) { - $this->paymentStatusUpdate->updatePaymentStatus( - $order, - Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED - ); - } - } - } -} diff --git a/Components/NotificationProcessor/NotificationProcessorInterface.php b/Components/NotificationProcessor/NotificationProcessorInterface.php deleted file mode 100644 index da223857..00000000 --- a/Components/NotificationProcessor/NotificationProcessorInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_OFFER_CLOSED, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - if ($notification->isSuccess()) { - $this->paymentStatusUpdate->updateOrderStatus( - $order, - Status::ORDER_STATE_CANCELLED_REJECTED - ); - $this->paymentStatusUpdate->updatePaymentStatus( - $order, - Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED - ); - } - } -} diff --git a/Components/NotificationProcessor/Refund.php b/Components/NotificationProcessor/Refund.php deleted file mode 100755 index 0d116d7c..00000000 --- a/Components/NotificationProcessor/Refund.php +++ /dev/null @@ -1,75 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_REFUND, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - if ($notification->isSuccess()) { - $this->paymentStatusUpdate->updatePaymentStatus($order, Status::PAYMENT_STATE_RE_CREDITING); - } - } -} diff --git a/Components/NotificationProcessor/RefundFailed.php b/Components/NotificationProcessor/RefundFailed.php deleted file mode 100755 index 23fdf091..00000000 --- a/Components/NotificationProcessor/RefundFailed.php +++ /dev/null @@ -1,70 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_REFUND_FAILED, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - } -} diff --git a/Components/NotificationProcessor/RefundedReversed.php b/Components/NotificationProcessor/RefundedReversed.php deleted file mode 100755 index a3ea29fa..00000000 --- a/Components/NotificationProcessor/RefundedReversed.php +++ /dev/null @@ -1,73 +0,0 @@ -logger = $logger; - $this->eventManager = $eventManager; - $this->paymentStatusUpdate = $paymentStatusUpdate->setLogger($this->logger); - } - - /** - * Returns boolean on whether this processor can process the Notification object. - */ - public function supports(Notification $notification): bool - { - return self::EVENT_CODE === mb_strtoupper($notification->getEventCode()); - } - - /** - * Actual processing of the notification. - * - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - * @throws \Enlight_Event_Exception - */ - public function process(Notification $notification): void - { - $order = $notification->getOrder(); - - $this->eventManager->notify( - Event::NOTIFICATION_PROCESS_REFUNDED_REVERSED, - [ - 'order' => $order, - 'notification' => $notification, - ] - ); - - $this->paymentStatusUpdate->updatePaymentStatus($order, Status::PAYMENT_STATE_COMPLETELY_PAID); - } -} diff --git a/Components/OrderMailService.php b/Components/OrderMailService.php deleted file mode 100755 index 435758d7..00000000 --- a/Components/OrderMailService.php +++ /dev/null @@ -1,90 +0,0 @@ -modelManager = $modelManager; - $this->basketService = $basketService; - } - - /** - * Executes provided callback without sending order confirmation email. - * - * @param callable $callback The callback to execute without email sending - * @param array $args The parameters to be passed to the callback, as an indexed array - */ - public function doWithoutSendingOrderConfirmationMail(callable $callback, array $args = []) - { - $this->isOrderConfirmationEmailRestricted = true; - - try { - $result = call_user_func_array($callback, $args); - } finally { - $this->isOrderConfirmationEmailRestricted = false; - } - - return $result; - } - - /** - * Sends the mail after a payment is confirmed. - */ - public function sendOrderConfirmationMail(string $orderNumber): void - { - $order = $this->basketService->getOrderByOrderNumber($orderNumber); - if (!$order) { - return; - } - - $paymentInfoRepository = $this->modelManager->getRepository(PaymentInfo::class); - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $paymentInfoRepository->findOneBy([ - 'orderId' => $order->getId(), - ]); - - if (!$paymentInfo || null === $paymentInfo->getOrdermailVariables()) { - return; - } - - $variables = json_decode($paymentInfo->getOrdermailVariables(), true); - if (is_array($variables)) { - $sOrder = Shopware()->Modules()->Order(); - - $sOrder->sUserData = $variables; - $sOrder->sBasketData = $sOrder->sBasketData ?? []; - - // Do not use CheckoutKey::CURRENCY_NAME constant because of the compatibility with SW 5.6.0 - if (!array_key_exists('sCurrencyName', $sOrder->sBasketData)) { - $sOrder->sBasketData['sCurrencyName'] = $variables['adyen_currency'] ?? null; - } - - $sOrder->sendMail($variables); - } - - $paymentInfo->setOrdermailVariables(null); - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - - public function isOrderConfirmationEmailRestricted(): bool - { - return $this->isOrderConfirmationEmailRestricted; - } -} diff --git a/Components/Payload/Chain.php b/Components/Payload/Chain.php deleted file mode 100755 index dbfd42c1..00000000 --- a/Components/Payload/Chain.php +++ /dev/null @@ -1,36 +0,0 @@ -providers = $providers; - } - - public function provide(PaymentContext $context): array - { - return array_reduce( - $this->providers, - static function(array $payload, PaymentPayloadProvider $provider) use ($context): array { - return array_merge_recursive($payload, $provider->provide($context)); - }, - [] - ); - } -} diff --git a/Components/Payload/PaymentContext.php b/Components/Payload/PaymentContext.php deleted file mode 100755 index 570b456c..00000000 --- a/Components/Payload/PaymentContext.php +++ /dev/null @@ -1,102 +0,0 @@ -paymentInfo = $paymentInfo; - $this->order = $order; - $this->basket = $basket; - $this->browserInfo = $browserInfo; - $this->shopperInfo = $shopperInfo; - $this->origin = $origin; - $this->transaction = $transaction; - $this->storePaymentMethod = $storePaymentMethod; - } - - public function getPaymentInfo(): array - { - return $this->paymentInfo; - } - - public function getOrder(): Order - { - return $this->order; - } - - public function getBasket(): sBasket - { - return $this->basket; - } - - public function getBrowserInfo(): array - { - return $this->browserInfo; - } - - public function getShopperInfo(): array - { - return $this->shopperInfo; - } - - public function getOrigin(): string - { - return $this->origin; - } - - public function getTransaction(): PaymentInfo - { - return $this->transaction; - } - - public function enableStorePaymentMethod(): bool - { - return $this->storePaymentMethod; - } -} diff --git a/Components/Payload/PaymentPayloadProvider.php b/Components/Payload/PaymentPayloadProvider.php deleted file mode 100644 index 5d6625df..00000000 --- a/Components/Payload/PaymentPayloadProvider.php +++ /dev/null @@ -1,13 +0,0 @@ -router = $router; - $this->modelManager = $modelManager; - $this->configuration = $configuration; - $this->shopwareVersionCheck = $shopwareVersionCheck; - } - - public function provide(PaymentContext $context): array - { - $returnUrl = $this->router->assemble([ - 'controller' => 'process', - 'action' => 'return', - ]).'?'.http_build_query([ - 'merchantReference' => $context->getOrder()->getNumber(), - ]); - $plugin = $this->modelManager->getRepository(Plugin::class)->findOneBy(['name' => AdyenPayment::NAME]); - - return [ - 'additionalData' => [ - 'executeThreeD' => true, - 'allow3DS2' => true, - ], - 'channel' => Channel::WEB, - 'origin' => $context->getOrigin(), - 'returnUrl' => $returnUrl, - 'merchantAccount' => $this->configuration->getMerchantAccount(), - 'applicationInfo' => [ - 'adyenPaymentSource' => [ - 'name' => $plugin->getLabel(), - 'version' => $plugin->getVersion(), - ], - 'externalPlatform' => [ - 'name' => 'Shopware', - 'version' => $this->shopwareVersionCheck->getShopwareVersion(), - 'integrator' => $plugin->getAuthor(), - ], - 'merchantApplication' => [ - 'name' => $plugin->getLabel(), - 'version' => $plugin->getVersion(), - ], - ], - ]; - } -} diff --git a/Components/Payload/Providers/BrowserInfoProvider.php b/Components/Payload/Providers/BrowserInfoProvider.php deleted file mode 100644 index f9ec7cc3..00000000 --- a/Components/Payload/Providers/BrowserInfoProvider.php +++ /dev/null @@ -1,27 +0,0 @@ - array_merge($browserInfo, $context->getBrowserInfo()), - ]; - } -} diff --git a/Components/Payload/Providers/LineItemsInfoProvider.php b/Components/Payload/Providers/LineItemsInfoProvider.php deleted file mode 100755 index a83c6b84..00000000 --- a/Components/Payload/Providers/LineItemsInfoProvider.php +++ /dev/null @@ -1,119 +0,0 @@ -priceCalculationService = $priceCalculationService; - $this->logger = $logger; - $this->adyenCurrency = new Currency(); - } - - /** - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - */ - public function provide(PaymentContext $context): array - { - return [ - 'lineItems' => array_merge( - $this->buildOrderLines($context), - $this->buildShippingLines($context) - ), - ]; - } - - private function buildOrderLines(PaymentContext $context): array - { - $orderLines = []; - $currencyCode = $context->getOrder()->getCurrency(); - - /** @var Detail $detail */ - foreach ($context->getOrder()->getDetails() as $detail) { - if (empty($detail->getArticleName())) { - $this->logger->warning( - sprintf('Skipped order detail of order #%s - empty article name.', $context->getOrder()->getId()) - ); - - continue; - } - - $orderLines[] = [ - 'quantity' => $detail->getQuantity(), - 'amountExcludingTax' => $this->adyenCurrency->sanitize( - $this->priceCalculationService->getAmountExcludingTax($detail->getPrice(), $detail->getTaxRate()), - $currencyCode - ), - 'taxPercentage' => $this->adyenCurrency->sanitize($detail->getTaxRate(), $currencyCode), - 'description' => $detail->getArticleName(), - 'id' => $detail->getId(), - 'taxAmount' => $this->adyenCurrency->sanitize( - $this->priceCalculationService->getTaxAmount($detail->getPrice(), $detail->getTaxRate()), - $currencyCode - ), - 'amountIncludingTax' => $this->adyenCurrency->sanitize($detail->getPrice(), $currencyCode), - ]; - } - - return $orderLines; - } - - private function buildShippingLines(PaymentContext $context): array - { - $currencyCode = $context->getOrder()->getCurrency(); - $amountExcludingTax = $this->adyenCurrency->sanitize( - $context->getOrder()->getInvoiceShippingNet(), - $currencyCode - ); - $amountIncludingTax = $this->adyenCurrency->sanitize( - $context->getOrder()->getInvoiceShipping(), - $currencyCode - ); - $dispatch = $context->getOrder()->getDispatch(); - - if (!$dispatch || !$dispatch->getId()) { - return []; - } - - return [ - [ - 'quantity' => 1, - 'amountExcludingTax' => $amountExcludingTax, - 'taxPercentage' => $this->adyenCurrency->sanitize( - $context->getOrder()->getInvoiceShippingTaxRate(), - $currencyCode - ), - 'description' => $dispatch->getName(), - 'id' => $dispatch->getId(), - 'taxAmount' => $amountIncludingTax - $amountExcludingTax, - 'amountIncludingTax' => $amountIncludingTax, - ], - ]; - } -} diff --git a/Components/Payload/Providers/OrderInfoProvider.php b/Components/Payload/Providers/OrderInfoProvider.php deleted file mode 100644 index 194ebb4a..00000000 --- a/Components/Payload/Providers/OrderInfoProvider.php +++ /dev/null @@ -1,29 +0,0 @@ -getOrder()->getCurrency(); - - return [ - 'amount' => [ - 'currency' => $currencyCode, - 'value' => $adyenCurrency->sanitize($context->getOrder()->getInvoiceAmount(), $currencyCode), - ], - 'reference' => $context->getOrder()->getNumber(), - ]; - } -} diff --git a/Components/Payload/Providers/PaymentMethodProvider.php b/Components/Payload/Providers/PaymentMethodProvider.php deleted file mode 100644 index 7c506696..00000000 --- a/Components/Payload/Providers/PaymentMethodProvider.php +++ /dev/null @@ -1,21 +0,0 @@ - $context->getPaymentInfo(), - ]; - } -} diff --git a/Components/Payload/Providers/RecurringOneOffPaymentTokenProvider.php b/Components/Payload/Providers/RecurringOneOffPaymentTokenProvider.php deleted file mode 100644 index 2f4268ad..00000000 --- a/Components/Payload/Providers/RecurringOneOffPaymentTokenProvider.php +++ /dev/null @@ -1,27 +0,0 @@ -getPaymentInfo(); - $storedPaymentMethodId = (string) ($paymentInfo['storedPaymentMethodId'] ?? ''); - if ('' === $storedPaymentMethodId) { - return []; - } - - return [ - 'shopperInteraction' => ShopperInteraction::ecommerce()->shopperInteraction(), - 'recurringProcessingModel' => RecurringProcessingModel::cardOnFile()->recurringProcessingModel(), - ]; - } -} diff --git a/Components/Payload/Providers/RecurringPaymentProvider.php b/Components/Payload/Providers/RecurringPaymentProvider.php deleted file mode 100644 index bea7d3d3..00000000 --- a/Components/Payload/Providers/RecurringPaymentProvider.php +++ /dev/null @@ -1,27 +0,0 @@ -getPaymentInfo(); - $storedPaymentMethodId = (string) ($paymentInfo['storedPaymentMethodId'] ?? ''); - if ('' === $storedPaymentMethodId) { - return []; - } - - return [ - 'shopperInteraction' => ShopperInteraction::contAuth()->shopperInteraction(), - 'recurringProcessingModel' => RecurringProcessingModel::cardOnFile()->recurringProcessingModel(), - ]; - } -} diff --git a/Components/Payload/Providers/ShopperInfoProvider.php b/Components/Payload/Providers/ShopperInfoProvider.php deleted file mode 100644 index cbe0d00b..00000000 --- a/Components/Payload/Providers/ShopperInfoProvider.php +++ /dev/null @@ -1,40 +0,0 @@ - $context->getShopperInfo()['shopperIP'], - 'shopperEmail' => $context->getOrder()->getCustomer()->getEmail(), - 'shopperName' => [ - 'firstName' => $context->getOrder()->getCustomer()->getFirstname(), - 'lastName' => $context->getOrder()->getCustomer()->getLastname(), - 'gender' => $context->getOrder()->getCustomer()->getSalutation(), - ], - 'shopperLocale' => Shopware()->Shop()->getLocale()->getLocale(), - 'shopperReference' => $context->getOrder()->getCustomer()->getNumber(), - 'countryCode' => $context->getOrder()->getBilling()->getCountry()->getIso(), - 'billingAddress' => [ - 'city' => $context->getOrder()->getBilling()->getCity(), - 'country' => $context->getOrder()->getBilling()->getCountry()->getIso(), - 'stateOrProvince' => $context->getOrder()->getBilling()->getState() ? - $context->getOrder()->getBilling()->getState()->getShortCode() : - $context->getOrder()->getBilling()->getCountry()->getIso(), - 'houseNumberOrName' => 'N/A', - 'postalCode' => $context->getOrder()->getBilling()->getZipCode(), - 'street' => $context->getOrder()->getBilling()->getStreet(), - ], - ]; - } -} diff --git a/Components/Payload/Providers/StorePaymentProvider.php b/Components/Payload/Providers/StorePaymentProvider.php deleted file mode 100644 index 52f52113..00000000 --- a/Components/Payload/Providers/StorePaymentProvider.php +++ /dev/null @@ -1,18 +0,0 @@ - $context->enableStorePaymentMethod(), - ]; - } -} diff --git a/Components/PaymentMeansEnricher.php b/Components/PaymentMeansEnricher.php new file mode 100644 index 00000000..bf8ffd77 --- /dev/null +++ b/Components/PaymentMeansEnricher.php @@ -0,0 +1,296 @@ +snippets = $snippets; + $this->checkoutConfigProvider = $checkoutConfigProvider; + } + + public function enrich(array $paymentMeans): array + { + if (AdminAPI::get()->integration(Shopware()->Shop()->getId())->getState()->toArray()!==StateResponse::dashboard( + )->toArray()) { + $this->removeAdyenPaymentMeans($paymentMeans); + + return $paymentMeans; + } + + return array_merge( + $this->enrichPaymentMeans($paymentMeans), + $this->enrichStoredPaymentMeans($paymentMeans) + ); + } + + public function enrichPaymentMean(array $paymentMean, string $selectedStoredPaymentMethodId = ''): array + { + $umbrellaPaymentMean = $this->findUmbrellaPaymentMean([$paymentMean]); + if (!empty($umbrellaPaymentMean)) { + $enriched = $this->enrichStoredPaymentMeans([$paymentMean], $selectedStoredPaymentMethodId); + + return !empty($enriched) ? current($enriched):$paymentMean; + } + + $enrichedPaymentMeans = $this->enrichPaymentMeans([$paymentMean]); + + return !empty($enrichedPaymentMeans) ? current($enrichedPaymentMeans):[]; + } + + private function enrichPaymentMeans(array $paymentMeans): array + { + $paymentMethodConfigsMap = $this->getPaymentMethodConfigurationMap(); + $totalProductsAmount = Shopware()->Modules()->Basket()->sGetAmountArticles(); + $currencyFactor = Shopware()->Shop()->getCurrency()->getFactor(); + + return array_map( + static function (array $paymentMean) use ( + $totalProductsAmount, + $currencyFactor, + $paymentMethodConfigsMap + ) { + $adyenPaymentType = Plugin::getAdyenPaymentType($paymentMean['name']); + $paymentMean['isAdyenPaymentMethod'] = Plugin::isAdyenPaymentMean($paymentMean['name']); + $paymentMean['isStoredPaymentMethod'] = false; + $paymentMean['adyenPaymentType'] = $adyenPaymentType; + if ( + $paymentMean['isAdyenPaymentMethod'] && + array_key_exists($paymentMean['adyenPaymentType'], $paymentMethodConfigsMap) + ) { + $paymentMethod = $paymentMethodConfigsMap[$paymentMean['adyenPaymentType']]; + $paymentMean['image'] = $paymentMethod->getLogo(); + $paymentMean['description'] = $paymentMethod->getName(); + $paymentMean['additionaldescription'] = $paymentMethod->getDescription(); + $paymentMean['surchargeAmount'] = self::calculateSurchargeAmount( + $paymentMethod, + $currencyFactor, + (float)$totalProductsAmount['totalAmount'] + ); + $paymentMean['surchargeLimit'] = self::calculateSurchargeLimit($paymentMethod); + } + + return $paymentMean; + }, + $this->getOnlyAvailablePaymentMeans($paymentMeans) + ); + } + + private static function calculateSurchargeAmount( + PaymentMethod $paymentMethod, + float $currencyFactor, + float $productAmount + ): float { + $surchargeType = $paymentMethod->getSurchargeType(); + $fixedAmount = (float)$paymentMethod->getFixedSurcharge() * $currencyFactor; + $limit = (float)$paymentMethod->getSurchargeLimit() * $currencyFactor; + $percent = $paymentMethod->getPercentSurcharge(); + + if ($surchargeType === 'fixed') { + return $fixedAmount; + } + + if ($surchargeType === 'percent') { + $amount = ($productAmount) / 100 * $percent; + + return $limit && $amount > $limit ? $limit : $amount; + } + + if ($surchargeType === 'combined') { + $amount = ($productAmount + $fixedAmount) / 100 * $percent; + + return $limit ? (min($amount + $fixedAmount, $limit)) : $amount + $fixedAmount ; + } + + return 0; + } + + private static function calculateSurchargeLimit(PaymentMethod $paymentMethod): float + { + $surchargeType = $paymentMethod->getSurchargeType(); + + if ($surchargeType === 'fixed') { + return 0; + } + + if ($surchargeType === 'percent') { + return $paymentMethod->getSurchargeLimit() ?? 0; + } + + if ($surchargeType === 'combined') { + return $paymentMethod->getFixedSurcharge() && $paymentMethod->getSurchargeLimit( + ) ? $paymentMethod->getSurchargeLimit() - $paymentMethod->getFixedSurcharge( + ) : $paymentMethod->getSurchargeLimit() ?? 0; + } + + return 0; + } + + private function enrichStoredPaymentMeans(array $paymentMeans, string $selectedStoredPaymentMethodId = ''): array + { + $umbrellaPaymentMean = $this->findUmbrellaPaymentMean($paymentMeans); + if (empty($umbrellaPaymentMean)) { + return []; + } + + $paymentMethodConfigsMap = $this->getPaymentMethodConfigurationMap(); + $checkoutConfig = $this->checkoutConfigProvider->getCheckoutConfig(); + + if (!$checkoutConfig->isSuccessful()) { + return []; + } + + $storedPaymentMethodsResponse = $checkoutConfig->getStoredPaymentMethodResponse(); + if (!empty($selectedStoredPaymentMethodId)) { + $storedPaymentMethodsResponse = $this->filterSelectedStoredPaymentMethod( + $storedPaymentMethodsResponse, + $selectedStoredPaymentMethodId + ); + } + + return array_map( + function ( + PaymentMethodResponse $paymentMethodResponse + ) use ( + $umbrellaPaymentMean, + $paymentMethodConfigsMap + ) { + $paymentMean = [ + 'isAdyenPaymentMethod' => true, + 'isStoredPaymentMethod' => true, + 'storedPaymentMethodId' => $paymentMethodResponse->getMetaData()['id'], + 'adyenPaymentType' => $paymentMethodResponse->getType(), + 'description' => $paymentMethodResponse->getName(), + 'additionaldescription' => sprintf( + $this->snippets + ->getNamespace('frontend/adyen/checkout') + ->get( + 'payment/adyen/card_number_ending_on', + 'Card number ending on: %s', + true + ), + $paymentMethodResponse->getMetaData()['lastFour'] + ), + ]; + + if (array_key_exists($paymentMean['adyenPaymentType'], $paymentMethodConfigsMap)) { + $paymentMethod = $paymentMethodConfigsMap[$paymentMean['adyenPaymentType']]; + $paymentMean['image'] = $paymentMethod->getLogo(); + $paymentMean['additionaldescription'] = implode( + '. ', [$paymentMethod->getDescription(), $paymentMean['additionaldescription']] + ); + } + + return array_merge($umbrellaPaymentMean, $paymentMean); + }, + $storedPaymentMethodsResponse + ); + } + + private function getOnlyAvailablePaymentMeans(array $paymentMeans): array + { + $checkoutConfig = $this->checkoutConfigProvider->getCheckoutConfig(); + + $availablePaymentMethodTypes = []; + if ($checkoutConfig->isSuccessful()) { + $availablePaymentMethodTypes = array_map(static function (PaymentMethodResponse $paymentMethodResponse) { + return $paymentMethodResponse->getType(); + }, $checkoutConfig->getPaymentMethodResponse()); + } + + return array_filter( + array_map(static function (array $paymentMean) use ($availablePaymentMethodTypes) { + if (!Plugin::isAdyenPaymentMean($paymentMean['name'])) { + return $paymentMean; + } + + $paymentMeanType = Plugin::getAdyenPaymentType($paymentMean['name']); + + return in_array($paymentMeanType, $availablePaymentMethodTypes, true) ? $paymentMean:null; + }, $paymentMeans) + ); + } + + /** + * @return array + * @throws InvalidCurrencyCode + */ + private function getPaymentMethodConfigurationMap(): array + { + $checkoutConfig = $this->checkoutConfigProvider->getCheckoutConfig(); + if (!$checkoutConfig->isSuccessful()) { + return []; + } + + $paymentMethodConfigsMap = []; + foreach ($checkoutConfig->getPaymentMethodsConfiguration() as $paymentMethodConfig) { + $paymentMethodConfigsMap[$paymentMethodConfig->getCode()] = $paymentMethodConfig; + } + + return $paymentMethodConfigsMap; + } + + private function findUmbrellaPaymentMean(array $paymentMeans): array + { + foreach ($paymentMeans as $paymentMean) { + if ($paymentMean['name']===AdyenPayment::STORED_PAYMENT_UMBRELLA_NAME) { + return $paymentMean; + } + } + + return []; + } + + /** + * @param PaymentMethodResponse[] $storedPaymentMethodsResponse + * @param string $selectedStoredPaymentMethodId + * @return PaymentMethodResponse[] + */ + private function filterSelectedStoredPaymentMethod( + array $storedPaymentMethodsResponse, + string $selectedStoredPaymentMethodId + ): array { + foreach ($storedPaymentMethodsResponse as $paymentMethodResponse) { + if ($paymentMethodResponse->getMetaData()['id']===$selectedStoredPaymentMethodId) { + return [$paymentMethodResponse]; + } + } + + return []; + } + + private function removeAdyenPaymentMeans(array &$paymentMeans) + { + foreach ($paymentMeans as $key => $paymentMean) { + if (strpos($paymentMean['name'], 'adyen')!==false) { + unset($paymentMeans[$key]); + } + } + } +} diff --git a/Components/PaymentStatusUpdate.php b/Components/PaymentStatusUpdate.php deleted file mode 100755 index 6871cd28..00000000 --- a/Components/PaymentStatusUpdate.php +++ /dev/null @@ -1,105 +0,0 @@ -modelManager = $modelManager; - $this->eventManager = $eventManager; - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - */ - public function updateOrderStatus(Order $order, int $statusId): void - { - $orderStatus = $this->modelManager->find(Status::class, $statusId); - - if ($this->logger) { - $this->logger->debug('Update order status', [ - 'number' => $order->getNumber(), - 'oldStatus' => $order->getOrderStatus()->getName(), - 'newStatus' => $orderStatus->getName(), - ]); - } - - $this->eventManager->notify( - Event::ORDER_STATUS_CHANGED, - [ - 'order' => $order, - 'newStatus' => $orderStatus, - ] - ); - - $order->setOrderStatus($orderStatus); - $this->modelManager->persist($order); - $this->modelManager->flush(); - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - */ - public function updatePaymentStatus(Order $order, int $statusId): void - { - $paymentStatus = $this->modelManager->find(Status::class, $statusId); - - if ($this->logger) { - $this->logger->debug('Update order payment status', [ - 'number' => $order->getNumber(), - 'oldStatus' => $order->getPaymentStatus()->getName(), - 'newStatus' => $paymentStatus->getName(), - ]); - } - - $this->eventManager->notify( - Event::ORDER_PAYMENT_STATUS_CHANGED, - [ - 'order' => $order, - 'newStatus' => $paymentStatus, - ] - ); - - $order->setPaymentStatus($paymentStatus); - $this->modelManager->persist($order); - $this->modelManager->flush(); - } - - /** - * @return static - */ - public function setLogger(LoggerInterface $logger): self - { - $this->logger = $logger; - - return $this; - } -} diff --git a/Components/ShopwareVersionCheck.php b/Components/ShopwareVersionCheck.php old mode 100755 new mode 100644 index 4ec2c6db..d7588aa7 --- a/Components/ShopwareVersionCheck.php +++ b/Components/ShopwareVersionCheck.php @@ -5,8 +5,6 @@ namespace AdyenPayment\Components; use OutOfBoundsException; -use PackageVersions\Versions; -use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; class ShopwareVersionCheck @@ -16,15 +14,9 @@ class ShopwareVersionCheck /** @var ContainerInterface */ private $container; - /** @var LoggerInterface */ - private $logger; - - public function __construct( - ContainerInterface $container, - LoggerInterface $logger - ) { + public function __construct(ContainerInterface $container) + { $this->container = $container; - $this->logger = $logger; } public function isHigherThanShopwareVersion(string $shopwareVersion): bool @@ -42,23 +34,16 @@ public function isHigherThanShopwareVersion(string $shopwareVersion): bool return version_compare($shopwareVersion, $version, '<'); } - /** - * @psalm-suppress UndefinedClass - */ public function getShopwareVersion(): string { $version = $this->container->get('shopware.release')->getVersion(); - if (self::SHOPWARE === $version) { + if (self::SHOPWARE === $version && class_exists('\PackageVersions\Versions')) { try { - [$composerVersion, $sha] = explode('@', Versions::getVersion('shopware/shopware')); + [$composerVersion, $sha] = explode('@', \PackageVersions\Versions::getVersion('shopware/shopware')); $version = $composerVersion; } catch (OutOfBoundsException $ex) { - $this->logger->error('OutOfBoundsException', [ - 'message' => $ex->getMessage(), - 'file' => $ex->getFile(), - 'line' => $ex->getLine(), - ]); + /* Intentionally left empty */ } } diff --git a/Components/TextNotificationManager.php b/Components/TextNotificationManager.php deleted file mode 100644 index 6e968cd6..00000000 --- a/Components/TextNotificationManager.php +++ /dev/null @@ -1,39 +0,0 @@ -modelManager = $modelManager; - $this->textNotificationRepository = $modelManager->getRepository(TextNotification::class); - } - - public function getTextNextNotificationsToHandle(): array - { - $builder = $this->textNotificationRepository->createQueryBuilder('n'); - $builder->orderBy('n.createdAt', 'ASC')->setMaxResults(20); - - return $builder->getQuery()->getResult(); - } -} diff --git a/Components/TransactionDetailsService.php b/Components/TransactionDetailsService.php new file mode 100644 index 00000000..1cee13c9 --- /dev/null +++ b/Components/TransactionDetailsService.php @@ -0,0 +1,38 @@ + $item) { + $result[$key]['amountCurrency'] = $item['amountCurrency'] ? Currencies::getSymbol($item['amountCurrency']) : ''; + } + + return $result; + } +} diff --git a/Components/UninstallService.php b/Components/UninstallService.php new file mode 100644 index 00000000..0f5cc0dc --- /dev/null +++ b/Components/UninstallService.php @@ -0,0 +1,92 @@ +storeService = $storeService; + } + + /** + * @throws Exception + */ + public function uninstall(): void + { + $connectedStores = $this->storeService->getConnectedStores(); + + foreach ($connectedStores as $store) { + StoreContext::doWithStore( + $store, + function () { + $this->doUninstall(); + } + ); + } + } + + /** + * @return void + * + * @throws Exception + */ + private function doUninstall(): void + { + try { + $this->deleteImages(); + + /** @var DisconnectService $disconnectService */ + $disconnectService = ServiceRegister::getService(DisconnectService::class); + $disconnectService->removeWebhook(); + $disconnectService->disconnectIntegration(); + } catch (Exception $exception) { + Shopware()->Container()->get('corelogger')->warning( + 'Uninstallation for store ' + . StoreContext::getInstance()->getStoreId() . ' failed: ' . $exception->getMessage() + ); + } + } + + /** + * @throws FailedToRetrievePaymentMethodsException + * @throws Exception + */ + private function deleteImages(): void + { + $storeId = StoreContext::getInstance()->getStoreId(); + /** @var FileService $disconnectService */ + $fileService = ServiceRegister::getService(FileService::class); + $fileService->delete('adyen-giving-logo-store-' . $storeId); + $fileService->delete('adyen-giving-background-store-' . $storeId); + + /** @var PaymentMethodConfigRepository $paymentService */ + $paymentService = ServiceRegister::getService(PaymentMethodConfigRepository::class); + $paymentMethods = $paymentService->getConfiguredPaymentMethods(); + foreach ($paymentMethods as $method) { + $fileService->delete($method->getMethodId() . '_store_' . $storeId); + } + } +} diff --git a/Components/WebComponents/ApplePayConfigProvider.php b/Components/WebComponents/ApplePayConfigProvider.php deleted file mode 100644 index 1c2cc251..00000000 --- a/Components/WebComponents/ApplePayConfigProvider.php +++ /dev/null @@ -1,50 +0,0 @@ -getUserData()['additional']['payment']; - - if (!isset($paymentData['metadata']['configuration'])) { - $configuration = []; - } - - $configuration['merchantName'] = $paymentData['metadata']['configuration']['merchantName'] ?? ''; - $configuration['merchantId'] = $paymentData['metadata']['configuration']['merchantId'] ?? ''; - - return [ - 'countryCode' => (string) ($context->getUserData()['additional']['country']['countryiso'] ?? ''), - 'amount' => [ - 'value' => (new Currency())->sanitize( - (float) ($context->getBasket()['AmountNumeric'] ?? 0.0), - (string) ($context->getBasket()['sCurrencyName'] ?? '') - ), - 'currency' => (string) ($context->getBasket()['sCurrencyName'] ?? ''), - ], - 'configuration' => $configuration, - ]; - } -} diff --git a/Components/WebComponents/ConfigContext.php b/Components/WebComponents/ConfigContext.php deleted file mode 100755 index 454d21c3..00000000 --- a/Components/WebComponents/ConfigContext.php +++ /dev/null @@ -1,41 +0,0 @@ -getSubject(); - $userData = $subject->View()->getAssign('sUserData') ?? []; - $basket = $subject->View()->getAssign('sBasket') ?? []; - - $new = new self(); - $new->userData = $userData; - $new->basket = $basket; - - return $new; - } - - public function getUserData(): array - { - return $this->userData; - } - - public function getBasket(): array - { - return $this->basket; - } -} diff --git a/Components/WebComponents/ConfigProvider.php b/Components/WebComponents/ConfigProvider.php deleted file mode 100644 index 9279525d..00000000 --- a/Components/WebComponents/ConfigProvider.php +++ /dev/null @@ -1,10 +0,0 @@ -configuration = $configuration; - } - - /** - * @return array{ - * environment: "PRODUCTION"|"TEST", - * countryCode: string, - * amount: array{ - * value: int, - * currency: string, - * }, - * configuration: array{ - * gatewayMerchantId: string - * }, - * } - */ - public function __invoke(ConfigContext $context): array - { - return [ - 'environment' => $this->configuration->isTestMode() ? 'TEST' : 'PRODUCTION', - 'countryCode' => (string) ($context->getUserData()['additional']['country']['countryiso'] ?? ''), - 'amount' => [ - 'value' => (new Currency())->sanitize( - (float) ($context->getBasket()['AmountNumeric'] ?? 0.0), - (string) ($context->getBasket()['sCurrencyName'] ?? '') - ), - 'currency' => (string) ($context->getBasket()['sCurrencyName'] ?? ''), - ], - 'configuration' => [ - 'gatewayMerchantId' => $this->configuration->getMerchantAccount(), - ], - ]; - } -} diff --git a/Controllers/Backend/AdyenAuthorization.php b/Controllers/Backend/AdyenAuthorization.php new file mode 100644 index 00000000..d452d9e9 --- /dev/null +++ b/Controllers/Backend/AdyenAuthorization.php @@ -0,0 +1,53 @@ +Request()->get('storeId'); + $connectionRequest = new ConnectionRequest( + $storeId, + $requestData['mode'] ?? '', + $requestData['testData']['apiKey'] ?? '', + $requestData['testData']['merchantId'] ?? '', + $requestData['liveData']['apiKey'] ?? '', + $requestData['liveData']['merchantId'] ?? '' + ); + + $result = AdminAPI::get()->connection($storeId)->connect($connectionRequest); + + $this->returnAPIResponse($result); + } + + /** + * @return void + */ + public function getConnectionSettingsAction(): void + { + $storeId = $this->Request()->get('storeId'); + $result = AdminAPI::get()->connection($storeId)->getConnectionSettings(); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenAutoTest.php b/Controllers/Backend/AdyenAutoTest.php new file mode 100644 index 00000000..f0284897 --- /dev/null +++ b/Controllers/Backend/AdyenAutoTest.php @@ -0,0 +1,71 @@ +autoTest()->startAutoTest(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function autoTestStatusAction(): void + { + $queueItemId = $this->Request()->get('queueItemId'); + $result = AdminAPI::get()->autoTest()->autoTestStatus($queueItemId ?? 0); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws RepositoryNotRegisteredException + * @throws Exception + */ + public function getReportAction(): void + { + $result = AdminAPI::get()->autoTest()->autoTestReport(); + + $data = json_encode($result->toArray(), JSON_PRETTY_PRINT); + $response = $this->Response(); + $response->headers->set('content-description', 'File Transfer'); + $response->headers->set('content-type', 'application/octet-stream'); + $response->headers->set('content-disposition', 'attachment; filename=auto-test-logs.json'); + $response->headers->set('cache-control', 'public', true); + $response->headers->set('content-length', (string)strlen($data)); + $response->sendHeaders(); + + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $out = fopen('php://output', 'wb'); + + fwrite($out, $data); + fclose($out); + } +} diff --git a/Controllers/Backend/AdyenDebug.php b/Controllers/Backend/AdyenDebug.php new file mode 100644 index 00000000..76dfbb44 --- /dev/null +++ b/Controllers/Backend/AdyenDebug.php @@ -0,0 +1,34 @@ +debug()->getDebugMode(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + */ + public function setDebugModeAction(): void + { + $requestData = Request::getPostData(); + $result = AdminAPI::get()->debug()->setDebugMode($requestData['debugMode'] ?? false); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenDisconnect.php b/Controllers/Backend/AdyenDisconnect.php new file mode 100644 index 00000000..5efae0a3 --- /dev/null +++ b/Controllers/Backend/AdyenDisconnect.php @@ -0,0 +1,76 @@ +ajaxResponseSetterPreDispatch(); + $this->fileService = $this->get(FileService::class); + } + + /** + * @throws Exception + */ + public function disconnectAction(): void + { + $storeId = $this->Request()->get('storeId'); + + $response = AdminAPI::get()->integration($storeId)->getState(); + if ($response->toArray() === StateResponse::onboarding()->toArray()) { + $this->returnAPIResponse($response); + + return; + } + StoreContext::doWithStore($storeId, function () { + $this->removeImages(); + }); + $result = AdminAPI::get()->disconnect($storeId)->disconnect(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws Exception + */ + private function removeImages(): void + { + $storeId = StoreContext::getInstance()->getStoreId(); + $this->fileService->delete('adyen-giving-logo-store-' . $storeId); + $this->fileService->delete('adyen-giving-background-store-' . $storeId); + + foreach ($this->getPaymentMethodConfigRepository()->getConfiguredPaymentMethods() as $method) { + $this->fileService->delete($method->getMethodId() . '_store_' . $storeId); + } + } + + /** + * @return PaymentMethodConfigRepository + */ + private function getPaymentMethodConfigRepository(): PaymentMethodConfigRepository + { + return ServiceRegister::getService(PaymentMethodConfigRepository::class); + } +} diff --git a/Controllers/Backend/AdyenGeneralSettings.php b/Controllers/Backend/AdyenGeneralSettings.php new file mode 100644 index 00000000..8a846037 --- /dev/null +++ b/Controllers/Backend/AdyenGeneralSettings.php @@ -0,0 +1,52 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->generalSettings($storeId)->getGeneralSettings(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws InvalidCaptureDelayException + * @throws InvalidRetentionPeriodException + * @throws InvalidCaptureTypeException + */ + public function putGeneralSettingsAction(): void + { + $requestData = Request::getPostData(); + $storeId = $this->Request()->get('storeId'); + $generalSettingsRequest = new GeneralSettingsRequest( + $requestData['basketItemSync'] ?? false, + $requestData['capture'] ?? '', + $requestData['captureDelay'] ?? 1, + $requestData['shipmentStatus'] ?? '', + $requestData['retentionPeriod'] ?? '' + ); + + $result = AdminAPI::get()->generalSettings($storeId)->saveGeneralSettings($generalSettingsRequest); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenGivingSettings.php b/Controllers/Backend/AdyenGivingSettings.php new file mode 100644 index 00000000..acfe6c0f --- /dev/null +++ b/Controllers/Backend/AdyenGivingSettings.php @@ -0,0 +1,110 @@ +ajaxResponseSetterPreDispatch(); + $this->fileService = $this->get(FileService::class); + } + + /** + * @return void + */ + public function getAdyenGivingSettingsAction(): void + { + $storeId = $this->Request()->get('storeId'); + $result = AdminAPI::get()->adyenGivingSettings($storeId)->getAdyenGivingSettings(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + */ + public function putAdyenGivingSettingsAction(): void + { + $requestData = $this->Request()->getParams(); + $storeId = $requestData['storeId']; + + $result = AdminAPI::get()->adyenGivingSettings($storeId)->saveAdyenGivingSettings($this->createGivingRequest($storeId)); + + $this->returnAPIResponse($result); + } + + private function createGivingRequest(string $storeId): AdyenGivingSettingsRequest + { + $requestData = $this->Request()->getParams(); + + if ($requestData['enableAdyenGiving'] === 'false') { + $this->fileService->delete('adyen-giving-logo-store-' . $storeId); + $this->fileService->delete('adyen-giving-background-store-' . $storeId); + + return new AdyenGivingSettingsRequest(false); + } + + $this->saveImages($storeId); + + return new AdyenGivingSettingsRequest( + $requestData['enableAdyenGiving'] === 'true', + $requestData['charityName'] ?? '', + $requestData['charityDescription'] ?? '', + $requestData['charityMerchantAccount'] ?? '', + $requestData['donationAmount'] ?? '', + $requestData['charityWebsite'] ?? '', + $this->fileService->getLogoUrl('adyen-giving-logo-store-' . $storeId) ?? '', + $this->fileService->getLogoUrl('adyen-giving-background-store-' . $storeId) ?? '' + ); + } + + private function saveImages(string $storeId): void + { + $logo = $this->Request()->files->get('logo'); + $logoContents = null; + + if ($logo) { + $filePath = (string)$logo->getRealPath(); + $stream = fopen($filePath, 'rb'); + $logoContents = stream_get_contents($stream); + } + + if ($logoContents) { + $this->fileService->write($logoContents, 'adyen-giving-logo-store-' . $storeId); + } + + $backgroundImage = $this->Request()->files->get('backgroundImage'); + $imageContents = null; + + if ($backgroundImage) { + $filePath = (string)$backgroundImage->getRealPath(); + $stream = fopen($filePath, 'rb'); + $imageContents = stream_get_contents($stream); + } + + if ($imageContents) { + $this->fileService->write($imageContents, 'adyen-giving-background-store-' . $storeId); + } + } +} diff --git a/Controllers/Backend/AdyenMerchant.php b/Controllers/Backend/AdyenMerchant.php new file mode 100644 index 00000000..c3a212b2 --- /dev/null +++ b/Controllers/Backend/AdyenMerchant.php @@ -0,0 +1,25 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->merchant($storeId)->getMerchants(); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenMerchantActions.php b/Controllers/Backend/AdyenMerchantActions.php new file mode 100644 index 00000000..69182261 --- /dev/null +++ b/Controllers/Backend/AdyenMerchantActions.php @@ -0,0 +1,75 @@ +Request()->get('currency'); + $amount = $this->Request()->get('amount'); + $merchantReference = $this->Request()->get('merchantReference'); + $storeId = $this->Request()->get('storeId'); + + $response = AdminAPI::get()->capture($storeId)->handle($merchantReference, $amount, $currency); + + if (!$response->isSuccessful()) { + $namespace = Shopware()->Snippets()->getNamespace('backend/adyen/configuration'); + $translatedString = $namespace->get( + 'payment/adyen/capturerequestfail', + 'Capture request failed. Please check Adyen configuration. Reason: ' + ); + $this->Response()->setHttpResponseCode($response->getStatusCode()); + $this->Response()->setBody($translatedString . $response->toArray()['errorMessage'] ?? ''); + } + } + + /** + * @throws InvalidMerchantReferenceException + */ + public function cancelAction(): void + { + $storeId = $this->Request()->get('storeId'); + $merchantReference = $this->Request()->get('merchantReference'); + + $response = AdminAPI::get()->cancel($storeId)->handle($merchantReference); + + if (!$response->isSuccessful()) { + $namespace = Shopware()->Snippets()->getNamespace('backend/adyen/configuration'); + $translatedString = $namespace->get( + 'payment/adyen/cancelrequestfail', + 'Cancel request failed. Please check Adyen configuration. Reason: ' + ); + $this->Response()->setHttpResponseCode($response->getStatusCode()); + $this->Response()->setBody($translatedString . $response->toArray()['errorMessage'] ?? ''); + } + } + + public function refundAction(): void + { + $storeId = $this->Request()->get('storeId'); + $currency = $this->Request()->get('currency'); + $amount = $this->Request()->get('amount'); + $merchantReference = $this->Request()->get('merchantReference'); + + $response = AdminAPI::get()->refund($storeId)->handle($merchantReference, $amount, $currency); + + if (!$response->isSuccessful()) { + $namespace = Shopware()->Snippets()->getNamespace('backend/adyen/configuration'); + $translatedString = $namespace->get( + 'payment/adyen/refundrequestfail', + 'Refund request failed. Please check Adyen configuration. Reason: ' + ); + $this->Response()->setHttpResponseCode($response->getStatusCode()); + $this->Response()->setBody($translatedString . $response->toArray()['errorMessage'] ?? ''); + } + } +} diff --git a/Controllers/Backend/AdyenNotifications.php b/Controllers/Backend/AdyenNotifications.php new file mode 100644 index 00000000..390a2b3d --- /dev/null +++ b/Controllers/Backend/AdyenNotifications.php @@ -0,0 +1,94 @@ +ajaxResponseSetterPreDispatch(); + $this->orderRepository = $this->get(OrderRepository::class); + } + + /** + * @return void + * + * @throws Exception + */ + public function getNotificationsAction(): void + { + $storeId = $this->Request()->get('storeId'); + $page = $this->Request()->get('page', 1); + $limit = $this->Request()->get('limit', 10); + $result = AdminAPI::get()->shopNotifications($storeId)->getNotifications($page, $limit); + + if (!$result->isSuccessful()) { + $this->returnAPIResponse($result); + + return; + } + + $jsonResponse = $result->toArray(); + $map = $this->mapOrderNumbers($this->getMerchantReferences($jsonResponse['notifications'])); + + foreach ($jsonResponse['notifications'] as $key => $item) { + $jsonResponse['notifications'][$key]['orderId'] = $map[$item['orderId']]; + } + + $this->Response()->setHeader('Content-Type', 'application/json'); + $this->Response()->setBody(json_encode($jsonResponse)); + } + + /** + * @param array $notifications + * + * @return array + */ + private function getMerchantReferences(array $notifications): array + { + return array_unique( + array_map(static function (array $notifications) { + return $notifications['orderId']; + }, $notifications) + ); + } + + /** + * @param string[] $references + * + * @return array + */ + private function mapOrderNumbers(array $references): array + { + if (empty($references)) { + return []; + } + + $ordersMap = $this->orderRepository->getOrderNumbersFor($references); + + $orderNumbers = []; + foreach ($references as $reference) { + $orderNumbers[$reference] = array_key_exists($reference, $ordersMap) ? $ordersMap[$reference] : ''; + } + + return $orderNumbers; + } +} diff --git a/Controllers/Backend/AdyenOrderStatusMap.php b/Controllers/Backend/AdyenOrderStatusMap.php new file mode 100644 index 00000000..133e8a7b --- /dev/null +++ b/Controllers/Backend/AdyenOrderStatusMap.php @@ -0,0 +1,39 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->orderMappings($storeId)->getOrderStatusMap(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + */ + public function putOrderStatusMapAction(): void + { + $requestData = Request::getPostData(); + $storeId = $this->Request()->get('storeId'); + $orderStatusMapRequest = OrderMappingsRequest::parse($requestData); + + $result = AdminAPI::get()->orderMappings($storeId)->saveOrderStatusMap($orderStatusMapRequest); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenOrderStatuses.php b/Controllers/Backend/AdyenOrderStatuses.php new file mode 100644 index 00000000..5e6278da --- /dev/null +++ b/Controllers/Backend/AdyenOrderStatuses.php @@ -0,0 +1,25 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->store($storeId)->getStoreOrderStatuses(); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenPayment.php b/Controllers/Backend/AdyenPayment.php new file mode 100644 index 00000000..aaa685f2 --- /dev/null +++ b/Controllers/Backend/AdyenPayment.php @@ -0,0 +1,169 @@ +ajaxResponseSetterPreDispatch(); + $this->fileService = $this->get(FileService::class); + } + + /** + * @return void + * + * @throws Exception + */ + public function getAvailableMethodsAction(): void + { + $storeId = $this->Request()->get('storeId'); + + $result = AdminAPI::get()->payment($storeId)->getAvailablePaymentMethods(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws Exception + */ + public function getConfiguredMethodsAction(): void + { + $storeId = $this->Request()->get('storeId'); + + $result = AdminAPI::get()->payment($storeId)->getConfiguredPaymentMethods(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws Exception + */ + public function getMethodByIdAction(): void + { + $storeId = $this->Request()->get('storeId'); + $id = $this->Request()->get('methodId'); + + $result = AdminAPI::get()->payment($storeId)->getMethodById($id); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws PaymentMethodDataEmptyException + * @throws Exception + */ + public function saveMethodAction(): void + { + $storeId = $this->Request()->get('storeId'); + $method = $this->createPaymentMethodRequest(); + + $result = AdminAPI::get()->payment($storeId)->saveMethodConfiguration($method); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws PaymentMethodDataEmptyException + * @throws Exception + */ + public function updateMethodAction(): void + { + $storeId = $this->Request()->get('storeId'); + $method = $this->createPaymentMethodRequest(); + + $result = AdminAPI::get()->payment($storeId)->updateMethodConfiguration($method); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws Exception + */ + public function deleteMethodAction(): void + { + $storeId = $this->Request()->get('storeId'); + $methodId = $this->Request()->get('methodId'); + + $result = AdminAPI::get()->payment($storeId)->deletePaymentMethodById($methodId); + $this->fileService->delete($methodId . '_store_' . $storeId); + + $this->returnAPIResponse($result); + } + + /** + * @return PaymentMethodRequest + * + * @throws PaymentMethodDataEmptyException + * @throws Exception + */ + private function createPaymentMethodRequest(): PaymentMethodRequest + { + $requestData = $this->Request()->getParams(); + $logo = $this->Request()->files->get('logo'); + $logoContents = null; + + if ($logo) { + $filePath = (string)$logo->getRealPath(); + $stream = fopen($filePath, 'rb'); + $logoContents = stream_get_contents($stream); + } + + if ($logoContents) { + $this->fileService->write($logoContents, $requestData['methodId'] . '_store_' . $requestData['storeId']); + } + + if (!isset($requestData['currencies']) || $requestData['currencies'] === '') { + $requestData['currencies'] = []; + } + + if ($requestData['currencies'] === 'ANY') { + $requestData['currencies'] = ['ANY']; + } + + if (is_string($requestData['currencies'])) { + $requestData['currencies'] = [$requestData['currencies']]; + } + + if (!isset($requestData['countries']) || $requestData['countries'] === '') { + $requestData['countries'] = []; + } + + if ($requestData['countries'] === 'ANY') { + $requestData['countries'] = ['ANY']; + } + + $requestData['additionalData'] = !empty($requestData['additionalData']) ? + json_decode($requestData['additionalData'], true) : []; + $requestData['logo'] = $this->fileService->getLogoUrl($requestData['methodId'] . '_store_' . $requestData['storeId']); + + return PaymentMethodRequest::parse($requestData); + } +} diff --git a/Controllers/Backend/AdyenPaymentMain.php b/Controllers/Backend/AdyenPaymentMain.php new file mode 100644 index 00000000..c72b6854 --- /dev/null +++ b/Controllers/Backend/AdyenPaymentMain.php @@ -0,0 +1,143 @@ +View()->assign([ + 'response' => [ + 'urls' => $this->getUrls(), + 'lang' => $this->getTranslations(), + 'sidebar' => $this->getSidebarContent(), + ], + 'assetsVersion' => Plugin::getVersion(), + ]); + } + + private function getUrls(): array + { + return [ + 'connection' => [ + 'getSettingsUrl' => Url::getBackendUrl('AdyenAuthorization', 'getConnectionSettings') . '/storeId/{storeId}', + 'submitUrl' => Url::getBackendUrl('AdyenAuthorization', 'connect') . '/storeId/{storeId}', + 'disconnectUrl' => Url::getBackendUrl('AdyenDisconnect', 'disconnect') . '/storeId/{storeId}', + 'getMerchantsUrl' => Url::getBackendUrl('AdyenMerchant', 'index') . '/storeId/{storeId}', + 'validateConnectionUrl' => Url::getBackendUrl('AdyenValidateConnection', 'validate') . '/storeId/{storeId}', + 'validateWebhookUrl' => Url::getBackendUrl('AdyenWebhookValidation', 'validate') . '/storeId/{storeId}', + ], + 'payments' => [ + 'getConfiguredPaymentsUrl' => Url::getBackendUrl('AdyenPayment', 'getConfiguredMethods') . '/storeId/{storeId}', + 'addMethodConfigurationUrl' => Url::getBackendUrl('AdyenPayment', 'saveMethod') . '/storeId/{storeId}', + 'getMethodConfigurationUrl' => Url::getBackendUrl('AdyenPayment', 'getMethodById') . '/storeId/{storeId}/methodId/{methodId}', + 'saveMethodConfigurationUrl' => Url::getBackendUrl('AdyenPayment', 'updateMethod') . '/storeId/{storeId}', + 'getAvailablePaymentsUrl' => Url::getBackendUrl('AdyenPayment', 'getAvailableMethods') . '/storeId/{storeId}', + 'deleteMethodConfigurationUrl' => Url::getBackendUrl('AdyenPayment', 'deleteMethod') . '/storeId/{storeId}/methodId/{methodId}', + ], + 'stores' => [ + 'storesUrl' => Url::getBackendUrl('AdyenShopInformation', 'getStores'), + 'currentStoreUrl' => Url::getBackendUrl('AdyenShopInformation', 'getCurrentStore'), + ], + 'integration' => [ + 'stateUrl' => Url::getBackendUrl('AdyenState', 'index') . '/storeId/{storeId}', + ], + 'version' => [ + 'versionUrl' => Url::getBackendUrl('AdyenVersion', 'getVersion'), + ], + 'settings' => [ + 'getShippingStatusesUrl' => Url::getBackendUrl('AdyenOrderStatuses', 'getOrderStatuses') . '/storeId/{storeId}', + 'getSettingsUrl' => Url::getBackendUrl('AdyenGeneralSettings', 'getGeneralSettings') . '/storeId/{storeId}', + 'saveSettingsUrl' => Url::getBackendUrl('AdyenGeneralSettings', 'putGeneralSettings') . '/storeId/{storeId}', + 'getOrderMappingsUrl' => Url::getBackendUrl('AdyenOrderStatusMap', 'getOrderStatusMap') . '/storeId/{storeId}', + 'saveOrderMappingsUrl' => Url::getBackendUrl('AdyenOrderStatusMap', 'putOrderStatusMap') . '/storeId/{storeId}', + 'getGivingUrl' => Url::getBackendUrl('AdyenGivingSettings', 'getAdyenGivingSettings') . '/storeId/{storeId}', + 'saveGivingUrl' => Url::getBackendUrl('AdyenGivingSettings', 'putAdyenGivingSettings') . '/storeId/{storeId}', + 'webhookValidationUrl' => Url::getBackendUrl('AdyenWebhookValidation', 'validate') . '/storeId/{storeId}', + 'downloadWebhookReportUrl' => Url::getBackendUrl('AdyenWebhookValidation', 'validateReport') . '/storeId/{storeId}', + 'integrationValidationUrl' => Url::getBackendUrl('AdyenAutoTest', 'startAutoTest'), + 'integrationValidationTaskCheckUrl' => Url::getBackendUrl('AdyenAutoTest', 'autoTestStatus') . '/queueItemId/{queueItemId}', + 'downloadIntegrationReportUrl' => Url::getBackendUrl('AdyenAutoTest', 'getReport'), + 'downloadSystemInfoFileUrl' => Url::getBackendUrl('AdyenSystemInfo', 'systemInfo'), + 'getSystemInfoUrl' => Url::getBackendUrl('AdyenDebug', 'getDebugMode'), + 'saveSystemInfoUrl' => Url::getBackendUrl('AdyenDebug', 'setDebugMode') + ], + 'notifications' => [ + 'getShopEventsNotifications' => Url::getBackendUrl('AdyenNotifications', 'getNotifications') . '/storeId/{storeId}', + 'getWebhookEventsNotifications' => Url::getBackendUrl('AdyenWebhookNotifications', 'getWebhookNotifications') . '/storeId/{storeId}' + ] + ]; + } + + /** + * @return array + */ + private function getTranslations(): array + { + return [ + 'default' => $this->getDefaultTranslations(), + 'current' => $this->getCurrentTranslations(), + ]; + } + + /** + * @return false|string + */ + private function getSidebarContent() + { + return file_get_contents(__DIR__ . '/../../Resources/views/backend/_resources/templates/sidebar.html'); + } + + /** + * @return mixed + */ + private function getDefaultTranslations() + { + $baseDir = __DIR__ . '/../../Resources/views/backend/_resources/lang/'; + + return json_decode(file_get_contents($baseDir . 'en.json'), true); + } + + /** + * @return mixed + */ + private function getCurrentTranslations() + { + $baseDir = __DIR__ . '/../../Resources/views/backend/_resources/lang/'; + $locale = $this->getLocale(); + + return json_decode(file_get_contents($baseDir . $locale . '.json'), true); + } + + /** + * @return string + */ + private function getLocale(): string + { + $locale = 'en'; + + if ($auth = Shopware()->Container()->get('auth')) { + $locale = substr($auth->getIdentity()->locale->getLocale, 0, 2); + } + + return in_array($locale, ['en', 'de']) ? $locale : 'en'; + } +} diff --git a/Controllers/Backend/AdyenPaymentNotificationsListingExtension.php b/Controllers/Backend/AdyenPaymentNotificationsListingExtension.php deleted file mode 100644 index 0f8ef813..00000000 --- a/Controllers/Backend/AdyenPaymentNotificationsListingExtension.php +++ /dev/null @@ -1,68 +0,0 @@ -leftJoin('notification.order', 'nOrder') - ->addSelect(['nOrder']); - - return $builder; - } - - /** - * Joins order to notification in detail query - * - * @param int $id - * @return \Shopware\Components\Model\QueryBuilder - */ - protected function getDetailQuery($id) - { - $builder = parent::getDetailQuery($id); - - $builder->leftJoin('notification.order', 'nOrder') - ->addSelect(['nOrder']); - - return $builder; - } - - /** - * Returns distinct Event Codes in json array - */ - public function getEventCodesAction(): void - { - $eventCodes = $this->getManager()->createQueryBuilder() - ->select('n.eventCode') - ->distinct() - ->from(Notification::class, 'n') - ->getQuery() - ->getResult(); - - $this->view->assign('eventCodes', $eventCodes); - } - - /** - * Returns all NotificationStatusses in json array - */ - public function getNotificationStatussesAction(): void - { - $statusses = array_map(function ($status) { - return ['status' => $status]; - }, NotificationStatus::getStatusses()); - $this->view->assign('statusses', $statusses); - } -} diff --git a/Controllers/Backend/AdyenPaymentRefund.php b/Controllers/Backend/AdyenPaymentRefund.php deleted file mode 100644 index f2a1ec30..00000000 --- a/Controllers/Backend/AdyenPaymentRefund.php +++ /dev/null @@ -1,30 +0,0 @@ -Request()->getParam('orderId'); - $notificationManager = $this->get(RefundService::class); - - $refund = $notificationManager->doRefund($orderId); - - $this->View()->assign('refundReference', $refund->getPspReference()); - } - - /** - * Returns a list with actions which should not be validated for CSRF protection - * - * @return string[] - * - * @psalm-return array{0: 'refund'} - */ - public function getWhitelistedCSRFActions(): array - { - return ['refund']; - } -} diff --git a/Controllers/Backend/AdyenShopInformation.php b/Controllers/Backend/AdyenShopInformation.php new file mode 100644 index 00000000..148bd4fc --- /dev/null +++ b/Controllers/Backend/AdyenShopInformation.php @@ -0,0 +1,54 @@ +store('')->getStores(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + */ + public function getCurrentStoreAction(): void + { + $sessionStoreId = Shopware()->BackendSession()->get('adyenStoreId'); + + if ($sessionStoreId) { + Shopware()->BackendSession()->remove('adyenStoreId'); + $this->returnAPIResponse( + new StoreResponse( + $this->getStoreService()->getStoreById($sessionStoreId) + ) + ); + } + + $result = AdminAPI::get()->store('')->getCurrentStore(); + + $this->returnAPIResponse($result); + } + + /** + * @return StoreService + */ + private function getStoreService(): StoreService + { + return ServiceRegister::getService(StoreService::class); + } +} diff --git a/Controllers/Backend/AdyenShopNotifications.php b/Controllers/Backend/AdyenShopNotifications.php new file mode 100644 index 00000000..1fa90b38 --- /dev/null +++ b/Controllers/Backend/AdyenShopNotifications.php @@ -0,0 +1,110 @@ +getConnectedStores(); + $result = []; + $lastOpenTime = $this->getOpenTimeService()->getLastOpenTime(); + + foreach ($storeIds as $storeId) { + $hasNotifications = $this->storeHasNotifications($storeId, $lastOpenTime); + + if (!$hasNotifications) { + continue; + } + + $store = $this->getStoreService()->getStoreById($storeId); + + if (!$store) { + continue; + } + + $result[] = [ + 'storeId' => $storeId, + 'storeName' => $store->getStoreName(), + ]; + } + + $this->getOpenTimeService()->saveLastOpenTime(new DateTime()); + + $this->Response()->setBody(json_encode($result)); + } + + /** + * @param string $storeId + * @param DateTime $lastOpenTime + * + * @return bool + * + * @throws Exception + */ + private function storeHasNotifications(string $storeId, DateTime $lastOpenTime): bool + { + return StoreContext::doWithStore( + $storeId, + [$this->getNotificationService(), 'hasSignificantNotifications'], + [$lastOpenTime] + ); + } + + /** + * @return array + */ + private function getConnectedStores(): array + { + return $this->getStoreService()->getConnectedStores(); + } + + /** + * @return ShopNotificationService + */ + private function getNotificationService(): ShopNotificationService + { + if ($this->notificationService === null) { + $this->notificationService = ServiceRegister::getService(ShopNotificationService::class); + } + + return $this->notificationService; + } + + /** + * @return StoreService + */ + private function getStoreService(): StoreService + { + return ServiceRegister::getService(StoreService::class); + } + + /** + * @return LastOpenTimeService + */ + private function getOpenTimeService(): LastOpenTimeService + { + if ($this->openTimeService === null) { + $this->openTimeService = ServiceRegister::getService(LastOpenTimeService::class); + } + + return $this->openTimeService; + } +} diff --git a/Controllers/Backend/AdyenState.php b/Controllers/Backend/AdyenState.php new file mode 100644 index 00000000..e75403ae --- /dev/null +++ b/Controllers/Backend/AdyenState.php @@ -0,0 +1,23 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->integration($storeId)->getState(); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenSystemInfo.php b/Controllers/Backend/AdyenSystemInfo.php new file mode 100644 index 00000000..115e733f --- /dev/null +++ b/Controllers/Backend/AdyenSystemInfo.php @@ -0,0 +1,159 @@ +ajaxResponseSetterPreDispatch(); + $this->repository = $this->get(PaymentMeanRepository::class); + } + + /** + * @return void + * + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + * @throws Exception + */ + public function systemInfoAction(): void + { + $file = $this->createZip(); + + $response = $this->Response(); + $response->headers->set('content-description', 'File Transfer'); + $response->headers->set('content-type', 'application/octet-stream'); + $response->headers->set('content-disposition', 'attachment; filename=' . self::SYSTEM_INFO_FILE_NAME); + $response->headers->set('cache-control', 'public', true); + $response->headers->set('content-length', (string)filesize($file)); + $response->sendHeaders(); + + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + + $out = fopen('php://output', 'wb'); + $file = fopen($file, 'rb'); + + stream_copy_to_stream($file, $out); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + private function createZip() + { + $file = tempnam(sys_get_temp_dir(), 'adyen_system_info'); + + $zip = new ZipArchive(); + $zip->open($file, ZipArchive::CREATE); + + $info = AdminAPI::get()->systemInfo()->getSystemInfo()->toArray(); + $autoTestReport = AdminAPI::get()->autoTest()->autoTestReport()->toArray(); + + $zip->addFromString(self::PHP_INFO_FILE_NAME, $info['phpInfo']); + $zip->addFromString( + self::QUEUE_INFO_FILE_NAME, + json_encode($info['queueItems'], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + $zip->addFromString( + self::CONFIGURED_PAYMENT_METHODS, + json_encode($info['paymentMethods'], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + $zip->addFromString( + self::SYSTEM_INFO, + json_encode($info['systemInfo'], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + $zip->addFromString( + self::CONNECTION_SETTINGS, + json_encode($info['connectionSettings'], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + $zip->addFromString(self::WEBHOOK_VALIDATION, $info['webhookValidation']); + $zip->addFromString( + self::AUTO_TEST, + json_encode($autoTestReport, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + $zip->addFromString(self::ADYEN_SPECIFIC_LOGS, self::getLogs(self::ADYEN_SPECIFIC_LOG_FILE_NAME)); + $zip->addFromString(self::SHOPWARE_LOG_FILE, self::getLogs(self::CORE)); + $zip->addFromString( + self::SHOPWARE_PAYMENT_METHODS, + json_encode($this->repository->getAdyenPaymentMeans(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + + $zip->close(); + + return $file; + } + + /** + * Retrieves contents of log files. + * + * @param $logFileName + * + * @return string + */ + protected static function getLogs($logFileName): string + { + $dir = Shopware()->DocPath('var/log'); + $files = glob($dir . $logFileName . '*.log'); + $filesWithTimeStamp = []; + $cutoff = time() - self::CUTOFF; + + foreach ($files as $fileName) { + $time = filectime($fileName); + if ($time >= $cutoff) { + $filesWithTimeStamp[] = [ + 'path' => $fileName, + 'timestamp' => $time, + ]; + } + } + + $result = ''; + + if (!empty($filesWithTimeStamp)) { + array_multisort(array_column($filesWithTimeStamp, 'timestamp'), SORT_ASC, $filesWithTimeStamp); + foreach ($filesWithTimeStamp as $item) { + if ($contents = file_get_contents($item['path'])) { + $result .= $contents . "\n"; + } + } + } + + return $result; + } +} diff --git a/Controllers/Backend/AdyenTransaction.php b/Controllers/Backend/AdyenTransaction.php new file mode 100644 index 00000000..554e4759 --- /dev/null +++ b/Controllers/Backend/AdyenTransaction.php @@ -0,0 +1,62 @@ +ajaxResponseSetterPreDispatch(); + } + + /** + * @return void + * + * @throws CurrencyMismatchException + * @throws Exception + */ + public function getAction(): void + { + $merchantReference = $this->Request()->get('temporaryId'); + $storeId = $this->Request()->get('storeId'); + $result = StoreContext::doWithStore( + $storeId, + [$this->getTransactionDetailsService($storeId), 'getTransactionDetails'], + [$merchantReference, $storeId] + ); + + $this->Response()->setBody(json_encode($result)); + } + + /** + * @param string $storeId + * + * @return TransactionDetailsService + * + * @throws Exception + */ + private function getTransactionDetailsService(string $storeId): TransactionDetailsService + { + return StoreContext::doWithStore( + $storeId, + [ServiceRegister::getInstance(), 'getService'], + [TransactionDetailsService::class] + ); + } +} diff --git a/Controllers/Backend/AdyenValidateConnection.php b/Controllers/Backend/AdyenValidateConnection.php new file mode 100644 index 00000000..f98678bd --- /dev/null +++ b/Controllers/Backend/AdyenValidateConnection.php @@ -0,0 +1,37 @@ +Request()->get('storeId'); + $connectionRequest = new ConnectionRequest( + $storeId, + $requestData['mode'] ?? '', + $requestData['testData']['apiKey'] ?? '', + $requestData['testData']['merchantId'] ?? '', + $requestData['liveData']['apiKey'] ?? '', + $requestData['liveData']['merchantId'] ?? '' + ); + $result = AdminAPI::get()->testConnection($storeId)->test($connectionRequest); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenVersion.php b/Controllers/Backend/AdyenVersion.php new file mode 100644 index 00000000..d3d9c8be --- /dev/null +++ b/Controllers/Backend/AdyenVersion.php @@ -0,0 +1,16 @@ +versions()->getVersionInfo(); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Backend/AdyenWebhookNotifications.php b/Controllers/Backend/AdyenWebhookNotifications.php new file mode 100644 index 00000000..38353543 --- /dev/null +++ b/Controllers/Backend/AdyenWebhookNotifications.php @@ -0,0 +1,95 @@ +ajaxResponseSetterPreDispatch(); + $this->orderRepository = $this->get(OrderRepository::class); + } + + /** + * @return void + * + * @throws Exception + */ + public function getWebhookNotificationsAction(): void + { + $storeId = $this->Request()->get('storeId'); + $page = $this->Request()->get('page', 1); + $limit = $this->Request()->get('limit', 10); + $result = AdminAPI::get()->webhookNotifications($storeId)->getNotifications($page, $limit); + $jsonResponse = $result->toArray(); + + if (!$result->isSuccessful()) { + $this->returnAPIResponse($result); + + return; + } + + $map = $this->mapOrderNumbers($this->getMerchantReferences($jsonResponse['notifications'])); + + foreach ($jsonResponse['notifications'] as $key => $item) { + $jsonResponse['notifications'][$key]['orderId'] = $map[$item['orderId']]; + } + + $this->Response()->setHeader('Content-Type', 'application/json'); + $this->Response()->setBody(json_encode($jsonResponse)); + } + + /** + * @param array $logs + * + * @return array + */ + private function getMerchantReferences(array $logs): array + { + return array_unique( + array_map(static function (array $log) { + return $log['orderId']; + }, $logs) + ); + } + + /** + * @param string[] $references + * + * @return array + */ + private function mapOrderNumbers(array $references): array + { + if (empty($references)) { + return []; + } + + $ordersMap = $this->orderRepository->getOrderNumbersFor($references); + + $orderNumbers = []; + foreach ($references as $reference) { + $orderNumbers[$reference] = array_key_exists($reference, $ordersMap) ? $ordersMap[$reference] : ''; + } + + return $orderNumbers; + } +} diff --git a/Controllers/Backend/AdyenWebhookValidation.php b/Controllers/Backend/AdyenWebhookValidation.php new file mode 100644 index 00000000..b5b7fbb2 --- /dev/null +++ b/Controllers/Backend/AdyenWebhookValidation.php @@ -0,0 +1,51 @@ +Request()->get('storeId'); + $result = AdminAPI::get()->webhookValidation($storeId)->validate(); + + $this->returnAPIResponse($result); + } + + /** + * @return void + * + * @throws Exception + */ + public function validateReportAction(): void + { + $storeId = $this->Request()->get('storeId'); + $result = AdminAPI::get()->webhookValidation($storeId)->report(); + + $data = json_encode($result->toArray(), JSON_PRETTY_PRINT); + $response = $this->Response(); + $response->headers->set('content-description', 'File Transfer'); + $response->headers->set('content-type', 'application/octet-stream'); + $response->headers->set('content-disposition', 'attachment; filename=webhook-validation.json'); + $response->headers->set('cache-control', 'public', true); + $response->headers->set('content-length', (string)strlen($data)); + $response->sendHeaders(); + + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $out = fopen('php://output', 'wb'); + + fwrite($out, $data); + fclose($out); + } +} diff --git a/Controllers/Backend/ImportPaymentMethods.php b/Controllers/Backend/ImportPaymentMethods.php deleted file mode 100755 index 4636b2e0..00000000 --- a/Controllers/Backend/ImportPaymentMethods.php +++ /dev/null @@ -1,64 +0,0 @@ -cacheManager = $this->get('shopware.cache_manager'); - $this->paymentMethodImporter = $this->get(PaymentMethodImporter::class); - $this->logger = $this->get('adyen_payment.logger'); - } - - public function importAction(): void - { - try { - $this->cacheManager->clearConfigCache(); - - $total = $success = 0; - foreach ($this->paymentMethodImporter->importAll() as $result) { - ++$total; - if ($result->isSuccess()) { - ++$success; - } - } - - $this->response->setHttpResponseCode(Response::HTTP_OK); - $this->View()->assign('responseText', sprintf('Imported %s of %s payment method(s).%s', - $success, - $total, - $total !== $success ? ' Details can be found in adyen log.' : '' - )); - } catch (\Exception $e) { - $this->logger->error($e->getMessage(), [ - 'trace' => $e->getTraceAsString(), - ]); - - $this->View()->assign('responseText', - sprintf('Import of payment methods failed. Please check the logs for more details.') - ); - } - } -} diff --git a/Controllers/Backend/InstallApplePayMerchantAssociation.php b/Controllers/Backend/InstallApplePayMerchantAssociation.php deleted file mode 100755 index c1a27f5a..00000000 --- a/Controllers/Backend/InstallApplePayMerchantAssociation.php +++ /dev/null @@ -1,60 +0,0 @@ -associationFileInstaller = $this->container->get(MerchantAssociationFileInstaller::class); - $this->logger = $this->get('adyen_payment.logger'); - } - - public function installAction(): void - { - try { - $installResults = iterator_to_array(($this->associationFileInstaller)()); - /** @var InstallResult $finalResult */ - $finalResult = array_pop($installResults); - - if ($finalResult->success()) { - $this->response->setHttpResponseCode(Response::HTTP_OK); - $this->View()->assign('responseText', sprintf( - 'Installed Adyen ApplePay Merchant Association file successfully.%s', - $finalResult->fallback() ? ' (used fallback)' : '' - )); - - return; - } - - $this->response->setHttpResponseCode(Response::HTTP_SERVICE_UNAVAILABLE); - $this->View()->assign( - 'responseText', - "Could not install Adyen's ApplePay Merchant Association file. This issue might be related to file permissions on the server. Please check logs for more details." - ); - - } catch (\Exception $exception) { - $this->logger->error($exception->getMessage(), ['exception' => $exception]); - - $this->response->setHttpResponseCode(Response::HTTP_SERVICE_UNAVAILABLE); - $this->View()->assign( - 'responseText', - "Could not download Adyen's ApplePay Merchant Association file (see logs for details)." - ); - } - } -} diff --git a/Controllers/Backend/RegisterApplePayAssociationUrl.php b/Controllers/Backend/RegisterApplePayAssociationUrl.php deleted file mode 100755 index e94805f2..00000000 --- a/Controllers/Backend/RegisterApplePayAssociationUrl.php +++ /dev/null @@ -1,35 +0,0 @@ -seoIndexer = $this->container->get('seoindex'); - $this->modules = $this->container->get('modules'); - $this->seoUrlWriter = $this->container->get(SeoUrlWriter::class); - } - - public function registerAction(): void - { - $this->seoIndexer->registerShop($this->Request()->getParam('shopId')); - ($this->seoUrlWriter)(); - - $this->View()->assign(['success' => true]); - } -} diff --git a/Controllers/Backend/TestAdyenApi.php b/Controllers/Backend/TestAdyenApi.php deleted file mode 100755 index cfcc8dbf..00000000 --- a/Controllers/Backend/TestAdyenApi.php +++ /dev/null @@ -1,56 +0,0 @@ -cacheManager = $this->get('shopware.cache_manager'); - $this->apiConfigValidator = $this->get(ConfigValidator::class); - $this->usedFallbackConfigRule = $this->get(UsedFallbackConfigRule::class); - } - - public function runAction(): void - { - $shopId = (int) $this->request->get('shopId', 1); - $this->cacheManager->clearConfigCache(); - - $violations = $this->apiConfigValidator->validate($shopId); - if ($violations->count() > 0) { - $this->response->setHttpResponseCode(Response::HTTP_BAD_REQUEST); - $this->View()->assign('responseText', implode("\n", array_map( - static function (ConstraintViolationInterface $violation) { - return $violation->getMessage(); - }, - iterator_to_array($violations) - ))); - - return; - } - - $usedFallback = ($this->usedFallbackConfigRule)($shopId); - $this->response->setHttpResponseCode(Response::HTTP_OK); - $this->View()->assign('responseText', sprintf( - '%sAdyen API connection successful.', - $usedFallback ? "Fallback to main shop API configuration
" : '' - )); - } -} diff --git a/Controllers/Common/AjaxResponseSetter.php b/Controllers/Common/AjaxResponseSetter.php new file mode 100644 index 00000000..40b6cd83 --- /dev/null +++ b/Controllers/Common/AjaxResponseSetter.php @@ -0,0 +1,37 @@ +Front()->Plugins()->ViewRenderer()->setNoRender(); + } + + /** + * @param Response $response + * + * @return void + */ + public function returnAPIResponse(Response $response): void + { + $this->Response()->setHeader('Content-Type', 'application/json'); + $this->Response()->setBody( + json_encode($response->toArray()) + ); + + if (!$response->isSuccessful()) { + $this->Response()->setHttpResponseCode($response->getStatusCode()); + } + } +} diff --git a/Controllers/Frontend/Adyen.php b/Controllers/Frontend/Adyen.php deleted file mode 100755 index 72aacc60..00000000 --- a/Controllers/Frontend/Adyen.php +++ /dev/null @@ -1,354 +0,0 @@ -adyenManager = $this->get(AdyenManager::class); - $this->adyenCheckout = $this->get(PaymentMethodService::class); - $this->logger = $this->get('adyen_payment.logger'); - $this->paymentPayloadProvider = $this->get(PaymentPayloadProvider::class); - $this->basketService = $this->get(BasketService::class); - $this->orderMailService = $this->get(OrderMailService::class); - $this->orderManager = $this->get(OrderManagerInterface::class); - } - - public function ajaxDoPaymentAction(): void - { - $this->Request()->setHeader('Content-Type', 'application/json'); - $this->Front()->Plugins()->ViewRenderer()->setNoRender(); - - if (!Shopware()->Modules()->Admin()->sCheckUser()) { - $this->Response()->setHttpResponseCode(401); - return; - } - - $context = $this->createPaymentContext(); - $paymentInfo = []; - - try { - $payload = $this->paymentPayloadProvider->provide($context); - $checkout = $this->adyenCheckout->getCheckout(); - $paymentInfo = $checkout->payments($payload); - - $this->adyenManager->storePaymentData( - $context->getTransaction(), - $paymentInfo['paymentData'] ?? '' - ); - $this->updateOrderTransactionId($paymentInfo); - - $this->handlePaymentData($paymentInfo); - - $this->Response()->setBody(json_encode( - [ - 'status' => 'success', - 'content' => $paymentInfo, - 'adyenTransactionId' => $context->getTransaction()->getId(), - 'sUniqueID' => $context->getOrder()->getTemporaryId(), - ] - )); - } catch (AdyenException $ex) { - $this->logger->debug('AdyenException during doPayment', [ - 'message' => $ex->getMessage(), - 'file' => $ex->getFile(), - 'line' => $ex->getLine(), - ]); - - $this->Response()->setBody(json_encode( - [ - 'status' => 'error', - 'content' => $ex->getMessage(), - ] - )); - - $this->updateOrderTransactionId($paymentInfo); - $this->basketService->cancelAndRestoreByOrderNumber($context->getOrder()->getNumber()); - } - } - - /** - * @throws AdyenException - * - * @deprecated will be removed in 3.0.0 to move closer to a generic implementation, - * use paymentDetailsAction() instead - */ - public function ajaxThreeDsAction(): void - { - $threeDSResult = (string) ($this->Request()->getPost()['details']['threeDSResult'] ?? ''); - if ('' === $threeDSResult) { - $this->logger->error('3DS missing data', [ - 'action' => $this->Request()->getPost()['action'] ?? '', - 'threeDSResult' => substr($threeDSResult, -5), - 'paymentData' => substr( $this->Request()->getPost()['paymentData'] ?? '', -5), - ]); - } - - $this->paymentDetailsAction(); - } - - /** - * @return void - * @throws AdyenException - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function paymentDetailsAction(): void - { - $this->Request()->setHeader('Content-Type', 'application/json'); - $this->Front()->Plugins()->ViewRenderer()->setNoRender(); - - if (!Shopware()->Modules()->Admin()->sCheckUser()) { - $this->Response()->setHttpResponseCode(401); - $this->tryOrderCancelByTransactionId($this->Request()->getPost('adyenTransactionId')); - - return; - } - - $payload = array_intersect_key($this->Request()->getPost(), ['details' => true]); - $checkout = $this->adyenCheckout->getCheckout(); - $paymentInfo = $checkout->paymentsDetails($payload); - - $this->updateOrderTransactionId($paymentInfo); - $this->handlePaymentData($paymentInfo); - - $this->Response()->setBody(json_encode($paymentInfo)); - } - - /** - * @return PaymentContext - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function createPaymentContext(): PaymentContext - { - $paymentInfo = json_decode($this->Request()->getPost('paymentMethod') ?? '{}', true); - $transaction = $this->prepareTransaction(); - $order = $this->prepareOrder($transaction); - $browserInfo = $this->Request()->getPost('browserInfo'); - $shopperInfo = $this->getShopperInfo(); - $origin = $this->Request()->getPost('origin'); - $storePaymentMethod = (bool) json_decode($this->Request()->getPost('storePaymentMethod', false), true); - - return new PaymentContext( - $paymentInfo, - $order, - Shopware()->Modules()->Basket(), - $browserInfo, - $shopperInfo, - $origin, - $transaction, - $storePaymentMethod - ); - } - - /** - * @return PaymentInfo - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function prepareTransaction(): PaymentInfo - { - $transaction = new PaymentInfo(); - $transaction->setOrderId(-1); - $transaction->setPspReference(''); - - $this->getModelManager()->persist($transaction); - $this->getModelManager()->flush($transaction); - - return $transaction; - } - - /** - * @param PaymentInfo $transaction - * - * @return Order - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function prepareOrder(PaymentInfo $transaction): Order - { - $signature = "adyen_{$transaction->getId()}_{$this->persistBasket()}"; - - Shopware()->Session()->offsetSet( - AdyenPayment::SESSION_ADYEN_PAYMENT_INFO_ID, - $transaction->getId() - ); - - if ($this->Request()->getParam('sComment') !== null) { - Shopware()->Session()->offsetSet('sComment', $this->Request()->getParam('sComment')); - } - - $orderNumber = $this->orderMailService->doWithoutSendingOrderConfirmationMail( - [$this, 'saveOrder'], [$transaction->getId(), $signature, Status::PAYMENT_STATE_OPEN, false] - ); - - /** @var Order $order */ - $order = $this->getModelManager()->getRepository(Order::class)->findOneBy([ - 'number' => $orderNumber, - ]); - - $transaction->setOrder($order); - - $this->getModelManager()->persist($transaction); - $this->getModelManager()->flush($transaction); - - return $order; - } - - /** - * @return array - * - * @psalm-return array{shopperIP: mixed} - */ - private function getShopperInfo(): array - { - return [ - 'shopperIP' => $this->request->getClientIp(), - ]; - } - - /** - * @param $paymentInfo - * - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function handlePaymentData($paymentInfo): void - { - $rawResultCode = (string) ($paymentInfo['resultCode'] ?? ''); - if (!PaymentResultCode::exists($rawResultCode)) { - $this->handlePaymentDataError($paymentInfo); - return; - } - - $resultCode = PaymentResultCode::load((string) ($paymentInfo['resultCode'] ?? '')); - if ( - !$resultCode->equals(PaymentResultCode::authorised()) && - !$resultCode->equals(PaymentResultCode::identifyShopper()) && - !$resultCode->equals(PaymentResultCode::challengeShopper()) && - !$resultCode->equals(PaymentResultCode::pending()) && - !$resultCode->equals(PaymentResultCode::redirectShopper()) - ) { - $this->handlePaymentDataError($paymentInfo); - } - } - - /** - * @param $paymentInfo - * - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function handlePaymentDataError(array $paymentResponseInfo): void - { - if (array_key_exists('merchantReference', $paymentResponseInfo)) { - $this->basketService->cancelAndRestoreByOrderNumber($paymentResponseInfo['merchantReference']); - return; - } - - if (isset($paymentResponseInfo['action']['merchantReference'])) { - $this->basketService->cancelAndRestoreByOrderNumber($paymentResponseInfo['action']['merchantReference']); - } - } - - /** - * @return void - * @throws Enlight_Event_Exception - * @throws Enlight_Exception - * @throws Zend_Db_Adapter_Exception - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - private function tryOrderCancelByTransactionId($adyenTransactionId): void - { - /** @var PaymentInfo $transaction */ - $transaction = $this->getModelManager()->getRepository(PaymentInfo::class)->findOneBy([ - 'id' => $adyenTransactionId, - ]); - if (!$transaction) { - return; - } - - $this->basketService->cancelAndRestoreByOrderNumber($transaction->getOrdernumber()); - } - - /** - * @param array $paymentResponseInfo - * @return void - */ - private function updateOrderTransactionId(array $paymentResponseInfo): void - { - $pspReference = $paymentResponseInfo['pspReference'] ?? ''; - if (empty($pspReference)) { - return; - } - - $merchantReference = $paymentResponseInfo['merchantReference'] ?? null; - if (!$merchantReference && isset($paymentResponseInfo['action']['merchantReference'])) { - $merchantReference = $paymentResponseInfo['action']['merchantReference']; - } - - if (!$merchantReference) { - return; - } - - $order = $this->basketService->getOrderByOrderNumber($merchantReference); - if ($order) { - $this->orderManager->updatePspReference($order, $pspReference); - $this->orderManager->save($order); - } - } -} diff --git a/Controllers/Frontend/AdyenAsyncProcess.php b/Controllers/Frontend/AdyenAsyncProcess.php new file mode 100644 index 00000000..cdae4d2b --- /dev/null +++ b/Controllers/Frontend/AdyenAsyncProcess.php @@ -0,0 +1,55 @@ +Request()->getParam('guid', ''); + $autoTest = $this->Request()->getParam('auto-test', false); + + if ($autoTest) { + $autoTestService = new AutoTestService(); + $autoTestService->setAutoTestMode(); + Logger::logInfo('Received auto-test async process request', 'Integration'); + } else { + Logger::logDebug("Received async process request with guid [{$guid}].", 'Integration'); + } + + if ($guid !== 'auto-configure') { + /** @var AsyncProcessService $asyncProcessService */ + $asyncProcessService = ServiceRegister::getService(AsyncProcessService::CLASS_NAME); + $asyncProcessService->runProcess($guid); + } + + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $this->Response()->setBody( + json_encode(['response', ['success' => true]]) + ); + + } +} diff --git a/Controllers/Frontend/AdyenConfig.php b/Controllers/Frontend/AdyenConfig.php deleted file mode 100644 index 277820b2..00000000 --- a/Controllers/Frontend/AdyenConfig.php +++ /dev/null @@ -1,81 +0,0 @@ -configuration = $this->get(Configuration::class); - $this->dataConversion = $this->get(DataConversion::class); - $this->enrichedPaymentMeanProvider = $this->get(EnrichedPaymentMeanProvider::class); - $this->paymentMeanCollectionSerializer = $this->get(SwPaymentMeanCollectionSerializer::class); - $this->modules = $this->get('modules'); - } - - public function indexAction(): void - { - $this->Front()->Plugins()->ViewRenderer()->setNoRender(); - $this->Response()->setHeader('Content-Type', 'application/json'); - - try { - $admin = $this->modules->Admin(); - - $enrichedPaymentMethods = ($this->enrichedPaymentMeanProvider)( - PaymentMeanCollection::createFromShopwareArray($admin->sGetPaymentMeans()) - ); - - $sBasket = $this->getBasket(); - - $shop = Shopware()->Shop(); - $orderCurrency = $shop->getCurrency(); - - $adyenConfig = [ - 'status' => 'success', - 'shopLocale' => $this->dataConversion->getISO3166FromLocale($shop->getLocale()->getLocale()), - 'clientKey' => $this->configuration->getClientKey($shop), - 'environment' => $this->configuration->getEnvironment($shop), - 'enrichedPaymentMethods' => ($this->paymentMeanCollectionSerializer)($enrichedPaymentMethods), - 'adyenOrderTotal' => round($sBasket['sAmount'], 2), - 'adyenOrderCurrency' => $sBasket['sCurrencyName'] ?? $orderCurrency - ]; - - $this->Response()->setBody( - JsonUtil::encode($adyenConfig) - ); - } catch (Exception $exception) { - $this->Response()->setBody( - json_encode([ - 'status' => 'error', - 'content' => $exception->getMessage() - ]) - ); - } - - } -} diff --git a/Controllers/Frontend/AdyenDonations.php b/Controllers/Frontend/AdyenDonations.php new file mode 100644 index 00000000..d3668f00 --- /dev/null +++ b/Controllers/Frontend/AdyenDonations.php @@ -0,0 +1,100 @@ +Front()->Plugins()->JsonRequest() + ->setParseInput(); + + parent::initController($request, $response); + } + + /** + * @return void + * @throws Exception + */ + public function preDispatch(): void + { + $this->ajaxResponseSetterPreDispatch(); + $this->errorMessageProvider = $this->get(ErrorMessageProvider::class); + $this->snippets = $this->get('snippets'); + } + + public function getDonationsConfigAction(): void + { + $merchantReference = $this->Request()->get('merchantReference'); + $currencyFactor = Shopware()->Shop()->getCurrency()->getFactor(); + $result = CheckoutAPI::get() + ->donation(Shopware()->Shop()->getId()) + ->getDonationSettings($merchantReference, empty($currencyFactor) ? 1 : $currencyFactor); + + $this->returnAPIResponse($result); + } + + public function makeDonationsAction(): void + { + $params = $this->Request()->getParams(); + + $result = CheckoutAPI::get() + ->donation(Shopware()->Shop()->getId()) + ->makeDonation( + new MakeDonationRequest( + $params['amount']['value'] ?? '', + $params['amount']['currency'] ?? '', + $this->Request()->get('merchantReference') + ) + ); + + if (!$result->isSuccessful()) { + $this->errorMessageProvider->add( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'donations/adyen/fail', + 'Donation failed.' + ) + ); + } + + if ($result->isSuccessful()) { + $this->errorMessageProvider->addSuccessMessage( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'donations/adyen/success', + 'Donation successfully made.' + ) + ); + } + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Frontend/AdyenExpressCheckout.php b/Controllers/Frontend/AdyenExpressCheckout.php new file mode 100644 index 00000000..67362589 --- /dev/null +++ b/Controllers/Frontend/AdyenExpressCheckout.php @@ -0,0 +1,100 @@ +checkoutConfigProvider = $this->get(CheckoutConfigProvider::class); + $this->basketHelper = $this->get(BasketHelper::class); + } + + public function getCheckoutConfigAction(): void + { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $productNumber = $this->Request()->get('adyen_article_number'); + + $this->Response()->setBody(json_encode( + $this->checkoutConfigProvider->getExpressCheckoutConfig( + $this->basketHelper->getTotalAmountFor($this->prepareCheckoutController(), $productNumber) + )->toArray() + )); + } + + /** + * Main entry point for express checkout processing when Adyen express checkout payment is confirmed on frontend + * + * @return void + * @throws Exception + */ + public function finishAction(): void + { + $productNumber = $this->Request()->get('adyen_article_number'); + if (!empty($productNumber)) { + $this->basketHelper->forceBasketContentFor($productNumber); + } + + // Finish express checkout with forced payment mean and fresh basket + $paymentMean = Shopware()->Modules()->Admin()->sGetPaymentMean( + Plugin::getPaymentMeanName($this->Request()->getParam('adyen_payment_method')) + ); + Shopware()->Modules()->Admin()->sUpdatePayment( + $paymentMean['id'] ?? '' + ); + + Shopware()->Session()->offsetSet( + 'adyenPaymentMethodStateData', + $this->Request()->get('adyenExpressPaymentMethodStateData') + ); + Shopware()->Session()->offsetSet( + 'adyenIsXHR', + $this->Request()->getParam('isXHR') + ); + + $coController = $this->prepareCheckoutController(); + $coController->preDispatch(); + + // Make sure that checkout session data is updated as if confirm view was rendered + $coController->confirmAction(); + + // Simulate order confirmation button click server-side logic (this will redirect tot the payment URL and standard payment processing logic) + $coController->Request()->setParam('sAGB', true); + $coController->Request()->setParam('esdAgreementChecked', true); + $coController->Request()->setParam('serviceAgreementChecked', true); + $coController->paymentAction(); + } + + private function prepareCheckoutController(): Shopware_Controllers_Frontend_Checkout + { + /** @var Shopware_Controllers_Frontend_Checkout $checkoutController */ + $checkoutController = Enlight_Class::Instance(Shopware_Controllers_Frontend_Checkout::class, [$this->request, $this->response]); + $checkoutController->init(); + $checkoutController->setView($this->View()); + $checkoutController->setContainer($this->container); + $checkoutController->setFront($this->front); + $checkoutController->setRequest($this->request); + $checkoutController->setResponse($this->response); + + return $checkoutController; + } + +} diff --git a/Controllers/Frontend/AdyenPaymentProcess.php b/Controllers/Frontend/AdyenPaymentProcess.php new file mode 100644 index 00000000..52dcda89 --- /dev/null +++ b/Controllers/Frontend/AdyenPaymentProcess.php @@ -0,0 +1,365 @@ +getActionName()) { + $this->Front()->Plugins()->JsonRequest()->setParseInput(); + } + + parent::initController($request, $response); + } + + /** + * @return void + * @throws Exception + */ + public function preDispatch(): void + { + $this->errorMessageProvider = $this->get(ErrorMessageProvider::class); + $this->snippets = $this->get('snippets'); + $this->session = $this->get('session'); + $this->checkoutConfigProvider = $this->get(CheckoutConfigProvider::class); + $this->paymentMeansEnricher = $this->get(PaymentMeansEnricher::class); + } + + /** + * Main entry point for checkout processing of adyen payment + * @return void + * @throws Exception + */ + public function indexAction(): void + { + $paymentMeanName = $this->getPaymentShortName(); + if (!$paymentMeanName) { + $this->setupRedirectResponse(Url::getFrontUrl('checkout', 'shippingPayment')); + + return; + } + + if (!Plugin::isAdyenPaymentMean($paymentMeanName)) { + $this->errorMessageProvider->add( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/unrecognized_payment_method', + 'Unrecognized payment method. Please select valid payment method from the list.' + ) + ); + + $this->setupRedirectResponse(Url::getFrontUrl('checkout', 'shippingPayment')); + + return; + } + + $basketSignature = $this->persistBasket(); + $orderReference = $this->generateOrderReference($basketSignature); + $paymentMethodType = Plugin::getAdyenPaymentType($paymentMeanName); + if ($paymentMeanName === AdyenPayment::STORED_PAYMENT_UMBRELLA_NAME) { + $paymentMean = $this->paymentMeansEnricher->enrichPaymentMean( + $this->getUser()['additional']['payment'], + (string)$this->session->get('adyenStoredPaymentMethodId') + ); + + $paymentMethodType = !empty($paymentMean['adyenPaymentType']) ? $paymentMean['adyenPaymentType'] : $paymentMethodType; + } + + $response = CheckoutAPI::get() + ->paymentRequest(Shopware()->Shop()->getId()) + ->startTransaction(new StartTransactionRequest( + $paymentMethodType, + Amount::fromFloat( + $this->getAmount(), + Currency::fromIsoCode($this->getBasket()['sCurrencyName'] ?? 'EUR') + ), + $orderReference, + Url::getFrontUrl( + 'AdyenPaymentProcess', + 'handleRedirect', + ['signature' => $basketSignature, 'reference' => $orderReference] + ), + (array)json_decode($this->session->offsetGet('adyenPaymentMethodStateData'), true), + [ + 'user' => $this->getUser(), + 'basket' => $this->getBasket(), + ] + )); + + if (!$response->isSuccessful()) { + $this->errorMessageProvider->add( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/payment_processing_error', + 'Your payment could not be processed, please resubmit order.' + ) + ); + + $this->setupRedirectResponse(Url::getFrontUrl('checkout', 'shippingPayment')); + + return; + } + + if (!$response->isAdditionalActionRequired()) { + $this->saveOrder( + $response->getPspReference(), + $orderReference + ); + + $this->setupRedirectResponse(Url::getFrontUrl('checkout', 'finish', ['sUniqueID' => $orderReference])); + + return; + } + + + if ($this->isAjaxRequest()) { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $this->Response()->setBody(json_encode([ + 'action' => $response->getAction(), + 'signature' => $basketSignature, + 'reference' => $orderReference, + ])); + + return; + } + + if ($response->shouldPresentToShopper() || $response->isRecieved()) { + $this->saveOrder( + $response->getPspReference() ?? $orderReference, + $orderReference + ); + + Shopware()->Session()->offsetSet('adyenAction', json_encode($response->getAction())); + + $this->redirect(['controller' => 'checkout', 'action' => 'finish', 'sUniqueID' => $orderReference]); + + return; + } + + $this->view->assign('action', $response->getAction()); + $this->view->assign('basketSignature', $basketSignature); + $this->view->assign('orderReference', $orderReference); + } + + public function handleAdditionalDataAction(): void + { + $this->setupRedirectResponse( + $this->handleAdditionalDataAndGetRedirectUrl($this->Request()->getParams()) + ); + } + + public function handleRedirectAction(): void + { + Logger::logDebug( + 'Received handleRedirectAction request', + 'Integration', + ['request' => $this->Request()->getParams()] + ); + + $this->setupRedirectResponse( + $this->handleAdditionalDataAndGetRedirectUrl($this->Request()->getParams()) + ); + } + + /** + * Gets the checkout configuration for Adyen checkout instance + * + * @return void + * + * @throws Enlight_Exception + * @throws InvalidCurrencyCode + */ + public function getCheckoutConfigAction(): void + { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $amount = null; + $amountFromBasket = $this->getAmount(); + if (!empty($amountFromBasket)) { + $currency = Currency::fromIsoCode($this->getBasket()['sCurrencyName'] ?? 'EUR'); + $amount = Amount::fromFloat($amountFromBasket, $currency); + } + + $this->Response()->setBody( + json_encode($this->checkoutConfigProvider->getCheckoutConfig($amount)->toArray()) + ); + } + + public function disableCardDetailsAction(): void + { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $recurringToken = $this->Request()->get('recurringToken') ?? ''; + + if ($recurringToken === '' || !$this->Request()->isPost()) { + $this->Response()->setBody( + json_encode( + [ + 'message' => $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/disable_action_error', + 'Disable action could not be processed, invalid request.' + ) + ] + ) + ); + $this->Response()->setHttpResponseCode(400); + + return; + } + + $user = Shopware()->Session()->get('sUserId'); + + if (empty($user)) { + $this->Response()->setBody( + json_encode( + [ + 'message' => $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/user_not_found', + 'Disable action could not be processed, user not found.' + ) + ] + ) + ); + $this->Response()->setHttpResponseCode(400); + + return; + } + + $shop = Shopware()->Shop(); + $disableRequest = new DisableStoredDetailsRequest( + $shop->getHost() . '_' . $shop->getId() . '_' . $user, + $recurringToken + ); + + $result = CheckoutAPI::get()->checkoutConfig(Shopware()->Shop()->getId())->disableStoredDetails($disableRequest); + + if (!$result->isSuccessful()) { + $this->Response()->setBody( + json_encode( + $result->toArray() + ) + ); + $this->Response()->setHttpResponseCode(400); + + return; + } + + $this->Response()->setBody(json_encode(['success' => true])); + } + + private function handleAdditionalDataAndGetRedirectUrl(array $additionalData): string + { + $basketSignature = $this->Request()->get('signature'); + try { + $basket = $this->loadBasketFromSignature($basketSignature); + $this->verifyBasketSignature($basketSignature, $basket); + } catch (Exception $e) { + $this->errorMessageProvider->add( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/payment_processing_error', + 'Your payment coule not be processed, please resubmit order.' + ) + ); + + return Url::getFrontUrl('checkout', 'shippingPayment'); + } + + $response = CheckoutAPI::get() + ->paymentRequest(Shopware()->Shop()->getId()) + ->updatePaymentDetails(array_key_exists('details', $additionalData) ? $additionalData : ['details' => $additionalData]); + + if (!$response->isSuccessful()) { + $this->errorMessageProvider->add( + $this->snippets->getNamespace('frontend/adyen/checkout')->get( + 'payment/adyen/payment_processing_error', + 'Your payment could not be processed, please resubmit order.' + ) + ); + + return Url::getFrontUrl('checkout', 'shippingPayment'); + } + + $orderReference = $this->Request()->get('reference'); + + $this->saveOrder( + $response->getPspReference(), + $orderReference + ); + + return Url::getFrontUrl('checkout', 'finish', ['sUniqueID' => $orderReference]); + } + + private function setupRedirectResponse(string $redirectUrl) + { + if ($this->isAjaxRequest()) { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $this->Response()->setHeader('Content-Type', 'application/json'); + + $this->Response()->setBody(json_encode(['nextStepUrl' => $redirectUrl])); + + return; + } + + $this->redirect($redirectUrl); + } + + private function isAjaxRequest() + { + return $this->Request()->getParam('isXHR') || $this->session->offsetGet('adyenIsXHR'); + } + + private function generateOrderReference(string $basketSignature): string + { + /** + * We do not want more entropy here because basket signature is actually hash string generated by Shopware and + * we need to be max 50 characters long for Adyen validation to pass (Zip payment has 50 characters limit). + * + * @noinspection NonSecureUniqidUsageInspection + */ + return md5(uniqid("{$basketSignature}_")); + } +} diff --git a/Controllers/Frontend/AdyenWebhook.php b/Controllers/Frontend/AdyenWebhook.php new file mode 100644 index 00000000..349f7585 --- /dev/null +++ b/Controllers/Frontend/AdyenWebhook.php @@ -0,0 +1,67 @@ +Front()->Plugins()->JsonRequest() + ->setParseInput(); + + parent::initController($request, $response); + } + + /** + * Returns a list with actions which should not be validated for CSRF protection + * + * @return string[] + */ + public function getWhitelistedCSRFActions(): array + { + return ['index']; + } + + /** + * Handles webhook request. + * + * @return void + * + * @throws InvalidCurrencyCode + * @throws WebhookConfigDoesntExistException + * @throws AuthenticationException + * @throws HMACKeyValidationException + * @throws InvalidDataException + * @throws MerchantAccountCodeException + */ + public function indexAction(): void + { + $payload = $this->Request()->getParams(); + $result = WebhookAPI::get()->webhookHandler($payload['storeId'] ?? '')->handleRequest($payload); + + $this->returnAPIResponse($result); + } +} diff --git a/Controllers/Frontend/ApplePayMerchantAssociation.php b/Controllers/Frontend/ApplePayMerchantAssociation.php index b0b1f687..2add9308 100644 --- a/Controllers/Frontend/ApplePayMerchantAssociation.php +++ b/Controllers/Frontend/ApplePayMerchantAssociation.php @@ -1,56 +1,11 @@ storageFilesystem = $this->get(StorageFilesystem::class); - $this->merchantAssociationFileInstaller = $this->get(MerchantAssociationFileInstaller::class); - $this->logger = $this->get('adyen_payment.logger'); - } - public function indexAction(): void { $this->Front()->Plugins()->ViewRenderer()->setNoRender(); - - if (!$this->storageFilesystem->storageFileExists()) { - iterator_to_array(($this->merchantAssociationFileInstaller)()); - } - - if (!$this->storageFilesystem->storageFileExists()) { - $this->logger->critical($message = 'Could not serve Adyen ApplePay merchant id association file.'); - $this->Response()->setHeader('Content-Type', 'application/json'); - $this->Response()->setHttpResponseCode(Response::HTTP_FAILED_DEPENDENCY); - $this->Response()->setBody(JsonUtil::encode([ - 'success' => false, - 'details' => $message, - ])); - - return; - } - $this->Response()->setHeader('Content-Type', 'text/plain'); - $this->Response()->setBody( - file_get_contents($this->storageFilesystem->storagePath()) - ); + fpassthru(fopen('https://eu.adyen.link/.well-known/apple-developer-merchantid-domain-association', 'rb')); } } diff --git a/Controllers/Frontend/DisableRecurringToken.php b/Controllers/Frontend/DisableRecurringToken.php deleted file mode 100755 index 48de0331..00000000 --- a/Controllers/Frontend/DisableRecurringToken.php +++ /dev/null @@ -1,86 +0,0 @@ -frontendJsonResponse = $this->get(FrontendJsonResponse::class); - $this->disableTokenRequestHandler = $this->get(DisableTokenRequestHandler::class); - $this->snippets = $this->get('snippets'); - } - - public function disabledAction(): void - { - try { - if (!$this->Request()->isPost()) { - $this->frontendJsonResponse->sendJsonBadRequestResponse( - $this->Front(), - $this->Response(), - $this->snippets->getNamespace('adyen/checkout/error')->get( - 'disableTokenInvalidMethodMessage', - 'Invalid method.', - true - ) - ); - - return; - } - - $recurringToken = $this->Request()->getParams()['recurringToken'] ?? ''; - if ('' === $recurringToken) { - $this->frontendJsonResponse->sendJsonBadRequestResponse( - $this->Front(), - $this->Response(), - $this->snippets->getNamespace('adyen/checkout/error')->get( - 'disableTokenMissingRecurringTokenMessage', - 'Missing recurring token param.', - true - ) - ); - - return; - } - - $result = $this->disableTokenRequestHandler->disableToken($recurringToken, Shopware()->Shop()); - if (!$result->isSuccess()) { - $this->frontendJsonResponse->sendJsonBadRequestResponse( - $this->Front(), - $this->Response(), - $this->snippets->getNamespace('adyen/checkout/error')->get( - $result->message() - ) - ); - - return; - } - - $this->frontendJsonResponse->sendJsonResponse( - $this->Front(), - $this->Response(), - JsonResponse::create(null, Response::HTTP_NO_CONTENT) - ); - } catch (\Exception $e) { - $this->frontendJsonResponse->sendJsonBadRequestResponse($this->Front(), $this->Response(), $e->getMessage()); - } - } -} \ No newline at end of file diff --git a/Controllers/Frontend/Notification.php b/Controllers/Frontend/Notification.php deleted file mode 100755 index 947618b6..00000000 --- a/Controllers/Frontend/Notification.php +++ /dev/null @@ -1,148 +0,0 @@ -Front()->Plugins()->ViewRenderer()->setNoRender(); - $this->events = $this->get('events'); - $this->incomingNotificationsManager = $this->get('AdyenPayment\Components\IncomingNotificationManager'); - $this->logger = $this->get('adyen_payment.logger.notifications'); - $this->authorizationValidator = $this->get('AdyenPayment\Http\Validator\Notification\AuthorizationValidator'); - } - - /** - * @return void - */ - public function postDispatch() - { - $data = $this->View()->getAssign(); - $response = $data['responseData'] ?? null; - if (!$response instanceof JsonResponse) { - $response = NotificationResponseFactory::fromShopwareResponse($this->Request(), $data); - } - $this->Response()->setHeader('Content-type', $response->headers->get('Content-Type'), true); - $this->Response()->setHttpResponseCode($response->getStatusCode()); - $this->Response()->setBody($response->getContent()); - } - - /** - * POST: /notification/adyen - * - * @return void - */ - public function adyenAction() - { - try { - $notifications = $this->getNotificationItems(); - $this->authorizationValidator->validate($notifications); - - if (!$this->saveTextNotification($notifications)) { - $this->View()->assign('[notification save error]'); - return; - } - } catch (AuthorizationException $exception) { - $this->View()->assign('responseData', NotificationResponseFactory::unauthorized($exception->getMessage())); - - return; - } catch (\Exception $exception) { - $this->logger->error($exception->getMessage(), [ - 'trace' => $exception->getTraceAsString(), - 'previous' => $exception->getPrevious(), - ]); - - $this->View()->assign('responseData', NotificationResponseFactory::badRequest($exception->getMessage())); - return; - } - - // on valid credentials, always return ACCEPTED - $this->View()->assign('responseData', NotificationResponseFactory::accepted()); - } - - /** - * Whitelist notifyAction - * - * @return string[] - * - * @psalm-return array{0: 'adyen'} - */ - public function getWhitelistedCSRFActions() - { - return ['adyen']; - } - - /** - * @return array|mixed - * @throws Enlight_Event_Exception - */ - private function getNotificationItems() - { - $rawBody = $this->Request()->getRawBody(); - if (empty($rawBody)) { - throw InvalidRequestPayloadException::missingBody(); - } - - $jsonbody = json_decode($rawBody, true); - if (!is_array($jsonbody)) { - throw InvalidRequestPayloadException::invalidBody(); - } - - $notificationItems = $jsonbody['notificationItems'] ?? []; - if (!$notificationItems) { - return []; - } - - $this->events->notify( - Event::NOTIFICATION_RECEIVE, - [ - 'items' => $notificationItems, - ] - ); - - return $notificationItems; - } - - /** - * @param array $notifications - * - * @throws Enlight_Event_Exception - */ - private function saveTextNotification(array $notifications): bool - { - $notifications = $this->events->filter( - Event::NOTIFICATION_SAVE_FILTER_NOTIFICATIONS, - $notifications - ); - - return iterator_count($this->incomingNotificationsManager->saveTextNotification($notifications)) === 0; - } -} diff --git a/Controllers/Frontend/Process.php b/Controllers/Frontend/Process.php deleted file mode 100755 index e3064d0d..00000000 --- a/Controllers/Frontend/Process.php +++ /dev/null @@ -1,216 +0,0 @@ -adyenManager = $this->get(AdyenManager::class); - $this->adyenCheckout = $this->get(PaymentMethodService::class); - $this->basketService = $this->get(BasketService::class); - $this->orderMailService = $this->get(OrderMailService::class); - $this->logger = $this->get('adyen_payment.logger'); - $this->orderManager = $this->get(OrderManager::class); - $this->snippets = $this->get('snippets'); - $this->errorMessageProvider = $this->get(ErrorMessageProvider::class); - } - - /** - * @throws Exception - */ - public function returnAction(): void - { - $this->Front()->Plugins()->ViewRenderer()->setNoRender(); - - $response = $this->Request()->getParams(); - - if ($response) { - $merchantReference = !empty($response['merchantReference']) ? $response['merchantReference'] : ''; - - $order = $this->getOrderByMerchantReference($merchantReference); - $result = $this->validateResponse($response, $order); - - // Make the best effort to obtain merchant reference - if (empty($merchantReference) && !empty($result['merchantReference'])) { - $merchantReference = $result['merchantReference']; - } - - // Make the best effort to obtain related shop order - if (!$order && !empty($merchantReference)) { - $order = $this->getOrderByMerchantReference($merchantReference); - } - - $this->handleReturnResult($result, $order); - - switch(PaymentResultCode::load($result['resultCode'])) { - case PaymentResultCode::authorised(): - case PaymentResultCode::pending(): - case PaymentResultCode::received(): - if (!empty($merchantReference)) { - $this->orderMailService->sendOrderConfirmationMail($merchantReference); - } - $this->redirect([ - 'controller' => 'checkout', - 'action' => 'finish', - 'sUniqueID' => $order ? $order->getTemporaryId() : '', - 'sAGB' => true, - ]); - break; - case PaymentResultCode::cancelled(): - case PaymentResultCode::error(): - case PaymentResultCode::refused(): - default: - $this->errorMessageProvider->add( - $this->snippets->getNamespace('adyen/checkout/error') - ->get('errorTransaction'.$result['resultCode'], $result['refusalReason'] ?? '') - ); - - if (!empty($merchantReference)) { - $this->basketService->cancelAndRestoreByOrderNumber($merchantReference); - } - - $this->redirect([ - 'controller' => 'checkout', - 'action' => 'confirm', - ]); - break; - } - - if ($order) { - $this->orderManager->save($order); - } - } - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - * @throws \Doctrine\ORM\TransactionRequiredException - */ - private function handleReturnResult(array $result, ?Order $order): void - { - if (!$order) { - $this->logger->error('No order found for ', [ - 'ordernumber' => $result['merchantReference'] ?? '', - ]); - - return; - } - - switch (PaymentResultCode::load($result['resultCode'])) { - case PaymentResultCode::authorised(): - case PaymentResultCode::pending(): - case PaymentResultCode::received(): - $paymentStatus = $this->getModelManager()->find( - Status::class, - Status::PAYMENT_STATE_THE_PAYMENT_HAS_BEEN_ORDERED - ); - break; - case PaymentResultCode::cancelled(): - case PaymentResultCode::error(): - case PaymentResultCode::refused(): - $paymentStatus = $this->getModelManager()->find( - Status::class, - Status::PAYMENT_STATE_THE_PROCESS_HAS_BEEN_CANCELLED - ); - break; - default: - $paymentStatus = $this->getModelManager()->find(Status::class, Status::PAYMENT_STATE_REVIEW_NECESSARY); - break; - } - - $this->orderManager->updatePayment( - $order, - (string) ($result['pspReference'] ?? ''), - $paymentStatus - ); - } - - /** - * Validates the payload from checkout /payments hpp and returns the api response - * - * @return mixed - */ - private function validateResponse(array $response, ?Order $order) - { - try { - $request = [ - 'details' => RequestDataFormatter::forPaymentDetails($response), - ]; - - $paymentData = $this->adyenManager->fetchOrderPaymentData($order); - if (!empty($paymentData)) { - $request['paymentData'] = $paymentData; - } - - $checkout = $this->adyenCheckout->getCheckout(); - $response = $checkout->paymentsDetails($request); - } catch (AdyenException $e) { - $response['error'] = $e->getMessage(); - } - - return $response; - } - - private function getOrderByMerchantReference($merchantReference): ?Order - { - return $this->getModelManager()->getRepository(Order::class)->findOneBy([ - 'number' => $merchantReference, - ]); - } -} diff --git a/Dbal/BasketDetailAttributes.php b/Dbal/BasketDetailAttributes.php deleted file mode 100755 index 672dc035..00000000 --- a/Dbal/BasketDetailAttributes.php +++ /dev/null @@ -1,54 +0,0 @@ -db = $db; - } - - /** - * @throws Zend_Db_Adapter_Exception - */ - public function update(int $basketDetailId, array $attributeValues): int - { - return $this->db->update( - 's_order_basket_attributes', - $attributeValues, - ['basketID = ?' => $basketDetailId] - ); - } - - /** - * @throws Zend_Db_Adapter_Exception - */ - public function insert(int $basketDetailId, array $attributeValues): int - { - return $this->db->insert( - 's_order_basket_attributes', - array_merge($attributeValues, ['basketID' => $basketDetailId]) - ); - } - - public function hasBasketDetails(int $basketDetailId): bool - { - return count( - $this->db - ->select() - ->from('s_order_basket_attributes') - ->where('basketID=?', $basketDetailId) - ->query() - ->fetchAll() - ) > 0; - } -} diff --git a/Dbal/OrderDetailAttributes.php b/Dbal/OrderDetailAttributes.php deleted file mode 100755 index d2378330..00000000 --- a/Dbal/OrderDetailAttributes.php +++ /dev/null @@ -1,30 +0,0 @@ -db = $db; - } - - public function fetchByOrderDetailId(string $orderDetailId): array - { - $orderDetailAttributesResult = $this->db - ->select() - ->from('s_order_details_attributes') - ->where('detailID=?', $orderDetailId) - ->query() - ->fetchAll(); - - return $orderDetailAttributesResult[0] ?? []; - } -} diff --git a/Dbal/Remover/PaymentMeanSubShopRemover.php b/Dbal/Remover/PaymentMeanSubShopRemover.php deleted file mode 100755 index 41c269d4..00000000 --- a/Dbal/Remover/PaymentMeanSubShopRemover.php +++ /dev/null @@ -1,25 +0,0 @@ -db = $db; - } - - public function removeBySubShopId(int $subShopId): void - { - $this->db->executeQuery('DELETE FROM s_core_paymentmeans_subshops WHERE subshopID = :subShopId;', [ - ':subShopId' => $subShopId, - ]); - } -} diff --git a/Dbal/Remover/PaymentMeanSubShopRemoverInterface.php b/Dbal/Remover/PaymentMeanSubShopRemoverInterface.php deleted file mode 100644 index 4cfa5402..00000000 --- a/Dbal/Remover/PaymentMeanSubShopRemoverInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -db = $db; - } - - public function registerAdyenPaymentMethodForSubShop(int $subShopId): void - { - $this->db->executeQuery( - 'REPLACE INTO s_core_paymentmeans_subshops (paymentID, subshopID) - SELECT id as paymentID, :subShopId as subshopID - FROM s_core_paymentmeans - WHERE s_core_paymentmeans.source = :adyenSource;', - [ - ':subShopId' => $subShopId, - ':adyenSource' => SourceType::adyen()->getType(), - ] - ); - } -} diff --git a/Dbal/Writer/Payment/PaymentMeansSubShopsWriterInterface.php b/Dbal/Writer/Payment/PaymentMeansSubShopsWriterInterface.php deleted file mode 100644 index 531e76e3..00000000 --- a/Dbal/Writer/Payment/PaymentMeansSubShopsWriterInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -dataPersister = $dataPersister; - $this->attributeUpdater = $attributeUpdater; - } - - public function __invoke(int $paymentMeanId, PaymentMethod $adyenPaymentMethod): void - { - $attributesColumns = [AdyenPayment::ADYEN_CODE => TypeMapping::TYPE_STRING]; - - $dataPersister = $this->dataPersister; - $this->attributeUpdater->writeReadOnlyAttributes( - $table = 's_core_paymentmeans_attributes', - $attributesColumns, - static function() use ($dataPersister, $table, $paymentMeanId, $adyenPaymentMethod) { - return $dataPersister->persist( - [ - '_table' => $table, - '_foreignKey' => $paymentMeanId, - AdyenPayment::ADYEN_CODE => $adyenPaymentMethod->code(), - ], - 's_core_paymentmeans_attributes', - $paymentMeanId - ); - } - ); - } -} diff --git a/Doctrine/Writer/PaymentAttributeWriterInterface.php b/Doctrine/Writer/PaymentAttributeWriterInterface.php deleted file mode 100644 index 5e0d9575..00000000 --- a/Doctrine/Writer/PaymentAttributeWriterInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -entityManager = $entityManager; - $this->paymentFactory = $paymentFactory; - $this->paymentAttributeWriter = $paymentAttributeWriter; - $this->paymentRepository = $paymentRepository; - } - - public function __invoke(PaymentMethod $adyenPaymentMethod, Shop $shop): ImportResult - { - $payment = $this->providePaymentModel($adyenPaymentMethod, $shop); - if ($this->paymentExists($payment)) { - return ImportResult::fromException( - $shop, - $adyenPaymentMethod, - PaymentExistsException::withName($payment->getName()) - ); - } - - $this->entityManager->persist($payment); - $this->entityManager->flush($payment); - if (null === $payment->getId()) { - return ImportResult::fromException( - $shop, - $adyenPaymentMethod, - PaymentNotImportedException::forPayment($adyenPaymentMethod, $payment, $shop) - ); - } - - ($this->paymentAttributeWriter)($payment->getId(), $adyenPaymentMethod); - - return ImportResult::success($shop, $adyenPaymentMethod, ImportStatus::created()); - } - - private function paymentExists(Payment $payment): bool - { - if (null === $payment->getId()) { - return $this->paymentRepository->existsByName($payment->getName()); - } - - return $this->paymentRepository->existsDuplicate($payment); - } - - private function providePaymentModel(PaymentMethod $adyenPaymentMethod, Shop $shop): Payment - { - $swPayment = $this->paymentRepository->findByCode($adyenPaymentMethod->code()); - if (!$swPayment) { - return $this->paymentFactory->createFromAdyen($adyenPaymentMethod, $shop); - } - - return $this->paymentFactory->updateFromAdyen($swPayment, $adyenPaymentMethod, $shop); - } -} diff --git a/Doctrine/Writer/PaymentMethodWriterInterface.php b/Doctrine/Writer/PaymentMethodWriterInterface.php deleted file mode 100644 index 5685b9c7..00000000 --- a/Doctrine/Writer/PaymentMethodWriterInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -paymentRepository = $paymentRepository; - $this->paymentMethodWriter = $paymentMethodWriter; - $this->paymentAttributeWriter = $paymentAttributeWriter; - $this->logger = $logger; - } - - public function __invoke(PaymentMethod $adyenPaymentMethod, Shop $shop): ImportResult - { - if ($adyenPaymentMethod->adyenType()->type() === $adyenPaymentMethod->code()) { - return ($this->paymentMethodWriter)($adyenPaymentMethod, $shop); - } - - // legacy code had adyen 'type' stored as code - $paymentMean = $this->paymentRepository->findByCode($adyenPaymentMethod->adyenType()->type()); - if (!$paymentMean) { - return ($this->paymentMethodWriter)($adyenPaymentMethod, $shop); - } - - $this->log($paymentMean, $adyenPaymentMethod); - ($this->paymentAttributeWriter)($paymentMean->getId(), $adyenPaymentMethod); - - return ($this->paymentMethodWriter)($adyenPaymentMethod, $shop); - } - - private function log(Payment $paymentMean, PaymentMethod $adyenPaymentMethod): void - { - $this->logger->notice(sprintf('Updating legacy payment mean adyen "%s" to "%s"', - $adyenPaymentMethod->adyenType()->type(), - $adyenPaymentMethod->code() - ), [ - 'shopware payment mean' => [ - 'id' => $paymentMean->getId(), - 'name' => $paymentMean->getName(), - 'additional description' => $paymentMean->getAdditionalDescription(), - ], - 'adyen payment method' => [ - 'name' => $adyenPaymentMethod->name(), - 'type' => $adyenPaymentMethod->adyenType()->type(), - 'unique identifier' => $adyenPaymentMethod->code(), - ], - ]); - } -} diff --git a/Enricher/Payment/PaymentMethodEnricher.php b/Enricher/Payment/PaymentMethodEnricher.php deleted file mode 100755 index 9b10042e..00000000 --- a/Enricher/Payment/PaymentMethodEnricher.php +++ /dev/null @@ -1,84 +0,0 @@ -snippets = $snippets; - $this->imageLogoProvider = $imageLogoProvider; - } - - public function __invoke(array $shopwareMethod, PaymentMethod $paymentMethod): array - { - return array_merge($shopwareMethod, [ - 'enriched' => true, - 'additionaldescription' => $this->enrichAdditionalDescription($shopwareMethod, $paymentMethod), - 'image' => $this->imageLogoProvider->provideByType($paymentMethod->adyenType()->type()), - 'isStoredPayment' => $paymentMethod->isStoredPayment(), - 'isAdyenPaymentMethod' => true, - 'adyenType' => $paymentMethod->adyenType()->type(), - 'metadata' => $paymentMethod->rawData(), - ], - $this->enrichStoredPaymentMethodData($shopwareMethod, $paymentMethod) - ); - } - - private function enrichAdditionalDescription(array $shopwareMethod, PaymentMethod $adyenMethod): string - { - $additionalDescription = $shopwareMethod['additionaldescription'] ?? ''; - - if ('' === $additionalDescription) { - $additionalDescription = $this->snippets - ->getNamespace('adyen/method/description') - ->get($shopwareMethod['attribute']['adyen_type'] ?? '') ?? ''; - } - - if (!$adyenMethod->isStoredPayment()) { - return $additionalDescription; - } - - return sprintf( - '%s%s: %s', - ($additionalDescription ? $additionalDescription.' ' : ''), - $this->snippets - ->getNamespace('adyen/checkout/payment') - ->get('CardNumberEndingOn', 'Card number ending on', true), - $adyenMethod->getValue('lastFour', '') - ); - } - - private function enrichStoredPaymentMethodData(array $shopwareMethod, PaymentMethod $paymentMethod): array - { - if (!$paymentMethod->isStoredPayment()) { - return []; - } - - return [ - 'stored_method_umbrella_id' => sprintf( - '%s_%s', - $shopwareMethod['id'], - $paymentMethod->getStoredPaymentMethodId() - ), - 'stored_method_id' => $paymentMethod->getStoredPaymentMethodId(), - 'description' => $paymentMethod->getValue('name'), - 'source' => SourceType::adyen()->getType(), - ]; - } -} diff --git a/Enricher/Payment/PaymentMethodEnricherInterface.php b/Enricher/Payment/PaymentMethodEnricherInterface.php deleted file mode 100644 index b7d289a8..00000000 --- a/Enricher/Payment/PaymentMethodEnricherInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -timestamp; + } + + /** + * @param string $timestamp + */ + public function setTimestamp(string $timestamp): void + { + $this->timestamp = $timestamp; + } +} diff --git a/Exceptions/AuthorizationException.php b/Exceptions/AuthorizationException.php deleted file mode 100644 index 6438c218..00000000 --- a/Exceptions/AuthorizationException.php +++ /dev/null @@ -1,9 +0,0 @@ -getId(), - $notification->getOrderId(), - $notification->getPspReference(), - $notification->getStatus(), - $notification->getPaymentMethod(), - $notification->getEventCode(), - $notification->isSuccess(), - $notification->getMerchantAccountCode(), - $notification->getAmountValue(), - $notification->getAmountCurrency() - )); - } -} diff --git a/Exceptions/InvalidAuthenticationException.php b/Exceptions/InvalidAuthenticationException.php deleted file mode 100644 index 9f0805c4..00000000 --- a/Exceptions/InvalidAuthenticationException.php +++ /dev/null @@ -1,18 +0,0 @@ -getMessage(), $exception->getCode(), $exception); - } -} diff --git a/Exceptions/InvalidParameterException.php b/Exceptions/InvalidParameterException.php deleted file mode 100644 index b8978f77..00000000 --- a/Exceptions/InvalidParameterException.php +++ /dev/null @@ -1,16 +0,0 @@ -getId(), - $swPayment->getName(), - $adyenPaymentMethod->adyenType()->type(), - $adyenPaymentMethod->isStoredPayment() ? ', stored payment id: "'.$adyenPaymentMethod->getStoredPaymentMethodId().'"' : '', - $shop->getId(), - $shop->getName() - )); - } -} diff --git a/Exceptions/RecurringPaymentTokenNotFoundException.php b/Exceptions/RecurringPaymentTokenNotFoundException.php deleted file mode 100644 index af6381b3..00000000 --- a/Exceptions/RecurringPaymentTokenNotFoundException.php +++ /dev/null @@ -1,28 +0,0 @@ -resultCode(), - $pspReference - )); - } -} diff --git a/Exceptions/RecurringPaymentTokenNotSavedException.php b/Exceptions/RecurringPaymentTokenNotSavedException.php deleted file mode 100644 index 28839b50..00000000 --- a/Exceptions/RecurringPaymentTokenNotSavedException.php +++ /dev/null @@ -1,15 +0,0 @@ -identifier().'"'); - } -} diff --git a/Exceptions/StoreDoesNotExistException.php b/Exceptions/StoreDoesNotExistException.php new file mode 100644 index 00000000..048a794d --- /dev/null +++ b/Exceptions/StoreDoesNotExistException.php @@ -0,0 +1,15 @@ +Plugins()->ViewRenderer()->setNoRender(); - - $httpResponse->setHeader('Content-type', $response->headers->get('Content-Type'), true); - $httpResponse->setHttpResponseCode($response->getStatusCode()); - $httpResponse->setBody($response->getContent()); - - return $httpResponse; - } - - public function sendJsonBadRequestResponse( - Enlight_Controller_Front $frontController, - Enlight_Controller_Response_ResponseHttp $httpResponse, - string $message - ): Enlight_Controller_Response_ResponseHttp { - return $this->sendJsonResponse( - $frontController, - $httpResponse, - JsonResponse::create( - ['error' => true, 'message' => $message], - Response::HTTP_BAD_REQUEST - ) - ); - } -} diff --git a/Http/Response/NotificationResponseFactory.php b/Http/Response/NotificationResponseFactory.php deleted file mode 100644 index 7ec2b398..00000000 --- a/Http/Response/NotificationResponseFactory.php +++ /dev/null @@ -1,46 +0,0 @@ - false, - 'message' => $message, - ], Response::HTTP_UNAUTHORIZED); - } - - public static function badRequest(string $message): JsonResponse - { - return new JsonResponse([ - 'success' => false, - 'message' => $message, - ], Response::HTTP_BAD_REQUEST); - } - - public static function fromShopwareResponse(Enlight_Controller_Request_RequestHttp $request, $data): JsonResponse - { - $pretty = (bool) $request->getParam('pretty', false); - if (true === $pretty) { - return new JsonResponse(Zend_Json::prettyPrint($data)); - } - - return new JsonResponse(Zend_Json::encode(array_map(static function($value) { - return $value instanceof \DateTimeInterface ? $value->format(\DateTime::ISO8601) : $value; - }, $data))); - } -} diff --git a/Http/Validator/Notification/AuthenticationValidator.php b/Http/Validator/Notification/AuthenticationValidator.php deleted file mode 100755 index 963b39df..00000000 --- a/Http/Validator/Notification/AuthenticationValidator.php +++ /dev/null @@ -1,38 +0,0 @@ -configuration = $configuration; - } - - /** - * @throws InvalidAuthenticationException - */ - public function validate(array $notifications): void - { - $authUsername = $_SERVER['PHP_AUTH_USER'] ?? $_SERVER['HTTP_PHP_AUTH_USER'] ?? ''; - $authPassword = $_SERVER['PHP_AUTH_PW'] ?? $_SERVER['HTTP_PHP_AUTH_PW'] ?? ''; - - if (!$authUsername || !$authPassword) { - throw InvalidAuthenticationException::missingAuthentication(); - } - - if ($this->configuration->getNotificationAuthUsername() !== $authUsername - || $this->configuration->getNotificationAuthPassword() !== $authPassword - ) { - throw InvalidAuthenticationException::invalidCredentials(); - } - } -} diff --git a/Http/Validator/Notification/Chain.php b/Http/Validator/Notification/Chain.php deleted file mode 100755 index 93dedd77..00000000 --- a/Http/Validator/Notification/Chain.php +++ /dev/null @@ -1,26 +0,0 @@ -validators = $validators; - } - - /** - * {@inheritdoc} - */ - public function validate(array $notifications): void - { - foreach ($this->validators as $validator) { - $validator->validate($notifications); - } - } -} diff --git a/Http/Validator/Notification/HmacValidator.php b/Http/Validator/Notification/HmacValidator.php deleted file mode 100755 index 17da333b..00000000 --- a/Http/Validator/Notification/HmacValidator.php +++ /dev/null @@ -1,46 +0,0 @@ -hmacSignatureService = $hmacSignatureService; - $this->configuration = $configuration; - } - - /** - * @throws InvalidHmacException - */ - public function validate(array $notifications): void - { - foreach ($notifications as $notificationItem) { - try { - $params = $notificationItem['NotificationRequestItem'] ?? []; - $hmacCheck = $this->hmacSignatureService->isValidNotificationHMAC( - $this->configuration->getNotificationHmac(), - $params - ); - if (!$hmacCheck) { - throw InvalidHmacException::withHmacKey($params['additionalData']['hmacSignature'] ?? ''); - } - } catch (AdyenException $exception) { - throw InvalidHmacException::fromAdyenException($exception); - } - } - } -} diff --git a/Http/Validator/Notification/LoggingAuthorizationValidatorDecorator.php b/Http/Validator/Notification/LoggingAuthorizationValidatorDecorator.php deleted file mode 100755 index 5f0cc7ea..00000000 --- a/Http/Validator/Notification/LoggingAuthorizationValidatorDecorator.php +++ /dev/null @@ -1,37 +0,0 @@ -authorizationValidator = $authenticationValidator; - $this->logger = $logger; - } - - public function validate(array $notifications): void - { - try { - $this->authorizationValidator->validate($notifications); - } catch (AuthorizationException $exception) { - $this->logger->critical($exception->getMessage(), [ - 'trace' => $exception->getTraceAsString(), - 'previous' => $exception->getPrevious(), - ]); - - throw $exception; - } - } -} diff --git a/Http/Validator/Notification/NotificationValidatorInterface.php b/Http/Validator/Notification/NotificationValidatorInterface.php deleted file mode 100644 index 0ceddd1a..00000000 --- a/Http/Validator/Notification/NotificationValidatorInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -paymentMethodsProvider = $paymentMethodsProvider; - $this->shopRepository = $shopRepository; - $this->usedFallbackConfigRule = $usedFallbackConfigRule; - $this->paymentMethodWriter = $paymentMethodWriter; - $this->paymentMeansSubShopsWriter = $paymentMeansSubShopsWriter; - } - - public function importAll(): \Generator - { - /** @var Shop $shop */ - foreach ($this->shopRepository->findAll() as $shop) { - if (($this->usedFallbackConfigRule)($shop->getId())) { - $this->paymentMeansSubShopsWriter->registerAdyenPaymentMethodForSubShop($shop->getId()); - yield ImportResult::successSubShopFallback($shop, ImportStatus::updated()); - - continue; - } - - yield from $this->import($shop); - } - } - - public function importForShop(Shop $shop): \Generator - { - yield from $this->import($shop); - } - - /** - * @psalm-return \Generator - */ - private function import(Shop $shop): \Generator - { - $paymentMethods = ($this->paymentMethodsProvider)($shop); - foreach ($paymentMethods as $adyenPaymentMethod) { - try { - yield $this->paymentMethodWriter->__invoke($adyenPaymentMethod, $shop); - } catch (\Exception $exception) { - yield ImportResult::fromException($shop, $adyenPaymentMethod, $exception); - } - } - } -} diff --git a/Import/PaymentMethodImporterInterface.php b/Import/PaymentMethodImporterInterface.php deleted file mode 100644 index dc5e78fb..00000000 --- a/Import/PaymentMethodImporterInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -|ImportResult[] - */ - public function importAll(): \Generator; - /** - * @return \Generator|ImportResult[] - */ - public function importForShop(Shop $shop): \Generator; -} diff --git a/Import/TraceablePaymentMethodImporter.php b/Import/TraceablePaymentMethodImporter.php deleted file mode 100755 index 1635799e..00000000 --- a/Import/TraceablePaymentMethodImporter.php +++ /dev/null @@ -1,68 +0,0 @@ -paymentMethodImporter = $paymentMethodImporter; - $this->logger = $logger; - } - - public function importAll(): \Generator - { - foreach ($this->paymentMethodImporter->importAll() as $importResult) { - $this->log($importResult); - - yield $importResult; - } - } - - public function importForShop(Shop $shop): \Generator - { - foreach ($this->paymentMethodImporter->importForShop($shop) as $importResult) { - $this->log($importResult); - - yield $importResult; - } - } - - private function log(ImportResult $importResult): void - { - $paymentMethod = $importResult->getPaymentMethod(); - if ($importResult->isSuccess()) { - $this->logger->info('Adyen payment method imported', [ - 'shop id' => $importResult->getShop()->getId(), - 'shop name' => $importResult->getShop()->getName(), - 'payment method' => $paymentMethod ? - $paymentMethod->adyenType()->type().' '.$paymentMethod->name() : - 'all', - ]); - - return; - } - - $exception = $importResult->getException(); - $this->logger->error('Adyen payment method could not be imported', [ - 'shop id' => $importResult->getShop()->getId(), - 'shop name' => $importResult->getShop()->getName(), - 'payment type' => $paymentMethod ? $paymentMethod->adyenType()->type() : 'n/a', - 'payment name' => $paymentMethod ? $paymentMethod->name() : 'n/a', - 'message' => $exception ? $exception->getMessage() : 'n/a', - 'exception' => $exception, - ]); - } -} diff --git a/Models/AdyenEntity.php b/Models/AdyenEntity.php new file mode 100644 index 00000000..19ab00e9 --- /dev/null +++ b/Models/AdyenEntity.php @@ -0,0 +1,18 @@ +id; + } + + /** + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * @param string $type + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * @return string + */ + public function getIndex_1() + { + return $this->index_1; + } + + /** + * @param string $index_1 + */ + public function setIndex_1($index_1) + { + $this->index_1 = $index_1; + } + + /** + * @return string + */ + public function getIndex_2() + { + return $this->index_2; + } + + /** + * @param string $index_2 + */ + public function setIndex_2($index_2) + { + $this->index_2 = $index_2; + } + + /** + * @return string + */ + public function getIndex_3() + { + return $this->index_3; + } + + /** + * @param string $index_3 + */ + public function setIndex_3($index_3) + { + $this->index_3 = $index_3; + } + + /** + * @return string + */ + public function getIndex_4() + { + return $this->index_4; + } + + /** + * @param string $index_4 + */ + public function setIndex_4($index_4) + { + $this->index_4 = $index_4; + } + + /** + * @return string + */ + public function getIndex_5() + { + return $this->index_5; + } + + /** + * @param string $index_5 + */ + public function setIndex_5($index_5) + { + $this->index_5 = $index_5; + } + + /** + * @return string + */ + public function getIndex_6() + { + return $this->index_6; + } + + /** + * @param string $index_6 + */ + public function setIndex_6($index_6) + { + $this->index_6 = $index_6; + } + + /** + * @return string + */ + public function getIndex_7() + { + return $this->index_7; + } + + /** + * @param string $index_7 + */ + public function setIndex_7($index_7) + { + $this->index_7 = $index_7; + } + + /** + * @return string + */ + public function getIndex_8() + { + return $this->index_8; + } + + /** + * @param string $index_8 + */ + public function setIndex_8($index_8) + { + $this->index_8 = $index_8; + } + + /** + * @return string + */ + public function getIndex_9(): string + { + return $this->index_9; + } + + /** + * @param string $index_9 + */ + public function setIndex_9($index_9): void + { + $this->index_9 = $index_9; + } + + /** + * @return string + */ + public function getData() + { + return $this->data; + } + + /** + * @param string $data + */ + public function setData($data) + { + $this->data = $data; + } +} diff --git a/Models/Enum/Channel.php b/Models/Enum/Channel.php deleted file mode 100644 index 312ee487..00000000 --- a/Models/Enum/Channel.php +++ /dev/null @@ -1,13 +0,0 @@ -getConstants()); - } -} diff --git a/Models/Enum/PaymentMethod/ImportStatus.php b/Models/Enum/PaymentMethod/ImportStatus.php deleted file mode 100644 index ca585ffb..00000000 --- a/Models/Enum/PaymentMethod/ImportStatus.php +++ /dev/null @@ -1,70 +0,0 @@ -availableStates(), true)) { - throw new \InvalidArgumentException('Invalid import status: "'.$status.'"'); - } - - $this->status = $status; - } - - public function getStatus(): string - { - return $this->status; - } - - public function equals(ImportStatus $importStatus): bool - { - return $importStatus->getStatus() === $this->status; - } - - public static function load(string $status): self - { - return new self($status); - } - - public static function created(): self - { - return new self(self::$CREATED); - } - - public static function updated(): self - { - return new self(self::$UPDATED); - } - - public static function notChanged(): self - { - return new self(self::$NOT_CHANGED); - } - - public static function notHandledStatus(): self - { - return new self(self::$NOT_HANDLED); - } - - private function availableStates(): array - { - return [ - self::$CREATED, - self::$UPDATED, - self::$NOT_CHANGED, - self::$NOT_HANDLED, - ]; - } -} diff --git a/Models/Enum/PaymentMethod/PluginType.php b/Models/Enum/PaymentMethod/PluginType.php deleted file mode 100755 index 24f47289..00000000 --- a/Models/Enum/PaymentMethod/PluginType.php +++ /dev/null @@ -1,59 +0,0 @@ -type = $pluginType; - } - - public function getType(): int - { - return $this->type; - } - - public function equals(PluginType $pluginType): bool - { - return $pluginType->getType() === $this->type; - } - - public static function load(int $pluginType): self - { - return new self($pluginType); - } - - public static function adyenType(): self - { - return new self(self::$ADYEN); - } - - public static function isTypeAllowed(int $pluginType): bool - { - return in_array($pluginType, self::availableTypes(), true); - } - - /** - * @internal - * - * @return string[] - */ - public static function availableTypes(): array - { - return [ - self::$ADYEN, - ]; - } -} diff --git a/Models/Enum/PaymentMethod/SourceType.php b/Models/Enum/PaymentMethod/SourceType.php deleted file mode 100755 index 85e45bce..00000000 --- a/Models/Enum/PaymentMethod/SourceType.php +++ /dev/null @@ -1,50 +0,0 @@ -type = $sourceType; - } - - public function getType(): ?int - { - return $this->type; - } - - public function equals(SourceType $sourceType): bool - { - return $sourceType->getType() === $this->type; - } - - public static function load(?int $sourceType): self - { - return new self($sourceType); - } - - public static function shopwareDefault(): self - { - return new self(self::DEFAULT_PAYMENT); - } - - public static function shopwareSelfCreated(): self - { - return new self(self::SELF_CREATED); - } - - public static function adyen(): self - { - return new self(self::ADYEN); - } -} diff --git a/Models/Event.php b/Models/Event.php deleted file mode 100644 index faf2d234..00000000 --- a/Models/Event.php +++ /dev/null @@ -1,107 +0,0 @@ -availableEventNames(), true)) { - throw new \InvalidArgumentException('Invalid Event name: "'.$name.'"'); - } - - $this->name = $name; - } - - public function getName(): string - { - return $this->name; - } - - public function equals(Event $event): bool - { - return $event->getName() === $this->name; - } - - public static function load(string $name): self - { - return new self($name); - } - - public static function cronImportPaymentMethods(): self - { - return new self(self::$CRON_IMPORT_PAYMENT_METHODS); - } - - public static function cronProcessNotifications(): self - { - return new self(self::$CRON_PROCESS_NOTIFICATIONS); - } - - /** - * @return string[] - */ - private function availableEventNames(): array - { - return [ - self::$CRON_PROCESS_NOTIFICATIONS, - self::$CRON_IMPORT_PAYMENT_METHODS, - - self::NOTIFICATION_RECEIVE, - self::NOTIFICATION_SAVE_FILTER_NOTIFICATIONS, - self::NOTIFICATION_FIND_HANDLERS, - self::NOTIFICATION_PROCESS, - self::NOTIFICATION_NO_ORDER_FOUND, - self::NOTIFICATION_PROCESS_AUTHORISATION, - self::NOTIFICATION_PROCESS_CANCELLATION, - self::NOTIFICATION_PROCESS_CAPTURE, - self::NOTIFICATION_PROCESS_CAPTURE_FAILED, - self::NOTIFICATION_PROCESS_OFFER_CLOSED, - self::NOTIFICATION_PROCESS_REFUND, - self::NOTIFICATION_PROCESS_REFUND_FAILED, - self::NOTIFICATION_PROCESS_REFUNDED_REVERSED, - self::NOTIFICATION_PROCESS_CHARGEBACK, - self::NOTIFICATION_PROCESS_CHARGEBACK_REVERSED, - self::ORDER_STATUS_CHANGED, - self::ORDER_PAYMENT_STATUS_CHANGED, - self::BASKET_RESTORE_FROM_ORDER, - self::BASKET_BEFORE_PROCESS_ORDER_DETAIL, - self::BASKET_STOPPED_PROCESS_ORDER_DETAIL, - self::BASKET_AFTER_PROCESS_ORDER_DETAIL, - ]; - } -} diff --git a/Models/Feedback/NotificationItemFeedback.php b/Models/Feedback/NotificationItemFeedback.php deleted file mode 100755 index 76164c0b..00000000 --- a/Models/Feedback/NotificationItemFeedback.php +++ /dev/null @@ -1,52 +0,0 @@ -message = $message; - $this->notificationItem = $notificationItem; - } - - public function getMessage(): string - { - return $this->message; - } - - public function setMessage(string $message): NotificationItemFeedback - { - $this->message = $message; - - return $this; - } - - public function getNotificationItem(): array - { - return $this->notificationItem; - } - - public function setNotificationItem(array $notificationItem): NotificationItemFeedback - { - $this->notificationItem = $notificationItem; - - return $this; - } -} diff --git a/Models/Feedback/NotificationProcessorFeedback.php b/Models/Feedback/NotificationProcessorFeedback.php deleted file mode 100755 index 9fbd6c4c..00000000 --- a/Models/Feedback/NotificationProcessorFeedback.php +++ /dev/null @@ -1,65 +0,0 @@ -success = $success; - $this->message = $message; - $this->notification = $notification; - } - - public function isSuccess(): bool - { - return $this->success; - } - - public function setSuccess(bool $success): NotificationProcessorFeedback - { - $this->success = $success; - - return $this; - } - - public function getMessage(): string - { - return $this->message; - } - - public function setMessage(string $message): NotificationProcessorFeedback - { - $this->message = $message; - - return $this; - } - - public function getNotification(): Notification - { - return $this->notification; - } - - public function setNotification(Notification $notification): NotificationProcessorFeedback - { - $this->notification = $notification; - - return $this; - } -} diff --git a/Models/Feedback/TextNotificationItemFeedback.php b/Models/Feedback/TextNotificationItemFeedback.php deleted file mode 100755 index b90314a9..00000000 --- a/Models/Feedback/TextNotificationItemFeedback.php +++ /dev/null @@ -1,52 +0,0 @@ -message = $message; - $this->textNotificationItem = $textNotificationItem; - } - - public function getMessage(): string - { - return $this->message; - } - - public function setMessage(string $message): TextNotificationItemFeedback - { - $this->message = $message; - - return $this; - } - - public function getTextNotificationItem(): array - { - return $this->textNotificationItem; - } - - public function setTextNotificationItem(array $textNotificationItem): TextNotificationItemFeedback - { - $this->textNotificationItem = $textNotificationItem; - - return $this; - } -} diff --git a/Models/Notification.php b/Models/Notification.php deleted file mode 100755 index dd87938b..00000000 --- a/Models/Notification.php +++ /dev/null @@ -1,427 +0,0 @@ -setCreatedAt(new \DateTime('now')); - $this->setUpdatedAt(new \DateTime('now')); - } - - /** - * @return int - */ - public function getId(): int - { - return $this->id; - } - - /** - * @param int $id - * @return Notification - */ - public function setId(int $id): Notification - { - $this->id = $id; - return $this; - } - - /** - * @return Order|null - */ - public function getOrder(): ?Order - { - return $this->order; - } - - /** - * @param Order|null $order - * @return Notification - */ - public function setOrder(Order $order): Notification - { - $this->order = $order; - return $this; - } - - /** - * @return int - */ - public function getOrderId(): int - { - return $this->orderId; - } - - /** - * @param int $orderId - * @return Notification - */ - public function setOrderId(int $orderId): Notification - { - $this->orderId = $orderId; - return $this; - } - - /** - * @return string - */ - public function getPspReference(): string - { - return $this->pspReference; - } - - /** - * @param string $pspReference - * @return Notification - */ - public function setPspReference(string $pspReference): Notification - { - $this->pspReference = $pspReference; - return $this; - } - - /** - * @return \DateTime - */ - public function getCreatedAt(): \DateTime - { - return $this->createdAt; - } - - /** - * @param \DateTime $createdAt - * @return Notification - */ - public function setCreatedAt(\DateTime $createdAt): Notification - { - $this->createdAt = $createdAt; - return $this; - } - - /** - * @return \DateTime - */ - public function getUpdatedAt(): \DateTime - { - return $this->updatedAt; - } - - /** - * @param \DateTime $updatedAt - * @return Notification - */ - public function setUpdatedAt(\DateTime $updatedAt): Notification - { - $this->updatedAt = $updatedAt; - return $this; - } - - /** - * @return \DateTime - */ - public function getScheduledProcessingTime(): \DateTime - { - return $this->scheduledProcessingTime; - } - - /** - * @param \DateTime $scheduledProcessingTime - * @return Notification - */ - public function setScheduledProcessingTime(\DateTime $scheduledProcessingTime): Notification - { - $this->scheduledProcessingTime = $scheduledProcessingTime; - return $this; - } - - /** - * @return string - */ - public function getStatus(): string - { - return $this->status; - } - - /** - * @param string $status - * @return Notification - */ - public function setStatus(string $status): Notification - { - $this->status = $status; - return $this; - } - - /** - * @return null|string - */ - public function getPaymentMethod(): string - { - return $this->paymentMethod; - } - - /** - * @param string $paymentMethod - * @return Notification - */ - public function setPaymentMethod(string $paymentMethod): Notification - { - $this->paymentMethod = $paymentMethod; - return $this; - } - - /** - * @return string - */ - public function getEventCode(): string - { - return $this->eventCode; - } - - /** - * @param string $eventCode - * @return Notification - */ - public function setEventCode(string $eventCode): Notification - { - $this->eventCode = $eventCode; - return $this; - } - - /** - * @return bool - */ - public function isSuccess(): bool - { - return $this->success; - } - - /** - * @param bool $success - * @return Notification - */ - public function setSuccess(bool $success): Notification - { - $this->success = $success; - return $this; - } - - /** - * @return string - */ - public function getMerchantAccountCode(): string - { - return $this->merchantAccountCode; - } - - /** - * @param string $merchantAccountCode - * @return Notification - */ - public function setMerchantAccountCode(string $merchantAccountCode): Notification - { - $this->merchantAccountCode = $merchantAccountCode; - return $this; - } - - /** - * @return float - */ - public function getAmountValue(): float - { - return $this->amountValue; - } - - /** - * @param float $amountValue - * @return Notification - */ - public function setAmountValue(float $amountValue): Notification - { - $this->amountValue = $amountValue; - return $this; - } - - /** - * @return string - */ - public function getAmountCurrency(): string - { - return $this->amountCurrency; - } - - /** - * @param string $amountCurrency - * @return Notification - */ - public function setAmountCurrency(string $amountCurrency): Notification - { - $this->amountCurrency = $amountCurrency; - return $this; - } - - /** - * @return string - */ - public function getErrorDetails(): string - { - return $this->errorDetails; - } - - /** - * @param string $errorDetails - * @return Notification - */ - public function setErrorDetails(string $errorDetails): Notification - { - $this->errorDetails = $errorDetails; - return $this; - } - - /** - * Specify data which should be serialized to JSON - * @link https://php.net/manual/en/jsonserializable.jsonserialize.php - * @return mixed data which can be serialized by json_encode, - * which is a value of any type other than a resource. - * @since 5.4.0 - */ - public function jsonSerialize() - { - return [ - 'id' => $this->getId(), - 'pspReference' => $this->getPspReference(), - 'createdAt' => $this->getCreatedAt(), - 'updatedAt' => $this->getUpdatedAt(), - 'status' => $this->getStatus(), - 'paymentMethod' => $this->getPaymentMethod(), - 'eventCode' => $this->getEventCode(), - 'success' => $this->isSuccess(), - 'merchantAccountCode' => $this->getMerchantAccountCode(), - 'amountValue' => $this->getAmountValue(), - 'amountCurrency' => $this->getAmountCurrency(), - 'errorDetails' => $this->getErrorDetails(), - 'orderId' => $this->getOrderId() - ]; - } -} diff --git a/Models/NotificationException.php b/Models/NotificationException.php deleted file mode 100755 index 0448316a..00000000 --- a/Models/NotificationException.php +++ /dev/null @@ -1,32 +0,0 @@ -notification = $notification; - - parent::__construct($message, $code, $previous); - } - - public function getNotification(): Notification - { - return $this->notification; - } -} diff --git a/Models/NotificationsEntity.php b/Models/NotificationsEntity.php new file mode 100644 index 00000000..9865a6d7 --- /dev/null +++ b/Models/NotificationsEntity.php @@ -0,0 +1,15 @@ +countryRepository = $countryRepository; - $this->pluginIdProvider = $pluginIdProvider; - } - - public function createFromAdyen(PaymentMethod $paymentMethod, Shop $shop): Payment - { - $new = new Payment(); - $new->setActive(true); - $new->setEsdActive(true); - $new->setName($paymentMethod->code()); - $new->setDescription($paymentMethod->name()); - $new->setAdditionalDescription($this->provideAdditionalDescription($paymentMethod)); - $new->setShops(new ArrayCollection([$shop])); - $new->setSource(SourceType::adyen()->getType()); - $new->setPluginId($this->pluginIdProvider->provideId()); - $new->setCountries(new ArrayCollection( - $this->countryRepository->findAll() - )); - - return $new; - } - - public function updateFromAdyen(Payment $payment, PaymentMethod $paymentMethod, Shop $shop): Payment - { - $payment->setName($paymentMethod->code()); - $payment->setDescription($paymentMethod->name()); - $payment->setAdditionalDescription($this->provideAdditionalDescription($paymentMethod)); - $payment->setShops(new ArrayCollection([$shop])); - $payment->setSource(SourceType::adyen()->getType()); - $payment->setPluginId($this->pluginIdProvider->provideId()); - $payment->setCountries(new ArrayCollection( - $this->countryRepository->findAll() - )); - - return $payment; - } - - private function provideAdditionalDescription(PaymentMethod $paymentMethod): string - { - return self::ADYEN_PREFIX.' '.$paymentMethod->name().' ('.$paymentMethod->adyenType()->type().')'; - } -} diff --git a/Models/Payment/PaymentFactoryInterface.php b/Models/Payment/PaymentFactoryInterface.php deleted file mode 100644 index 4d05cf9c..00000000 --- a/Models/Payment/PaymentFactoryInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -availableGroups(), true)) { - throw new \InvalidArgumentException('Invalid Payment method group: "'.$group.'"'); - } - - $this->group = $group; - } - - public static function default(): self - { - return new self(self::DEFAULT); - } - - public static function stored(): self - { - return new self(self::STORED); - } - - public function group(): string - { - return $this->group; - } - - public function equals(PaymentGroup $group): bool - { - return $this->group === $group->group(); - } - - /** - * @return string[] - */ - private function availableGroups(): array - { - return [ - self::DEFAULT, - self::STORED, - ]; - } -} diff --git a/Models/Payment/PaymentMean.php b/Models/Payment/PaymentMean.php deleted file mode 100755 index 08c0c843..00000000 --- a/Models/Payment/PaymentMean.php +++ /dev/null @@ -1,112 +0,0 @@ -id = (int) ($paymentMean['id'] ?? 0); - $new->source = SourceType::load((int) $paymentMean['source']); - $new->raw = $paymentMean; - $new->enriched = (bool) ($paymentMean['enriched'] ?? false); - $new->adyenType = true === $new->enriched ? PaymentType::load((string) $paymentMean['adyenType']) : null; - - return $new; - } - - public function getId(): int - { - return $this->id; - } - - public function getSource(): SourceType - { - return $this->source; - } - - public function isHidden(): bool - { - return (bool) ($this->raw['hide'] ?? false); - } - - public function getAttribute(): Attribute - { - if (array_key_exists('attribute', $this->raw)) { - return $this->raw['attribute']; - } - - /** For compatibility with Shopware 5.6.0 */ - if (array_key_exists('attributes', $this->raw)) { - return $this->raw['attributes']['core'] ?? new Attribute(); - } - - return new Attribute(); - } - - public function isEnriched(): bool - { - return $this->enriched; - } - - public function getAdyenCode(): string - { - if ($this->getAttribute()->exists(AdyenPayment::ADYEN_CODE)) { - return (string) $this->getAttribute()->get(AdyenPayment::ADYEN_CODE); - } - - return ''; - } - - public function getAdyenStoredMethodId(): string - { - return (string) $this->getValue('stored_method_id', ''); - } - - public function adyenType(): ?PaymentType - { - return $this->adyenType; - } - - /** - * @param mixed|null $fallback - * - * @return mixed|null - */ - public function getValue(string $key, $fallback = null) - { - return $this->raw[$key] ?? $fallback; - } - - public function getRaw(): array - { - return $this->raw; - } - - public function isAdyenSourceType(): bool - { - return $this->source->equals(SourceType::adyen()); - } -} diff --git a/Models/Payment/PaymentMethod.php b/Models/Payment/PaymentMethod.php deleted file mode 100755 index d6c0d512..00000000 --- a/Models/Payment/PaymentMethod.php +++ /dev/null @@ -1,119 +0,0 @@ - */ - private $rawData; - - private function __construct() - { - } - - public static function fromRaw(array $data): self - { - $new = new self(); - $new->code = ''; - $new->group = array_key_exists('id', $data) ? PaymentGroup::stored() : PaymentGroup::default(); - $new->type = PaymentType::load((string) ($data['type'] ?? '')); - $new->rawData = $data; - - return $new; - } - - public function withCode(string $name): self - { - $new = clone $this; - $new->code = mb_strtolower(sprintf('%s_%s', - $this->type->type(), - Sanitize::removeNonWord($name) - )); - - // Standardize credit card code for Sweden. Adyen returns scheme_card instead of scheme_credit_card for SW - if ('scheme_card' === $new->code) { - $new->code = 'scheme_credit_card'; - } - - return $new; - } - - public function code(): string - { - return $this->code; - } - - public function adyenType(): PaymentType - { - return $this->type; - } - - public function group(): PaymentGroup - { - return $this->group; - } - - public function rawData(): array - { - return $this->rawData; - } - - public function name(): string - { - return (string) ($this->rawData['name'] ?? ''); - } - - /** - * shortcut to get value of raw payment data. - * - * @return mixed|null - * - * @psalm-param ''|null $fallback - */ - public function getValue(string $key, ?string $fallback = null) - { - return $this->rawData[$key] ?? $fallback; - } - - public function getStoredPaymentMethodId(): string - { - return (string) ($this->rawData['id'] ?? ''); - } - - public function isStoredPayment(): bool - { - return $this->group()->equals(PaymentGroup::stored()); - } - - /** - * @TODO Adyen Checkout API 68 'details' are removed - */ - public function hasDetails(): bool - { - return array_key_exists('details', $this->rawData) && 0 !== count((array) $this->rawData['details']); - } - - public function serializeMinimalState(): string - { - return Sanitize::escape(json_encode([ - 'type' => $this->adyenType()->type(), - ])); - } -} diff --git a/Models/Payment/PaymentType.php b/Models/Payment/PaymentType.php deleted file mode 100755 index 4db2f787..00000000 --- a/Models/Payment/PaymentType.php +++ /dev/null @@ -1,44 +0,0 @@ -type = $type; - } - - public static function load(string $type): self - { - return new self($type); - } - - public static function googlePay(): self - { - return new self(self::GOOGLE_PAY); - } - - public static function applePay(): self - { - return new self(self::APPLE_PAY); - } - - public function type(): string - { - return $this->type; - } - - public function equals(PaymentType $type): bool - { - return $this->type === $type->type(); - } -} diff --git a/Models/PaymentInfo.php b/Models/PaymentInfo.php deleted file mode 100755 index b76798d2..00000000 --- a/Models/PaymentInfo.php +++ /dev/null @@ -1,309 +0,0 @@ -setCreatedAt(new \DateTime('now')); - $this->setUpdatedAt(new \DateTime('now')); - } - - /** - * @return int - */ - public function getId(): int - { - return $this->id; - } - - /** - * @param int $id - * - * @return static - */ - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - /** - * @return int - */ - public function getOrderId(): int - { - return $this->orderId; - } - - /** - * @param int $orderId - * - * @return static - */ - public function setOrderId(int $orderId): self - { - $this->orderId = $orderId; - - return $this; - } - - - /** - * @return Order|null - */ - public function getOrder() - { - return $this->order; - } - - /** - * @param Order|null $order - * - * @return static - */ - public function setOrder(Order $order = null): self - { - $this->order = $order; - - return $this; - } - - - /** - * @return string - */ - public function getPspReference(): string - { - return $this->pspReference; - } - - - /** - * @param string $pspReference - * - * @return static - */ - public function setPspReference(string $pspReference): self - { - $this->pspReference = $pspReference; - - return $this; - } - - /** - * @return \DateTime - */ - public function getCreatedAt(): \DateTime - { - return $this->createdAt; - } - - /** - * @param \DateTime $createdAt - * - * @return static - */ - public function setCreatedAt(\DateTime $createdAt): self - { - $this->createdAt = $createdAt; - - return $this; - } - - /** - * @return \DateTime - */ - public function getUpdatedAt(): \DateTime - { - return $this->updatedAt; - } - - /** - * @param \DateTime $updatedAt - * - * @return static - */ - public function setUpdatedAt(\DateTime $updatedAt): self - { - $this->updatedAt = $updatedAt; - - return $this; - } - - /** - * @return string - */ - public function getResultCode(): string - { - return $this->resultCode; - } - - /** - * @param string $resultCode - * - * @return static - */ - public function setResultCode(string $resultCode): self - { - $this->resultCode = $resultCode; - - return $this; - } - - /** - * @return string|null - */ - public function getOrdermailVariables() - { - return $this->ordermailVariables; - } - - /** - * @param string|null $ordermailVariables - * - * @return static - */ - public function setOrdermailVariables($ordermailVariables): self - { - $this->ordermailVariables = $ordermailVariables; - - return $this; - } - - /** - * @return string|null - */ - public function getOrdernumber() - { - return $this->ordernumber; - } - - /** - * @param string|null $ordernumber - * - * @return static - */ - public function setOrderNumber($ordernumber): self - { - $this->ordernumber = $ordernumber; - - return $this; - } - - public function getPaymentData(): string - { - return $this->paymentData; - } - - public function setPaymentData(string $paymentData): self - { - $this->paymentData = $paymentData; - - return $this; - } - - public function getStoredMethodId(): string - { - return (string) $this->storedMethodId; - } - - public function setStoredMethodId(string $storedMethodId): self - { - $this->storedMethodId = $storedMethodId; - - return $this; - } -} diff --git a/Models/PaymentMethod/ImportResult.php b/Models/PaymentMethod/ImportResult.php deleted file mode 100755 index c1d2afaf..00000000 --- a/Models/PaymentMethod/ImportResult.php +++ /dev/null @@ -1,88 +0,0 @@ -shop = $shop; - $new->paymentMethod = $paymentMethod; - $new->success = true; - $new->exception = null; - $new->status = $importStatus; - - return $new; - } - - public static function successSubShopFallback(Shop $shop, ImportStatus $importStatus): self - { - $new = new self(); - $new->shop = $shop; - $new->paymentMethod = null; - $new->success = true; - $new->exception = null; - $new->status = $importStatus; - - return $new; - } - - public static function fromException(Shop $shop, ?PaymentMethod $paymentMethod, \Exception $exception): self - { - $new = new self(); - $new->shop = $shop; - $new->paymentMethod = $paymentMethod; - $new->success = false; - $new->exception = $exception; - $new->status = ImportStatus::notHandledStatus(); - - return $new; - } - - public function getShop(): Shop - { - return $this->shop; - } - - public function getPaymentMethod(): ?PaymentMethod - { - return $this->paymentMethod; - } - - public function isSuccess(): bool - { - return $this->success; - } - - public function getException(): ?\Exception - { - return $this->exception; - } - - public function getStatus(): ImportStatus - { - return $this->status; - } -} diff --git a/Models/PaymentMethodInfo.php b/Models/PaymentMethodInfo.php deleted file mode 100644 index 8590bc88..00000000 --- a/Models/PaymentMethodInfo.php +++ /dev/null @@ -1,50 +0,0 @@ -name = $name; - $this->description = $description; - $this->type = $type; - } - - public static function create(string $name, string $description, string $type): self - { - return new self($name, $description, $type); - } - - public function getName(): string - { - return $this->name; - } - - public function getDescription(): string - { - return $this->description; - } - - public function getType(): string - { - return $this->type; - } -} diff --git a/Models/PaymentResultCode.php b/Models/PaymentResultCode.php deleted file mode 100755 index f6ca0f9c..00000000 --- a/Models/PaymentResultCode.php +++ /dev/null @@ -1,120 +0,0 @@ -resultCode = $resultCode; - } - - public function resultCode(): string - { - return $this->resultCode; - } - - public function equals(PaymentResultCode $paymentResultCode): bool - { - return $paymentResultCode->resultCode() === $this->resultCode; - } - - public static function load(string $resultCode): self - { - return new self($resultCode); - } - - public static function exists(string $resultCode): bool - { - return in_array($resultCode, self::availableResultCodes(), true); - } - - public static function authorised(): self - { - return new self(self::AUTHORISED); - } - - public static function challengeShopper(): self - { - return new self(self::CHALLENGE_SHOPPER); - } - - public static function cancelled(): self - { - return new self(self::CANCELLED); - } - - public static function error(): self - { - return new self(self::ERROR); - } - - public static function invalid(): self - { - return new self(self::INVALID); - } - - public static function identifyShopper(): self - { - return new self(self::IDENTIFY_SHOPPER); - } - - public static function pending(): self - { - return new self(self::PENDING); - } - - public static function received(): self - { - return new self(self::RECEIVED); - } - - public static function redirectShopper(): self - { - return new self(self::REDIRECT_SHOPPER); - } - - public static function refused(): self - { - return new self(self::REFUSED); - } - - /** - * @return array - */ - private static function availableResultCodes(): array - { - return [ - self::AUTHORISED, - self::CANCELLED, - self::CHALLENGE_SHOPPER, - self::ERROR, - self::INVALID, - self::IDENTIFY_SHOPPER, - self::PENDING, - self::RECEIVED, - self::REDIRECT_SHOPPER, - self::REFUSED, - ]; - } -} diff --git a/Models/QueueEntity.php b/Models/QueueEntity.php new file mode 100644 index 00000000..53f39dc4 --- /dev/null +++ b/Models/QueueEntity.php @@ -0,0 +1,21 @@ +setCreatedAt(new \DateTimeImmutable()); - $this->setUpdatedAt(new \DateTimeImmutable()); - } - - public static function create( - TokenIdentifier $id, - string $customerId, - string $recurringDetailReference, - string $pspReference, - string $orderNumber, - PaymentResultCode $resultCode, - int $amountValue, - string $amountCurrency - ): self { - $new = new self(); - $new->id = $id->identifier(); - $new->customerId = $customerId; - $new->recurringDetailReference = $recurringDetailReference; - $new->pspReference = $pspReference; - $new->orderNumber = $orderNumber; - $new->resultCode = $resultCode->resultCode(); - $new->amountValue = $amountValue; - $new->amountCurrency = $amountCurrency; - - return $new; - } - - /** - * @internal - * - * @see RecurringPaymentToken::tokenIdentifier() - */ - public function id(): string - { - return $this->id; - } - - public function tokenIdentifier(): TokenIdentifier - { - return TokenIdentifier::generateFromString($this->id); - } - - public function customerId(): string - { - return $this->customerId; - } - - public function recurringDetailReference(): string - { - return $this->recurringDetailReference; - } - - public function pspReference(): string - { - return $this->pspReference; - } - - public function orderNumber(): string - { - return $this->orderNumber; - } - - /** - * @internal - * - * @see RecurringPaymentToken::resultCode() - */ - public function getResultCode(): string - { - return $this->resultCode; - } - - public function resultCode(): PaymentResultCode - { - return PaymentResultCode::load($this->resultCode); - } - - public function amountValue(): int - { - return $this->amountValue; - } - - public function amountCurrency(): string - { - return $this->amountCurrency; - } - - public function createdAt(): \DateTimeImmutable - { - return $this->createdAt; - } - - public function setCreatedAt(\DateTimeImmutable $createdAt): void - { - $this->createdAt = $createdAt; - } - - public function updatedAt(): \DateTimeImmutable - { - return $this->updatedAt; - } - - public function setUpdatedAt(\DateTimeImmutable $updatedAt): void - { - $this->updatedAt = $updatedAt; - } - - public function isSubscription(): bool - { - return '' === $this->orderNumber(); - } - - public function isOneOffPayment(): bool - { - return '' !== $this->orderNumber(); - } -} diff --git a/Models/RecurringPayment/RecurringProcessingModel.php b/Models/RecurringPayment/RecurringProcessingModel.php deleted file mode 100755 index 3ec448ce..00000000 --- a/Models/RecurringPayment/RecurringProcessingModel.php +++ /dev/null @@ -1,58 +0,0 @@ -availableRecurringProcessingModels(), true)) { - throw new \InvalidArgumentException('Invalid recurring processing model: "'.$recurringProcessingModel.'"'); - } - - $this->recurringProcessingModel = $recurringProcessingModel; - } - - public function recurringProcessingModel(): string - { - return $this->recurringProcessingModel; - } - - public function equals(RecurringProcessingModel $recurringProcessingModel): bool - { - return $recurringProcessingModel->recurringProcessingModel() === $this->recurringProcessingModel; - } - - public static function load(string $recurringProcessingModel): self - { - return new self($recurringProcessingModel); - } - - public static function cardOnFile(): self - { - return new self(self::CARD_ON_FILE); - } - - public static function subscription(): self - { - return new self(self::SUBSCRIPTION); - } - - private function availableRecurringProcessingModels(): array - { - return [ - self::CARD_ON_FILE, - self::SUBSCRIPTION, - self::UNSCHEDULED_CARD_ON_FILE, - ]; - } -} diff --git a/Models/RecurringPayment/ShopperInteraction.php b/Models/RecurringPayment/ShopperInteraction.php deleted file mode 100755 index 9dc82858..00000000 --- a/Models/RecurringPayment/ShopperInteraction.php +++ /dev/null @@ -1,60 +0,0 @@ -availableShopperInteractions(), true)) { - throw new \InvalidArgumentException('Invalid shopper interaction: "'.$shopperInteraction.'"'); - } - - $this->shopperInteraction = $shopperInteraction; - } - - public function shopperInteraction(): string - { - return $this->shopperInteraction; - } - - public function equals(ShopperInteraction $paymentShopperInteraction): bool - { - return $paymentShopperInteraction->shopperInteraction() === $this->shopperInteraction; - } - - public static function load(string $shopperInteraction): self - { - return new self($shopperInteraction); - } - - public static function contAuth(): self - { - return new self(self::CONT_AUTH); - } - - public static function ecommerce(): self - { - return new self(self::ECOMMERCE); - } - - private function availableShopperInteractions(): array - { - return [ - self::CONT_AUTH, - self::ECOMMERCE, - self::MOTO, - self::POS, - ]; - } -} diff --git a/Models/Refund.php b/Models/Refund.php deleted file mode 100755 index 4405177d..00000000 --- a/Models/Refund.php +++ /dev/null @@ -1,167 +0,0 @@ -id; - } - - /** - * @param int $id - * @return Refund - */ - public function setId(int $id): Refund - { - $this->id = $id; - return $this; - } - - /** - * @return int - */ - public function getOrderId(): int - { - return $this->orderId; - } - - /** - * @param int $orderId - * @return Refund - */ - public function setOrderId(int $orderId): Refund - { - $this->orderId = $orderId; - return $this; - } - - /** - * @return Order|null - */ - public function getOrder(): Order - { - return $this->order; - } - - /** - * @param Order|null $order - * @return Refund - */ - public function setOrder(Order $order): Refund - { - $this->order = $order; - return $this; - } - - /** - * @return string - */ - public function getPspReference(): string - { - return $this->pspReference; - } - - /** - * @param string $pspReference - * @return Refund - */ - public function setPspReference(string $pspReference): Refund - { - $this->pspReference = $pspReference; - return $this; - } - - /** - * @return \DateTime - */ - public function getCreatedAt(): \DateTime - { - return $this->createdAt; - } - - /** - * @param \DateTime $createdAt - * @return Refund - */ - public function setCreatedAt(\DateTime $createdAt): Refund - { - $this->createdAt = $createdAt; - return $this; - } - - /** - * @return \DateTime - */ - public function getUpdatedAt(): \DateTime - { - return $this->updatedAt; - } - - /** - * @param \DateTime $updatedAt - * @return Refund - */ - public function setUpdatedAt(\DateTime $updatedAt): Refund - { - $this->updatedAt = $updatedAt; - return $this; - } -} diff --git a/Models/TextNotification.php b/Models/TextNotification.php deleted file mode 100755 index f5718572..00000000 --- a/Models/TextNotification.php +++ /dev/null @@ -1,114 +0,0 @@ -setCreatedAt(new \DateTime('now')); - } - - /** - * @return int - */ - public function getId(): int - { - return $this->id; - } - - /** - * @param int $id - * @return TextNotification - */ - public function setId(int $id): TextNotification - { - $this->id = $id; - return $this; - } - - /** - * @return string - */ - public function getTextNotification(): string - { - return $this->textNotification; - } - - /** - * @param string $textNotification - * @return TextNotification - */ - public function setTextNotification(string $textNotification): TextNotification - { - $this->textNotification = $textNotification; - return $this; - } - - /** - * @return \DateTime - */ - public function getCreatedAt(): \DateTime - { - return $this->createdAt; - } - - /** - * @param \DateTime $createdAt - * @return TextNotification - */ - public function setCreatedAt(\DateTime $createdAt): TextNotification - { - $this->createdAt = $createdAt; - return $this; - } - - /** - * Specify data which should be serialized to JSON - * @link https://php.net/manual/en/jsonserializable.jsonserialize.php - * @return mixed data which can be serialized by json_encode, - * which is a value of any type other than a resource. - * @since 5.4.0 - */ - public function jsonSerialize() - { - return [ - 'id' => $this->getId(), - 'textNotification' => $this->getTextNotification(), - 'createdAt' => $this->getCreatedAt() - ]; - } -} diff --git a/Models/TokenIdentifier.php b/Models/TokenIdentifier.php deleted file mode 100755 index f7301bd1..00000000 --- a/Models/TokenIdentifier.php +++ /dev/null @@ -1,39 +0,0 @@ -tokenId = $tokenId; - } - - public static function generate(): TokenIdentifier - { - return new self(Uuid::uuid4()); - } - - public static function generateFromString(string $uuid): TokenIdentifier - { - return new self(Uuid::fromString($uuid)); - } - - public function identifier(): string - { - return $this->tokenId->toString(); - } - - public function equals(TokenIdentifier $id): bool - { - return $id->identifier() === $this->identifier(); - } -} diff --git a/Models/TransactionLogEntity.php b/Models/TransactionLogEntity.php new file mode 100644 index 00000000..6f64ff4d --- /dev/null +++ b/Models/TransactionLogEntity.php @@ -0,0 +1,15 @@ +=7.4 -* Shopware >=5.7.3 +* PHP ^7.2 | ^7.4 | ^8.0 +* Shopware >=5.6.0 Note: The Adyen payment plugin is not compatible with the cookie manager plugin (<= 5.6.2), it is however compatible with the Shopware default cookie consent manager (>5.6.2). @@ -23,7 +23,6 @@ Please see our Wiki for the [integration guide](https://github.com/Adyen/adyen-s Please find the relevant documentation for - [Get started with Adyen](https://docs.adyen.com/user-management/get-started-with-adyen) - [Shopware 5 plugin integration guide](https://github.com/Adyen/adyen-shopware5/wiki) - - [Adyen PHP API Library](https://docs.adyen.com/development-resources/libraries#php) ## See [HELP](https://github.com/Adyen/adyen-shopware5/wiki#help) in our Wiki. @@ -32,9 +31,5 @@ Please find the relevant documentation for ## Integration The plugin integrates card component (Secured Fields) using Adyen Checkout for all card payments. -## API Library -This module is using the Adyen's API Library for PHP for all (API) connections to Adyen. -This library can be found here - ## License MIT license. For more information, see the [LICENSE file](LICENSE). diff --git a/Recurring/RecurringTokenFactory.php b/Recurring/RecurringTokenFactory.php deleted file mode 100644 index 02ec8b44..00000000 --- a/Recurring/RecurringTokenFactory.php +++ /dev/null @@ -1,33 +0,0 @@ -entityManager = Shopware()->Container()->get('models'); + } + + /** + * Returns full class name. + * + * @return string Full class name. + */ + public static function getClassName() + { + return static::THIS_CLASS_NAME; + } + + /** + * Sets repository entity. + * + * @param string $entityClass Repository entity class. + */ + public function setEntityClass($entityClass) + { + $this->entityClass = $entityClass; + } + + /** + * Executes select query. + * + * @param QueryFilter $filter Filter for query. + * + * @return Entity[] A list of found entities ot empty array. + * + * @throws QueryFilterInvalidParamException + */ + public function select(QueryFilter $filter = null) + { + $query = $this->getBaseDoctrineQuery($filter); + + return $this->getResult($query); + } + + /** + * Executes select query and returns first result. + * + * @param QueryFilter $filter Filter for query. + * + * @return Entity | null First found entity or NULL. + * + * @throws QueryFilterInvalidParamException + */ + public function selectOne(QueryFilter $filter = null) + { + $query = $this->getBaseDoctrineQuery($filter); + $query->setMaxResults(1); + + $result = $this->getResult($query); + + return !empty($result[0]) ? $result[0] : null; + } + + /** + * Executes insert query and returns ID of created entity. Entity will be updated with new ID. + * + * @param Entity $entity Entity to be saved. + * + * @return int Identifier of saved entity. + * @throws OptimisticLockException + * @throws ORMException + */ + public function save(Entity $entity) + { + $doctrineEntity = new static::$doctrineModel; + $id = $this->persistEntity($entity, $doctrineEntity); + $entity->setId($id); + + return $id; + } + + /** + * Executes update query and returns success flag. + * + * @param Entity $entity Entity to be updated. + * + * @return bool TRUE if operation succeeded; otherwise, FALSE. + */ + public function update(Entity $entity) + { + $result = true; + + try { + /** @var BaseEntity $doctrineEntity */ + $doctrineEntity = $this->entityManager->find(static::$doctrineModel, $entity->getId()); + if ($doctrineEntity) { + $this->persistEntity($entity, $doctrineEntity); + } else { + $result = false; + } + } catch (Exception $e) { + $result = false; + } + + return $result; + } + + /** + * Executes delete query and returns success flag. + * + * @param Entity $entity Entity to be deleted. + * + * @return bool TRUE if operation succeeded; otherwise, FALSE. + */ + public function delete(Entity $entity) + { + $result = true; + + try { + $persistentEntity = $this->entityManager->find(static::$doctrineModel, $entity->getId()); + if ($persistentEntity) { + $this->entityManager->remove($persistentEntity); + $this->entityManager->flush(); + } + } catch (Exception $e) { + $result = false; + } + + return $result; + } + + /** + * Counts records that match filter criteria. + * + * @param QueryFilter|null $filter Filter for query. + * + * @return int Number of records that match filter criteria. + * + * @throws NonUniqueResultException + * @throws QueryFilterInvalidParamException + */ + public function count(QueryFilter $filter = null) + { + $query = $this->getBaseDoctrineQuery($filter, true); + + return (int)$query->getQuery()->getSingleScalarResult(); + } + + /** + * Builds condition groups (each group is chained with OR internally, and with AND externally) based on query + * filter. + * + * @param QueryFilter $filter Query filter object. + * @param array $fieldIndexMap Map of property indexes. + * + * @return array Array of condition groups.. + * + * @throws QueryFilterInvalidParamException + */ + protected function buildConditionGroups(QueryFilter $filter, array $fieldIndexMap): array + { + $groups = []; + $counter = 0; + $fieldIndexMap['id'] = 0; + foreach ($filter->getConditions() as $condition) { + if (!empty($groups[$counter]) && $condition->getChainOperator() === 'OR') { + $counter++; + } + + // Only index columns can be filtered. + if (!array_key_exists($condition->getColumn(), $fieldIndexMap)) { + throw new QueryFilterInvalidParamException("Field [{$condition->getColumn()}] is not indexed."); + } + + $groups[$counter][] = $condition; + } + + return $groups; + } + + /** + * Retrieves doctrine query. + * + * @param QueryFilter|null $filter + * + * @param bool $isCount + * + * @return QueryBuilder + * @throws QueryFilterInvalidParamException + */ + protected function getBaseDoctrineQuery(QueryFilter $filter = null, bool $isCount = false): QueryBuilder + { + /** @var Entity $entity */ + $entity = new $this->entityClass; + $type = $entity->getConfig()->getType(); + $indexMap = IndexHelper::mapFieldsToIndexes($entity); + + $query = $this->entityManager->createQueryBuilder(); + $alias = 'p'; + $baseSelect = $isCount ? "count($alias.id)" : $alias; + $query->select($baseSelect) + ->from(static::$doctrineModel, $alias) + ->where("$alias.type = '$type'"); + + $groups = $filter ? $this->buildConditionGroups($filter, $indexMap) : []; + $queryParts = $this->getQueryParts($groups, $indexMap, $alias); + + $where = $this->generateWhereStatement($queryParts); + if (!empty($where)) { + $query->andWhere($where); + } + + if ($filter) { + $this->setLimit($filter, $query); + $this->setOrderBy($filter, $indexMap, $alias, $query); + $query->setFirstResult($filter->getOffset()); + } + + return $query; + } + + /** + * Retrieves group query parts. + * + * @param array $conditionGroups + * @param array $indexMap + * @param string $alias + * + * @return array + */ + protected function getQueryParts(array $conditionGroups, array $indexMap, string $alias): array + { + $parts = []; + + foreach ($conditionGroups as $group) { + $subPart = []; + + foreach ($group as $condition) { + $subPart[] = $this->getQueryPart($condition, $indexMap, $alias); + } + + if (!empty($subPart)) { + $parts[] = $subPart; + } + } + + return $parts; + } + + /** + * Retrieves query part. + * + * @param QueryCondition $condition + * @param array $indexMap + * @param string $alias + * + * @return string + */ + protected function getQueryPart(QueryCondition $condition, array $indexMap, string $alias): string + { + $column = $condition->getColumn(); + + if ($column === 'id') { + return "$alias.id=" . $condition->getValue(); + } + + $part = "$alias.index_" . $indexMap[$column] . ' ' . $condition->getOperator(); + if (!in_array($condition->getOperator(), array(Operators::NULL, Operators::NOT_NULL), true)) { + if (in_array($condition->getOperator(), array(Operators::NOT_IN, Operators::IN), true)) { + $part .= $this->getInOperatorValues($condition); + } else { + $part .= " '" . IndexHelper::castFieldValue($condition->getValue(), $condition->getValueType()) . "'"; + } + } + + return $part; + } + + /** + * Handles values for the IN and NOT IN operators, + * + * @param QueryCondition $condition + * + * @return string + */ + protected function getInOperatorValues(QueryCondition $condition): string + { + $values = array_map( + function ($item) { + if (is_string($item)) { + return "'$item'"; + } + + return "'" . IndexHelper::castFieldValue($item, is_int($item) ? 'integer' : 'double') . "'"; + }, + $condition->getValue() + ); + + return '(' . implode(',', $values) . ')'; + } + + /** + * Retrieves query result. + * + * @param QueryBuilder $builder + * + * @return Entity[] + */ + protected function getResult(QueryBuilder $builder): array + { + $doctrineEntities = $builder->getQuery()->getResult(); + + $result = []; + + /** @var BaseEntity $doctrineEntity */ + foreach ($doctrineEntities as $doctrineEntity) { + $entity = $this->unserializeEntity($doctrineEntity->getData()); + if ($entity) { + $entity->setId($doctrineEntity->getId()); + $result[] = $entity; + } + } + + return $result; + } + + /** + * Unserializes ORM entity. + * + * @param string $data + * + * @return Entity + */ + protected function unserializeEntity(string $data): Entity + { + $jsonEntity = json_decode($data, true); + if (array_key_exists('class_name', $jsonEntity)) { + $entity = new $jsonEntity['class_name']; + } else { + $entity = new $this->entityClass; + } + + /** @var Entity $entity */ + $entity->inflate($jsonEntity); + + return $entity; + } + + /** + * Persists entity. + * + * @param Entity $entity + * @param BaseEntity $persistedEntity + * + * @return int + * + * @throws OptimisticLockException + * @throws ORMException + */ + protected function persistEntity(Entity $entity, BaseEntity $persistedEntity): int + { + $persistedEntity->setType($entity->getConfig()->getType()); + + $indexValueMap = IndexHelper::transformFieldsToIndexes($entity); + + foreach ($indexValueMap as $index => $value) { + $setterName = "setIndex_{$index}"; + $persistedEntity->$setterName($value); + } + + $persistedEntity->setData(json_encode($entity->toArray())); + + $this->entityManager->persist($persistedEntity); + $this->entityManager->flush($persistedEntity); + + return $persistedEntity->getId(); + } + + /** + * Generates where statement. + * + * @param array $queryParts + * + * @return string + */ + protected function generateWhereStatement(array $queryParts): string + { + $where = ''; + + foreach ($queryParts as $index => $part) { + $subWhere = ''; + + if ($index > 0) { + $subWhere .= ' OR '; + } + + $subWhere .= $part[0]; + $count = count($part); + for ($i = 1; $i < $count; $i++) { + $subWhere .= ' AND ' . $part[$i]; + } + + $where .= $subWhere; + } + + return $where; + } + + /** + * Sets limit. + * + * @param QueryFilter $filter + * @param QueryBuilder $query + */ + protected function setLimit(QueryFilter $filter, QueryBuilder $query): void + { + if ($filter->getLimit()) { + $query->setMaxResults($filter->getLimit()); + } + } + + /** + * Sets order by. + * + * @param QueryFilter $filter + * @param array $indexMap + * @param $alias + * @param QueryBuilder $query + */ + protected function setOrderBy(QueryFilter $filter, array $indexMap, $alias, QueryBuilder $query): void + { + if ($filter->getOrderByColumn()) { + $orderByColumn = $filter->getOrderByColumn(); + + if ($orderByColumn === 'id' || !empty($indexMap[$orderByColumn])) { + $columnName = $orderByColumn === 'id' + ? "$alias.id" : "$alias.index_" . $indexMap[$orderByColumn]; + $query->orderBy($columnName, $filter->getOrderDirection()); + } + } + } +} diff --git a/Repositories/BaseRepositoryWithConditionalDeletes.php b/Repositories/BaseRepositoryWithConditionalDeletes.php new file mode 100644 index 00000000..cdb2e113 --- /dev/null +++ b/Repositories/BaseRepositoryWithConditionalDeletes.php @@ -0,0 +1,52 @@ +entityClass; + $type = $entity->getConfig()->getType(); + $indexMap = IndexHelper::mapFieldsToIndexes($entity); + + $query = $this->entityManager->createQueryBuilder(); + $alias = 'p'; + $query->delete() + ->from(static::$doctrineModel, $alias) + ->where("$alias.type = :type") + ->setParameter('type', $type); + + $groups = $queryFilter ? $this->buildConditionGroups($queryFilter, $indexMap) : []; + $queryParts = $this->getQueryParts($groups, $indexMap, $alias); + + $where = $this->generateWhereStatement($queryParts); + if (!empty($where)) { + $query->andWhere($where); + } + + $query->getQuery()->execute(); + } catch (Exception $e) { + Logger::logError('Delete where failed with error ' . $e->getMessage()); + } + } +} diff --git a/Repositories/NotificationsRepository.php b/Repositories/NotificationsRepository.php new file mode 100644 index 00000000..e753aaff --- /dev/null +++ b/Repositories/NotificationsRepository.php @@ -0,0 +1,18 @@ +Container()->get('dbal_connection'); + + $ids = $this->getQueueIdsForExecution($priority, $limit); + $rawItems = $connection->createQueryBuilder() + ->select('queue.id', 'queue.data') + ->from($this->getDbName(), 'queue') + ->where('id IN(:ids)') + ->setParameter('ids', $ids, Connection::PARAM_INT_ARRAY) + ->orderBy('queue.id') + ->execute() + ->fetchAll(); + + $result = $this->inflateQueueItems(!empty($rawItems) ? $rawItems : []); + } catch (Exception $e) { + // In case of database exception return empty result set. + } + + return $result; + } + + /** + * Creates or updates given queue item. If queue item id is not set, new queue item will be created otherwise + * update will be performed. + * + * @param QueueItem $queueItem Item to save + * @param array $additionalWhere List of key/value pairs that must be satisfied upon saving queue item. Key is + * queue item property and value is condition value for that property. Example for MySql storage: + * $storage->save($queueItem, array('status' => 'queued')) should produce query + * UPDATE queue_storage_table SET .... WHERE .... AND status => 'queued' + * + * @return int Id of saved queue item + * + * @throws OptimisticLockException + * @throws QueryFilterInvalidParamException + * @throws QueueItemSaveException if queue item could not be saved + */ + public function saveWithCondition(QueueItem $queueItem, array $additionalWhere = array()): int + { + if ($queueItem->getId()) { + $this->updateQueueItem($queueItem, $additionalWhere); + + return $queueItem->getId(); + } + + return $this->save($queueItem); + } + + public function batchStatusUpdate(array $ids, $status) + { + /** @var Connection $connection */ + $connection = Shopware()->Container()->get('dbal_connection'); + + $index = $this->getColumnIndexMap(); + $statusColumn = 'index_' . $index['status']; + + $connection->createQueryBuilder() + ->update($this->getDbName(), 'queue') + ->set("queue.$statusColumn", ':status') + ->where('id IN(:ids)') + ->setParameter(':status', $status) + ->setParameter('ids', $ids, Connection::PARAM_INT_ARRAY) + ->execute(); + } + + /** + * Retrieves queue item ids. + * + * @param int $priority + * @param int $limit + * + * @return array + */ + protected function getQueueIdsForExecution(int $priority, int $limit): array + { + /** @var Connection $connection */ + $connection = Shopware()->Container()->get('dbal_connection'); + + $index = $this->getColumnIndexMap(); + $nameColumn = 'index_' . $index['queueName']; + $statusColumn = 'index_' . $index['status']; + $priorityColumn = 'index_' . $index['priority']; + $queuedStatus = QueueItem::QUEUED; + $inProgressStatus = QueueItem::IN_PROGRESS; + + $runningQueueNames = $connection->createQueryBuilder() + ->select("DISTINCT $nameColumn") + ->from($this->getDbName(), 'queue') + ->where("queue.$statusColumn = :status") + ->setParameter(':status', $inProgressStatus) + ->execute() + ->fetchAll(\PDO::FETCH_COLUMN); + + $query = $connection->createQueryBuilder() + ->select('MIN(queue.id) AS id') + ->from($this->getDbName(), 'queue') + ->where("queue.$statusColumn = :status") + ->andWhere("queue.$priorityColumn = :priority") + ->setParameter(':status', $queuedStatus) + ->setParameter(':priority', IndexHelper::castFieldValue($priority, Index::INTEGER)) + ->groupBy("queue.$nameColumn"); + + if (!empty($runningQueueNames)) { + $query + ->andWhere("queue.$nameColumn NOT IN(:names)") + ->setParameter(':names', $runningQueueNames, Connection::PARAM_STR_ARRAY); + } + + $result = $query->execute()->fetchAll(\PDO::FETCH_COLUMN); + sort($result); + + return array_slice($result, 0, $limit); + } + + /** + * Updates queue item. + * + * @param QueueItem $queueItem + * @param array $additionalWhere + * + * + * @throws QueryFilterInvalidParamException + * @throws QueueItemSaveException + */ + protected function updateQueueItem(QueueItem $queueItem, array $additionalWhere): void + { + $filter = new QueryFilter(); + $filter->where('id', Operators::EQUALS, $queueItem->getId()); + + foreach ($additionalWhere as $name => $value) { + if ($value === null) { + $filter->where($name, Operators::NULL); + } else { + $filter->where($name, Operators::EQUALS, $value); + } + } + + /** @var QueueItem $item */ + $item = $this->selectOne($filter); + if ($item === null) { + throw new QueueItemSaveException("Cannot update queue item with id {$queueItem->getId()}."); + } + + $this->update($queueItem); + } + + /** + * Retrieves index column map. + * + * @return array + */ + protected function getColumnIndexMap(): array + { + $queueItem = new QueueItem(); + + return IndexHelper::mapFieldsToIndexes($queueItem); + } + + /** + * Retrieves db_name for DBAL. + * + * @return string + */ + protected function getDbName(): string + { + return 's_plugin_adyen_queue'; + } + + /** + * Inflates queue items. + * + * @param array $rawItems + * + * @return array + */ + protected function inflateQueueItems(array $rawItems = []): array + { + $result = []; + foreach ($rawItems as $rawItem) { + $item = new QueueItem(); + $item->inflate(json_decode($rawItem['data'], true)); + $item->setId((int)$rawItem['id']); + $result[] = $item; + } + + return $result; + } +} diff --git a/Repositories/TransactionLogRepository.php b/Repositories/TransactionLogRepository.php new file mode 100644 index 00000000..e8b9426c --- /dev/null +++ b/Repositories/TransactionLogRepository.php @@ -0,0 +1,18 @@ +shopwareRepository = $repository; + } + + /** + * @return array + */ + public function getOrderStatuses(): array + { + return $this->shopwareRepository->getPaymentStatusQuery()->getArrayResult(); + } + + /** + * Gets the order numbers for the given list of order temporary ids + * + * @param string[] $temporaryIds + * @return array Map of order temporary id to its belonging order number + */ + public function getOrderNumbersFor(array $temporaryIds): array + { + $query = $this->shopwareRepository->createQueryBuilder('orders'); + $query + ->where('orders.temporaryId IN (:temporaryIds)') + ->setParameter(':temporaryIds', $temporaryIds, Connection::PARAM_STR_ARRAY); + + /** @var ShopwareOrder[] $result */ + $result = $query->getQuery()->getResult(); + + $orderMap = []; + foreach ($result as $order) { + $orderMap[$order->getTemporaryId()] = $order->getNumber(); + } + + return $orderMap; + } + + /** + * Returns a map of Showpare order instances based on a list of order ids + * + * @param string[] $orderIds + * @return ShopwareOrder[] + */ + public function getOrdersByIds(array $orderIds): array + { + $query = $this->shopwareRepository->createQueryBuilder('orders'); + $query + ->where('orders.id IN (:orderIds)') + ->setParameter(':orderIds', $orderIds, Connection::PARAM_INT_ARRAY); + + /** @var ShopwareOrder[] $result */ + $result = $query->getQuery()->getResult(); + + $orderMap = []; + foreach ($result as $order) { + $orderMap[$order->getId()] = $order; + } + + return $orderMap; + } + + /** + * Returns a map of Showpare order instances based on a list of order numbers + * + * @param string[] $orderNumbers + * @return ShopwareOrder[] + */ + public function getOrdersByNumbers(array $orderNumbers): array + { + $query = $this->shopwareRepository->createQueryBuilder('orders'); + $query + ->where('orders.number IN (:orderNumbers)') + ->setParameter(':orderNumbers', $orderNumbers, Connection::PARAM_STR_ARRAY); + + /** @var ShopwareOrder[] $result */ + $result = $query->getQuery()->getResult(); + + $orderMap = []; + foreach ($result as $order) { + $orderMap[$order->getNumber()] = $order; + } + + return $orderMap; + } + + /** + * @param string $temporaryId + * + * @return ShopwareOrder | null + */ + public function getOrderByTemporaryId(string $temporaryId): ?ShopwareOrder + { + $query = $this->shopwareRepository + ->createQueryBuilder('orders') + ->andWhere('orders.temporaryId = :temporaryId') + ->setParameter(':temporaryId', $temporaryId) + ->orderBy('orders.id', 'DESC'); + + $result = $query->getQuery()->getResult(); + + return !empty($result) ? $result[0] : null; + } + + /** + * @param ShopwareOrder $order + * + * @return void + * + * @throws OptimisticLockException + */ + public function updateOrder(ShopwareOrder $order) + { + $manager = Shopware()->Models(); + $manager->persist($order); + $manager->flush(); + } + + /** + * @param int $id + * + * @return ShopwareOrder|null + */ + public function getOrderById(int $id): ?ShopwareOrder + { + $query = $this->shopwareRepository->createQueryBuilder('orders'); + $query->andWhere('orders.id = :id')->setParameter(':id', $id); + + $result = $query->getQuery()->getResult(); + + return !empty($result) ? $result[0] : null; + } +} diff --git a/Repositories/Wrapper/PaymentMeanRepository.php b/Repositories/Wrapper/PaymentMeanRepository.php new file mode 100644 index 00000000..c9349538 --- /dev/null +++ b/Repositories/Wrapper/PaymentMeanRepository.php @@ -0,0 +1,37 @@ +shopwareRepository = $repository; + } + + /** + * @return array + */ + public function getAdyenPaymentMeans(): array + { + $query = $this->shopwareRepository->createQueryBuilder('payment'); + $query->where('payment.name LIKE :paymentName')->setParameter(':paymentName', 'adyen_%'); + + return $query->getQuery()->getArrayResult(); + } +} diff --git a/Repositories/Wrapper/StoreRepository.php b/Repositories/Wrapper/StoreRepository.php new file mode 100644 index 00000000..daa3271e --- /dev/null +++ b/Repositories/Wrapper/StoreRepository.php @@ -0,0 +1,104 @@ +shopwareRepository = $repository; + } + + /** + * Returns array of sub shops in shop system. + * + * @return Shop[] + */ + public function getShopwareSubShops(): array + { + $query = $this->shopwareRepository->createQueryBuilder('shop'); + $query->where('shop.main IS NULL'); + + return $query->getQuery()->getResult(); + } + + /** + * Returns array of all language shops that belong to the provided sub shop ids + * + * @param int[] $subShopIds + * @return Shop[] + */ + public function getShopwareLanguageShops(array $subShopIds): array + { + $query = $this->shopwareRepository + ->createQueryBuilder('shop') + ->where('shop.main IN(:shopIds)') + ->setParameter('shopIds', $subShopIds, Connection::PARAM_INT_ARRAY); + + return $query->getQuery()->getResult(); + } + + /** + * Returns default store from system. + * + * @return Shop|null + */ + public function getShopwareDefaultShop(): ?Shop + { + $query = $this->shopwareRepository->createQueryBuilder('shop'); + $query->where('shop.default = 1'); + $result = $query->getQuery()->getResult(); + + return !empty($result) ? $result[0] : null; + } + + /** + * @param string $id + * + * @return Shop|null + */ + public function getStoreById(string $id): ?Shop + { + $query = $this->shopwareRepository->createQueryBuilder('shop'); + $query->where('shop.id = :storeId')->setParameter(':storeId', $id); + + $result = $query->getQuery()->getResult(); + + return !empty($result) ? $result[0] : null; + } + + /** + * Retrieves shop theme name. + * + * @return array + */ + public function getShopTheme(): array + { + $query = $this->shopwareRepository->createQueryBuilder('shop'); + $query->select(['template.template']) + ->innerJoin('shop.template', 'template') + ->where('shop.active = 1') + ->andWhere('shop.default = 1'); + + $result = $query->getQuery()->getArrayResult(); + + return !empty($result[0]) ? $result[0] : []; + } +} diff --git a/Repository/RecurringPayment/RecurringPaymentTokenRepository.php b/Repository/RecurringPayment/RecurringPaymentTokenRepository.php deleted file mode 100755 index 2dd07ae4..00000000 --- a/Repository/RecurringPayment/RecurringPaymentTokenRepository.php +++ /dev/null @@ -1,60 +0,0 @@ -entityManager = $entityManager; - $this->recurringPaymentTokenEntityRepository = $recurringPaymentTokenEntityRepository; - } - - public function fetchByCustomerIdAndOrderNumber(string $customerId, string $orderNumber): RecurringPaymentToken - { - $recurringPaymentToken = $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'customerId' => $customerId, - 'orderNumber' => $orderNumber, - ]); - - if (!($recurringPaymentToken instanceof RecurringPaymentToken)) { - throw RecurringPaymentTokenNotFoundException::withCustomerIdAndOrderNumber($customerId, $orderNumber); - } - - return $recurringPaymentToken; - } - - public function fetchPendingByPspReference(string $pspReference): RecurringPaymentToken - { - $recurringPaymentToken = $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'resultCode' => PaymentResultCode::pending()->resultCode(), - 'pspReference' => $pspReference, - ]); - - if (!($recurringPaymentToken instanceof RecurringPaymentToken)) { - throw RecurringPaymentTokenNotFoundException::withPendingResultCodeAndPspReference($pspReference); - } - - return $recurringPaymentToken; - } - - public function update(RecurringPaymentToken $recurringPaymentToken): void - { - $this->entityManager->persist($recurringPaymentToken); - $this->entityManager->flush($recurringPaymentToken); - } -} diff --git a/Repository/RecurringPayment/RecurringPaymentTokenRepositoryInterface.php b/Repository/RecurringPayment/RecurringPaymentTokenRepositoryInterface.php deleted file mode 100644 index 0eb07313..00000000 --- a/Repository/RecurringPayment/RecurringPaymentTokenRepositoryInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -recurringPaymentTokenRepository = $recurringPaymentTokenRepository; - $this->logger = $logger; - } - - public function fetchByCustomerIdAndOrderNumber(string $customerId, string $orderNumber): RecurringPaymentToken - { - try { - return $this->recurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber($customerId, $orderNumber); - } catch (RecurringPaymentTokenNotFoundException $exception) { - $this->logger->info($exception->getMessage(), ['exception' => $exception]); - - throw $exception; - } - } - - public function fetchPendingByPspReference(string $pspReference): RecurringPaymentToken - { - try { - return $this->recurringPaymentTokenRepository->fetchPendingByPspReference($pspReference); - } catch (RecurringPaymentTokenNotFoundException $exception) { - $this->logger->info($exception->getMessage(), ['exception' => $exception]); - - throw $exception; - } - } - - public function update(RecurringPaymentToken $recurringPaymentToken): void - { - try { - $this->recurringPaymentTokenRepository->update($recurringPaymentToken); - } catch (ORMException|ORMInvalidArgumentException $exception) { - $this->logger->error($exception->getMessage(), ['exception' => $exception]); - - throw RecurringPaymentTokenNotSavedException::withId($recurringPaymentToken->tokenIdentifier()); - } - } -} diff --git a/Resources/backend/performance/view/applepaymerchantassociation.js b/Resources/backend/performance/view/applepaymerchantassociation.js deleted file mode 100644 index f23b7414..00000000 --- a/Resources/backend/performance/view/applepaymerchantassociation.js +++ /dev/null @@ -1,20 +0,0 @@ - -//{block name="backend/performance/view/main/multi_request_tasks" append} -Ext.define('Shopware.apps.Performance.view.main.RegisterApplePayMerchantAssociation', { - override: 'Shopware.apps.Performance.view.main.MultiRequestTasks', - - initComponent: function() { - this.addProgressBar( - { - initialText: 'Register ApplePay merchant association URLs', - progressText: '[0] of [1] ApplePay merchant association URLs registered', - requestUrl: '{url controller=registerapplepayassociationurl action=register}' - }, - 'registerapplepayassociationurl', - 'seo' - ); - - this.callParent(arguments); - } -}); -//{/block} diff --git a/Resources/config.xml b/Resources/config.xml deleted file mode 100755 index f090a9b0..00000000 --- a/Resources/config.xml +++ /dev/null @@ -1,189 +0,0 @@ - - - - - environment - - - - - - - - merchant_account - - - - api_key_test - - - - api_key_live - - - - client_key_test - - - - client_key_live - - - - api_url_prefix - - - - notification_hmac_test - - - - notification_auth_username_test - - - - notification_auth_password_test - - - - notification_hmac_live - - - - notification_auth_username_live - - - - notification_auth_password_live - - - - google_merchant_id - - - - paymentmethods_cache - - Caches the payment methods active in Adyen Customer Area for better performance. - - - manual_review_rejected_action - - Select which action to perform on the order if a risk rule sends a payment to case management and is rejected. See https://docs.adyen.com/risk-management/case-management for more information. - - - - - - - testAPIconnection - - - - - - - - - importPaymentMethod - - - - - - - - - InstallApplePayMerchantAssociation - - - - - - - - - diff --git a/Resources/cronjob.xml b/Resources/cronjob.xml deleted file mode 100644 index 2b9f230a..00000000 --- a/Resources/cronjob.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - Adyen: Process Notifications - Shopware_CronJob_AdyenPaymentProcessNotifications - true - 60 - false - - - Adyen: Import Payment Methods - AdyenPayment_CronJob_ImportPaymentMethods - true - 86400 - false - - diff --git a/Resources/frontend/js/adyen-checkout-controller.js b/Resources/frontend/js/adyen-checkout-controller.js new file mode 100644 index 00000000..e5749240 --- /dev/null +++ b/Resources/frontend/js/adyen-checkout-controller.js @@ -0,0 +1,336 @@ +;var AdyenComponents = window.AdyenComponents || {}; +(function () { + 'use strict'; + + function CheckoutConfigProvider() { + let configCache = {}; + + this.getConfiguration = async (configUrl) => { + if (configCache[configUrl]) { + return configCache[configUrl]; + } + + configCache[configUrl] = new Promise(async (resolve, reject) => { + let checkoutConfig = await (await fetch(configUrl, { + method: "GET" + })).json(); + + if (checkoutConfig.errorCode) { + reject('Checkout configuration error'); + } + + return resolve(checkoutConfig); + }); + + return configCache[configUrl]; + }; + } + + AdyenComponents.CheckoutConfigProvider = new CheckoutConfigProvider(); +})(); + +(function () { + 'use strict'; + // Use for local testing only, Amazon pay requires globally accessible URL + const devOnlyConfig = { + localShopDomain: '', + globalReplacementDomain: '' + }; + + const wallets = ['applepay', 'amazonpay', 'paywithgoogle', 'googlepay', 'paypal'], + giftCards = [ + 'auriga', 'babygiftcard', 'bloemengiftcard', 'cashcomgiftcard', 'eagleeye_voucher', 'entercard', + 'expertgiftcard', 'fashioncheque', 'fijncadeau', 'valuelink', 'fleuropbloemenbon', 'fonqgiftcard', + 'gallgall', 'givex', 'hallmarkcard', 'igive', 'ikano', 'kadowereld', 'kidscadeau', 'kindpas', + 'leisurecard', 'nationalebioscoopbon', 'netscard', 'oberthur', 'pathegiftcard', 'payex', 'podiumcard', + 'resursgiftcard', 'rotterdampas', 'genericgiftcard', 'schoolspullenpas', 'sparnord', 'sparebank', + 'svs', 'universalgiftcard', 'vvvcadeaubon', 'vvvgiftcard', 'webshopgiftcard', 'winkelcheque', + 'winterkledingpas', 'xponcard', 'yourgift', 'prosodie_illicado' + ]; + + /** + * Handles Adyen web components mounting and session data managing. + * + * @constructor + * + * @param {{ + * checkoutConfigUrl: string, + * showPayButton: boolean, + * sessionStorage: sessionStorage, + * onStateChange: function|undefined, + * onAdditionalDetails: function|undefined, + * onPayButtonClick: function|undefined, + * }} config + */ + function CheckoutController(config) { + const url = new URL(location.href); + if (url.hostname === devOnlyConfig.localShopDomain && devOnlyConfig.globalReplacementDomain) { + url.hostname = devOnlyConfig.globalReplacementDomain; + url.protocol = 'https:'; + } + + config.onStateChange = config.onStateChange || function () {}; + config.onAdditionalDetails = config.onAdditionalDetails || function () {}; + config.onPayButtonClick = config.onPayButtonClick || function (resolve, reject) { resolve(); }; + + const handleOnClick = (resolve, reject) => { + return config.onPayButtonClick(resolve, reject); + }; + + let checkout, + activeComponent, + isStateValid = true, + sessionStorage = config.sessionStorage || window.sessionStorage, + amazonCheckoutSessionId = url.searchParams.get('amazonCheckoutSessionId'), + paymentMethodSpecificConfig = { + "amazonpay": { + "productType": 'PayOnly', + "checkoutMode": 'ProcessOrder', + "chargePermissionType": 'OneTime', + "onClick": handleOnClick, + "returnUrl": url.href, + "cancelUrl": url.href + }, + "paywithgoogle": { "onClick": handleOnClick, "buttonSizeMode": "fill" }, + "googlepay": { "onClick": handleOnClick, "buttonSizeMode": "fill" }, + "paypal": { + "blockPayPalCreditButton": true, + "blockPayPalPayLaterButton": true, + "onClick": (source, event, self) => { + return handleOnClick(event.resolve, event.reject); + } + } + }; + + if (config.amount) { + paymentMethodSpecificConfig['amazonpay']['amount'] = config.amount; + paymentMethodSpecificConfig['amazonpay']['currency'] = config.amount.currency; + + paymentMethodSpecificConfig['paypal']['amount'] = config.amount; + } + + if (amazonCheckoutSessionId) { + paymentMethodSpecificConfig['amazonpay']['amazonCheckoutSessionId'] = amazonCheckoutSessionId; + paymentMethodSpecificConfig['amazonpay']['showOrderButton'] = false; + } + + /** + * + * @returns {Promise} + */ + const getCheckoutInstance = async () => { + if (!checkout) { + let checkoutConfig = await AdyenComponents.CheckoutConfigProvider.getConfiguration(config.checkoutConfigUrl); + + checkoutConfig.onChange = handleOnChange; + checkoutConfig.onSubmit = handleOnChange; + checkoutConfig.onAdditionalDetails = handleAdditionalDetails; + if (config.showPayButton) { + checkoutConfig.showPayButton = true; + } + + checkout = await AdyenCheckout(checkoutConfig); + } + + return Promise.resolve(checkout); + }; + + const handleOnChange = (state) => { + isStateValid = state.isValid; + if (isStateValid) { + sessionStorage.setItem('adyen-payment-method-state-data', JSON.stringify(state.data)); + } + + config.onStateChange(); + }; + + const handleAdditionalDetails = (state) => { + config.onAdditionalDetails(state.data); + }; + + /** + * Mounts adyen web component for a given type under the mount element. + * + * @param paymentType: string Web component payment method type + * @param mountElement: string|HTMLElement Dom elemnt or selector for dom element + * @param storedPaymentMethodId: string Optional stored payment method id to render component for + */ + const mount = (paymentType, mountElement, storedPaymentMethodId) => { + isStateValid = true; + + getCheckoutInstance().then((checkoutInstance) => { + unmount(); + + // Do not mount unavailable payment method + if (!findPaymentMethodConfig(checkoutInstance, paymentType)) { + return; + } + + sessionStorage.setItem('adyen-needs-sate-data-reinit', 'false'); + + if (!config.showPayButton && wallets.includes(paymentType)) { + return; + } + + let paymentMethodConfig = findSpecificPaymentMethodConfig(paymentType) || + findStoredPaymentMethodConfig(checkoutInstance, storedPaymentMethodId); + + // Configuration on the checkout instance level does not work for amazonpay, copy it on component level + if ('amazonpay' === paymentType && checkoutInstance.options.paymentMethodsConfiguration[paymentType]) { + paymentMethodConfig['configuration'] = checkoutInstance.options.paymentMethodsConfiguration[paymentType].configuration; + } + + activeComponent = checkoutInstance.create( + giftCards.includes(paymentType) ? 'giftcard' : paymentType, + paymentMethodConfig + ).mount(mountElement); + + isStateValid = !!activeComponent.isValid && activeComponent.isValid; + + config.onStateChange(); + + if (amazonCheckoutSessionId) { + activeComponent.submit(); + } + }); + }; + + const handleAdditionalAction = (action, mountElement) => { + getCheckoutInstance().then((checkoutInstance) => { + unmount(); + + checkoutInstance.createFromAction(action).mount(mountElement); + }); + }; + + const handleAction = (action) => { + activeComponent.handleAction(action); + } + + /** + * Unmounts the active web component (f there is one) and resets the payment method state + */ + const unmount = () => { + isStateValid = true; + sessionStorage.removeItem('adyen-payment-method-state-data'); + forceFetchingComponentStateData(); + + + if (activeComponent && checkout) { + checkout.remove(activeComponent); + activeComponent = null; + } + + config.onStateChange(); + }; + + /** + * Checks if payment method state is valid for currently mounted component + * + * @returns {boolean} + */ + const isPaymentMethodStateValid = () => { + return isStateValid; + }; + + /** + * Returns stringify version of payment method state data + * + * @returns {string} + */ + const getPaymentMethodStateData = () => { + return sessionStorage.getItem('adyen-payment-method-state-data'); + }; + + /** + * Returns true if Adyen web component was never mounted and therefore the initial payment state data collection + * is required. + * + * @returns {boolean} + */ + const isPaymentMethodStateReinitializationRequired = () => { + return 'true' === sessionStorage.getItem('adyen-needs-sate-data-reinit'); + }; + + /** + * Forces the validation errors to appear in currently mounted component + */ + const showValidation = () => { + if (activeComponent && 'showValidation' in activeComponent) { + activeComponent.showValidation(); + } + }; + + const forceFetchingComponentStateData = () => { + sessionStorage.setItem('adyen-needs-sate-data-reinit', 'true'); + } + + const findSpecificPaymentMethodConfig = (paymentType) => { + if (giftCards.includes(paymentType)) { + return { + type: 'giftcard', + brand: paymentType + }; + } + + return paymentMethodSpecificConfig[paymentType] || null; + }; + + const findStoredPaymentMethodConfig = (checkoutInstance, storedPaymentMethodId) => { + if (!storedPaymentMethodId) { + return null; + } + + for (const paymentMethod of checkoutInstance.options.paymentMethodsResponse.storedPaymentMethods) { + if (paymentMethod.id === storedPaymentMethodId) { + return { + ...paymentMethod, + storedPaymentMethodId + }; + } + } + + return null; + }; + + const findPaymentMethodConfig = (checkoutInstance, paymentMethodType) => { + if (!paymentMethodType) { + return null; + } + + let isGiftCard = giftCards.includes(paymentMethodType); + + for (const paymentMethod of checkoutInstance.options.paymentMethodsResponse.paymentMethods) { + if (paymentMethod.type === paymentMethodType) { + return paymentMethod; + } + + if (isGiftCard && paymentMethod.brand === paymentMethodType) { + return paymentMethod; + } + + if (paymentMethodType === 'googlepay' && paymentMethod.type === 'paywithgoogle') { + return paymentMethod; + } + + if (paymentMethodType === 'paywithgoogle' && paymentMethod.type === 'googlepay') { + return paymentMethod; + } + } + + return null; + }; + + this.mount = mount; + this.handleAdditionalAction = handleAdditionalAction; + this.handleAction = handleAction; + this.unmount = unmount; + this.getPaymentMethodStateData = getPaymentMethodStateData; + this.isPaymentMethodStateReinitializationRequired = isPaymentMethodStateReinitializationRequired; + this.isPaymentMethodStateValid = isPaymentMethodStateValid; + this.showValidation = showValidation; + this.forceFetchingComponentStateData = forceFetchingComponentStateData; + } + + AdyenComponents.CheckoutController = CheckoutController; +})(); diff --git a/Resources/frontend/js/adyen-donations-controller.js b/Resources/frontend/js/adyen-donations-controller.js new file mode 100644 index 00000000..dc44e079 --- /dev/null +++ b/Resources/frontend/js/adyen-donations-controller.js @@ -0,0 +1,86 @@ +;var AdyenComponents = window.AdyenComponents || {}; + +(function () { + 'use strict'; + + /** + * @constructor + * + * @param {{ + * donationsConfigUrl : string, + * makeDonation: function + * }} config + */ + function AdyenDonationsController(config) { + let donations, + activeComponent, + isStateValid = true; + + const getDonationsInstance = async () => { + if (!donations) { + let donationsConfig = await (await fetch(config.donationsConfigUrl, { + method: "GET" + })).json().catch((error) => { + return null + }); + + if (donationsConfig.length === 0) { + return null; + } + + if (donationsConfig.errorCode) { + throw 'Donations configuration error'; + } + + donations = await AdyenCheckout(donationsConfig); + } + + return Promise.resolve(donations); + } + + const handleOnDonate = (state, component) => { + isStateValid = state.isValid; + if (isStateValid) { + config.makeDonation(state.data); + } + }; + + const handleOnCancel = (state, component) => { + unmount(); + } + + const mount = (mountingElement) => { + let me = this, + donationInstance = getDonationsInstance(); + isStateValid = true; + + donationInstance.then((donationInstance) => { + if (!donationInstance) { + return; + } + + unmount(); + + activeComponent = donationInstance.create('donation', { + 'onDonate': handleOnDonate, + 'onCancel': handleOnCancel + }) + .mount(mountingElement); + }) + } + + const unmount = () => { + isStateValid = true; + + if (activeComponent && donations) { + donations.remove(activeComponent); + activeComponent = null; + } + } + + this.mount = mount; + this.unmount = unmount; + } + + AdyenComponents.DonationsController = AdyenDonationsController; +})(); diff --git a/Resources/frontend/js/jquery.adyen-checkout-error.js b/Resources/frontend/js/jquery.adyen-checkout-error.js deleted file mode 100644 index 286f98f5..00000000 --- a/Resources/frontend/js/jquery.adyen-checkout-error.js +++ /dev/null @@ -1,114 +0,0 @@ -;(function ($) { - 'use strict'; - - /** - * Plugin to show errors in the Shopware Checkout using javascript 'simple pub/sub' events. - * Initialise using the StateManager - * - * -- Adding an error message - * $.publish('plugin/AdyenPaymentCheckoutError/addError', 'Something went wrong'); - * - * -- Clearing all Adyen error messages - * $.publish('plugin/AdyenPaymentCheckoutError/cleanErrors'); - */ - $.plugin('adyen-checkout-error', { - defaults: { - /** - * @var string errorClass - * CSS classes for the error element - */ - errorClass: 'alert is--error is--rounded is--adyen-error', - - /** - * @var string errorMessageClass - * CSS classes for the error message element - */ - errorMessageClass: 'alert--content', - - /** - * @var bool showIcon - * Whether to show or not show the icon - */ - showIcon: true, - - /** - * @var string errorMessageClass - * The icon to show. Defaults to a cross - */ - showIconIcon: 'icon--cross' - }, - - init: function () { - var me = this; - - me.applyDataAttributes(); - me.eventListeners(); - }, - - /** - * Initialise event listeners for error handling - */ - eventListeners: function () { - var me = this; - $.subscribe(me.getEventName('plugin/AdyenPaymentCheckoutError/addError'), $.proxy(me.onAddError, me)); - $.subscribe(me.getEventName('plugin/AdyenPaymentCheckoutError/cleanErrors'), $.proxy(me.onCleanErrors, me)); - $.subscribe(me.getEventName('plugin/AdyenPaymentCheckoutError/scrollToErrors'), $.proxy(me.onScrollTo, me)); - }, - - /** - * Add errors to the element - * - * @param o To be ignored - * @param message The error message - */ - onAddError: function (o, message) { - var me = this; - me.$el.append(me.createError(message)); - }, - - /** - * Removes all errors from the element - */ - onCleanErrors: function () { - var me = this; - me.$el.children().remove(); - }, - - onScrollTo: function () { - var me = this; - window.scroll(0, me.$el.offset().top - (window.innerHeight/2)); - }, - - /** - * Create a Error message jQuery element - * - * @param message - * @returns {jQuery} - */ - createError: function (message) { - var me = this; - - var error = $('
') - .addClass(me.opts.errorClass); - error.append( - $('
') - .addClass(me.opts.errorMessageClass) - .html(message) - ); - - if (me.opts.showIcon) { - var icon = $('
') - .addClass('alert--icon') - .append( - $('') - .addClass('icon--element') - .addClass(me.opts.showIconIcon) - ); - - error.prepend(icon); - } - - return error; - }, - }); -})(jQuery); \ No newline at end of file diff --git a/Resources/frontend/js/jquery.adyen-confirm-order.js b/Resources/frontend/js/jquery.adyen-confirm-order.js index 2d1c16ae..7407e8dc 100644 --- a/Resources/frontend/js/jquery.adyen-confirm-order.js +++ b/Resources/frontend/js/jquery.adyen-confirm-order.js @@ -6,100 +6,65 @@ * Plugin default options. */ defaults: { - /** - * Default shopLocale when no locate is assigned - * - * @type {string} - */ - shopLocale: 'en-US', - /** - * Fallback environment variable - * - * @type {string} - */ - adyenEnvironment: 'test', - adyenClientKey: '', - enrichedPaymentMethods: {}, + checkoutConfigUrl: '', + additionalDataUrl: '', + checkoutShippingPaymentUrl: '/checkout/shippingPayment/sTarget/checkout', + adyenPaymentMethodType: '', placeOrderSelector: '.table--actions button[type=submit]', confirmFormSelector: '#confirm--form', - adyenType: '', - adyenGoogleConfig: {}, - adyenApplePayConfig: {}, - adyenPaymentState: {}, - adyenIsAdyenPayment: false, - adyenConfigAjaxUrl: '/frontend/adyenconfig/index', - adyenAjaxDoPaymentUrl: '/frontend/adyen/ajaxDoPayment', - adyenAjaxPaymentDetails: '/frontend/adyen/paymentDetails', - checkoutShippingPaymentUrl: '/checkout/shippingPayment/sTarget/checkout', - accountLoginUrl: '/account/login/sTarget/checkout/sTargetAction/confirm/showNoAccount/true', - adyenSnippets: { - errorTransactionCancelled: 'Your transaction was cancelled by the Payment Service Provider.', - errorTransactionProcessing: 'An error occurred while processing your payment.', - errorTransactionRefused: 'Your transaction was refused by the Payment Service Provider.', - errorTransactionUnknown: 'Your transaction was cancelled due to an unknown reason.', - errorTransactionNoSession: 'Your transaction was cancelled due to an unknown reason. Please make sure your browser allows cookies.', - errorGooglePayNotAvailable: 'Google Pay is currently not available.', - errorApplePayNotAvailable: 'Apple Pay is currently not available.' - }, + stateDataInputSelector: 'input[name=adyenPaymentMethodStateData]' }, - paymentMethodSession: 'paymentMethod', - storePaymentMethodSession: 'storePaymentMethod', - adyenConfiguration: {}, - adyenCheckout: null, - init: function () { - var me = this; + submitButtonReplacingComponents: ['applepay', 'amazonpay', 'paywithgoogle', 'googlepay', 'paypal'], + checkoutController: null, - me.sessionStorage = StorageManager.getStorage('session'); + init: function () { + let me = this; me.applyDataAttributes(); - me.eventListeners(); - me.checkSetSession(); - me.setConfig(); - me.setCheckout(); - me.handleCheckoutButton(); - }, - eventListeners: function () { - var me = this; - me._on(me.opts.placeOrderSelector, 'click', $.proxy(me.onPlaceOrder, me)); - }, - checkSetSession: function () { - var me = this; - - if (!me.opts.adyenIsAdyenPayment) { - me.sessionStorage.removeItem(me.paymentMethodSession); + if (!me.submitButtonReplacingComponents.includes(me.opts.adyenPaymentMethodType)) { return; } - var parsedPaymentMethodSession = JSON.parse(me.getPaymentMethod() || '{}'); - if (!$.isEmptyObject(me.opts.adyenPaymentState) - && 0 === Object.keys(parsedPaymentMethodSession).length) { - me.sessionStorage.setItem(me.paymentMethodSession, JSON.stringify(me.opts.adyenPaymentState)); - return; - } + me.checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "showPayButton": true, + "sessionStorage": StorageManager.getStorage('session'), + "onStateChange": $.proxy(me.submitOrder, me), + "onAdditionalDetails": $.proxy(me.onAdditionalDetails, me), + "onPayButtonClick": $.proxy(me.onPayButtonClick, me) + }); - if (!me.sessionStorage.getItem(me.paymentMethodSession)) { - window.location.href = me.opts.checkoutShippingPaymentUrl; - } + me.replacePlaceOrderButton(); }, - onPlaceOrder: function (event) { - var me = this; - if (typeof event !== 'undefined') { - event.preventDefault(); - } + replacePlaceOrderButton: function () { + let me = this, + orderButton = $(me.opts.placeOrderSelector); - me.clearAdyenError(); + orderButton.parent().append( + $('
') + .attr('data-adyen-submit-button', 'true') + .addClass('right') + ); + orderButton.remove(); - if (!me.sessionStorage.getItem(me.paymentMethodSession)) { - if (me.opts.adyenIsAdyenPayment) { - this.addAdyenError(me.opts.adyenSnippets.errorTransactionNoSession); + me.checkoutController.mount(me.opts.adyenPaymentMethodType, '[data-adyen-submit-button]'); + }, - return; - } + onPayButtonClick: function (resolve, reject) { + let isValid = $(this.opts.confirmFormSelector)[0].checkValidity(); - $(me.opts.confirmFormSelector).submit(); + isValid ? resolve() : reject('Form validation error.'); + + return isValid; + }, + + submitOrder: function () { + let me = this; + + if (!me.checkoutController.getPaymentMethodStateData()) { return; } @@ -107,268 +72,64 @@ return; } - $.loadingIndicator.open(); + // Make sure that wallet payment state data is submitted + $(me.opts.stateDataInputSelector).val(me.checkoutController.getPaymentMethodStateData()); + if (me.opts.adyenPaymentMethodType !== 'paypal') { + $(me.opts.confirmFormSelector).submit(); - var data = { - 'paymentMethod': me.getPaymentMethod(), - 'storePaymentMethod': me.getStorePaymentMethod(), - 'browserInfo': me.getBrowserInfo(), - 'origin': window.location.origin, - 'sComment': me.getComment() - }; + return; + } + var form = $(me.opts.confirmFormSelector); + var url = form.attr('action'); $.ajax({ - method: 'POST', - dataType: 'json', - url: me.opts.adyenAjaxDoPaymentUrl, - data: data, - success: function (response) { - if (response['status'] === 'success') { - me.handlePaymentData(response['content'], response['sUniqueID'], response['adyenTransactionId']); - } else { - me.addAdyenError(response['content']); + type: "POST", + url: url+'/isXHR/1', + data: form.serialize(), + success: function(data) { + if (data.nextStepUrl) { + window.location.href = data.nextStepUrl; + return; } - $.loadingIndicator.close(); - }, - error: me.handleAjaxRequestError.bind(me) - }); - }, - handlePaymentData: function (data, sUniqueID = null, adyenTransactionId = null) { - var me = this; - switch (data.resultCode) { - case 'Authorised': - me.handlePaymentDataAuthorised(data, sUniqueID); - break; - case 'IdentifyShopper': - case 'ChallengeShopper': - case 'Pending': - case 'RedirectShopper': - me.handlePaymentDataCreateFromAction(data, sUniqueID, adyenTransactionId); - break; - default: - me.handlePaymentDataError(data); - break; - } - }, - handlePaymentDataAuthorised: function (data, sUniqueID = null) { - var me = this; - var input = $("").attr("type", "hidden").attr("name", "sUniqueID").val(sUniqueID); - $(me.opts.confirmFormSelector).append(input).submit(); - }, - handlePaymentDataCreateFromAction: function (data, sUniqueID = null, adyenTransactionId = null) { - var me = this; - var payload = { - resultCode: data.resultCode, - type: data.action.type, - subtype: data.action.subtype - }; - var modal = $.modal.open('
', { - showCloseButton: false, - closeOnOverlay: false, - additionalClass: 'adyen-modal' - }); - - // data.action: "redirect" errors are handled by Process::returnAction() - me.adyenCheckout - .createFromAction(data.action, { - onAdditionalDetails: function (state) { - modal.close(); - $.ajax({ - method: 'POST', - dataType: 'json', - url: me.opts.adyenAjaxPaymentDetails, - data: { - 'action': payload, - 'details': state.data.details, - 'adyenTransactionId': adyenTransactionId - }, - success: function (response) { - me.handlePaymentData(response, sUniqueID, adyenTransactionId); - }, - error: me.handleAjaxRequestError.bind(me) - }); - }, - onError: function (error) { - console.error(error); + if (!data.action) { + window.location.href = me.opts.checkoutShippingPaymentUrl; + return; } - }) - .mount('#AdyenModal'); - }, - handleAjaxRequestError: function (xhr) { - if (xhr.status === 401) { - window.location.href = this.opts.accountLoginUrl; - } - - this.addAdyenError(this.opts.adyenSnippets.errorTransactionProcessing); - $.loadingIndicator.close(); - }, - handlePaymentDataError: function (data) { - var me = this; - - $.loadingIndicator.close(); - switch (data.resultCode) { - case 'Cancelled': - this.addAdyenError(me.opts.adyenSnippets.errorTransactionCancelled); - break; - case 'Error': - this.addAdyenError(me.opts.adyenSnippets.errorTransactionProcessing); - break; - case 'Refused': - this.addAdyenError(me.opts.adyenSnippets.errorTransactionRefused); - break; - default: - this.addAdyenError(me.opts.adyenSnippets.errorTransactionUnknown); - break; - } - }, - handleCheckoutButton: function () { - var me = this; + me.signature = data.signature; + me.reference = data.reference; + me.paymentData = null; + if (data.action.paymentData) { + me.paymentData = data.action.paymentData + } - var paymentMethodsConfig = { - 'paywithgoogle': { - config: me.opts.adyenGoogleConfig, - errorMessage: me.opts.adyenSnippets.errorGooglePayNotAvailable + me.checkoutController.handleAction(data.action); }, - 'applepay': { - config: me.opts.adyenApplePayConfig, - errorMessage: me.opts.adyenSnippets.errorApplePayNotAvailable + error: function(data) { + window.location.href = me.opts.checkoutShippingPaymentUrl; } - }; - - if (paymentMethodsConfig.hasOwnProperty(me.opts.adyenType)) { - var paymentMethodConfig = paymentMethodsConfig[me.opts.adyenType]; - me.replaceCheckoutButton(me.opts.adyenType, paymentMethodConfig.config, paymentMethodConfig.errorMessage); - } - }, - replaceCheckoutButton: function (paymentMethod, config, errorMessage) { - var me = this; - - if (0 === Object.keys(config).length) { - this.addAdyenError(errorMessage); - console.error('Adyen: Missing ' + paymentMethod + ' configuration'); - return; - } - - var paymentButtonContainer = paymentMethod + '-container'; - var orderButton = $(me.opts.placeOrderSelector); - orderButton.parent().append( - $('
') - .attr('id', paymentButtonContainer) - .addClass('right') - ); - orderButton.remove(); - - config.onSubmit = function (state, component) { - me.sessionStorage.setItem(me.paymentMethodSession, JSON.stringify(state.data.paymentMethod)); - me.onPlaceOrder(); - }; - - var component = me.adyenCheckout.create(paymentMethod, config); - component - .isAvailable() - .then(function () { - component.mount('#' + paymentButtonContainer); - }) - .catch(function (e) { - me.addAdyenError(errorMessage); - }); - }, - addAdyenError: function (message) { - var me = this; - $.publish('plugin/AdyenPaymentCheckoutError/addError', message); - $.publish('plugin/AdyenPaymentCheckoutError/scrollToErrors'); - - $(me.opts.placeOrderSelector) - .removeAttr('disabled') - .removeClass('disabled') - .find('.js--loading') - .remove(); - }, - clearAdyenError: function () { - $.publish('plugin/AdyenPaymentCheckoutError/cleanErrors'); + }); }, - setConfig: function () { - var me = this; - var adyenConfigSession = JSON.parse(me.getAdyenConfigSession()); + onAdditionalDetails: function (additionalData) { + let me = this; + if (me.paymentData) { + additionalData.paymentData = me.paymentData + } $.ajax({ - method: 'GET', - async: false, + method: 'POST', dataType: 'json', - url: me.opts.adyenConfigAjaxUrl, + url: me.opts.additionalDataUrl + "/signature/" + me.signature + "/reference/" + me.reference + '/isXHR/1', + data: additionalData, success: function (response) { - if (response['status'] === 'success') { - me.opts.shopLocale = response['shopLocale']; - me.opts.adyenClientKey = response['clientKey']; - me.opts.adyenEnvironment = response['environment']; - me.opts.enrichedPaymentMethods = response['enrichedPaymentMethods']; - } else { - me.addAdyenError(response['content']); - } - - $.loadingIndicator.close(); + window.location.href = response.nextStepUrl; + }, + error: function () { + window.location.href = me.opts.checkoutShippingPaymentUrl; } }); - - var adyenPaymentMethodsResponseConfig = me.opts.enrichedPaymentMethods.reduce( - function (rawAdyen, enrichedPaymentMethod) { - var isAdyenPaymentMethod = enrichedPaymentMethod.isAdyenPaymentMethod || false; - if (true === isAdyenPaymentMethod) { - rawAdyen.push(enrichedPaymentMethod.metadata); - } - - return rawAdyen; - }, - [] - ); - - me.adyenConfiguration = { - locale: adyenConfigSession ? adyenConfigSession.locale : me.opts.shoplocale, - environment: adyenConfigSession ? adyenConfigSession.environment : me.opts.adyenenvironment, - clientKey: adyenConfigSession ? adyenConfigSession.clientKey : me.opts.adyenclientkey, - paymentMethodsResponse: Object.assign({}, adyenPaymentMethodsResponseConfig), - onAdditionalDetails: me.handleOnAdditionalDetails.bind(me) - }; - }, - setCheckout: function () { - var me = this; - - me.adyenCheckout = new AdyenCheckout(me.adyenConfiguration); - }, - getComment: function() { - return $('[data-storagekeyname="sComment"]').val(); - }, - getPaymentMethod: function () { - var me = this; - - return me.sessionStorage.getItem(me.paymentMethodSession); - }, - getStorePaymentMethod: function () { - var me = this; - - return me.sessionStorage.getItem(me.storePaymentMethodSession); - }, - getAdyenConfigSession: function () { - var me = this; - - return me.sessionStorage.getItem('adyenConfig'); - }, - getBrowserInfo: function () { - return { - 'language': navigator.language, - 'userAgent': navigator.userAgent, - 'colorDepth': window.screen.colorDepth, - 'screenHeight': window.screen.height, - 'screenWidth': window.screen.width, - 'timeZoneOffset': new Date().getTimezoneOffset(), - 'javaEnabled': navigator.javaEnabled() - }; - }, - handleOnAdditionalDetails: function (state, component) { - $.loadingIndicator.close(); } }); })(jQuery); diff --git a/Resources/frontend/js/jquery.adyen-cookie-consent-visibility-handler.js b/Resources/frontend/js/jquery.adyen-cookie-consent-visibility-handler.js new file mode 100644 index 00000000..e83b8017 --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-cookie-consent-visibility-handler.js @@ -0,0 +1,44 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-cookie-consent-visibility-handler', { + /** + * Plugin default options. + */ + defaults: { + paymentMethodBlockSelector: '.payment--method.block', + adyenPaymentMethodSelector: '[data-adyen-payment-method]' + }, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + $.subscribe(me.getEventName('plugin/swShippingPayment/onInputChanged'), $.proxy(me.handleAdyenPaymentVisibility, me)); + $.subscribe('plugin/swCookiePermission/onDeclineButtonClick', $.proxy(me.handleAdyenPaymentVisibility, me)); + + me.handleAdyenPaymentVisibility(); + }, + + handleAdyenPaymentVisibility: function() { + let me = this; + + if (!window.StateManager.hasCookiesAllowed()) { + me.hideAllAdyenPaymentMethods(); + } + + me.$el.removeClass('adyen-hidden--all'); + }, + + hideAllAdyenPaymentMethods: function () { + let me = this; + + me.$el.find(me.opts.adyenPaymentMethodSelector) + .closest(me.opts.paymentMethodBlockSelector) + .addClass('adyen-hidden--all'); + } + }); + +})(jQuery); + diff --git a/Resources/frontend/js/jquery.adyen-donations.js b/Resources/frontend/js/jquery.adyen-donations.js new file mode 100644 index 00000000..ded62ffb --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-donations.js @@ -0,0 +1,46 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-donations', { + /** + * Plugin default options. + */ + defaults: { + donationsConfigUrl: '', + makeDonationsUrl: '' + }, + + donationsController : null, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + me.donationsController = new AdyenComponents.DonationsController({ + "donationsConfigUrl": me.opts.donationsConfigUrl, + "makeDonation": $.proxy(me.makeDonation, me) + }); + + me.donationsController.mount(me.$el[0]); + }, + + makeDonation: function (data) { + let me = this; + + $.ajax({ + method: 'POST', + dataType: 'json', + url: me.opts.makeDonationsUrl, + data: data, + success: function () { + window.location.reload(); + }, + error: function () { + me.donationsController.unmount(); + window.location.reload(); + } + }); + } + }); +})(jQuery); diff --git a/Resources/frontend/js/jquery.adyen-express-checkout.js b/Resources/frontend/js/jquery.adyen-express-checkout.js new file mode 100644 index 00000000..1ee896ea --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-express-checkout.js @@ -0,0 +1,111 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-express-checkout', { + /** + * Plugin default options. + */ + defaults: { + checkoutConfigUrl: '', + additionalDataUrl: '', + checkoutShippingPaymentUrl: '/checkout/shippingPayment/sTarget/checkout', + adyenPaymentMethodType: '', + stateDataInputSelector: 'input[name=adyenExpressPaymentMethodStateData]', + confirmFormSelector: 'form[data-adyen-express-checkout-form]', + }, + + checkoutController: null, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + me.checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "showPayButton": true, + "sessionStorage": StorageManager.getStorage('session'), + "onStateChange": $.proxy(me.submitOrder, me), + "onAdditionalDetails": $.proxy(me.onAdditionalDetails, me) + }); + + me.mountExpressCheckoutButtons(); + }, + + mountExpressCheckoutButtons: function () { + let me = this; + + me.checkoutController.mount(me.opts.adyenPaymentMethodType, me.$el[0]); + }, + + submitOrder: function () { + let me = this; + + if (!me.checkoutController.getPaymentMethodStateData()) { + me.checkoutController.forceFetchingComponentStateData(); + + return; + } + + let expressCheckoutForm = me.$el.closest(me.opts.confirmFormSelector); + + // Make sure that wallet payment state data is submitted + expressCheckoutForm.find(me.opts.stateDataInputSelector).val(me.checkoutController.getPaymentMethodStateData()); + if (me.opts.adyenPaymentMethodType !== 'paypal') { + expressCheckoutForm.submit(); + + return; + } + + var url = expressCheckoutForm.attr('action'); + $.ajax({ + type: "POST", + url: url+'/isXHR/1', + data: expressCheckoutForm.serialize(), + success: function(data) { + if (data.nextStepUrl) { + window.location.href = data.nextStepUrl; + return; + } + + if (!data.action) { + window.location.href = me.opts.checkoutShippingPaymentUrl; + return; + } + + me.signature = data.signature; + me.reference = data.reference; + me.paymentData = null; + if (data.action.paymentData) { + me.paymentData = data.action.paymentData + } + + me.checkoutController.handleAction(data.action); + }, + error: function(data) { + window.location.href = me.opts.checkoutShippingPaymentUrl; + } + }); + }, + + onAdditionalDetails: function (additionalData) { + let me = this; + + if (me.paymentData) { + additionalData.paymentData = me.paymentData + } + $.ajax({ + method: 'POST', + dataType: 'json', + url: me.opts.additionalDataUrl + "/signature/" + me.signature + "/reference/" + me.reference + '/isXHR/1', + data: additionalData, + success: function (response) { + window.location.href = response.nextStepUrl; + }, + error: function () { + window.location.href = me.opts.checkoutShippingPaymentUrl; + } + }); + } + }); +})(jQuery); diff --git a/Resources/frontend/js/jquery.adyen-finish-order.js b/Resources/frontend/js/jquery.adyen-finish-order.js deleted file mode 100644 index 7610fb19..00000000 --- a/Resources/frontend/js/jquery.adyen-finish-order.js +++ /dev/null @@ -1,23 +0,0 @@ -;(function ($) { - 'use strict'; - - $.plugin('adyen-finish-order', { - sessions: [ - 'adyenConfig', - 'paymentMethod' - ], - - init: function () { - var me = this; - me.sessionStorage = StorageManager.getStorage('session'); - me.cleanupSessions(); - }, - - cleanupSessions: function () { - var me = this; - me.sessions.forEach(function (session) { - me.sessionStorage.removeItem(session); - }); - } - }); -})(jQuery); diff --git a/Resources/frontend/js/jquery.adyen-payment-additional-action.js b/Resources/frontend/js/jquery.adyen-payment-additional-action.js new file mode 100644 index 00000000..eef598c2 --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-payment-additional-action.js @@ -0,0 +1,57 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-payment-additional-action', { + /** + * Plugin default options. + */ + defaults: { + checkoutConfigUrl: '', + additionalDataUrl: '', + additionalActionSelector: '#adyen-additional-action', + checkoutShippingPaymentUrl: '/checkout/shippingPayment/sTarget/checkout' + }, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + if ($(me.opts.additionalActionSelector).html() === '' || + $(me.opts.additionalActionSelector).html() === 'undefined') { + return; + } + + const additionalAction = JSON.parse($(me.opts.additionalActionSelector).html()); + if (!additionalAction || !additionalAction.type) { + window.location.href = me.opts.checkoutShippingPaymentUrl; + } + + let checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "onAdditionalDetails": $.proxy(me.onAdditionalDetails, me), + "sessionStorage": StorageManager.getStorage('session') + }); + + checkoutController.handleAdditionalAction(additionalAction, me.$el[0]); + }, + + onAdditionalDetails: function (additionalData) { + let me = this; + $.ajax({ + method: 'POST', + dataType: 'json', + url: me.opts.additionalDataUrl + '/isXHR/1', + data: additionalData, + success: function (response) { + window.location.href = response.nextStepUrl; + }, + error: function () { + window.location.href = me.opts.checkoutShippingPaymentUrl; + } + }); + } + }); + +})(jQuery); + diff --git a/Resources/frontend/js/jquery.adyen-payment-method-state-data-setter.js b/Resources/frontend/js/jquery.adyen-payment-method-state-data-setter.js new file mode 100644 index 00000000..38d01252 --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-payment-method-state-data-setter.js @@ -0,0 +1,34 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-payment-method-state-data-setter', { + /** + * Plugin default options. + */ + defaults: { + checkoutConfigUrl: '', + checkoutShippingPaymentUrl: '/checkout/shippingPayment/sTarget/checkout' + }, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + let checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "sessionStorage": StorageManager.getStorage('session') + }); + + if (checkoutController.isPaymentMethodStateReinitializationRequired()) { + window.location.href = me.opts.checkoutShippingPaymentUrl; + } + + if (checkoutController.getPaymentMethodStateData()) { + me.$el.val(checkoutController.getPaymentMethodStateData()); + } + } + }); + +})(jQuery); + diff --git a/Resources/frontend/js/jquery.adyen-payment-selection.js b/Resources/frontend/js/jquery.adyen-payment-selection.js index b61841de..c85f258b 100644 --- a/Resources/frontend/js/jquery.adyen-payment-selection.js +++ b/Resources/frontend/js/jquery.adyen-payment-selection.js @@ -1,665 +1,177 @@ ;(function ($) { 'use strict'; + $.plugin('adyen-payment-selection', { /** * Plugin default options. */ defaults: { - adyenClientKey: '', - enrichedPaymentMethods: {}, - adyenOrderTotal: '', - adyenOrderCurrency: '', - resetSessionUrl: '', - adyenConfigAjaxUrl: '', - /** - * Fallback environment variable - * - * @type {string} - */ - adyenEnvironment: 'test', - /** - * Default shopLocale when no locate is assigned - * - * @type {string} - */ - shopLocale: 'en-US', - /** - * Selector for the shipping payment content. - * - * @type {String} - */ - shippingPaymentContentSelector: '#shipping_payment_wrapper', - /** - * Selector for stored payment method content. - * - * @type {String} - */ - storedPaymentContentSelector: '#stored_payment_wrapper', - /** - * Selector for the payment form. - * - * @type {String} - */ + checkoutConfigUrl: '', formSelector: '#shippingPaymentForm', - /** - * Selector for the payment method select fields. - * - * @type {String} - */ - paymentMethodSelector: '.payment--method', - /** - * Selector for the payment method component wrapper. - * - * @type {String} - */ - methodBankdataSelector: '.method--bankdata', - /** - * Classname for 'Update Payment informations' button - */ - classChangePaymentInfo: 'method--change-info', - /** - * Selector for the payment method form submit button element. - * - * @type {String} - */ - paymentMethodFormSubmitSelector: '#shippingPaymentForm button[type=submit], button[form="shippingPaymentForm"]', - /** - * @type {string} the group name of Gift card types - */ - giftCardGroupName: 'Gift Card', - /** - * @type {string} Adyen payment method type for ApplePay - */ - applePayType: 'applepay', - /** - * @type {string} Adyen payment method type for GooglePay - */ - googlePayType: 'paywithgoogle', - /** - * @type {string} Adyen payment method type for ApplePay - */ - onlineBankingPLType: 'onlineBanking_PL', - /** - * @type {string} Snippets associated with the payment page - */ - adyenSnippets: { - updatePaymentInformation: 'Update your payment information' - }, + paymentMeanSelector: 'input[type=radio][name=payment]', paymentMeanChangerSelector: 'input[type=radio][name=payment], label[for^=payment_mean]', shippingChangerSelector: 'input[type=radio][name=sDispatch], label[for^=confirm_dispatch]', storedPaymentMethodSelector: 'input[type=hidden][name=adyenStoredPaymentMethodId]', + formSubmitButtonSelector: '#shippingPaymentForm button[type=submit], button[form="shippingPaymentForm"]', activePaymentMeanSelector: 'input[type=radio][name=payment][checked]', + paymentMethodBlockSelector: '.payment--method.block', + paymentMethodComponentContainerSelector: '.method--bankdata', + updatePaymentInfoButtonClass: 'method--change-info', + updatePaymentInfoButtonText: 'Update your payment information' }, - selectedPaymentElementId: '', - selectedPaymentId: '', - adyenConfiguration: {}, - adyenCheckout: null, - changeInfosButton: null, - paymentMethodSession: 'paymentMethod', - storePaymentMethodSession: 'storePaymentMethod', - adyenConfigSession: 'adyenConfig', + checkoutController: null, + selectedPaymentMeanId: null, init: function () { - var me = this; - me.sessionStorage = StorageManager.getStorage('session'); + let me = this; me.applyDataAttributes(); - me.eventListeners(); - me.setConfig(); - me.handleVisibility(); - me.setCheckout(); - me.handleSelectedMethod(); - }, - eventListeners: function () { - var me = this; + + me.checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "sessionStorage": StorageManager.getStorage('session'), + "onStateChange": $.proxy(me.updateFormSubmitButton, me) + }); $(document).on('submit', me.opts.formSelector, $.proxy(me.onPaymentFormSubmit, me)); $(document).on('mousedown', me.opts.paymentMeanChangerSelector, $.proxy(me.onPaymentMethodBeforeChange, me)); $(document).on('mousedown', me.opts.shippingChangerSelector, $.proxy(me.onShippingBeforeChange, me)); $.subscribe(me.getEventName('plugin/swShippingPayment/onInputChanged'), $.proxy(me.onPaymentChangedAfter, me)); - }, - handleVisibility: function () { - if (!window.StateManager.hasCookiesAllowed()) { - this.hideAllAdyenPaymentMethods(); - $(this.opts.shippingPaymentContentSelector).removeClass('adyen-hidden--all'); - return; - } - - this.handleApplePayVisibility(); - $(this.opts.shippingPaymentContentSelector).removeClass('adyen-hidden--all'); + me.onPaymentChangedAfter(); }, - hideAllAdyenPaymentMethods: function () { - this.hideStoredAdyenPaymentMethods(); - this.hideAdyenPaymentMethods(); - }, - hideStoredAdyenPaymentMethods: function () { - for (let i = 0; i < this.opts.enrichedPaymentMethods.length; i++) { - if (this.opts.enrichedPaymentMethods[i].isAdyenPaymentMethod && this.opts.enrichedPaymentMethods[i].isStoredPayment) { - $(this.opts.storedPaymentContentSelector).addClass('adyen-hidden--all'); - return; - } - } - }, - hideAdyenPaymentMethods: function () { - for (let i = 0; i < this.opts.enrichedPaymentMethods.length; i++) { - if (this.opts.enrichedPaymentMethods[i].isAdyenPaymentMethod) { - $('#payment_mean' + this.opts.enrichedPaymentMethods[i].id) - .parents(this.opts.paymentMethodSelector).addClass('adyen-hidden--all'); - } - } - }, - handleApplePayVisibility: function () { - var me = this; - var applePayAvailable = window.ApplePaySession || false; - if (applePayAvailable) { - return; - } - var applePayMethod = me.opts.enrichedPaymentMethods.filter(function (enrichedPaymentMethod) { - return enrichedPaymentMethod.adyenType === me.opts.applePayType; - })[0] || {}; - if (!applePayMethod) { - return; - } - - $('#payment_mean' + applePayMethod.id).parents(this.opts.paymentMethodSelector).addClass('adyen-hidden--all'); - }, - onPaymentFormSubmit: function (e) { - var me = this; - var $formSubmit = $(me.opts.paymentMethodFormSubmitSelector); - if ($formSubmit.hasClass('is--disabled')) { - e.preventDefault(); - return false; - } - var $paymentElement = $('#' + me.selectedPaymentElementId)[0]; - var paymentMethod = this.getPaymentMethodById($paymentElement.value); - if (paymentMethod.isStoredPayment) { - $formSubmit.append( - $('') - ); - } - $paymentElement.value = paymentMethod.id; - }, - onPaymentMethodBeforeChange: function (event) { - let me = this, - $paymentElement = $('#' + event.target.id)[0], - paymentMethod = this.getPaymentMethodById($paymentElement.value); - - me.updateStoredMethodId(paymentMethod); - }, - - onShippingBeforeChange: function (event) { - let me = this, - $paymentElement = $('#' + event.target.id)[0], - paymentMethod = this.getPaymentMethodById($paymentElement.value); - - me.updateStoredMethodId(paymentMethod); - }, - updateStoredMethodId: function (selectedPaymentMeanEl) { - let me = this, - $formSubmit = $(me.opts.paymentMethodFormSubmitSelector), - storedPaymentMethodEl = $(me.opts.storedPaymentMethodSelector); - - if (storedPaymentMethodEl.data("adyen-payment-method")) { - storedPaymentMethodEl.val(selectedPaymentMeanEl.data('adyen-stored_payment_method_id')); - } else { - $formSubmit.append( - $('') - ); - } - }, - isPaymentElement: function (elementId) { - return $('#' + elementId).parents(this.opts.paymentMethodSelector).length > 0; - }, onPaymentChangedAfter: function () { - var me = this, + let me = this, selectedPaymentMeanEl = $(me.opts.activePaymentMeanSelector).first(); - var previousSelectedPaymentElementId = me.selectedPaymentElementId; - var selectedPaymentElementId = selectedPaymentMeanEl.attr('id'); + if ( + selectedPaymentMeanEl.attr("id") === me.selectedPaymentMeanId && + me.checkoutController.getPaymentMethodStateData() + ) { + me.showUpdatePaymentInfoButton(); - // only update when switching payment-methods (not on shipping methods) - if (!me.isPaymentElement(selectedPaymentElementId)) { return; } - me.selectedPaymentElementId = selectedPaymentElementId; - - var elementValue = selectedPaymentMeanEl.val(); - var paymentMethod = this.getPaymentMethodById(elementValue); - me.selectedPaymentId = paymentMethod.isStoredPayment ? paymentMethod.stored_method_id : elementValue; - - if (previousSelectedPaymentElementId !== me.selectedPaymentElementId) { - me.clearPaymentSession(); - } - - me.handleVisibility(); + me.selectedPaymentMeanId = selectedPaymentMeanEl.attr("id"); - var payment = me.getPaymentMethodById(me.selectedPaymentId); + if (!selectedPaymentMeanEl.data("adyen-payment-method")) { + me.checkoutController.unmount(); - // Return & clear when no adyen payment - if (!me.__isAdyenPaymentMethod(payment)) { - me.clearPaymentSession(); return; } - if (!me.__canHandlePayment(payment)) { - me.setPaymentSession(me.__buildMinimalState(payment)); - return; - } - - if (me.__hasActivePaymentMethod()) { - me.enableUpdatePaymentInfoButton(); - return; - } - - $('#' + me.selectedPaymentElementId) - .closest(me.opts.paymentMethodSelector) - .find(me.opts.methodBankdataSelector) - .prop('id', me.getCurrentComponentId(me.selectedPaymentElementId)); - $(me.opts.paymentMethodFormSubmitSelector).addClass('is--disabled'); - me.handleComponent(payment); - }, - setConfig: function () { - var me = this; - - me.fetchAdyenConfig(); - - var adyenPaymentMethodsResponse = me.opts.enrichedPaymentMethods.reduce( - function (rawAdyen, enrichedPaymentMethod) { - var isAdyenPaymentMethod = enrichedPaymentMethod.isAdyenPaymentMethod || false; - if (true === isAdyenPaymentMethod) { - rawAdyen.push(enrichedPaymentMethod.metadata); - } - - return rawAdyen; - }, - [] - ); - - me.adyenConfiguration = { - locale: me.opts.shopLocale, - environment: me.opts.adyenEnvironment, - clientKey: me.opts.adyenClientKey, - paymentMethodsResponse: {'paymentMethods': adyenPaymentMethodsResponse}, - onChange: $.proxy(me.handleOnChange, me), - showPayButton: false - }; - me.saveAdyenConfigInSession(me.adyenConfiguration); - }, - fetchAdyenConfig: function () { - var me = this; - - return $.ajax({ - method: 'GET', - async: false, - dataType: 'json', - url: me.opts.adyenConfigAjaxUrl, - success: function (response) { - if (response['status'] === 'success') { - me.opts.shopLocale = response['shopLocale']; - me.opts.adyenClientKey = response['clientKey']; - me.opts.adyenEnvironment = response['environment']; - me.opts.enrichedPaymentMethods = response['enrichedPaymentMethods']; - me.opts.adyenOrderTotal = response['adyenOrderTotal']; - me.opts.adyenOrderCurrency = response['adyenOrderCurrency']; - } else { - me.addAdyenError(response['content']); - } - - $.loadingIndicator.close(); - } - }); - }, - getCurrentComponentId: function (selectedPaymentElementId) { - return 'component-' + selectedPaymentElementId; - }, - getPaymentMethodById: function (id) { - var me = this; - - return me.opts.enrichedPaymentMethods.filter(function (paymentMethod) { - return paymentMethod.id === id || ( - paymentMethod.isStoredPayment === true - && (paymentMethod.stored_method_id === id || paymentMethod.stored_method_umbrella_id === id)); - })[0] || {}; - }, - /** - * @param {object} paymentMethod - * @param {String} detailKey - * @return {({} | null)} - * @private - */ - __retrievePaymentMethodDetailByKey: function (paymentMethod, detailKey) { - var me = this; - var details = (paymentMethod && paymentMethod.metadata && paymentMethod.metadata.details) || []; - var filteredDetails = details.filter(function (detail) { - return detail.key === detailKey - }); - - return filteredDetails[0] || null; - }, - setCheckout: function () { - var me = this; - - me.adyenCheckout = new AdyenCheckout(me.adyenConfiguration); - }, - handleComponent: function (paymentMethod) { - var me = this; + let adyenPaymentMethodType = selectedPaymentMeanEl.data("adyen-payment-method-type"); - var adyenCheckoutData = me.__buildCheckoutComponentData(paymentMethod); + let componentContainerEl = selectedPaymentMeanEl + .closest(me.opts.paymentMethodBlockSelector) + .find(me.opts.paymentMethodComponentContainerSelector); - if (this.__isPaymentMethodType(paymentMethod, me.opts.applePayType) || - this.__isPaymentMethodType(paymentMethod, me.opts.googlePayType) || - this.__isPaymentMethodType(paymentMethod, me.opts.onlineBankingPLType)) { - me.setConfig(); - me.setPaymentSession(me.__buildMinimalState(paymentMethod)); - me.handleComponentEnableSubmit(); - return; + if (1 === componentContainerEl.length) { + me.checkoutController.mount( + adyenPaymentMethodType, + componentContainerEl[0], + selectedPaymentMeanEl.data("adyen-stored_payment_method_id") + ); } - - me.adyenCheckout - .create(adyenCheckoutData.cardType, adyenCheckoutData.paymentMethodData) - .mount('#' + me.getCurrentComponentId(me.selectedPaymentElementId)); - }, - handleComponentEnableSubmit: function () { - var me = this; - $(me.opts.paymentMethodFormSubmitSelector).removeClass('is--disabled'); }, - handleOnChange: function (state) { - var me = this; - if (state.isValid) { - $(me.opts.paymentMethodFormSubmitSelector).removeClass('is--disabled'); - } else { - $(me.opts.paymentMethodFormSubmitSelector).addClass('is--disabled'); - } - - if (state.isValid && state.data && state.data.paymentMethod) { - me.setPaymentSession(state); - } - - if (me.changeInfosButton) { - me.changeInfosButton.remove(); - me.changeInfosButton = null; - } - }, - handleSelectedMethod: function () { - var me = this; + onPaymentFormSubmit: function (event) { + let me = this, + selectedPaymentMeanEl = $(me.opts.activePaymentMeanSelector).first(); - var form = $(me.opts.formSelector); - var paymentMethodElement = form.find('input[name=payment]:checked'); + if (!me.checkoutController.isPaymentMethodStateValid()) { + event.preventDefault(); + me.checkoutController.showValidation(); - if (!me.isPaymentMethodValid(paymentMethodElement)) { return; } - me.selectedPaymentElementId = paymentMethodElement.attr('id'); - me.selectedPaymentId = paymentMethodElement.val(); + me.updateStoredMethodId(selectedPaymentMeanEl) - // Return when no data has been entered yet + see if component is needed - if (!me.__hasActivePaymentMethod()) { - me.onPaymentChangedAfter(); + if ( + !selectedPaymentMeanEl.data("adyen-payment-method") || + !selectedPaymentMeanEl.data("adyen-stored_payment_method_id") + ) { return; } - me.enableUpdatePaymentInfoButton(); + selectedPaymentMeanEl.val(selectedPaymentMeanEl.data('adyen-payment-mean-id')); }, - isPaymentMethodValid: function (paymentMethodElement) { - var me = this; - if (!paymentMethodElement.length) { - return false; - } - - //Return when no adyen payment - var paymentMethod = me.getPaymentMethodById(paymentMethodElement.val()); - - if (!me.__isAdyenPaymentMethod(paymentMethod)) { - me.clearPaymentSession(); - return false; - } + onPaymentMethodBeforeChange: function (event) { + let me = this, + selectedPaymentMeanEl = $(event.target) + .closest(me.opts.paymentMethodBlockSelector) + .find(me.opts.paymentMeanSelector); - return me.__canHandlePayment(paymentMethod); + me.updateStoredMethodId(selectedPaymentMeanEl); }, - updatePaymentInfo: function () { - var me = this; - - me.removePaymentSession(); - $(me.opts.paymentMethodFormSubmitSelector).addClass('is--disabled'); - var paymentMethod = $(me.opts.formSelector).find('input[name=payment]:checked'); - var payment = me.getPaymentMethodById(paymentMethod.val()); + onShippingBeforeChange: function () { + let me = this, + selectedPaymentMeanEl = $(me.opts.activePaymentMeanSelector).first(); - if (me.__canHandlePayment(payment)) { - $('#' + me.selectedPaymentElementId) - .closest(me.opts.paymentMethodSelector) - .find(me.opts.methodBankdataSelector) - .prop('id', me.getCurrentComponentId(me.selectedPaymentElementId)); + me.updateStoredMethodId(selectedPaymentMeanEl); + }, - me.handleComponent(payment); + updateStoredMethodId: function (selectedPaymentMeanEl) { + let me = this, + storedPaymentMethodEl = $(me.opts.storedPaymentMethodSelector); - if (me.changeInfosButton) { - me.changeInfosButton.remove(); - me.changeInfosButton = null; - } + storedPaymentMethodEl.val(''); + if (selectedPaymentMeanEl.data("adyen-payment-method")) { + storedPaymentMethodEl.val(selectedPaymentMeanEl.data('adyen-stored_payment_method_id')); } }, - setPaymentSession: function (state) { - var me = this; - me.sessionStorage.setItem(me.paymentMethodSession, JSON.stringify(state.data.paymentMethod)); - me.sessionStorage.setItem(me.storePaymentMethodSession, state.data.storePaymentMethod || false); - }, - getPaymentSession: function () { - var me = this; - return JSON.parse(me.sessionStorage.getItem(me.paymentMethodSession) || "{}"); - }, - clearPaymentSession: function () { - var me = this; - me.sessionStorage.removeItem(me.paymentMethodSession); - me.sessionStorage.removeItem(me.storePaymentMethodSession); - }, - removePaymentSession: function () { - var me = this; - me.clearPaymentSession(); - $.get(me.opts.resetSessionUrl); - }, - saveAdyenConfigInSession: function (adyenConfiguration) { - var me = this; - - var data = { - locale: adyenConfiguration.locale, - environment: adyenConfiguration.environment, - clientKey: adyenConfiguration.clientKey, - paymentMethodsResponse: adyenConfiguration.paymentMethodsResponse - }; - - me.sessionStorage.setItem(me.adyenConfigSession, JSON.stringify(data)); - }, - enableUpdatePaymentInfoButton: function () { - var me = this; - var paymentMethodContainer = $(me.opts.formSelector) - .find('input[name=payment]:checked') - .closest(me.opts.paymentMethodSelector); - if (!paymentMethodContainer) { - return; - } + updateFormSubmitButton: function () { + let me = this, + formSubmit = $(me.opts.formSubmitButtonSelector); - // minimal state has no info that needs updating - var payment = me.getPaymentMethodById(me.selectedPaymentId); - if (me.__hasActiveMinimalPaymentMethodState()) { - return; + if (me.checkoutController.isPaymentMethodStateValid()) { + formSubmit.removeClass('is--disabled'); + } else { + formSubmit.addClass('is--disabled'); } - - me.changeInfosButton = $('') - .addClass(me.opts.classChangePaymentInfo) - .html(me.opts.adyenSnippets.updatePaymentInformation) - .on('click', $.proxy(me.updatePaymentInfo, me)); - paymentMethodContainer - .find(me.opts.methodBankdataSelector) - .append(me.changeInfosButton); }, - /** - * @param {object} paymentMethod - * @return {boolean} - * @private - */ - __isGiftCard: function (paymentMethod) { - var me = this; - return 'giftcard' === paymentMethod.metadata.type; - }, - /** - * @param {object} paymentMethod - * @return {boolean} - * @private - */ - __isStoredPaymentMethod: function (paymentMethod) { - return paymentMethod.isStoredPayment || false; - }, /** + * This button is required because Shopware triggers `plugin/swShippingPayment/onInputChanged` event even for + * shipping methods changes and re-renders the complete page content on the server side. * - * @param {object} paymentMethod - * @param {string} paymentMethodType - * @return {boolean} - * @private - */ - __isPaymentMethodType: function (paymentMethod, paymentMethodType) { - return paymentMethodType === paymentMethod.adyenType; - }, - /** - * @return {boolean} - * @private - */ - __hasActivePaymentMethod: function () { - var sessionPaymentMethod = this.sessionStorage.getItem(this.paymentMethodSession); - if (!sessionPaymentMethod || "{}" === sessionPaymentMethod) { - return false; - } - - return true; - }, - /** - * @return {boolean} - * @private - */ - __hasActiveMinimalPaymentMethodState: function () { - if (!this.__hasActivePaymentMethod()) { - return false; - } - var storedPaymentMethod = this.getPaymentSession(); - var keys = Object.keys(storedPaymentMethod); - - return 1 === keys.length && 'type' === keys[0]; // Minimal state structure @see __buildMinimalState() - }, - /** - * @param {object} paymentMethod - * @return {boolean} - * @private - */ - __isAdyenPaymentMethod: function (paymentMethod) { - return paymentMethod.isAdyenPaymentMethod || false; - }, - /** - * @param {object} paymentMethod - * @return {boolean} - * @private + * In order to avoid the need for the customer to reenter already entered valid payment data we show this button + * if customer explicitly wants to change his data, otherwise, his data is already stored in the session. */ - __canHandlePayment: function (paymentMethod) { - var me = this; + showUpdatePaymentInfoButton: function () { + let me = this; - if (!me.__isAdyenPaymentMethod(paymentMethod)) { - return false; - } - - if (this.__isStoredPaymentMethod(paymentMethod)) { - return true; + if (!me.checkoutController.getPaymentMethodStateData()) { + return; } - // not all adyen payment methods have "details", these cannot be handled by webcomponents (e.g. Paypal) - return "undefined" !== typeof paymentMethod.metadata.details - || "undefined" !== typeof paymentMethod.metadata.brand; - }, - /** - * @param {object} paymentMethod - * @return {boolean} - * @private - */ - __enableStoreDetails: function (paymentMethod) { - return 'scheme' === paymentMethod.adyenType; - }, - /** - * Modify AdyenPaymentMethod with additional data for the web-component library - * @param paymentMethod Shopware PaymentMean enriched with Adyen payment data - * @return {{cardType: string, paymentMethodData: object}} - * @private - */ - __buildCheckoutComponentData: function (paymentMethod) { - var defaultData = { - cardType: paymentMethod.adyenType, - paymentMethodData: paymentMethod.metadata - }; - - if (this.__isStoredPaymentMethod(paymentMethod || {})) { - return $.extend(true, {}, defaultData, { - paymentMethodData: { - storedPaymentMethodId: paymentMethod.metadata.id - } - }); - } + let componentContainerEl = $(me.opts.activePaymentMeanSelector) + .first() + .closest(me.opts.paymentMethodBlockSelector) + .find(me.opts.paymentMethodComponentContainerSelector); - var me = this; - if (this.__isPaymentMethodType(paymentMethod, me.opts.applePayType)) { - return $.extend(true, {}, defaultData, { - paymentMethodData: { - amount: { - 'value': (Number(me.opts.adyenOrderTotal) * 100).toString(), - 'currency': (me.opts.adyenOrderCurrency).toString() - } - } - }); + if (1 !== componentContainerEl.length) { + return; } - if (this.__isGiftCard(paymentMethod)) { - var pinRequiredDetail = this.__retrievePaymentMethodDetailByKey( - paymentMethod, - 'encryptedSecurityCode' - ) || false; - - return $.extend(true, {}, defaultData, { - cardType: 'giftcard', - paymentMethodData: { - type: paymentMethod.adyenType, - brand: paymentMethod.metadata.brand, - pinRequired: pinRequiredDetail && (false !== pinRequiredDetail.optional || false) - } + let updatePaymentInfoButton = $('') + .addClass(me.opts.updatePaymentInfoButtonClass) + .html(me.opts.updatePaymentInfoButtonText) + .on('click', function () { + updatePaymentInfoButton.remove(); + me.selectedPaymentMeanId = null; + me.onPaymentChangedAfter(); }); - } - return $.extend(true, {}, defaultData, { - paymentMethodData: { - enableStoreDetails: this.__enableStoreDetails(paymentMethod) - } - }); - }, - /** - * Create a minimal state when payment is handled by callback (e.g. PayPal payment) - * Use only when web components does NOT handle the payment - * @param payment - * @return {{data: {paymentMethod: {type}}}} - * @private - */ - __buildMinimalState: function (payment) { - return { - data: { - paymentMethod: { - type: payment.adyenType - } - } - }; + componentContainerEl.append(updatePaymentInfoButton); } }); diff --git a/Resources/frontend/js/jquery.adyen-state-data-cleanup.js b/Resources/frontend/js/jquery.adyen-state-data-cleanup.js new file mode 100644 index 00000000..c47e7950 --- /dev/null +++ b/Resources/frontend/js/jquery.adyen-state-data-cleanup.js @@ -0,0 +1,27 @@ +;(function ($) { + 'use strict'; + + $.plugin('adyen-state-data-cleanup', { + /** + * Plugin default options. + */ + defaults: { + checkoutConfigUrl: '', + }, + + init: function () { + let me = this; + + me.applyDataAttributes(); + + let checkoutController = new AdyenComponents.CheckoutController({ + "checkoutConfigUrl": me.opts.checkoutConfigUrl, + "sessionStorage": StorageManager.getStorage('session') + }); + + checkoutController.unmount(); + } + }); + +})(jQuery); + diff --git a/Resources/frontend/js/jquery.plugin-loader.js b/Resources/frontend/js/jquery.plugin-loader.js index 8e2c14af..faf2b9ef 100644 --- a/Resources/frontend/js/jquery.plugin-loader.js +++ b/Resources/frontend/js/jquery.plugin-loader.js @@ -1,11 +1,22 @@ ;(function ($) { 'use strict'; + $(function () { StateManager - .addPlugin('.adyen-payment-selection', 'adyen-payment-selection') - .addPlugin('*[data-adyen-checkout-error="true"]', 'adyen-checkout-error') - .addPlugin('.is--act-confirm', 'adyen-confirm-order') - .addPlugin('.is--act-finish', 'adyen-finish-order') - .addPlugin('[data-adyen-disable-payment]', 'adyen-disable-payment'); + .addPlugin('[data-adyen-payment-selection]', 'adyen-payment-selection') + .addPlugin('[data-adyen-confirm-order]', 'adyen-confirm-order') + .addPlugin('[data-adyen-express-checkout]', 'adyen-express-checkout') + .addPlugin('input[name=adyenPaymentMethodStateData]', 'adyen-payment-method-state-data-setter') + .addPlugin('[data-adyen-payment-additional-action]', 'adyen-payment-additional-action') + .addPlugin('#shipping_payment_wrapper', 'adyen-cookie-consent-visibility-handler') + .addPlugin('body:not(.is--ctl-checkout)', 'adyen-state-data-cleanup') + .addPlugin('.is--act-finish', 'adyen-state-data-cleanup') + .addPlugin('[data-adyen-disable-payment]', 'adyen-disable-payment') + .addPlugin('#donation-container', 'adyen-donations'); + + $.subscribe('plugin/swAjaxVariant/onRequestData', function () { + StateManager + .addPlugin('[data-adyen-express-checkout]', 'adyen-express-checkout'); + }); }); })(jQuery); diff --git a/Resources/frontend/less/all.less b/Resources/frontend/less/all.less index cab1f7fd..2d1a78c1 100644 --- a/Resources/frontend/less/all.less +++ b/Resources/frontend/less/all.less @@ -25,6 +25,11 @@ } } +.adyen-additional-action-container { + display: flex; + justify-content: center; +} + .adyen-modal .content { padding: 20px; @@ -61,3 +66,7 @@ display: none; } } + +form.buybox--form { + padding: 0 0 .625rem 0; +} diff --git a/Resources/menu.xml b/Resources/menu.xml index 91403fae..58090ad9 100644 --- a/Resources/menu.xml +++ b/Resources/menu.xml @@ -1,14 +1,14 @@ - + - AdyenPaymentNotificationsListingExtension - - AdyenPaymentNotificationsListingExtension + AdyenPaymentConfiguration + + AdyenPaymentMain index - sprite-mail-share + adyen-icon ConfigurationMenu + Shopware.ModuleManager.createSimplifiedModule("AdyenPaymentMain", { "title": "Adyen", maximized: true }) diff --git a/Resources/services/adyen-api.xml b/Resources/services/adyen-api.xml deleted file mode 100644 index 0239d3d0..00000000 --- a/Resources/services/adyen-api.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Resources/services/adyen.xml b/Resources/services/adyen.xml deleted file mode 100644 index 9a112001..00000000 --- a/Resources/services/adyen.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/Resources/services/applepay-merchant.xml b/Resources/services/applepay-merchant.xml deleted file mode 100644 index 05ae7875..00000000 --- a/Resources/services/applepay-merchant.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - https://eu.adyen.link - %kernel.root_dir%/.well-known/apple-developer-merchantid-domain-association - %adyen_payment.plugin_dir%/storage/apple-developer-merchantid-domain-association.archive - - - - - - %apple_pay.merchant_association.storage_path% - - - - - - - - - - - - - - - - - - - - %apple_pay.merchant_association.base_uri% - - - %apple_pay.merchant_association.archive_path% - - - - diff --git a/Resources/services/basket.xml b/Resources/services/basket.xml deleted file mode 100644 index 3b179e87..00000000 --- a/Resources/services/basket.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/Resources/services/commands.xml b/Resources/services/commands.xml deleted file mode 100644 index 5bd96ea6..00000000 --- a/Resources/services/commands.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/Resources/services/components.xml b/Resources/services/components.xml index 1a51a87f..b7973039 100644 --- a/Resources/services/components.xml +++ b/Resources/services/components.xml @@ -1,181 +1,46 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> - - - - - - - + + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + - - - - - + + + - - - - - - + + service('models').getRepository('Shopware\\Models\\Order\\Order') - - - + + service('models').getRepository('Shopware\\Models\\Shop\\Shop') - - - + + service('models').getRepository('Shopware\\Models\\Payment\\Payment') - - - - + + + - - - + + container.get('modules').Basket() + + - - - + + - diff --git a/Resources/services/dbal.xml b/Resources/services/dbal.xml deleted file mode 100644 index 3f208908..00000000 --- a/Resources/services/dbal.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/Resources/services/doctrine.xml b/Resources/services/doctrine.xml deleted file mode 100644 index b9a749b5..00000000 --- a/Resources/services/doctrine.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/Resources/services/enrichers.xml b/Resources/services/enrichers.xml deleted file mode 100644 index e7dba54d..00000000 --- a/Resources/services/enrichers.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/Resources/services/factory.xml b/Resources/services/factory.xml deleted file mode 100644 index 8d16e2ea..00000000 --- a/Resources/services/factory.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - service('models').getRepository('Shopware\\Models\\Country\\Country') - - - - diff --git a/Resources/services/http.xml b/Resources/services/http.xml deleted file mode 100644 index fa292bd8..00000000 --- a/Resources/services/http.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/Resources/services/importers.xml b/Resources/services/importers.xml deleted file mode 100644 index 7f90f5f6..00000000 --- a/Resources/services/importers.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - service('models').getRepository('Shopware\\Models\\Shop\\Shop') - - - - - - - - - - - diff --git a/Resources/services/logger.xml b/Resources/services/logger.xml new file mode 100644 index 00000000..e3a4360b --- /dev/null +++ b/Resources/services/logger.xml @@ -0,0 +1,14 @@ + + + + Monolog\Logger::DEBUG + + + + + + + diff --git a/Resources/services/loggers.xml b/Resources/services/loggers.xml deleted file mode 100644 index 0fc96f39..00000000 --- a/Resources/services/loggers.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - adyen_payment_notifications - - - - - - - adyen - - - - - - - - %kernel.logs_dir%/adyen_payment_notifications_%kernel.environment%.log - 14 - %kernel.default_error_level% - - - - - - - %kernel.logs_dir%/adyen_%kernel.environment%.log - 14 - %kernel.default_error_level% - - - - - - \ No newline at end of file diff --git a/Resources/services/managers.xml b/Resources/services/managers.xml deleted file mode 100644 index 2f0a9ffb..00000000 --- a/Resources/services/managers.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Resources/services/payload-providers.xml b/Resources/services/payload-providers.xml deleted file mode 100644 index 270b5c2c..00000000 --- a/Resources/services/payload-providers.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Resources/services/providers.xml b/Resources/services/providers.xml deleted file mode 100644 index ad4a1fa6..00000000 --- a/Resources/services/providers.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/Resources/services/repositories.xml b/Resources/services/repositories.xml deleted file mode 100644 index aae2f781..00000000 --- a/Resources/services/repositories.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - service('models').getRepository('AdyenPayment\Models\RecurringPayment\RecurringPaymentToken') - - - - - - - - - - - - - diff --git a/Resources/services/rules.xml b/Resources/services/rules.xml deleted file mode 100644 index ffa280fb..00000000 --- a/Resources/services/rules.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - service('models').getRepository('Shopware\\Models\\Shop\\Shop') - - - - - - - - - - - - - - - - diff --git a/Resources/services/serializers.xml b/Resources/services/serializers.xml deleted file mode 100644 index 88706efb..00000000 --- a/Resources/services/serializers.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/Resources/services/session.xml b/Resources/services/session.xml deleted file mode 100644 index cc51709a..00000000 --- a/Resources/services/session.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/Resources/services/shopware.xml b/Resources/services/shopware.xml deleted file mode 100644 index fc0a112f..00000000 --- a/Resources/services/shopware.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Resources/services/subscribers-cronjob.xml b/Resources/services/subscribers-cronjob.xml deleted file mode 100644 index 1c885ead..00000000 --- a/Resources/services/subscribers-cronjob.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/Resources/services/subscribers.xml b/Resources/services/subscribers.xml index e6013c7f..212c111b 100644 --- a/Resources/services/subscribers.xml +++ b/Resources/services/subscribers.xml @@ -1,133 +1,93 @@ - + + - - - - - + %adyen_payment.plugin_dir% - service('models').getRepository('AdyenPayment\\Models\\Notification') - - - - service('models').getRepository('AdyenPayment\\Models\\PaymentInfo') - - + - - service('models').getRepository('Shopware\\Models\\Shop\\Shop') - - - + + %adyen_payment.plugin_dir% + + - - - + - - - - %adyen_payment.plugin_dir% - - - - %adyen_payment.plugin_dir% - + + - - - + - + + - - - - - + - - - - - - - - - - + + - - + + + - - + + - - + - - + + + service('models').getRepository('AdyenPayment\\Models\\UserPreference') - - + + + service('models').getRepository('AdyenPayment\\Models\\UserPreference') + - - + + + - - + - - - - + - - - + - - - + - + + - - - - service('models').getRepository('AdyenPayment\\Models\\UserPreference') - + + - - - service('models').getRepository('AdyenPayment\\Models\\UserPreference') + diff --git a/Resources/services/validators.xml b/Resources/services/validators.xml deleted file mode 100644 index 07c15785..00000000 --- a/Resources/services/validators.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - service('models').getRepository('Shopware\\Models\\Shop\\Shop') - - - diff --git a/Resources/services/web-components.xml b/Resources/services/web-components.xml deleted file mode 100644 index f3d359fb..00000000 --- a/Resources/services/web-components.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/Resources/snippets/backend/adyen/configuration.ini b/Resources/snippets/backend/adyen/configuration.ini new file mode 100644 index 00000000..870a0e67 --- /dev/null +++ b/Resources/snippets/backend/adyen/configuration.ini @@ -0,0 +1,30 @@ +[default] +payment/adyen/status/pending = "Pending" +payment/adyen/update/api_key_warning_title = "Insufficient scope detected (%s)" +payment/adyen/update/api_key_warning_description = "Please reauthenticate with a new API key in order to continue using the Adyen plugin seamlessly" +payment/adyen/update/api_key_warning_open_button_text = "Open Adyen" +payment/adyen/update/transaction_history_info_title = "Migration started" +payment/adyen/update/transaction_history_info_description = "The migration of existing Adyen transactions has started in the background" +payment/adyen/detail/pspreference = "PSP Reference" +payment/adyen/detail/date = "Date" +payment/adyen/detail/eventcode = "Event code" +payment/adyen/detail/merchant = "Merchant" +payment/adyen/detail/paymentmethod = "Payment method" +payment/adyen/detail/currency = "Currency" +payment/adyen/detail/status = "Status" +payment/adyen/detail/success = "Success" +payment/adyen/detail/riskscore = "Risk score" +payment/adyen/detail/paidamount = "Paid amount" +payment/adyen/detail/refundedamount = "Refunded amount" +payment/adyen/detail/cancel = "Cancel" +payment/adyen/detail/capture = "Capture" +payment/adyen/detail/refund = "Refund" +payment/adyen/detail/viewonadyenca = "View payment on Adyen CA" +payment/adyen/detail/transaction = "Transaction" +payment/adyen/detail/datetime = "Date & time" +payment/adyen/cancelrequestfail = "Cancellation request failed. Please check Adyen configuration. Reason: " +payment/adyen/refundrequestfail = "Refund request failed. Please check Adyen configuration. Reason: " +payment/adyen/capturerequestfail = "Capture request failed. Please check Adyen configuration. Reason: " + +[de_DE: default] +payment/adyen/status/pending = "Ausstehend" diff --git a/Resources/snippets/frontend/adyen/checkout.ini b/Resources/snippets/frontend/adyen/checkout.ini new file mode 100644 index 00000000..987580a2 --- /dev/null +++ b/Resources/snippets/frontend/adyen/checkout.ini @@ -0,0 +1,17 @@ +[default] +payment/adyen/unrecognized_payment_method = "Unrecognized payment method. Please select valid payment method from the list." +payment/adyen/payment_processing_error = "Your payment could not be processed, please resubmit order." +payment/adyen/update_payment_info_button_text = "Update your payment information" +payment/adyen/card_number_ending_on = "Card number ending on: %s" +payment/adyen/stored_payment_methods_title = "Stored payment methods" +payment/adyen/payment_methods_title = "Payment methods" +payment/adyen/disable_action_error = "Disable action could not be processed, invalid request." +payment/adyen/user_not_found = "Disable action could not be processed, user not found." +payment/adyen/disable = "Disable" +payment/adyen/disable_confirm_message = "Are you sure to remove the stored payment method?" +payment/adyen/confirm = "Confirm" +payment/adyen/cancel = "Cancel" +donations/adyen/fail = "Donation failed." +donations/adyen/success = "Donation successfully made." + +[de_DE: default] diff --git a/Resources/views/backend/_base/layout.tpl b/Resources/views/backend/_base/layout.tpl new file mode 100644 index 00000000..fc1012cd --- /dev/null +++ b/Resources/views/backend/_base/layout.tpl @@ -0,0 +1,18 @@ + + + + {s name="main/title"}Adyen{/s} + + + + + {block name="styles"}{/block} + {block name="scripts"}{/block} + + + +{block name="content/main"}{/block} + +{block name="content/javascript"}{/block} + + diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff new file mode 100644 index 0000000000000000000000000000000000000000..33eb3655839839a58f61c29d29f86ab698ab89d6 GIT binary patch literal 33496 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 z%0A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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Blond.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f43019ac2d6700bd6e751762560c0472b183baa0 GIT binary patch literal 25016 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..e69558e98f420b4b8f2c0cd5076f48e91bbb45fd GIT binary patch literal 35368 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-BlondItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4840b7514453ef4fb4be8a620dd247a886b44fe1 GIT binary patch literal 26240 zcmV)IK)kAr0A?Kk0RR9100000000000000000000 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�a>y{U@dk=u)4IWi2&%jlswZYJy;WHZ$<_Db7YSbzxbWIBkXi*| z`{T(Gr^0$rMR-`)<*l=PQ@X{s8Ot0(414MaXPx4AwBF~b<;Qw>4B=J8khhEORwcE#kUv0z`$6jC zD9I)1TCUSWiL(ags=|rLzp`o4#wqi?&&+4TbiMHPxDck7o2hTP_p#Izq?XrH6^$-u zjRJS@7l=_&KyT$M|B7C0A5YNY^*rtWP1)ENuJ%tXym(D*_HF%X>QD{0wxRgnrvmb< zNa?1w*nLHGcuj53{Gw@L=C4oH`8!>*RK^P><1aLq!#i*_0((V?C0eISRiiF2J0232 zY+E-?iMQeUQ=P*;C+_nYg(Ai$3(Trmn3?Zn|ryug!=W z@h;rfa#`MBdU4;SoYZsmNgjy0O9>K_TfSX$hSm*DRAg#m77AHW&07=LI(R_x8=5>plj++4hG9B9oG$Hhy#4OL&KqF4~49{=yiv6hTjRPbp25 zzJ6Msu(X;@Z17!36v_Lm$1Dr277{(I)OxK^A4@arUR-|M44rbW>A%(+k)aD914RY=FQU|r`jRco%PsWC>|;MVyaMT6f25xs&+$XJ4Gv!)HSf7 zi!N_vwxx!mo;vkW&T{g-xP7T87NF<{9k|wv?i~;MC2xI8UW~Kt{z?jwBUe(IBZr>B z>AI`(w52c9Nn1HM)NZ_?B9=lTm9uOzaa<&ji=&Xp9}$2G#0$a*#tI=|B4j3F!3oEU z;3N{yMl6a%G-olSV#h3$t+8#Y(_aE<)%fRd}akq z3aeR>;@G}KDXVe_Qz2ZX2vs6gv#AlKRLF;d4VG-j+O?JPQk>Z~EU^e+284rZs27N?zObuq05jfgbLW{lN1n+ax@ za3+bm;;5@+y~xf>U|y!^m2~#LTikuf&qw@y%-1LUe9GTve0{~$Hv)Vs&{TT6*7eM8 z^K^&KUEb~q@_@J;oD`^&22C=cO&0XYfi8J)O#$43$vs7Rq$JN&rB6*>sY~Ax8Pbq< zn(|3YzG=%Z9r>rLfbJ^{|B zNGqotC^x3^>QiU~e`jvlYM}_W%X#=QlU6{UG&+Eij8di{%##?`eE>lUNTu4{h7uE+ zyfkW_?D+D_#G$%n)X_IP3AFDS2A5`0te#t+73viz#}(qco6Yw{ zl*Q0e+;2*xOa%*!J9msH9RC{Ac5Mh7xMBnT^iD9ZFMhB5WYxqkAJ*j&OhYr z>vOvh`Gl9Bu2Rh9WBF%a}wGz8v9weiC{NBRq3qnek)slGW%gV~MR!ZmV8VTh# z*q6h{Z)7Ff)JKnnMCsv9f_nt|3AMiEjF#HFR`*aT_m)K1wrv&eayiTqCn3qOIy$3a zpSnVvgCUt)+Ci6D8NR+_N0}6g#uJiUiZrETfxdN!KFNpDTRkK4Nq4tV4s>7^t7A42#4ld zoverj^?!nGf?Fzh;u3(uS2>gGifS>x`3lv8)!1>;{Oyc+Iy?2n@sAn#aX4l4(0xrs z=~3A!fH(q@C^*M}G!|qDz$FOClK@2-BFz?UUav~?F|tTrmSANWcD>~g*9wVRDXul* z+aXl~sjHVJp|mwhSBqS0m0Rs{uTvg%$+KSR8ayM6Y7eYjrL3+2UpbG8z}uN1YH$k>+d+vU_~ zGXCROT#XbhMnVJn_Xz^2d^CV;_ZcsDp=4PAEWB2Z02n2fV)Mp$>0$wh6|Du=D`!-#6ZgMlsD#V z<$|%fvo!9F|efQ49uDdsnpgW$;-);zF0BhND?O^AzGBkBC{p5Zpgv0<^1Qe`t6{-~=s#GjqnNl?h88Twbgef!T zjBPpCr0OiGops#Yspy#_Xqc}BG7 zJSWKuW=l5LJa!8$l3|IP9d{e#*yMx~9mwbPx#$IB&zG1miRC316nfud#lH3&-}hdr z_nRQ}M>hJ)Cr$454|_<2BT2PrOJ+v<-G|b#Db|@X+PYIc)RQ`mdT%Q%1Nq`NIgnoA zWTEBO+it(3nsw@T#-MRmU3ASIkG$~KZ+`DKkZnXl6x3)lWX^_TGG7xYOoSK&R5T1M zT;*yBwdpZr!i+_$Hi?wp!?Yi0bqfJ4n~0S|R4y@j#N~r1Ai=H{j~T>d z2N~H(p^j2LwFcUjaMi?(u;f^GjWK4N+@3T-6L%)f;kX44pusvz8WMts=&%$#jD$Un zJ_K)LPNONeDLqbqbFKo+y9=}+1X&bjXRIK9bdf&VPa+#E|N_Yy9`-!TJ}gNwXHM+O+G`rCX0)gN6(nF>2fu+jfW)*Kx%%%+N#?)9gA$rAQMinol+p z(N<{|Q=K~$t4{+V8KPOev3J}?WH;YwVM zYj7>wUAe&b8k6^h5^e|%B_we@s?fElJOq*LyLo>SK`40uC2xcd-0o3TpU{5RFK!@NldE zLiDVy1~r$h+WM2$5pU2`g+B5gz54VUFmw$0j+--Y!J?CvoU-h+RVy_q-K3XgtL-Ko zch+pZu%fvq!p2uK4U82g`kk1_vO-hNh7Gge8@psmNC1MvdlkU(ZFlqo>J*vEUNhqi zDm?x7zgx%fgW&#spBz6K!wWb80Qok}1sJda@*DR++;l5oWG<9#62MF;1dLX5IBVFW zFy64bHDdXG;clWA=#TLXDyT3)cqlO8f#ZV0qeLNPR8XbKm>&{IardaQQwRjN++FVF zT?Nl*_xH=Stnd3uF#M7!)NIKKgMg(-6FpA{#xp1(LkH9 zl>BF%_s{2XtPv=Zi6m4YhhMsBKY z_#w>tY%Ral&0qY7@A-z$d5bUQDZk(E8?C32BToRym7|Cp#Bks5ha%O#7ODQp(EmjR zZO8RQ`#~7RNt)$FS=CM3^}{&L%ew8y2@xigaUqp9*7*=qF17VB*FN`sKL|@DE3d3? z?(FOB9~>AO85&XY$IPD0v{#JO4`r>tW`F!d&DlSA zd*gk2J{VpqBxSt2@Y@?2>j@|-Zra?sdF$T&+jkZ}pWS`&^4W6$zR11%;3=<)TU}Ah z7t{zFK|^~-+uFrz^u5bh@~&SE=<5I=0|kI=0s!+YFeiiQJ>-4||15M+MmOa94;YeI z2u>N#QZ#xnkB3y zh93HW85lyC9%I}S43=YX0SuArluoY%lA0L6)ac68;&3UJG^B&vkXZ6zT09cSJS8Af zqKH9aAF1ACM#x{}NPuG^5vk?@@FXEfW*Jv}=-}J}uV(Nw_940JI1>dxYvDG8$9-?I zsM*IYmDp)0Yy78&RaIZt)FYATjFv)GELJyf-l*!~3n#l^8#is7>9~&_0214_u{O3b z594x~bk;o%9o+6OEI9$bL?ByR=$y+It8$gQxE6{LY0!Z1czFup<>?V?4{VX3LN4*7 z;SJ%aoRFYiz%9yR30oxO77uon8k8#37K*z1xFBLAs1VI#$TxNM&M-tsRutECo!ZhE z013H~`ND~6fl-AjkTHo91|kdhrZ*Wx0Tq?KNYs=S;{&p;XJdnEAiHM<=P;PR?h+n7 zp>586*EIrx1D>x1C7fR3I6RAr!!|@S8D7HUwx`S^mt5i#Ip-SCwrE_I3`Q4w_Kk{D zYtZ}fDhy>YsVORLk&s&)I@Ja)C=G&BRNx;Q3(o@|x7#Q)OMP7MWq+G|*PS?qAVTya zbK|;h(vb_m=)6|~BuEb3jI#Ipy=MY$t)@ccWAuH@^{kmhtjv!{{*8+@9b#X7hNT~z zu7cj{QVmGf#N|ZSp*v=mo|$*oq1L_W3;0>C;2=$0j=jdaLM24r%KeDFinzT9&yq2( zK$aaQ2OZwF>*;!>n|msLxre&TQc2{_fDu|=^}rs4wUs*}I{~-g(slsCVLQw!%_rG3 z#-_2t#P`2VlEexPGa`-&76~+>lvs$Rltm(-BpGNVR+uven{mp4Q8e|4vdwE6ZKP@V zp(kOiqlbxZS6BR4Scax!tVUw-MbQK<>Nbo^5|Bi8BPlkyoZ>B2wXYT5-Gg(cx@_4@ zc~do{&cIeHWnRF1A%KN3?Y0#z_&A$SrMV=!1o`CiHWpGc0zNqHLskmgdKcHlF4Abl zh9;aBZ7aMcMAH_{@tbWaQEvrW^yXL49AwCG)IP-K%9mH`-<8Q{Wv7fIvzOi8O{pkq zXI;XV8&0!8vyDUx7AwUgN`1`qgF_>ctkDp_AlsZc)JS~%jbqj_pT0qf_K;>&1V)~2 zQHH$Pz-Dc+Ma`scgN9t6@Jz)DzIcQ>Lmp}}G;HCYZ`5OPI|(Yfg8g1G&Mc|7Wg+kw z=+CCD<*K%+9;H|h*Nmt!o@|f1x^0e;l3rmes!boHE4js*d}0^|bJ;ANcaGdpqNCA6 zOy&_3Je*=8jFuLXW#WreaF_PY6-LJoTVAljb_Vo|mg0GCOlR&N4w>NR$;@vB8pn{O zSwqzg?s`Mt+_ehIR>%F;bvBlzyrDd8&j-06ha7Q%zJ3PiF`l_Ko0 zz}MYXEcQW}$Yt3|!$ik1(+P9MjEdm_Hq=33YqY_5Xcyft7_k^Hz7)rRraRWiT+H_8 zhbSPr96wq{B%}mQqlFWJ$O@RHNXRMJ+Kqq*8H@ZhQm8~(RYT{%jQB+>1xzbg%tKZV z=!eB(fBwMEE^02)q=hs|;uh$B&K4Lm-XP4XwK8YZr-8_pptsTm8xs53%b z;)~4|4y{4N2C_?`25>R!R@*Y3$aC7mmA0)IdxgS|$iW_~!yZ34G}7go7rVNuuKo<& z@|)eGa@VE9@9e$8LT3^SEA+L=1v|e;pCv`5_r>)JjzgcML{}NlFCO)2c4;bhn77pE zII!_;3CP|bK}w-EJuP$<46PQKL& zZSzG3*L6_)pNjQX7}keYRFX>BNu#}t6umV4zucn<6tb>|=JPXhIm|{P#}wxF%ib0+ zJ$?rjELyqogr1S1DBSSlk7BGtOk$4M-Yow*`U@xkKbsjz7j@0`Ax_pUjbfaR8mF-z zL5YB_2*&^-Ac&D&SEevPUif8w0)T1pGNu7hkdEri;dUIb6sQ5qHDnY zRpOy;N`Q@4iIQ)c-3wom{YnpaS46p+deZx13fa@y_sydtbm&`L?4a6=@G*?lVW6Y2 z=g>A8Kv&`;yCywq4i1~Oi&xkdP@5OqqMtkdvTS2VL`Sv+^ya#%v15i}icm11G^uBM zk5sT&Rb5Ub!oghp;fKH~P9`UfY9d|ehoP%#7JwfzeT~_(8LNDMYiZHlU!SKJ`dXa> zg!6L0s$)DCP}UKza-o1}7LZlSQ0*BTy>8M%i_kb>8=GL z-BL~q$_gjYvU(Q4ktzfVl%o}CZdk>d#Z#l~aV!#S@FjS!u7cGx#7%*NMkfBS3b`%| zvx)p7$Q3!*<0y}ufsNOGfe0>85SUXl{7CZk($qKHIVmaBk|+l*G9vwZ&#@o|G*@dK zGLLVn8;HLqqFdL9C40)|&xdkshnlbxwP=?Lm{&tA8XuUwSI9dgtNA~X;Gpy&usw11g>3qI)&5y^;zK(VD!kwvpnvcU;;rzEf6XR0m>u!; z9azGHlE*U7O=6aB+{0?p9!*|S^f{}@)h>R9WQ80Y%oz6Fp{}{5O^C~ubyD+va#i6O zHc%l#6$+r+*#!jaT=~i;#%vcqFoYPzfY{}0a{MGj4rC~OM75jzm@po_mNNvPrXIIm z^MdZM+0F3jsoKvT(zVGUs^CDyrLF4RLZL(fRna@h7U76ue!}mgj}Lnxjvo&H$$WO? zi%+ECGf>ma8N(VFkyzM3HPk$i--$LV1O@m~cVt%t;V?fn%{~KHoW6`sT1T!!@7Md38Kx!7H@#tG_ZYlsdD zGfxywxYRURL@@*yUf4jV!`wwALUzj&;s@U>V1(g$Rt|BMBhn7EO;FwToL{1at}lS} zV26d@zO-UUNMZHp$7aY|vX<6BHuuoc8>S)HTtf%)0JvA zEtd`n2NF{fm{dX|^3$qS?Dj#OJlKY`N1?G?T;d>o+3BqVT35D zX;WuUHuAf7{X?)P_jJ(E+d#(z z1OybxK#a9PJntJw5Oq@;deVs|j-24+ZVsX}8|avU00a~z3MCl|xgTLm1(-(=(JQ$) zREQBkB_2Qt5LBYXn?^k#xHTXh0;UDCAuL!C10(u|HcGESx8#7Wkwe9LUxt zdXwz}w_OTL^woC<81yMxhh-~lUS#+hhJ@uewor%&kROY#IzPQs=og7R&M3?Cdyz>m z*O9PH4CusnnWuhw?xPmnk+}6?4>vk`-*R)0M~9F?S-7=9edr`IcUnb_U=1IcKX^@o zO;^TIPL09gZ%f&bS|C_C#%ooa#Y`4ZZ(8HN-RSQ2fAy5cggYczIkzBU8@7>DQ#D>r zRUlg%7(__esvta>6Q~)2FP~yoIL!O)E>KzjL$Tr_Jj=Jmcf_5%*u0x%9LDfzZio+iDBkLQsORg~3{U&lNdU z;QU$gR2X1H+4#q`bu_hR2ZyepAZJDjE|=NO=o8-H42h*tZxXJm*iM4F21+)7@7)b8 zyk367G|~dst(D4iK|<<@$t1Q>I*0Xwa?zu+1{l z*Jq#=D^|3-2$wyJeb3eMAxBG&{@Dv19)yizvOj_IRu({9JRM}+PzVb}UpNxl0T_bN zVcEJxY*q?2woMQFb&~3$8OIJ241h0XI`hTgcu~i(GPtu<^V?9_sud3QZHaZsNB(j9 z2QQs*8!8_mLIj7neK>usF}eT6D!QWmne4v1R;7z(a*5$FH$*cmh&N^jmik;($^yr? z1X~vHt+d`~2~r$^FXfsaLai!A8u?vY;9k_;-2}EIY+>^!EBvvlFhxNH0fr2CoE?fC z8(@`w+ZN6W9q$VxK_#mucqFwj2$P*I={R6?lxYKqPT9_a1ubSew%D|e5*tODU2lPq zM0-&#y<>&Nc7R!LyP2KZ^y*R351oX1ZTrlRlOMDc<&^IA$)~F-G zM>78+w0-hu^OH8sYR(E)qNqlK{El%-mn74Qhb>(N+*wXRBgeW^W8l=Dkj)krxNx-w7xn@--g!)CH3pYFoJNjA zS&K^^UQ+H33mLp6uTmni1*%*w9Oo177m;13%Aji8bP4({+#iHx?n8Z6J(x; z7CJzB-D=Z)km4x5z;iTO0Kce|&lZN>Zq8FGQtwL=Yd&|4RyY(26!XU>-m-fwBaJ)# z(#=X!shBp$T`ie@wYW7DIXQn91JJKeU1gmZ7!Itpd(!XqwekXH zDUF!mJc4AUtb9^+Nr6$22M&r(@~zqnDpWDvQ)L)^xEy?B`LMc?8@ajRY94~8szS| z;l25$(wV!ABa&1#UO%l_chK%oo#(_dzl&Lvj`w)@0L2T2WV1{)%w87$Us`lZA5Yn14W6tP955}6>^0&LUoincNI#8D{BEyzozTYJM<;7YLpgA zUfJf;w6gh23q70@*H~JRRJGy(dTraSzh<=W{<6lO$`~uHOkD`c?x19hmRF7aa%$3| z{@n4BQ~^7ee{sBuQd0=FRg4>u58+gm=Ffdc!=2#iPs?im_7rs_4nC$1IinRYWTKro zkn>|#yw%M5s*F*UwfA1k$f?6S42IYZId1z{+TbEm4%Ymy%zF3>(bRmu^3`hPiakT{e|CX*LISg^#tozecQeCL7HLyvSjbmGc0 zD9x_8-}No3uLpCdc!6#8>|rqHqTC-MVzTyS--czA7njLDS}3lgdE9OPf`c80 zaka636u}C4cm*>k_Z1CQD8-s{pywVL4`$>ZLC$_bO^J2XNQ|yt6&{l z`F1nTm1`BbYG&&hWwCWJtBCcrw83O|s~{HTRV9l1B@mgBlFa>=nK1bfSwnsktyn

P*PVT%^5JQTE`jXC!`Y1X+y{zz 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 v?9b$37j4Utj4*&oFpNaUB literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..3eb11210ed8356558688d3ec3d7e0b6dd8533ff0 GIT binary patch literal 31696 zcmZr%Q;=powEfz)ZQHhO+qSJ~Thq3UY1_6nZBN_o+y8yJFLzh1r1s8QJ2_P+r&39d zhl02`00{77K63zsp9%;;@jvhXGjVZMxgTEBPaE!k@b^~ek`NUW2LQ~5eth8{$b&(F zdq^lMr~m*qHvj;_AOIk%`PkEFC!wPD({2t40Dv6>05IgQ_C6#EDh$j&9WMRoWPf1j ze5jvnVrS&|!&w6WfF*yhUtwp?Z(-!}6Eo}j;r!?Ukl)_`5DQx`^PfD$0D$7pm{PJ8 zyJDRz&5TTc@@f8X*#859iHo)6Pw*#}@Z%HxfD{27!qn2v)$=DeApii<1^_@n2mNlK zv~@7~;X(cv3;sbwJI~IFoss8Hzd-*zFToE8fnfm#_C|JQ0D#WJ4@c}rE6tPk3hL>P&FLUn6gb`HmVypxJ3-hP| zE9I{}K*+%JcXhzmmr?d`?xZRLYA#%oiEn=skR%mjJpfQ#g2?T;VV9y{iR*?sx-<1* z?w&&IlTZpHl#Kj~OcJUjMNC>M3XMd0EhL=lfpJuf*t~zx9!dJtiVFF7x4*=yium`i z2xb&$A|YP{B)F0^f*9#9W#bzBp{RhBSsxypuzC=JZHMFMtR0`;YoA^W`zXFII;3lw z3#{>wgT`ZgslSh;k@8X`TPaJMNo?O{T7m1kChY^dn|Z(e85#8cP?S{uE2wfw7*IA! zRcGq0{)aZA)xhr3zn4IBn9e6lh34d3ZA#TDJ zEGy%zE{;zR(w5uIhi<>|uFpM`{beTs?=kJ3dxyoZ_k>4*qEV9z@PFJ3Fg+=pAL9GF zElaMrx~XK}xl5lU*(bTL4pmp7=uD@c>L+?(xp)pyytEJ!W*L8~;_UoR-tS+mHv;gk z32X&oZmKriyJ~jbxQhO1ZPIeqac7O7M6A}I+GnQSoP@QidR(A?274dQ8V_|D7Zo%v<|M&z7b- zQvmf?$c3{SemwRVw)xS?F_0Ck=ZUlO`b6_Y%f{|lwGhjnR{PA+tc2L5wI4+~0x~`( z^j#r|{pGWuO!|J!?Vl@3W7%QXoJuM_2=o2tV=4`RIov zfps48E8-TA0F-jxX}o1j^k_`zkF!0wSfEa*&LPbBPlbVxG^Ou~94hj7D)u1!rUJ0o zfzohG44Y0yut%gpf+z=Rcgt#DRYuC`=Ggb&;hCE$uctv%HUW66Y2TfsBVse&iC>H@ zG!IE=7w-=&N04s*k@!3#tN3+(y6+N>^2{sdSDXiE4?8q3Y1-Z*^6%FZ zQ2(Ye<{SvVT?Ti`JG0+2!!77m?K;14KK?|}$CHu~uvt^C=GL@R%*vGVxmmEaa-P?1 zD0p3~RC#lxeZV>YZRGJ;_a0wOQrAE5-_OEkGdM0{+E{$M1BLfZfxOy>A!rG}@*O|= z1_JZ_?eyPw#L&<@&=3n;oN&C)6JpE+^j-@S0dR&34gszXju*xq#s-Un<<9tF!D{Mi z3~MfHT5VWul0D>_eMWx|1cn4g1;zzN2F3;k0!9Od5y}=N9c3*oD{U+NAuTMeEbT14 zA&oB$C0$WjhX25)d6)1=G}>yg^X32kt#{kG;W2srv{Ti?@X_=A-g^E0{SC2E*;k)n zgg1yDrYE?Gixq;264I@8t``^6$Yn#5ci9@AdcgH{Z9-_sOTi+x7jZ;aH1FE8;d6){f;<1( zli_7Z3BoZiV|T#r*S1gm)!$x^&+TTPlk1#zkKOGgpYG=l`zk6@nwRl_gn-%CynBWd zf|umlt@rIoW!; zf4BH}ySw~+KR-Z#LxM$w2M0)qiwaGQ5B5=zv9PnWH{Qr+vpGDz2Ed|!)9Q5i4p*jD ztyXW=`yU+3ZMI&ndHo^eB0F#&&+e+05X*4LD(j*4ede!u8Nau{(6>lqq21O_PI2rILgM?8k(BLG*MX`sO4TVFZ#zvcth8OcF>`12&A7;O8^3?OCtR;f}C5oPicL>@p zo=ZjyMHDHcPNpTLbw}ux%w4RrKy$VVUvAQJ;5V8Bn~20L|0JZIqGoDf>foG{ol0>e zFz#|E;w2|U&5lMk9D=N@JOOr8+gRwU^s0tZX||kOSzTF)onuI`!8PB$tfdrk-sY|0 zSLeT6pQ$CM?^57(rtI3FXQQX_cj2nyDhYi--b!Yp6~EG=wro!2pO=^zWt{UVxp!oX zw_W#Q_waUrw}G4f-zNGpnlo(gW`EV*%5O1)xwJ<*k*x#{UTmVGK~D22>;RT8vo4mE zm>njx5yOKu*p`SIBc3%N_n5!Na443-a!8B6tok3;AA&>Lpz{X)yp&)u9hh%qvwvIa zvl(O>(4`zfOeUF4I-9;)x@j)1nAyyD+xz{gu$9`3yBu;i;aHQnP(J3+)`ytEyGe7=DxmCY2uM$udsM_;2c3 zHu5#=b%o-*=YUOyFlN4`+aprR-DLRT-gW&p>-sVqv2PjH_`>z@h69$Oe`AeoS1W?HBdG{bJpayNP9@T$6pVH8rgrr zPb1(Vu&H=bCr^~wD^DAFbFy@?>*Ds{35kz>~AznvVszkGDHXC-|2wT55FKG|2 zXg7x|Z))45R)7EXV}J;k4hYx;m3+FK`OmJVe1D5L%?aq^UGs(?Kb$yj!GeW(r${1j zo&w?V^;P|I1VznXFof7G6?$MmQ$)O*>3x7`7sTk11iKF6uebr5lM9{Q+rfn&R&wOb zPuCdQb9&&!HQAUOyy4qDGTOM>JSVXO8&(CU4C9(mPG4LZ=|3WK1!_)92|!4b5VJzK zqer2v{%%o+JOxIiOB=*K&fz^6+jGpCV+r9@KgD7QYJi9}z%LbkK%Nse`9SveN|?O| zT2(lPz@6KiF58PY8iibk^t2fQdeBIx#pV39xJ*U}yt1zW^}x_ix2FNciSXI)wS*@> z^^ac{NFd}M$a>lY^2YJ`>8{BGj9!;P!2zkz4U!R~15g0BvotgX4GUCC?u(~VkOmW> zbh=cn*-GJ%I$(C!gan`Vw0zyRBw?hPnXA>~7+UE4-8y=1;}EzXyx=BtOv?TCHCsVu5Sd) z6P&Pd3if5A_dXCJpQ$E-8HJ_qE6fsfT#5_`h)fC%4NVp1{a+j&o?pczPD-I25lU;Q zY`Wy62zg4VENqeW$>q0qz&@L2p%@o4(kFKvSZ-VC==-4=CSI5C+5M418V$(pYzbE= zE~(gUM31p(9^Gi_LHx@RmSChVz!;Tyd`UEK1!()L55#3m_p}dVZS8JLOfXMeb)MY( z7>ISBmY8{)goumOem`y0y4U$8i-!(i3O>R6$)mlBAKc3u-mCa&PaBfRpDc1Y;~k%e z&uX^uo)KxKMd+fe!b`s`0DJIR4u<9Jh*lmj$i~{ODL8B_M+LL5RSR z5ixzQp==9SW#QA*o~okXWHDLS%>RtaGRzZ%!P9?X?2jUp!k|q((3cN6AvGf^c9c*eENZ_n z7AM)TKuJ9!>fW8QC;I2Y%$^G;zVH+aQA_}0@`^tOKFPyj2zTZ0C}HKGe=O5wU4l8X zBXiVZ4lh~{IS}5eZ~5IhzVQvSEF72LvA8FI7DYB zHwjHDo~+g301{fgrxkJVl(~($KEVeCkVRJT6dNdyDT@7?B4Insi zz?-!A2wM48_s8*gY5}vM%sOyEBUXz^N1}g&VB;Lb{3QSq2a!jcxW65au&@Z0bg_&B zFkdC4OqDi!1D95J2rJ?Tl@Ais3i)|*bQVlm5DKI#en*ApA3%D_4XnbnYIeL|UO60G z&!4g!aX5do1H_zbS;-k7ySNkQR5Y62Ly^Nt;FSDk-(alLVW2&fa0?|qGP5Wg*6(wh z3RMK|=VR?`)R<-ykfS=wwJ5%BqQ37nibjYXW{hWMJaS4&QS3d=;JFR6&K2Q`qOSBN zX|z5%SrxsCU#pjxnb}dp%4c#P1OaE^KOH?qo95g4G-Kmf?E3!JbuqoL-;~moI?4b3 zl_e5MQSDYUi+-FJ<1-c`fq3pixu+(;I}xEH2}e@UfPx9G6yDO@M46A%27fGh`WNq2 zxea3~Q5i>!veQ3()=X-F?R zo$o{_on+M?+Ct);NJQ)}YCQf_ani%Cq`7?;6OGT7g1KttUnB4wbAzt=KOS~tclTV>`0DD=cE#jK$h_0YBni=}C5K+8ziGLf!% z75`-{>nrPZ{6KbT_?b+$$TGQS;L#f%Ky_%?7w&fRN|6?@rvG)|o}lBoqP<$l-(K3> zOy0f?9e-fK;h;aR)64I0`C(@EP}Ny!?UrMAG-mzoPWj^#WUN=$s9ALJI2%9WT$ zKQ}#3#4=ZVKz6DvE|;mweMrBDt^O;-LHJMM-_wHCA&fjZjGe!Yj2w z4FaXBZD;yy%kJa*u&lSbPdtQh37?bSmHhLA?`BoyIdD z#V|RlmxW9s3`}}|kwi39vPzUO$;j^ItM~&aPJtNS#3axj8=RTZ$U=2Y`(V>2mHZMd z0~JvGHwuy>Ja`|QNR1;&6D^<|Px}1B1EElWan(y|>D40^tTEX5y#yF(X>UGD)fLZi zdVHO49D5<3*C!Eb(i<#>f6=h@W1&dAg2_Ke{lco2Lqo`M>yfaFJrONv;k^_E3Z(ty z78XB+lZz-;X%WVu&tqm|5~iNeIqV;8G*ckju+%~DsKuHu7slz5-UMN&?gp?(m6IYa zu#W$6>o@Mn{_gFN(J+HDGZ@Gbzze5a9X=7dD;mh7(3c6PsPzZ(5YQp0*YpRuX=M%J zJVH;Cf^iPMijxgw@bDA1!$Ng3G8Z*|XaouT7A8IAP+UVM=zM$#^1QJlpE5stqV zk8hJ;TDUkX;cj&y!Is93?PiSORx?@LIx@osZi%M}erehFa2Yv>E>LXC_}7vJR_bceQ;d?=Mbzgau;k=F=)pYJ#scNU2wqOq7sw7O@Qz}kp8CMw{g zftc-37${&M-iKkJG+qE4XnM8}GmX3xN8+mA-O!ok`5c-vEOV#PREY!<#0RNJKii-Y zMgIea$$F&BD-I&%7#GctmqslBG4wPPLVI5FbAGM-VwOf(U0I3&rUKWjp^|q@^vJ5T zs}Ly~=?(Wxwj*#1eqNZ|TvBlEncUareJ(89Mh3@zFm)$rfv}a%X4Sr+_nNWoei)1c8qbl)LSd#co2}+Ptc<2o7mJ+`Bf#eXER`U{I3H04!!&`jlNvVd*YPAIj|9 z|8|x6A^&=wSMZY=y|5#6Br04I9^gA?m=7a2ksn!0!mgg=k1nRGN~qq z!Av!O|Dpx8T$^prDbbp>S!GDk=e6WfzO<+rPkSHP?t`^+@rGLT& zZmB=)3;9v259&`40GmaxA1Viuw!P^Mf!SBa2>Jz-8~kY~Yy$EDIun$~%C7v|Cq*Z5 z_zC4EM6O!b1qV^jui;VlFthpqSR_9)2YTXxX%0&J=@q#tH7lehj@b&W?o`ZWAo1uR zAF5SOiy{s6lKerrYjh~LX=%>JTKEir*B1aXzi&F{fcD{(^)a0ipan-jI$%KB$JS)= zMnL%X?ljfJ3X7dK!}ro{GV7k;3U?Kf$LzP(gz~u8Iq7r7Nu5Q>b7Z#^JF507vx0=kpRngoG^}XfQ>$z0E|8C2JknRo|IL5jGBq)zkz5=!k zHvvzY(7y%Fil?Mi{OF2|^{SCdRt5BikTT$g5tvL5=?@5Y3#tdQw+gp-+|@evDuu88 zSXNcrLA~Ie1DX03<}(D~3zw-UKpz`~{rfB^RxUw?YhixEw6gG^?GBp7Lu8)ic8X=_t* zTbhTY<+!(UD{EHH_=I~yp;qi&Y6zpRQWFtQw}7P$s5jW6^-OnT#VsIo7NWd)!k8+x zXu~kkkIHjo$t1>Fh+CadaM?Gs(kaa1)u*NVhUkd7ysphXM$RV2s}h1)FcBD)ZJ@J0 z_ARPXOYYdMO4kb)@& zFT}Fu*m-Ws_0Ul?cRL7x!~C@IJ7zAr8j1S-7o>le>Ne_LgQNdBvT1IUzxPw4u7~CH zz+bnuUCVS9x0xw32*bT6B49t6y=t-hq6zF-zv?MnJa#XL`r+TdjD|8Jq(`1a@32Eo zSq4sIH3u_KJ$Kz>VL8WWku$NYT42+OD}*&xAJ+=+zxx6hK2WQwd@RL`PMRd3A zJX^$=ZMc15YxXX^sXU+NLywE@!e-%(w?zy2{o~&_0h>U$jRHgxQsCx8uzfj2#6rCc z{O|LsMvCbT7kxoySfSw1iv$89?|&@fgC0x#STOb$Go~`$8G`zM*{f2l0_N?eum)DF zuZ-d?uqWxHMIkx*TqS_c=+jH3YawL8vd3?(1|vlE9$5m!5LysE*QQb*`18C;%E zkZb)db9#Bh;k5#A;L1?{(tx89E%cVg%oiZwOE*C-gFgbPh}V#J;mlP`4))GJme!4C z^A=SmO_wE#SxzJ;xesCO<}z#oE&mL38o5-%)xfRi`Y>(X3}{2Fw>*tt%NP4MkwAbl z>l&sLKSxll;d*_A$_^)gtfAIZ#xjDilvR?j7P0eemF8X*4dXbs2=xj!WmT1cJ6KSW z)`Z0nvkwh0UyjzJQTaz@$6Vw{iqwifJoY(gq>GuYH*|vXWI+Obzg96eFy4_NA@+rKm**UJ4yN*g05X02z zA^28@pAv`%>(T5%7t}qm6Ib^@uli-p;4Eu`IF?R0kfyeVXQj}(HW@C{XJ4Hno?8xG zRJL4LTzIXx9}NZ}+pn6g7Z5l-$DBt`W^UCH|nK*xB=Aqd7!^p4o&v z^lJ-Km0});*VZ=6`X3xipCzn03mCDgO1v7bDyI^T<~HgL!geBc^LawxyQUo`;b;Fu zyFj9gNteo=S5!w-Tf%(!3nEan#O%@~=@zsZo>hd8C6+am6=kz#Z%m=UZ;sp~CCl&I^!vN{4kV zF3jrGgP;Uii=F{yCInOnQt)Gwd7KsVWUh^^m!AkEGU(uAE+{9cq9d%JQ<)bJHv^Fb zL8%JA7^$}`e)Tlhp3Uve54Peq;-#UWDsUQKl~;zmbL~FDi28uf;>LnC zawXs!DX_^+)w4IKv$9eK!hdj3vIgLEf#Fh~Fy8=uG|GDUDA%WqX+o{cK9CUO4Vm8> z#&{P?BQ?{jLjA5$217TYwaUk|3*_HyKfb_^+B6aZm9LpSJt)Vg>jXpXZJ9ov8(z)7I3Lh4D&x0fMH5M6%lus8F*ann@5w? zy7*>n1H>$B0UKRiaq+D-t=o!Gb{Qe*R89k3u);y+Qciow93Twy8mvMNQ#tgQET)3u zsD@NoLDrpL*)j*8S+JJ@oD7`jF0a~Q@FvVl7ev`aKABNyu*kqFVdNBqbJlzP^?7z!wmC>0{Z7*2nAJp0{dmg4;h2ZcbmiLO_X$vYdsjzB!iUn9Ce-w^ zu)6GId!MXlD_}vPiznTA;LbEpZLb|t9v6?0HwjEWzUiP*AXQ=A{S!6t)%5GAE1b<wX z2017|Z&3#?8gZ(k-K`re9gV$7ck{g3U#9v>)NRe?Op7GJ_1mJf+6%X8EL9<3$j(E~ za_(THl*RC;M>$Q?8bW#U7~e)siiC~ zZk=eSIJAK%xo<`M$c&{X<5%K(xx4G3N>8vZw-&$Gj}>}JP8S-BP_S&@bu}Y@Yzr$V z4dE=N|7t!=2L{LhAeXg4ApYJ5_89kVf zhU9V(>JE}7F_RN}1fTArb0(@!wWx66hMte1R;B1)xZA>>A8?vAw;Dg@zk^sat$+T9 z!*@mMwtc1LDJ2nzAHJDQc(Qyh%*J%L<__zo;mX2xb54b@$qd5tT2}nc>ILHi_{)vE z+ZJYyrw!pWwSTd$a<3O<_L6GNqC>2nnVp8ly~Hs3tS6XnDb*ZtqyEO_rP`Rn*IS9U zC*moA#0byV^%Sw56I4jF0OaX`nCZd`W60xY zw;I9{MHIJ7Kl&~}=hBLRcS0aVr^1CWpvX0CW~@3=N*sSb^h@<}VC?`H$cYK@#3G=@7vdMGih5h-jl@8#7mF7$@xJCUcF77qgL~}}|Eu9Vdq^{)RbN;| zoYRL1HLLHm@KMPG&Bxs#ZSsf&7{rGO9*Y#IkFg`CL0&WN5R2^1tkzHJOLVCAZ*Q|Lt?RJi zv2PXp+n4G(;_lDHGIiBR+Fy`He>&{$P5H2T;cE-@%p6l}TU%m~T)0-@6 z^aw{3VKbV9=pBu|BFb_&`Ch>X#OYoG-aL3sTPpb-Zy!f~;WGx?0(@j#+|*>DmEFE= z$LFboY#O9h%8MG+vNC$hYEPFjR;JugV?4}nc_~CF7r*cPecstWWV)o!*%oGp-5Db1 zPY35EI&d$?FEx89mG^jUBe>S~1QOka-{}~HMrC-g%W23a_84tZ>!TbLx9tnu z1k#2=c;*BQh!giguE#xeL-0aG;q8k?AzmP2PV9@e$VcC4>*`?$_AZZ^!BKlFM;;;!3!?D9U;9aHWobcy z*y(fogNjf-!7Zjea&{STIs3MDRE_5|gr~wAtohrDu&x#(5dyi2RbR_}T$K*ULb)7N zSkBZW*NYR2$mOt)4h}GIFHU$$ZBHh;?7p^xjNUnFsz6z!AYsgkjd1NQF0WJ1bI$P( zj-Q1l_8-pp7vJw54}y>B$4=W~q`;3AGP+ec{W8~-+^05xctJc#mBsQ#JHq%dJy!m4ibOg=`mFc)m6a_MX_!et)YP{|Sb;t`Sm*vCw z9cl`?7>ia%;b(Hr$VA;vWt*Kb%2MQVC_LJfJqe%CySUstWp_^fonB20F^jiajXa8W zI{9t2!hX84qTNJQd#&n1+km6`sFwT|)37Sv$se`+=(~b`q3+-|y->o|{w)pxE)L;Z zsqaw0OCn;A9N4S$O7BKDmcdq_b)YB0fPF?J0`o@j7Mi3mt$tOs^Y2E<{wp>Y`aKxF zc@pkdABt`U^Dl0p539Mn7p!pO9P3G@i}ls=MX_~dpTD~#ZM_yJ2Z}Gf5KOnP`_-xr zb*x@q0gB*VogG9vDc<%Uzo4k$reApP5^b53E05TQkn4`PRJRRHb1q?b;vi3Saz~Z7 z&%DHYc0Rh4TAvzBZPe!H^ApeHmkEQ&`Hf5IDVj~KR0gGgtGgwjQLCw8i5A{u{6)Hu z5M@R3LCce!OUH=yQTvlarhhb9a>tW8{As^cl{u|#W{@ZBP*H44P+DCXAM40F$CaO3 zo2frvM^I$p>zeKf@kBePxtu1BVk?|Xp}9}xERH06s4A%LM0efThnRtuj#nM8rBQon z8n%~z<-iD^yTqAQkxfl4a^O(vTuyqb2A0DnZ!wZ~8T9~JB*wZuCd6lhWJgevC2mD( zsT$dGl0>j77BCk>fO3oY&IHjroE$m)e7QYE;>o#lzF6F-YO?z7-munNq(_VWUFKf1 zy->?UBJE(;AOw1&vf~o_@uYJ;vYZwsqS3qtt+rCzZsqb7CgCdG87m6xG5f% z!|qTL88s-qcgf1i=mMA5J3^TC$r(9`dIsczoP7x>t}rBplnp5pQpDzknJo?$^fsop z1uarB08~e(i&@!c(1w_rKP}8DZjZ?RT-!f@MZjx36aMQs2b2pBz~aH>L2(I` zWsYm}HXj)6yWW3(9AC)Hh;*wz`v}>1eV8>i^EF~SmkU22w)QBvfd3fW_Xa-IcqD_g zNszQ38azo|HPSONB6|Fr6BRdm5{wk^r6>nfyq0V zTrQEv*s6NT;49JXIpJD`p^&t_%2QwFy-qb>a^6`fb@O{8@@CQYQ~uYL5TEi)l&S`S zmt1$F{JhI&Yvhe$%r(}0?dZk4>b6Cfx9gpt3=~Pz*4#Om7>Yx|tap>FPgI*F=saJj zE-xVy2GI=}vvztq%*YAqxKG$KEq+)vMIY#BAi|zC77;x!ZlpLn3%cOj$Cjr^3-)3b4*jgNdJAI2b6rP6~WG`lSM|$-?L7z62bBl?l!vzxzj$({kAa zvN3=9>Dl?uTU=+L8+Z+RGViiCt`Wbc>DH(*@@01Ny>B#vyn(}TPoQbNb7oVThA96X zFc(7B$?@PD3i0|aJ`3@kDBvmn5KMZcW}9$2CXn=;R2`0h|lwGP~&#^*L9V-3i40kZu75#?i4(W)^Fi%>yrf-@5TE0C;Ri6`s4B_dVd4qG@R|a z=iJ&_o_zheR(%_V2YY4=^Dzwil&r!=p!tiJdzUucI24H?C_*mOHJAKIVZsm_Ib)4( z?#BVm_iWT~%C6zD8I4gP)m zLS^X*mG|EG+V6~+k(+`p*rRr^UN(o|>dp?)+kplsgDs<&@TNKS7SP=e2s90?trD;s z-*dUUdY^;R=XP?`ILp5;bTY-LBPUyQCY~0LYv`)TZ#Ogbqb@{-akQsRSDsdJmYFcM z-z6%9qej6X!ph_QGB~}dYgM#{>{Ze4n`G8kJLh#csW!d7Db@0)aV8O`Su{x&>*|Uu zXtj1^(msn+nE;zqhmq>bUrb?#=DZ>%heI!`xT5Amf6PtCNX;C((s|ik5HNQ8lpst3 zKZPig;knsm>f$T6+Z_fn6)?6!6x5q*vc1=e;`Q8Nx71-CY~s=Dj<`oKygQ{t7dgmG z>4H*kEWSFf*~5Vjba1X1aF7&Tt*f00K582ps`r0o3Ov9x<)#~Zd&iI$_~>$SkERbj zv@KuYdkxr~cahJ@;zCCbGLe1t;*%)FjHg@>VVlvip!q;cDapldw=hBOTCJ(zOg+3K z*una%;51pEKh8~Q3=zISDztNOh?&OO*$7xop2gZda@z8-`?ZgPeZjd-UGfHBv~Kn{L^hTG_=$lPDjoD6(gC$-Ryh-B6_h@q1xNrkm6)`-_O=C@szll-Y#ZrnIOxk zysCl-yafPoS5{+f_Pp;cj?o6E_@nCzI=LPPuQKyGqZIr2n7Wps7^2`{W zNse7+=LL>yz~`u zMn-V^d~2QwLHjTG^Y+FjG6Mb(6ti6#+r{o4sTBca38@2#dF3$7qJy>Kv3Oghh>D)P zdGd*<;oFmxuM{uttjUSJ(=F258+A@=9k-a6+_4ckZ+l-(%ia zHDf$qPv57D14BbRkHOw~|H+>9t&NV?EVC{4<6m6uKWHm#97vAGIZoptiJi^EGPIUqBWv^ncW4f`s@QwO4fS;MzK5 zWg_Q??#;ONK|wD(un^+g+5KRJEnxQLbf}USYV`aWRlnZ)ae^iy0Hnfx8t< z+n@~!BdNj}e9{*BqJfbR2pXLg_A%$zI+8d;^(B}aS)b_hnS|vGu7z>hQ6oHW1TR|; z*v~iyhy_whk5GT0^&P2gB6+S&shAn4qfwU=!Rg=R2fmUIP zGc^Q6807o|VjV=NA?)kj>m}Ip{#q6V0Zyzm*nPxGAIzCK3^q!EAT3{Mic>s{z5ivE zO&-(gIbsQRQ1qGWgp!XN!>O&axR!}&LEM^U0S=*!%(Pm~3l5$eK@~i5Wb0Bl4$tBS^DCPB z9_a%E!}J|6)y~YF=z;H(1AuqASCnI+Ke}de$*i+i-&w1_S?kf_j_WBvX=@}3iXJ2} zF(w8~w#(z< z{2tC5s37-q3M(H2k)p@Z(4v+Zo4t#boegEssHK*c9aA9sv^!y+$BFd&2qSrU!jCPZ z52FVIZYMK^Gcs>>F zF$Y&=`Z(TTV{Fn|iP_HFcS1u*{W)*?Bxp(wXw%1wNiN(R z*e{0Ug2&~Ufy9k{Bd11B^ibQEZsBN7XMLCBqXL04DBuKk%A|j}9{$2_E^6L3E@KWlv}3FajcS z1WF4hjeD|{^veSG+Dwx8(8--9_KRhtlPLR8_OFfAyq(p0Y1L-ZYGKu;lK4?mnvz8Y zO9Bjc3Q0fB*dT+otbflPi#2TjJRw(I>Y4;OBk2`{jjg-lv1WC*syxd@eZH$KSgC8h zrGLyRN825T(v&ZfD>!`CIdxy(n_Im5Z24vcdzBk_|9y)b&*#hSnbqbo7*3z#StL{b zYy*g39kckG+&0sT?-Uf(2&?fex-HgZOi-nvps1=uU9nQI22c|d1};U-r>p-6luoXU zY2nWPvN?3;&dlsatMfqml-}~6Aq(d|ukp~D$(5Wn@TfmC)vy^TOh?^a2UJ(>krG*> z_Fp!$7B}jH%+Ku>tJ#~XZ3nJLjWw_Vervp*$6XOpFvu@~qjtLuclq>N@_$Ee0bA-x zPth+c`7`Yr|IWbei-oP^qxd}8AWcs5x#8A$rDIY8mqPKG;kNp`Fy#rXN1@1jPMnYp#4*MgU=c}fUdL{lp)#7$p60IBE4)4yl}wbR{LP!~~) zb74@pDlZSgyB|<`wm+yAciJ+_xwAjXrqpp{e64*P@ffDVU}RbXI*C|u3Q84%3h!q5 zY4SX1ElBjc;Ya-E4+kaMf(u zeuQtX!y(jbsbe+GmV#j`w?MUpsny`B1KJg2#(C#HSeGi@r0oi8APt_IG$(B{0mU@&4sU z(WE-lodPdQNj=+wbZB5fs{Q3J7^!qY{@{b}qrB{u?CB?~1>;E3qllSyV-&_{`HL$m z{Lq??U9XXJPtv6eubpDoNw&@rYCV!{SrI|#T*o9&P2-?_A17lC8m0_$~ATSByLBv zX))Cn#Pu!V!k_7vya6&I+&pJ1X@`g+tRqZpIeA*)Wi;uby%F99>*4_gKD?wwZtC8b zjzq6-0$h~lo4~fiKlTa&qXKh}REjLTs#*Da?HS(M%F{yfVy!i_Z((x>^LnECAR-MX zQI~j9@vsk9^(NvkI`(>g8xB-&@kI(e!orGj;+&nshTY2_)V2l-v=8BjY#@FV6it^d zUamMnyr)t(MIpPe@4mWz#(atId|u!y5gF<;v*Ee&yI(6SzwRgvcfLTo7((rMcG0NV zT9uQI6+ZWR1w-+Kb`Et4+xOP9+WW6My_tXnOT9h*;xL_f+dMU{S-GRmFCFA^royY+ z7a{W;s#5z_SO;%YqIvM9M4bg07MJ1&M@PJ@vd|YovYKSUdiT@R)KGu3doZjbjPEkW zozii7gNh?Ch4h^Qp~c`Q8)1Kc4UHEP#)BMfx@&WX$2fzV&n%?>{>QSq)ANQ>zKH~* zARDz|dBn|YKl2jVkJ3-L(|*7Q9yW#3kguF{#Hw^i#Tvv=gbK^%Z7^dw*ywowNAiNFUC%)z z(kABqlEm$i$SmZ;&(EU~8dj0qUx*BbrU5)(s*pBiF;sjx^gVei*aZc;ral<`oBT=- zgU1W3G?8FxI${jN3qmu!Z3^~dP*psfVF%Oy?sr^d!6o3i|0~4yF0(u)_izrlTh|s8ZB1<0i_KX&--47ws<7lPj~K~0nrt?DY+MQ0KkD}l z*yeIi^?OrwuZbB)H{)p@`Zy`}4C9mAx+S5FPZiC%%O_s39{34fd*I1!_7Mc2CeuYI zBbhjAoqGeJ-kiwUiF1*7kILzw)Fml+dnSmbXnYnTjqQ|h>OtV9(=q*?jR?x8uXPdn z&YlMDrnz-fiQW~wyn-Bied7Uq=7-fVulou@iq@xJaykfccttV@yns>CkK10YPUeA& z9<|py&~GdYx)Gb>3A;tiY_{t)NCKiG%{;H$>-tnSma??k^gSSb$)_vr9_PH6%5rdS z0tR;qP8*t;LkTiwLnHb7Vg-M$F8k@x#>Qod^sQ-9ZxR{~*cokpwAz?b49a*y_-(#E zKusbpqww`Nm<1i`K{X%HzdTcv?B?t1fnHRCV4ypN-TMw1OpBV2-o5JAK1X_pag^j8 zGr~SX8&3i>L7ReVEfBjHHu%Hb?pciot(Gy5CsGHSiCfM|cGKk3+KoRJ>l57&g07?Y z3<#qPf3lQaxdX5#>)|z3y3R2N=~C@wBw8SEH9SU0O~gVbg_F?MBZ9@FZGX>br_g=x zoDl4|!$rb6*|mX-#toW)bcJ!fZ-C0`u-c3+Pb`xh$6@ZV`={d+jZp^Y5DR+O;h?7h zt?fWleI7A@~>Bhbem&r})l(vv}|u10k1P zm@veC@BoT%Nayg3PJp0V;LZ@pi_F({5$!hQ>A8#GXlcK(Ms3%T^K_|;VL(P>yJ!oD z`bDS?eM&gl4wtrz!@YD5b{)0yG6Y>V9oSKgB4u6S%zMbaBxGhm8n#7MC!CxkSb5qI zx{+fGuPUbwD8C>(llJX8eFbpD))p$$?NXg|RY$y8<? z(kt2#bWV!1V-@b*0GR;L=L4)jFazqQ1={`Gw`WUfmf3z)-O!R^0qU%qWxz#RXu z^G`A@do?)Dgzykrx-Q4e5fuRD$Hq+xCpeM=G8&C&K7273Zqa zSV*FMe|=K((M@C3d-CZpP%||;$abh?jW-8JBUApfdty%@kk<>krW+E#JL-<=7@;7! z&y8QBt8NE&5~!RW1o@Z8!g@#+Z3NdZ`J&(3$n0sP>mpVu(hh=DLLrh~)x?x*A#E2K zj2Wv0&)AzJI`JrM!gV;y5M8mdx~JGwrNY>DzW-GU;x|MHiE2S(x#xSF+sny<$@taP zIP4SsN+-Cij&)b0bXze}%nC>m8lu%^95OeK90mDx_D))&K`=*F(e&h3xzjGZoWt?kc3-#w4*GC}2>m$vqk7$3?|m*{_a-`e_A+U=w@8(` z!3O4V*>-QdJr}TBTR{XjK)dE5HW!fLO?dBe0lU>ZrzSVIX6Xy;i3{vhy=&K8K=hBl znaoQ>vs(|jfV3YHc6N{5@emHVNbQB?K&-X|03U5fv!NZh&0%u^iJe1o0bQ85(=N77 z_qbEa(rx?0rQMAm!C%Llif69Q|J#r4 z8$?s*{6EDW)f8umSLgqUJC()#R_swtVXd;S>(E;~DcdFgPXR+UT~j^7ZXc#a>hsO+rA{K*GpyLIs%;hhqtFHJ6Bh(F?3-LC~m!bS8eWs8xmxV z5{nny0H@#;3B00h_Ok1LB+?mO^Ztx`j_cF5nY^^~zR<6WSY4s9qMk>%k5lKq9MqY%5n4 zLr1IaYZK03jAf@CFNyVIj{%eUg?mB3?;mam-L`r{Bs}-~M{CCFO##2oSbVUVx)%ut zOj}&tY$4tI$L}C8Hg^AnYuUfUb5T*0^X^nC+V`%!GDUgByN%5^b3mA&4y{Zhk&Q<5A1@FzZ6T5-bkH)*Fcu5uI zstmc#O;AB3&9cY(AE@*&V|$V_-flT^oh;BDgcVw5s9Nc2_E3HC%w}@rm|c{qdKaYt zR^7Hyvh%xkpKGFiVYX2??vdaz-gt8?S0{=ri7abT#42cv0bjw7Lh?I~GnK=!>ypPq zk%&LlL7Xl2F`6211nycG@J8M&5;Ep5IbpWbhJXi;*Q_fW=`=NB%nZI%XYSg`QhBJ) zgp>pDXT_F34#a{;VERBTp8=omI|v`0S+KAP2<6{`>F2#?FBx+}6n=gA7OJn=h?3DG zLq|myG|gV2Z>Te1VDO~zK{N6^Hm`j?J?!9tnvSAb2fkkcU&7k7^re|+fnNCz(C4D~ z5WLou`QbdbrA5oGg$&R!&)3v@zVAu7EzTK+b>o{MOC36l>x06&`v4o0<*^`L4#6F_QuRvG;^?h!sK2*M~L9;#z$d+k$cE@mRR1tc(QZi%;-pLt4R zi-C+gI=yJ(k?RKbw!zL$B^l#+RCwM;dA^a>wjw`=;5kjRio@;pZ*mF^aPhPn6gg&& zPZ=8rLNIcJ@ZPd__kQ4^O#Mibx?ttX#F&_=nHh0WIaQbUesp2RgxO0TAOHL|5XHyO znmu*ShM4gaqi0On_~DT?;mgc*EjP|7J9tnP8$iyM$a%C#gXv-?F!Z4U%H(ndl!2M; zdDK~DbXj|Q8K~9Jx*I)b)%nhkuIJJC*fX`hZ`S<8qQbb4Ss%y+RIT!vp}PPlxblG2O&*F@Um#t@iShIXfIFI(KMwwh^FkG z83}hxJ^baO`t*q_7KS;6tk@Oz;cCeA_A8Q-_bz@Jjk{b>RNh z{!w6OTKvqEjJO#KNGyVc-cBE7G7&_*z}9PtS>hjrq4gG|Mij*6j|$9*Tbk@X^789rYbXr;b^A(BzX(Om}95 zOqmcea-5~3{pP$?)rKcOGd_%C5sCZcK^yYxdN>gdF&y-C+Y@gwqyx)93kwJ4*|8-`6XDsqSOcjbe zm>eptP%TTqMrx@-z0C(_QW;h=1z&%<|Ae`$Z}Q~$WfmZ82)san;a2dOSwYekXW8Jo zs#7;DL4Lf***w1f#^KH5W0x<9H+L4r7f4Fh?7V%F!=7(_kLG|m*%7Gl){$yp)C2b1 zEB=I%R$#ydh7GXz+4JYm6%c~Vcq$5x1*eop;?v?~viLM69*Vw%`r?hVd$lnn?Ntzx zLM$j|<{F&rP9Tyjh9nu&l1-k+c5L4D-T|YPL6b#5_qN%9g!kXK@pPiM=`6^%51Huf zIDOU3l*KcAg6!gA2L;ACIf17OvqRSHDP2<%Ha0wGp?^@=_+UfB(PP(?n!4H86h%*% zI(LvTC=SLiaBv!8#yMz`YT5FBZ`fUkO|NqF!9QK9db3DKCrP51RgqkLbb8t zrj<44bwP=7pPjn8t{!ggx>gZ4Z zf_mA|0KclLf;Gfm$p=>G8Kchk?I5Z;+G!&y2N$cVVrVO&vytv#@7n>UJUUxBg!)n0 z3S4C%qzr_}o^&aPBZYvMT^TAggmR?&$l!@GctX}rbRk+b=$Z6tHQpY!vIy2DZeIrU zr9dBtA^l060ME)GME}FSWn~<#XE(BOMg7>wB7rGA6Y7E&7=a1Ds6Xo!Re)ax_#I;W zB!y#|=|t6YEOq#FM~)u=FQ6`Y@XspvvJAegQoty7t42Q?V*!D7jBJQODZQPl zVKC`6QDKawji;Y@&1~o8FrJ@w_>@i+^M`FB z2V}}In6oBkc4ln&4Tvb*ySH#!nJD)l{^d}P_qJ*Clal6-oH`X8OG-jNMkc|XFDqwH zI$HU1r#w7PQnoE})#S3W$*Uq+>vyunsp9G$f;EOmVcrxSB!goSCy>92O<@%vL z13r(kB#5_v;R zQ7;ws$wM zc_&3u^8KPkx36961$Bv9f3Z4`s--ft?;~v1FSNd+3p#zr_t*N4cTV#ivZ$yE z#_wTF(8Zb1jF{GKt*zUry%Kx`D^bp&_G*N zxfR#EN>18TtYX_Rc>Rc4i`I74y_Db%QkNFo*jER;eUIbk!DDDE1-DfN07pvMflOw9 zz-EAutPjdgE8hc^q3)3~-SR|8;VPUgqIyCrM@6e{HcONcbed?gjLFrU?=Ufs} zn8_tkJ)+4AN#)!GZS)+HXFwa{JcH05ekeO};wBgiM#DyUs&g5fV_;0Do;yT0qLYr>aRn-l>gkZQD+sgbsJ_YFGQ_XGseJ@(yZGoY>aZ2JKOMZEZa~3pf(g zB@yGh*WBxhK4b26rSSLEUh@4L?jKf_Ro_1hIIF>FTEO+`)jg|RA9By?rKtAys4L{2 zRf-cynNXXF?_Mi!i(+tsJz13CdwCcnm@<(Pj9~r9m64GviCqKqsahK2T56s&{&Dy2 zA9n%$T|Y^sKany=KrXdeg|A!o5FB~%fQ|RbApXxzc)e&c8d6uPp>t*JSI1L`ORC7Q zuC(eT_6{@HsC(%_NWZ(|%)bAE3vQ+j3qFKmalvDx{KU{{v&V*Q%S(%i7&qb6p7LXQ zRrs?xW5dhx7Q{r9p4?Mj2Uf(5i!d7IHf&}{6hQ;qSxdzLz0>_d_ePD?Tm8n<5UznMTCX z#PfwUqcz{ivnRCg$n`I(egS?PlvS1gnx{48)hl1X4NnhjDV)1pKY!5l;E0Ie>4Wn1 zm(MK(65#o23%u}4B~`( zWY2HRwUMuTrs^6@ObPTZkYvTCrKJsXc?&@SRNvUi-qB_aayd9y=4dxYl~-fJl@p)i z+wy9>6zjMp@_atOETKeKR~Zd{`bdI=+7woRWaV!d-ITnJq@}?qa0J&YqI4;Ju84_q zGkyz>xyXwJ=Rv*vW!kK|c}@d8-JOTi+5Eg&X-k&yJUreT8a36`(I=eJoie7xyf5F- z%u(dxGAnlOY`AOW#Cz_>{J!sv5;~3{{c%O@Mxu7#!|@~CaiN)`jlktwx92S{ugDLI zh*&i#g3{fwqHt%$io%Ncc@b0Q#z#iX>vXSXFlRF6jq3bJeT}A>`W{VdTgtG@HJbJ$ zs)}Ncpv*nII^E5}yFFp#%$4dpG_$S&`=hE$G~r`7`8VxLG@ZuJ%M4t&(L!g%Ub27gJrcak% zT|1#k4td)5zF^EiebnE9nma0W$Q_IZ1UJ^492QeCwIJwv8R$1fGVDwEUmr%i%ap%J_?XPegmcjNm2vKAm?3Ui>KKBzRAH01S$g?1CNTzZNY1v3%y9ys^~S1CpX|%9319 zf{-tzz@RBpEY7blS5`?owtJ@>PGk1!PqBzHxk%<(Hzg?=%RUvkO&RIPJMuD0CXg;9FEBJ7WRS;&pXIV`VgSYJXbdUgn&D_T*HJaaR1G!tETov%8y{Q1?o zh1Op0TMp{qm!^Umg7i(S9egKw!Lwiy+yWL!wr%GXwKl9$4AAZC=r4-)ao5+uDVcs_ z!=3E=D^GFTVBhkrg@x+-LCVm0cyTy^fN&i!!BP19njL>KAUf<=iAx+GWyV#+`_3)g zu%U3SuTQ*WdqgGR2TO)sPLD2)!=IO+&qZ_A?4D5r?fsol6b~0 z8ddAa_uewQ@{5~0k5ATx&P9m{5=lb5g!&Wqof)#f`tYlwIW<2?;B(j@PG5?q0&iyp z=zlFod08bJ=jn#}GeDDJh_7)Xm}4Sy0{IX>rR?ivIp2@Y zPpLn0{rZvml>E`(=ll!LQzqG8lt;~u%94Bwr8gy6QL{lnr`S;|)%>NH&{4!4wsv*k z=w|S2%4S89?A02i`8lhejL#{&cI5iGqg#)Ix^4MO8W;O-Rqp;1jEI}QWbK`!wYRoz z)MfJlkhCT6m4)<`Qc(zc@~$wXX8o9{jbD#hv%xEW~w%UMIf`OUJuraVXZFLQQ1s+y}C(T;p3f-duqQQj&C-> zo=NQpWh)?bZ~;z0J4~^;@mgxkxbcJC6fT1jvmS!}NFMvoU$T_zxNp<^jb_|ItCqGl z<;3AIc33laO4xL!|3R!@%SkmS*?2|fY?o#75FTS}1?36lDT}wdgwM;!m>2Gnb2@uf z%Ln<>j-_r0&Dp#;C-lX+tq&yP;iIQbcMh;NH8dR>uwZ=rma!8xZOxt|cz?P0Bvbi8okq!fdnIIpww!w;0y z*O!bda?H?La|)D)UQb&JcbfX^Q) zRiJK%%66S*?>X$d;3OFM7lY-t=OlHHTyv?Utc@bcEav~c~kCBtWgs#0qcpL5(e&87F$-6%UO47KmZ^G!}>XP|>Lnn{- z2pDK=R-4;a`dFYVX{k`01Jo-%h2pXfdW z1I;Z@8m`F6SiDsMy)y5N6%Vh1SM=Wx&YZ{q%rU4?pC6#84h!f!WkUX_5iIYyKD=jG ze+ayK@DO8+J2tbCbw(ng10AEPK9WlZ=x(fBzaUGh2rZP&`s~sA1xr817{4V)ijuu87xMpe|I!dT6O-ag6u@|(pq!d zJiBmk@Z_?O-+iPh%$tC4$_ZNM(xbzceb@Lz8OYmFvP+y>@e2N&nG1hm5k?h>(FOad z5&zpXfa3Ip7?HEz5Q4~w;W{HGN?+dz-S=tnf|GaevLK^_*9A>3r>3r7D$&A8vPAZm zGc)6@8AK$n?vP2GE+9$#%%v6ZANVvU;8Nj_@E>4wYwcA(|FcU8WKwn6?pFqCkR+@f z%!zimG-p1re5wIULQ2Ang-9a0g1N^5+u}|HGt`#FA?RX|_Yl2#*6jlP>R`_%diaZt z_(mNzgj4Sf7<09|t)7&uZztFQOvZyDuagB0l93TT+L%u@KW)#H|7I(yNZ*v`aWVqEo9U;ul5Yc%Wgq;>;#U8+_87p+ zH?-GELcZSG9+z#elx@%coh<@20OXtOno1J3)^oGe2qti?b3g6g*{T|J^9_xbf7Wy!Tk!Sl!ykqm!Q2 zU?CeZcZs~wa>e1KZ?;}poadfw*v`1Gy=n`Gn7*woGT+|XmIiCtNOc#-n{9G-roFjE z24}g)1~awhnYwRQZ|5VPVQ+3s3s3sZUBokti*0c_n6<^<)4tOiXxZh!wW(3-BJfUT zI=dERqdEwB|GTVb)k^SgBO2(d7J_%1)7)7qC_F7(RTA0S*;-}*U{w}#3LDGZ*>0vA z*?8l()WZP2s_S86mwT*7gTva7MM~{llNx}Pt&Or|V~IQ0#??{B5o_o&=~|l_FqW+> zQY-ekC+d(8P|O|y)h8sejPKed;C1Y6I|XM3-SzF;1>QN9H%!~5q;02Ow62DldT!3pry`}UQv`@sS}CgF z0-^}go|)K_*oy6m>`9{t_y>?U?13wnJ@vHz0@5D#58%e1fDniM16KQH`U0f|0TN^s z`!jF8^XARGHwN&V_YxjXeq+32_ORd?<_6}y=gdCVy}y~8Sn~d54zSah>F2Q2_=kBO zzxtP%7clSdF)!kxKV)9Qx_`{PO#Ght0v8BCbhFc&;yzJ!I~Pm0iM zE>iEUi`KG-Rj4>j*+yA>yhCv>x2B{Gn z@fEQhwWCmU@?1DuEh<&3>PRJ_xGjf9WVMhYQFS&bMQ=8QY09E&K5-?ok{S8Labrn&<(AH=tm1lGv^qjB`n_O+iPl z?b0?6NY^ErIof1L_SkX~hfx&m?jJnp?pn{AB>6r9>?0ax2l-<1!J_ zh@X1Sv&wWehEGfQeD$9FT>KB2>0{0S004N}ZBbb*zCku@=_GI#?I$VSQ|Xsn`%3VH!5ZCfF34VRLMOEwL50#x~d%+hKd` zfE}?DcE)te+jE2k+t@)bL-NhY#^SK0rTyz`t-B1|TtrIz0He z76FFPK!^wlVhm#h-(wVGXyOPQg(LAOuEQ}n8pq-|{D^IT_&Ywq=lBag!xgw658z=uf*0^09>R+_9?#|iI0>|%*!cC&}QoXja)l#6k3 zF2Nv4Tf zn{jh)!7aHJx8^q7mfLZA?!Xy1$2xrmY;cGnBgRZP%n^>V$uSCA^fE@p4|l zD|r>K<~6*Q*YSGZz#DlJZ{{t$mACPB-oZP07w_ghyqEX!em=kl`4AuGBYc#P@o_%E zC;1eg<}-Yj&+&OKgDT3*UuOPtqQA`fw~JW!tmvnS6@v^Q$N++g zRRmcTL4NBX9l2tXVI&zwGBJrHAK6U3I^+Hz)Xgk6bM`hzpG}9EOO>*oNX7Ilng~6G z%53IOb7{72*E6T=cG{F+=S(@63Da#(!ch3GKHg#_Q2jRHuJDbQzF!)qX`)L}EJDwo zQnBg<>cF&9!%NHo)}?QRQa$lv+3+l;9G0d{onk0)^cZ&N%c^)+EfkId)P-t@G`y_s zsdI13Db-7U5T|mt7u2Ndcxp*&PUK3N9!ihXXoSIN7AF0w^kuA5>h_a*pStL>rnB!- zcfM6^j}leulhzYZ>~A*ug?%IZO6yQXJ(Vg>t!9(Al6rGYC5~#RC#ohTqlB%N_wX9 zTbSVDiFy#{UCcsOk%2W)W|q=jwCw0vk1*#gVv8P;X4pAn00Ce<=&Ad?0&sh&w;CPkSvluGT6Wi3ru zR&gD0Hmvp9TiL!}#%=szH;DNkfc3Ta)Hc?<`zALxpIb@fz(o#ROavEy0Pm2tXQgPo zrc#o_N^)4qM6BeGi8gb-%?ZB015ldDtfWOrmh>hga7)bpO9;CqD{;004N} ztyXzZR#hB5=K~Q$B~icyNO1)b5Eac5Q2~`r#T6HlAY4F1J`hAJb4yWi$<*8h6g4$h zToM&D?XPB z$w1P~yrLOMomr5ThjI29nfXY!+atOo%U+ak$8^nPGqYJg7lZBw8yIvm*wFbr3mwmP z)w}y55SqH<-}yRU<#1->55C43%;Osz120ZRGujb=Ku+LzPNX{kzB;ZT*|r3;1bT~BrfCvF5^6Q zU`KXhXLeyQL)eww7{+i$usb8!gFV@cQS8k=e1U!WBFFJ1_G2{rGll~=Q2CF}OHZ!*zUz>$!m&QOwPJmz#KiZ;R7#t+}^WI{-oOLPv!UIwM%@c10*!>3TTY zpu55!Jrn`xjTkW>r|5#gieL;?gdh<~x@Q7o}VBU^V)RYXg5 zdFYRP%t9;*Q6%*gqXa`R4-1ii#n_BgR4S%nFODnw14S`vRVyX9h|9|R1Ycr4uHY*y z$2EM7a(t^;jqem|@B@CtTHIEw$6YqW271r~JLySJRM3lFsH8WWqe|@iU^o5fhiYk{ z4fZgUp?Ht6jKzMCm-NnsD8&MlX~vD%hAQmCA=Kau>hTdi#;5oKSMiOWc^x+?kxN_N zQdFQ65+XfBS&WK}6zOTaILa1x1uT)G7qN`1#mN>{a1Rgi7*A7fz&PB63*+%C?x`J& z8!84D4#96!4T@EpFo7<@M7j!-*g%*}H(`pt)~2^F6M7&==*i_mFRl=JbEU93%Y{B% zCG^v}+VtgXg{`?-*oJFVy*XO3E#~g6!Y15i=GboL*kR__DeV;Ne(Sypb6=&}+Zeb|*Df2q3^}izz2|MwyurrSeyYQGWm`8*mJZ|!9gxz>T7{-&raGn-M@RYD0 zYlYD~E9`GpD~9KU16U^<#CkpJ7WWEobHBke@{-?9QI5G3E zkA?n=lcoL5$p#s>x}{osTBmx{3fRPutC)dYA_i^6M!I^IcSIZSh%??1Z@eSXct^7F zj$!hId2*h0ic~RGD+fBKC=w%em@Q5&DDRTIqr`Yesqv1*#ygf8?=!b1-P_H~$NVzTz-O9HuM!Jt2FW#ojT+ESyyo$m`F; zu4<}R-bH+<+{=n$!(NGDZ=qptiD7T4VQ-mXugtJlZcZ=P%&Epv`&8XqryHBb8{-$X z!|<~(Nu$&bX61jcKIInv=3L~hksLkq{?E$jAg72$s#x_?zf`j~Mqgx^6HyCuBD!LB z)aDB7-&OO^U3uQl)*7+0z4bmpm}9Q^nf9vMQq%V_?Nznb+cw2qXVzS2mi1MZr}^r7 zK6+^5AiUMYPUJUL@Nrf|C}aNw|2pz1 z004N})m(dURMi>(z6D800xa5SUMr|93bH&VMtsJ;CS%)a+L=yw_@|lvw_`hHLpCeB&Zw?ve79G>@*KTX{M!h+HWqPLuM1b4m=DzLR(RDCu;7b1j-#V zo9P|YIgYX?fJxwKT%SSxkIWAG)J)Nrxc42Mcm{YD*o`*d!}t5ZbHESH7Aivz zxfMxg<97mR={dCY38YgA2-9k+ryJ=eXvH1$ z2<@hi@#L(?m8puBP=h%@8z@K{ft!Ghz!^fd_yG@%#`l4tyPW z7!<8D$w|p_T+B?NY>QcKMgd#QD22^5 zo+eSRpA6`12v5^goCHe)-xRf=0+JzfFh@xPH1(oC#iC@i6x86MNFXGL60k%AJ?PC8 zDJ8X#r%h?dbvKovLsJ$u2apSS>ZX(obZw`9;C8C;RO;V}K-v*lKf(IRj03yiOUUdI zZHPk`d(9-Q&Pw%E4=qfnr&&E~SN%qfBp?b56o}5Wv^xOk^Gec{8T!QjXiE5Lk)y4O$4N`Z<_>uMm{X(?o@YSxBB}JlzqVWz zfNs&dCGbL9%npn}*-ulTvRzw6kC_4pO)n3)xoc{rTL0)xJrQ^{mOewF0H5&p7puC zC7vY2x(oqF&SGDNrZS2aYwW8DNjxRio!0r3?FEI(H29d(wi^N;d-K$|P@#FL{E#Ip ziyMl*tmhi!Y8N=z>wYqv5xS~Qnn*=K0#RG^44Uy$27ejSoR5K9T{e$w4MoXTr4jhX=m{?NAR;E! z&IG9(@KD(bj@h*Ji7)NbrCRWdT@ICyxUwaW)myym(c`&_1iSFrQ3xwSJN;VMMowXP zeHnX3@zO?7B%TDfY+e%VC1h6Py9T(;tO2(g;6vNZ)}iytQb46mMGV(9c-o_)DsZh= zkGCzT*M;wG=C+{^(6cC>u9>LJg)<>dWhg6FbRs4d+2NNH9$tlIgzWM6l?CP{JURNC zLM)NQ%vr^m<4s}L=Y>j}huv8R4<1r>4qFRn>0>CPqt3Y24r!`x(f+N^-$dNUtuXz4MTKp0fXG%Mc_gPm_F#w;#})>%{Vc2B8@*WpJ*c` zl!iy~(T1kj&{r|=I94*fRJ#)cLSq=-#!uo+E{X4QjRtX%cyn>qI)_JYj?_ozWoCt` z-kPzO$P?8&D@Tcv#?f}&kTaVMy4q6yu~}9F`kZlP#5K2~rgCRj#n}VWE0u)#chcG= z7|}w5#UF(v(n&ki35=b}K|6l&jCEm| zr6zL5aU;ihMbH6v9P8afk=QUHD-H26wOE|E!!sweR<%Vh)oxg?c#`<|`dzqn0JY2P ztZ1mc^swwI_lS=(#EWkqWt<9U$+)q&^Dn)NmUblGuj7oa3oP-VCs!`9M7iFBO1M4x z2(}Y0iOfkBD307XEauv+BzbyB3@5~cIt~j=sG92*`YGw ziXIe|;W1D-SQIKFj*U0E?y1#&Yc<%wePfKX_ae;>MN&p)+)(R5j+YFNGH)|VqMWWM z<6>A3!gx1eRv;d$Fk6Ps+w(zZ9YXC#w^~sIN_GsLmmLdhrnXsZJ&Nn7c=Cun^YGfg zc(9~eb+KzAA00Lhs9mmttjnmjW&ghPNsZ1eu;E?Mx(a9BY8QK?T%8>at@RJyh72~iopIC+;3UCO414x33>M>L~v?p0G|54H_k+O6+I zbi_H#H+lV@z2EM!lJjHJNBC{mTH?@s*4m=gsUF2*H>vg(|n$FB_&e-Tw=X;CIzf6peNIYntSh={)EqPDuU&L}w`R6ZIEBE26 zwbN*Wn(rBchV0H8Ip?AgeGbAtRUDDFBCa`;)n4xX<;1SveLhT`E^toLW%B;3 zJ|2o)t(R)d^1Tz(XNe5g^I(>B7!z45ki;~VkJDwy-2%KFcmv%CT$5+*08OPyG?^}u z>nT*G--et@6~IcWqG>dpW`OdUR85!C&2*Df`&znA`nH&s&xIZIqWkDBeBVv? z&^IyPzL%QmTe!ZQuAo^o7v(~9rPQgRIjE=7T&e@kLksh9wScaotLYkPP1Vc5Y_u?2 zgPrCIX24F@Xe>{uUZjmlgr3}}m-0{tx$KF@|8S*Zf{ zSS4WDrVUERt2Elyx&-=J4c~A_PTQITnfu?rR_7XB(L)%v%sKps4c0$%SWt$mX`t8* zRSwvcTU6UXz?mAV@wD3cg(~o6hVbJuUmC6eTnYW(q(4b(IH8Z%YC9S^&6EG2uu~nb zufq4uursBdcR~N|hW2fQ<=rE8aUIH7p2GTG=6H@ejmqj4!|qnV<`zh6UVFO5X~FAt z>Re#!-vZoUP%xWYBaoeLhj(8MSOr)Ki&JQOF0X&97jMiieOM&tl5WuzN*_EVNT2)$64U4%7JSu~vm*IC-pv9T6#|>zG6Z$Y8 z(z^?qa}PY`LU_!FVH@8DTu+Y!R??3FtLPc}8T!5p&_FNHufUC$Xg4fi4;@C$1f4*= zlhjS$r5?azbdEkn?a%2iw4MG2XrsSV3axwr_z4ZtSM)4>O(s3Z%w_abp2{<57gzIT z^disVIrK8m<@wafSMze(&ntN)C3rR8M926xzKu@udR|XS{sC{LQ@ov@p|kufKT99; zPX0N4!q4;b)XTr%U(#p%BELw#;V$l?-|`#$2K|oT;-mC?KE-FLj{=iFQ~y8`I2ia3 zEYPq|;Hzj$&d;U%W9Cs)P`_a+dnst6N8Zhjt6i3{jBxTkx*ZvnkKx}Kg05JvIP+U| zDl-U-$ZRP@5ybWbWBtDfIsa})r$H;`Rwudr_7;5J1B_veDTfxu^!!VmIEv_#;54?= zLK0)AY@H$w`##=59QFkI%tJ z1mLS@0Ln$X>coGP!!NAG_|O2D1Mjd2V}gn?swK*(mEDwD#8l1rybo|G;)44z-aG)9 zi`e2pw6Pg*Ibwx}Fs`%!X2L5xjIpPa4xr70@D;Um6i`dY;4y09F;3z$NoUZ)S-?zq zkZyc_0H~#p0GGm#e2Nx6r$2zsKLX~_p8z%VXTUt_2h@m%DHq>TMgO9IgXaGND(Oo= z6@1NC@P%IkD&S|Pf{&F9AIUS|b1LC;s=?D)JPY{{hwxd$HB`lO;Dsi^3(W=Z>bMSE zHrN1{=ff{egI_|_!%KN7$}7KADSl~+_@yc0m!|WR{3K-X6hB2X_-THcg51V!$Ug&r z6@*`U3AL0g%lK7(75P29muf|dvqg#_NHI=x`3N7u{iE<&l_JqHejC24RwOzb68#X| zW17h?K}%jii=EJl{b=VP>K}vjyHTcx-{*7x1NiRvDgXcg00961007mbCkOxl007AP N5$yl~007_I7RGRSsDuCj literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-Normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..92b8df548eeb0e1a97c38355588c36d57474c22f GIT binary patch literal 23564 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..dbce56b39df52a7f937a44d91b2bd3bbd3d49f75 GIT binary patch literal 35604 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7f9d622140b43a34c294a44951ba26c7d5bb3c8e GIT binary patch literal 26584 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

TU-F+eQ_sKo%a7@!sd)M9{I zJVh;@q83k4i>II=FSQp%%>}5rQ_zl=TJutCUTQ6hTH8#mZ8kM_J>}hkp7t|o(MPDQ z0JRmMwgS{vfZ7UBTLEe-Ky3x6tpK&fxIDDS$PwD!P-6HrHnjfWUU)g@%$R5dH5p;J z_GHfQB=uy{>?F-ju9~a{@RmM7zmx2pVebqQw+r&(QgZks&V39%0iS{?;4?54{9Tz$ ztH5GVgtegPe=3)+Kn5d=|NoY|maMj4kI^P}OkRx_VJk*!wJ%a6Jj}-o*Npl&J9sx9 zr@;Bfc>}$s4sU3#v&Erhlg@(&qu)8;oMCh-k{XJ3;0(OUvi>5_vSUr+SoZV}{e`eH z@UpM9aSPtA|M4}30TJhYTvyc`iQo#ixk8`$vtK!`VwFwkCwzx|*I|A(Pg9;;T>SGg z@3%+Si78FTI<+o6_|x}ShMyC_@~>-?pOeKnzD4hXf5?$2>JgsK{tylDRgk4 z)a&$jHfO?5V#?qvo3j5dzAJP-^Sk(rK79UB^u03toI`jmX!_&ldJlB*v(CJI-&;1orbZ zojH^7%eC;T&}A(oTkorOPQkqw603mdXJCdGgcmdOO$w zPSDQ6KSSp{Gp&U7Y<@b{>Hqo{x+0qN)PnvwMfy!~Tt62S8LF>~sj(!L$B-^`eK41c zLn!yKp*mMECGWU`bJRRl9yN7}UX(8VXAm$~YwsI<XewxxQ z`e`nFiC>uWz_&Ed`?H^+uhJ4wbD`g*^DxvKPWFF@HShf&|IXuwI&bLiVoC_gxKfJ_ z)1~vHv&L|rlO-tT{4467|Ch4%hj`S~@EOKrEEJt=&J;)ct6buz<<EA^Z7EWFK-or;Ook{RaDffNeCB-c^e3+-WuomLN=Za%^ zjDCU=Eyh{SSdx~0)p@$P#VL#TN_&qX3M|g2(k0vHg_Nbg`m9D-aPNzM#jPlO?%Z<~ zKMi)F@Y!(e{BGVMZz%k8e$aA`vY;cp!b|%VOO4Q3xbTHJmqLXhZc&00IJ=!)!7Mc8 z|M$PLUCoyifBFkajPufjbb;mJgVfIM@c#cLE`^>eh04-YWq!`)aP5ST{CRw-=ew9T zc(a)%uj03KA+;43RZKs{$1b^7O8Y7Zm8Es;;IDFc=c2d_WjSM<7oDe_@ypbVY?2NN&5FW*|+v3b5_9r`&bt~onvsMyE#<7Q=6g``9&Ijmo7f1zk zvgyt<7u}n_J|lRv_=>;M_)5#AtjFjP^DE{~d>K^A&sl9!mC&31n|tEh5_(r9$||+x z2cN$r*VlSvalPpM(tn!X!~75(P50c)FRXEJu9z0jWl`L&&GniC|LKpne#qI0mRl6+ z1r=x>&9zDNy$(1Fu^0N$a8KzrOv#>5WqDOm5>z1U)8j23C@7d`2B?@)ZBmPbQ zcNRGd(A{5lG61QZsm?RbLF%Ih`MlvgiJceQs*~fq%(>6G3SR>JEzQq)l{8;FpL1qE zXXZLfoKHx3LGOVp@D>bSp+mzT&@Jc#WN2QBwjK@5A23?HPxrud3hrC?IS=UCHh1r) zEJGtEr^vsOkj3SdqQ`{#NufTwPO3foF8t|r4lVADKKF&EF7clp(Yaq0y{GG*UpW)% zz#Jv6jCCUTE9NJm1E$pQemE{6**J8r_ZjLJoBIpVbC~`j&OK4_UYJtCx&EEFQz&u! zQZH&%>e0V@kmm}vu28)NpDWj76Mimj-w6N0?*+TWU;o1GHkcBPAtzKrHA-BY#2si` znfVzFB3MRE#?;dE!4h_kV4_Qf;rl&zKHSSVcYvMX`zy9?l$M56x+Pq!$(GFM()-+p zmLb6(dNn`%$1kS#GWL-}8J&wRl^NJglXG?tXe0Z)^TqT<-#+-${g4vB zKj|5j;4;ArE~1R!;ox(H=zmLzyx9%kw~oX6=cg$B-vw#mL&3gN$+yN=&?Vn}bXZoD zPK%|NqmQ2d9+3yys!*TfTHA==|8^r~g1xUNwL~y)?ihP+XQ_F5yfrxbjn0j@i1%G5 zxUbW)XA{<|KRUpjqluA8D zD`?@%pigP~=cW$#7N;}3VoBH{X3BbvYY!Bs_|v`O9$j&=FqaJ-fkKPh!zEJ{pSXC> zysuzw7@dXjDE&h=I_pZL4)bNb9;NvOtzsool)ihOoy*~??ofX>-Xu>oq1Hdi;HgvIT^t?G9zQ}2UhTWX4f?1i?i^pMW z_+(o)A6|zYxULJMtrhWjf?u-|?bWn~Yw;_n#;iKG(bLiE&*J~aR+l+-o*-{Mt4@70 zt4>QZt4=HC)cJrfH}(3moy~kYSK;&Y6M6iM-_js6pU#tJKAoqSE3D9Zn(u**^NpvT zGi)@ohMmFF(P0}S^c*^4%^W)8%p5u|m^pODn>ln|GIQv>Yv$0IWaiL$&&;9oK68n6 zvOYGmG^TmD?J-d2i9*KD>|BaaMH~@IGyy0jpA}W9~v|7=oxUjnHg|;m>F<-ni+6z zH8bGcZf3x_!_0tlrU*)pKJ5=OnYXNPg@D*@fwg@PJFXRoKxu7$?uHl=`RA^2wMIEHM2xu;ilr7mR zKzWzJ`&zTrGW1s)`qSTkc3`Um6?UOjcV%l1J$57S9&8Qp&g^M5#22p@t0-T|*38go zQ?p)jGrR?EApK2jZSdZ^nS5_yYtQP*eMo;RTRK#Ho7D+AzJvWc**Y6)ZfvMI)f&g9 ztQXiM^W?qEzMd~C!ccaEnJ+4Wuejdlp7pFzd?m^{w#}@mYz^=@_?-Kk2HiJ+?q_p+ z4jzBaq5g%0i&&AjqqU4J-CEAp98b^{?0?JFjFo#=5w2lt#%z0QDLs>|9;-30WB)t0 zdaTO4p8fCH>Mq!n<%Q``g$QUWQt_Z)bDiZMcKG-O1*{>u?wQIczSx4|lV_hs{N6&ShWEkJZey z=VqooyG?s`)1FW8_D`}krDdOj26WplXWDjs)3(c*w%yFM?PjKJH=}KPt!B&>7->bY z8Z>i!F>4^cBf=+q?E8hE{TLC$ennA{rCno1tkr-y1uIz(CQhvIx;(9 zL-zH&TpgLGurd33cCL=hSlEPpJx5nZ(M&XBU(eLlQMBMIvRWcdq_N);&*|E%Ki$ge z#LR}~D_8t<)0yK?f9cv*v}H!7cA}ltS+wU{?mDbZ-GTj%q9gn1BAxwCaI}VSw99$k zE5sE%Zx_*pdgzK@NppBycb=jLzSxPZUEPyAzZIYC+Tu36e>*W};_d9;ffsNmW>376 z{l0hucVZqz^Np;bJ&n;c6b*(D2Y|hKG9Lp?HX}8t@$EqL>RmjnZ?BF)Ie^0`ukCBDo0v zr^RwHU$8BK!}<(|tq6x*LHd>O*;vD8D;Yi;2cOMkhM9G6+jzrms~B!u6>hr^AFKUx zKlvY!2PpBN#4nr`fsc|Wvy_pW=EW5?FD7J`GOIGYSP)8ls=TZQT+WKrYXRdqRzXGM z1?5u}t!UN(j^ztB_%&g5Rh=+V;cKo}0_LkW<~Ad&uNrbyBh`qj8mlIJEyg@&Rwej& z2Yk>v;%ilzm47=ke+6@%k&-#jINK9{t2oyE?af)%{veXmcC55p*=opYyVcoGwChkAs^bamP0;l{fTfct?y`wl!DDh>pS`j!%kP*uJeSxJdn8r9(2kqq{=Osc^*B&*rilBtG~OkN|Il#xtcBbk(u zOkN|Il#xtcBbk(uNeYklP27o=MnO3glt4k*6O=m2NFA?{I?6~LuaP>+NFA?{I?6~L zuaP>+NF5LJmmK2$^?ZyT<}f)zsOMw!Sb8Q#kC8*=nb!pCzL7&7>ol8(`5FHp)H)3?$RTOukk`l|W#o|8$RTCqkk`l|W#o|8$RTAUkTkMK8mS|h=e8PL zUdtXoGu~EbU(fpJXYSh?>?esN_G^lo>}zS{H_|B5NTUiy8bumuRKZB2L?ewV8)=ki zq)}xfjS`JCs%)fDqLD_Gg_cH%MjBN%(kRhLqsm4aB^hZ{%}Apd(Hdz~)kvclBaNyX zY2-4}sJf9xE+dVq8)?M%B}k(_{6;248ktl<^kTkB zkC9ACMlw}1k}1hZrfNnqB^k+7%}Ayg(GST~)kvmFMlzK%k}1karj|xBl{1nl%1EY` zMl$(~WU`H9YGLNUj5Cs{k&#SpW{jD|EJj*BMI)c)v0p5i1d?efN3^~l&Ac+p*1s9o2@2BN;PEd`fT=f&!8#m*YDz5 zEwS82Vl^`oD;kM)lv0k#V}x2(MH^Wa&D!;6$zMyXctw+e3v0O*Z{(KS$gODPRs_ej z+!7_^mN0Tluy%bdjwh=W!g{J6VSQv(w2@UpHC1RQMq*WDz54d>cP+Q-7`YX1V;tcLez!O8bpdXA5?f^U@2$m@k>Y9DE4YG0{mY8O5|Q@iM^XKEKS z^i1tSTljRDdZux{I$#k$M7pE-g5Wj%#d{I@j`$@iJ{6<<^>Ln>{c zXR`x&a0EW@z{8`_|8-u;$l>zH^s4mL8lVBR#p}5Ta=VY!&w9WbW<6p(jdXq0ddr%O z?3_tYjjzP%N&Sla*>44`6T)KNav%MOU~YQ8_=?y;YSaI0fqml&bb{-U>vvlNtOu<} zv0%KwtiW$0jXy{JeuGryt8#i;yXYGowN4^vB9I%}a;xtR4HU~&0(*^+@a@q#dZA0) zX8pq&Xbra>L;jDa-}w%5eHwCnA+mWLJ-aQ)!-H0VbxKH49{GbU%jBl#t*?X@R0n;h zC0a~Zw3Hi|IqM$lpVkQLaqC%TeAly&e9RYWv(W&)MQ(4R=eHaAdCWQud#QjN(-u*E zZ+h z&j=go8H>aV=BDS*uZ-?c7dyaZ^mn^6uk1}|Klh^ZJcO?EJiY8UtoN)>(Ou?Re6^1r zv6-G|E>it>>knjeB>lVUBJu9K2aR;kD|>iPa~5!0`Zq$>19E5RRe{PD_8&Che)qb+ z5$YvrH=31R%M|J*Ufo$`4|qN}U(%O7O!M?7ec8j7o`Iw zFY`Q1`m%?uJ)=lp_OOj-H0jG6Hf!n`$1*Nu51V;j(TmZPIc)BEU9VbG=CFn59lfkf znZq>CWYU*CZ0VUo`m%-({bPh@#)!WW4jbW_rPrJUpk8T0`T2~WT zVs+>?p~r;U>q(&b=n##A5NS+U$Ao%>Nubr~FvWy*O{mA&g!V%qY+yn?8Ya+CblBL0 zsU~bm}Wxl$)(q>(V-r@7HAf&t>JcjWWUG+(2K2K`IG|CZCsTgAMhYvfuz%EL^fo75Qjv)rs+ zkiV+&@;AAa-W^}a$~`hy?v;GOOHb~QJS_9DJ|2+)c@+EOF?w{r%j2?0GV>Nax-;?* zc~&~gx>Oo^dQvH6>z#2INUCGv4{)c|wwewz&?q_>I zjZh=iL+WAmFZGD}SOs)nNfpw^anq}bq|fw=`c?g=wy3RG3$xXBwL|@`j@z~!Wk=gS z`cb=7j@r%o4n^t@yOKJg&f2=)6VE%%h5B7keK~pztV@8FpA3E1rN2=h4ZRWCW;3X= z1v+PI`Vno>*!B2kI@&wyD^~y;b=>zbc;V61JK6(=|Xzewy6J5B1QmfD!O6{=XbijI(j@3r5 zrPLLh%+=x=aXprp+pxggf#szy7MHuRvD}YUWuO=&28&^0gqSQAV?o&@eioZWmiSft zCbr0jXByRm2ie9s7A> zm8zOxcW96Owa?L>bx$jw;m$}`?tEhbRkZBVyk7n!f5qOihqf4?EqQ4jDcCqVsjIO;u-+K!h>XYH z@IID=c~}9MJxCo?C!jQ+onSZMj@sLo+db^7?K|v$*bmr4?2-0k_S5zl`z3pV{g(Z{ z{fRxzo@vjs7uzfCwe}D8&-NC3r@hxcY!}!k?6WT0Ro>-u#kmq(wOsXFsjf6vTURGn zH&<`h^{zgyzOMeRfv#b$hh3vwqg~@%uee@!z2lnfn&O(_n&n#HTI$Mht#fU3Wx2Mw za$Nge`L06ODV(O=Zm&DW9q&$bC%YTDo4Z@PJG#5*wW{1VyYF!S!~KAJhlBTd%Js&`>?yfeZqYfb3%EK&lBfK@YM1&@HF+b z^0fC{?&;yV+H<4lHcvm#eV&1=5jEWNu;($)lb+F@F<7kL5L5(6a=jCH^ysRv{(S!8JkHr{fhJI1T%kJV~{(mCI%2DzqSw;2`|Kk6rVw`+JzAUTC zp5hVyPZ2LLkMt|Dn(QSW<^N}5ynIUjTPDaW#bf-RDqfUN%U5M}*;_o$eSWT<;3=kw zS7f5RNh0Na>Y#U>L}qN#j101iH%iRuE2&Pgsl;|9*mSJT99aZ=WiH!{oG0&z;F$eTF+4Q+Ujcu3Zj zH}h{HYu@CF)3Tnth3gk#a5^LF%RXGOSo|Ry$XnT4BF@T&@;3ICif3dac{|rF6R%mL zWMg@UU~V-er6p4(^FGNHVlU1bO=MrvtQ7mCluhMbHlFu9@pP#~C)rH)vs`u+WUDQk z%ey(VO6->|*+TxqP9%rb;(&D1!tY^!jW{ShvZd_L{#x-mOO>^f_i{z1I3y$FW%53| zK4;d6!?L_=E$^o;zf+?L*Q;jlseTzN%bn>X}bpD89Rya54$GeS-TdY zV>e(P1YtKMl+2)`wS#;@8>^y(&(1dC96~oEcsiU%=wSp;hYJYHF@mSVg@hHD$49~y z7ZXM@nkUgLmJ&u|A(e3JrEgRGEIo50}|pp6Rsz0u6`hF zfz?%q8wt}GHtiI^orfvr2W7dXw-LMq4HF4F2(#yZw#mlmt9H`zFPmtmc^$y{k>RrOVY7*gH>OI1KiglRabgWy&8y+Vg zA$&nTN;qCVM);!C{N^P&ituGgPH-vBZT>Aaw|P}QjXimQ`cMucuYqzf;XmaN!a;H< zA#>yt4v`NM4wb_RnKPg8L5Yo54VMoQe#EtU6%oO8f~y4A2(A#M7o--X6*?ullAaww ze?j3z+lrzGq3FTXq>oaYtr9(l6#6N8oV7B2gH-w}P1&kq&1{90v?E)h)rqYJw#~lu zHu_;HZHGnjesUg+1^IF;lOs6yC|g%E>e&q&>ND5}wf9XAEU9l}Vf_%RU@xqx-(Uq^ zguSTXSBe5;rBwi&N_*Nj(95<|ogR(;bev3(%k6Yp6cibY}(tG+E0%kWHFAu_B_%-U>I z&Dw0Upodqnq6YhNdcDs?YG1F3O8-v$#{Q#bZ%b%TqS;={tkv0>M zE4z^zx#BgkSL_q}#Q||pye$1?hHB7F5^uRHR^;xy z)tc;u;z5=~ zAT=sTFYWYPS&V2jMZ<|gm+_&s#K?+b1lmX?G>*z>6;;q2s-YcJNB-B4Nyy_`NZw>* zYzp$U9+I;GlClwUF%=ou6j|3Cxt4|mYlXCGjr?gV+wu0wmC~Y;sGS(<=T3V5{n;8D zib*vT(}Z`cJ?MS(ZPG|{TS!mtVky7R@8gKY5#>AUJ4;U|*az1~G-V)7e1{43f9cys z9s=l}rivJj3g2q>pfVF%j2j4!#-RH%+nY&OE|`~ZGF_2=oYiU0KQo5vZO@2rY3Bx7 zN+hv0DD^CJmD0P>o8~ST=iG?r)*feiJ6viCJ&ViobKAPo(nRm2#wV57rj(j$IdA6S z^R}l;P4^Z(P3;j|a_duS$|1C0?TvE&mKsVc;jocVgvEb>4qRNP`pt;wpe@CMk81KA zK?+N@mjg+CVan%B9u|FEMh>AMZROD(CFPATNd?*hD?iZ=p0OfnC1>%EvSfKILb}F{ zRRoS*3H~z!E%Tk%DO8L%HgcNGSWx|6)c4wa`^+ zoXbsECI3nK+tuhf{0m+FQS|l4(aE1c?|w=?eO^DZ^m5#xwxXX&&@S%Bk5BX7XwyD? zhG()SQRq2z%~YcfgyF0D*+S0;EpH83eclM!ecq<$_^zCUXTbaPVJFKEk`HB2g zPLZF{r~F(_lhd&cePOIavqScw`Nl$|`?`zi?FQ{c!9MT#)}k-57tNI4$@TJk`Geem z&iNy{<|b`F!ZY9(`l!FjEm)AYVME$3cU)jcI`9{kq@5Sol1_$fM&Vw!wj34PjlzBK zSYtcVb|Y;w3iimg)ks^6w6#cEinNVL+lLyR*H_1@?IKH2&`zXnL{}IKQ8z3^+A@Sy zNP7gFXBWCj-HguEN8PG!Q@5iP-HA4Im+EIMLj%mZJ%iL>HAD?n!_)WaI#hxScW=c z8|s9nqV<$}ptyUH3io3z(zYV4uMERhGy-eUqqMCj&{NL08NI-G?Vqix{WfE{CD+yd zCS)I4%ee0Uer4^NXag5pg^JhJ?rf|*>YqqB*^h(p!eM zo`x-_x?S`**D~%_B`l-V(D(~{_#E$m>5RgEfd@wEcF09&mP_!>Scarrf!4eVZ8?+C|L@V6f5a}i8GZRTT3R+f z6ua;T$i+H&0Lx?^R>`ASB!9=N;v`ndKP(4(q{0^IF?LAp73ahL7>mzaJicxT__Za8 zS|S;}x*qy;BlPH|=+9~RnzhEGtb?&ZUV#OYZ!+)(yA9i8U$o|uHpVT*l%q8=y$Y~; z9Iv4#)RXEd?03)TRe;rV>UlK=FQRek1uS|ms+aI3dPV(Py&AGp;}@&m#HZ*j^|pFP zy{jgv_tg8PNg+yW8q!^T^inkM=vaaS3^c8NC^q5|w0Yg)-)3#*p!HO@mLaBnlxQ2J zO3Y%dzAELFLq@sr=;=h<6T7G6{c3&emJ-_kt0rAE_Y?NI33{#cg(nS!3q7pu)piSX zvz}I0JbiS0rQOoRz3o;ez6#$Tef(;>wTZ96n^yn7#coEKUG3(k{I-Nw+FCR1&8*0* z2#lAIQCMGKwqf;wUUgZ0ggyTg&baZe9z^|)#gaFmI3<2FFQ{DY z&!vtk$9Cb%6oFqC>nh=uJWZX%=gF_8+g0#is;_3)scN6vuMS|7J){n+FYxsGO3hSX zt66ppJIStT*TP2IP_bf%I)eY#9Q?lK;qSEoKd*&&Cofh@)KdMe3tnC;@$SmNt7|ph zTm|ZsI;KwB!j@{SUEYqdE7%onuN|v0@$dQ$zpn4q5BPO$w5!_Humjh&lkGZoie1;P zXE#zm;^nmoyTBQ{@qayXaq+mt3&^Jwdd*rQHAS!2l1P7Z)q|eVRp^%CR(}V*;7hmn z;&vTw)oW?j>uA~QY1=>0x{F)(cG~t%T6YfZdk-zVkXC)1c6|b`q*#1w;`nAFo^K_p z;;ovXJ#83MND?(mZOyIe`_k_e`DkG?o})-4c>qJsFouH)B%8G?`#kfJ=q>PzfGE z&f32})D}xhy%J^muzT0n+{q|*7;3f((RHGQ%s=!uKrXvOu`9}npEvV-g>(`6^w zSza!$kX>X~*-dtrJ!DVWOI|5^%d6zo@)~)qyiQ&(Z(w}yCV8{GMfQ=m%G>1a@(y{Y z>?`k*{p8*9AMzgAU*0S4llNoMA3%@z;=A-C=X9UZ!=2(=Py4u&JJyz!M&>RX8_PG literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Blond.woff b/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Blond.woff new file mode 100644 index 0000000000000000000000000000000000000000..79a9a80653611416b33c25178246136058a7217e GIT binary patch literal 80281 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-BlondItalic.woff b/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-BlondItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..0d4a94908a005853db8a2853cf19a97fef0c9d20 GIT binary patch literal 87360 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Normal.woff b/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-Normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..ecc1b244dc7dcaaf22b000d5506775174486d216 GIT binary patch literal 64500 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

@kvniI?iOm{yc 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 ZWB`JzOVl|)^tI22c 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-NormalItalic.woff b/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-NormalItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..a46acecfb5c3a8fbbd515147537c339a2186c32d GIT binary patch literal 83476 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 z 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

L6kWz5R z<1#LF0+gnQY$6$U2{cYyNjHV^X?0`F`nT=?oksY2`CcaBltUMh0J=0;id`RX6sJ%k zs7+c&h~@Ds2yPjUT?=pAe=1Uk)k#G`dPA_Ar9_9LBO0mWiAv=}DHLs00hN851tB)& zny@;R5vl5`UcE1l?+SLKwkHjPTgFsl}cOltWHA% z7M60trPxM;tzw5n+$HHHY4eCqNq>1mRmX}pVAV9)G0P3-aozOCc$H5%a{}p^j89^B zY1vuD4WXbx9(BasPye{)6YOXDl6zhMXo6D5CC_pw|F-So;WPVZD$X@LOl6Kq2oBw; z&y;aI_f&k#;R8_$Vd!Le2&;@Q06RisO1M!dG@Q^6YDlQvDt4zmGXR7WP(7O$xb(;eOJfsIH?Hex#brQz=?Tu6Gr zL9}z&;SIfuH<4c#kvn1hceK}l+R3zg2nsZ)W;+Nlp-bSOO;Q-Ja3ly97;QC}27$hY zh(~S&r#`NBLv*PLU;gJ9lEa*^xCCnchO-%L1gUYuPH9O(^&fKm;FYO%VAaRK5E_lR z`G+q-88^^DsiaUA<3d5HA25^2q>#<8c&us<&>=UN0LCACN-Dw-tT#qMh)?){(LiYW zVn}1)@#h&VVDtl8eN;3k;R8}#BqT6$yMaAh9Dlk1`B*u;igr*Vc@M&z2Lj(g6zv`R zYsB{tlsBtGZ-~RsANkL|BkD$9(z`Z90KQ>LqXR=7dPyXs46Z`7JVO1;eZLLsnKwP! zJ(m1n6*VDUH6+j)7Mg* zFKS50ML54jkS2#cP~G~!oQ0q-!cvqY9Vz1iMR3)NG|DQ~<|@N%$aH-(`A}*MV2Ih$ z`N-q>$bS%{7sr){#I<8=#EYmQmzIte{RccL1-6*XpLm=@U#z0^D2@D)pUK7i+2Eh| z|HQZ%dK#ud9k)$8nkV0e--cuHDkvt!cmy23Di%&(ikq}T8Me(pXOKH?>_HlNXqULVMq~Wc+;Tf4|IK} zKAhgk>HCz)D0fva<@-Rg=R{ejHKf3>r@^-z4qzGIz{k-I>Rhj zi7NjOrDAmoBOc+oVf^YRNzV2qLa@>YK0=rEA}q-b&)-jaooD?mO}gY+lEixSS<(=m z?W_hPxz4_Br1)UR)h^@itw-MvwR^<&s>|M)Kg(tm3m4WUvRh5IsMb2pbMHlRpSxQ< zF+JlD^=Rxwm2H+f4r-9Dkd6=w6$l5vwViJ`FA+bZ3S2w*qdn|Y35S(!mR$|bDV@JK z-$A~8yX+8k1Z;7g#j+bX&SyD&*!yHj+#@~1X7?F5N+TI9vK01;Ux~a?y(PwkmU8W< zGbT~3!F?l3GIcQvM@SD+7YRiJ%;h5#=GwY61m@$%_~ecazLQyedHAJ(cVA#Zdp0=9 zx)_nQS1v6NbB}HTbM|C`RZCzmbwF1SzdAr-jN}^xlHfp>jz%7)TBbKfstRJNhH9-x zuwI4U2m$SJa8mx>LiuUWJvXYx|V3A#@CUFaAq4&{bfke!ufNR|&q zLF~v)mbiSXgXvShO&%V(EY`7VVBE*2SD6XeO>*+w>blmzOt~NN(Xp>&wXn}_ znk~yTbPR1$BUQsD^45#!0nKjlZ+SCpb6J%}8E?JSqMtRJG>$S@vRDqX%O=&z1Bd)1 zE2~oy+gnu22W1OT8DJUm|EA-bAYkNKZ{|Xtlg%ERB#*}w(b|S}&qyTy)Mk++OnpRs z?CaiX<>4A9&}7kj7L8T}XbhTJy9nU^Ds7%6E#cIq!DR)oK${@Io4i`t8-Kx>4Vb<# zj!8qST3xeaBz+dVrc(^YmtoWuU44gH9d$eqM~(Bs>A{AhBnu8*d58Hj{*6@Z4jSj6 zQbL6%Q+NE8VVphr;TZ018Ezw4KLCCm1djTbxoLLY3cA|%2@mc4!9*Zv8qGaUn%rPk zwBr&~1A6K^ZA+TU^)`M!2eyqyN!&N zDyV?2+u2W;Vkgw{PAR1L4lFE8x;bP0?uk7fqBx^JV9$9BI7}}|#q7SKduO?7V=6Lh zPL{=Ligjj(Yg&`f^G@e(-fCLSGjAIx1UBi4J|@F_k*z>8buxnJ0XkpaFk2Yr-&hwkF#C{aYu~1cjVPy) zxKfb@OA07yj>=Xf+#W*dP*oj@J%wMSI*td9wgIu9QeJffDC(+A=nHQ&f(c3rZK~DZDc%{YeSxjCjVTsw7ardcgBnA`t81FO^P3x-2Ps(BjJqC7*WVsGx7K-z>kK<)Q{%@3xG6a5UnE+;rho< zO0kXv0lC|O=vuiHM6~Nm_I-vs$dQZn9p|ANY83LQZy?tQx=}QE$M}Ws8{v1_ukdbo zVfN~h4a8N$KlREHhk}?f>zOo%c$(Bxe(IHu*E4CQmsKq|&r~gHlp7W06N_$~*Y}8S1@TvF*f#X&Y{h{1 zT2NQED;-jZX1hs`_TLl&Rr39@?i(x^Tf<7fZXj4dwX$Ij&S9v9fG9Z-Hpbw%zW8&% zN|$Awmd||WXfXIW-A{5CV|6!GR^Kxtz^HQ)JkroNy=bD@J$M1|pn2{Ode|wx|1w7a zeB>pDgLYwU8y(EB_cu0ABChpIGMV{PX#x=U?~|1GFULs|xEh z<|ZohslxZHBqZynw4PRVts|9n$&*vRlu*qp>JB8QvX)TETO+9bUo&mKkd8?wIh9dX z4(F{3)m&<>iSL(?hU8P^<4uz~6Rec&BEdzUxM~sRC7|TzN{8=2}9a^ zisb41nTI<(5Txi%0|YU}xVobP3phl^Eu&^y~%caBB;*rZpR4h_-nBqES^%{<6U&?d!FU=$6ZB+jPcf{u$7f_xzbh@XAN!!vE6348luH+C6Sk3D(pkJERNPJt6g$x8% z0!FG9ZT!pLi>G#eKhytvvw=M`-N`Aur*ZykbB=LlEhz|6R$@3iWjs5Aa4#;6b1NtA z@kQC~fvZAV3i}fuy(qcs%z&?0mRLZGnaOT4`XWC1f`0Svbo0(CsEn2@APe}?%2|Fj z?`aZme=Rcp_v`py<#CC0cD7`8^ip}`BKeqnc{4R?7h24< zbz$f_P0fdL_n4k1@pEwwaEu*{sa;oUGS60`)Qt{`-0x|4x)UPe0Mv5)D$Vh~llT*f z7BN#1t(5NU+(PTS8CuV>v6H1EZKL?bbIQ5>V;T&BAk1CTH63`=DO75(YOo;WIw&lB zm1M}X8ojwgN-Gd|&;zC};a|kX*QvqkLb;2&uyLgYns1-DA}6lhm1Ac4-aBF%s)PL< zn!2KS4OiNX3c^geSRC_YJMs)xkEpiB+$~VNWc>>z^+`SRyE4Z=v=VYAUDr=8n|RCs z0~4kseCSL^*U2`sHl(-bwFko2i-WyBYeC>Loql8PYE5)sXF&^(b7xIF&zRyDj7vEVXG?p6&T9ZN3vFz+sBJZ3)N(=7Z+04DL#P z3MGrhS`eYYHjU8zOTR&;cj=}Y)A2H(u!h25x%sdsd2?1;z&E%EUHE11UBcseIY9~R zL(XYLUWz zsAu&3+ChPO=q0o||Z zw$;{*P-3pk%Gz5F-}z)Q^@4ey-k*5)z8fC+vb{`}o5u6jRgIJ_R-$m_F#?Nv&u`<) zdU&WirTvL60x>SaiIzPbCpSZt@-4aE^YR=55xW}#)I%U(|+iOSNyLO(2ZUMWmqia{M>)umO5tn7R z7l=-8-fzX*MMiTw%lFS+&%Qo&@4fFC?;Y?XDQyALeN_e&QqdHa`6+M4 z(snTyUQ)C&Z+QkCdwNBD(wYn0A09y7CG0%^9 zrZJX{EM*NW#1ADFMtm0&5C;*_=?2x|YePTT(M!U4<$tP%Y}cAF`lck0VJ+I5xyRrS z+2ExRnMySfSYR<&FsEUBlDSlaOiU#6=f$x}TFvR0pK7CmyzREwwXN6ou6S!WmS%de z6dT?8KN;{Ba4h9FWQUuF@E2MW+3Xqc7Pzw5>~B9QkIh~VZ^47zbp42Tk(v;wvU%k!g3^>clwQI(%xGRRsj4~6XwDfEoHdBo&Qr9r z9}}QAcGC90R@TT#+f$5h7RwGC7TdFZ++uVrpn=WF6{sPCPO*2yYN``+?c{917|lk{ zJRM`sHat9((ZD$TrGtkfb%|Axd79^cE#3dToG}^E9Hu%b6vz9M+M0up|LcnS-y7$L zGTIo2e|PdUr48X};aZ|L;T4_l-{^_NeuuOHf`bTnk;@Z=p=^L(@};)n7Fp*VsG4$? zST}UA|Dzcll-um3QDF#9`2@A181~h5udWn&J@X=mqD#%nAjEtJ(<{wNNE?VVE+|K; z+q@yX2wcne&nd3=Cj)Uz586@*gSRVOka-JLUrjV zUXR$~b?FX1DeKescEncp>3ct7YtqH1_()~#)8#$*IO3Sl zs8ul0H>Ns(Vo3L78a@H=6hR-eUg^fLg*YD>Fjy4tB3c+Rm~`)6BtMoSsebnrKC-AX zAu`FvU$?yxL;oqNh$Q9=NnUa6v!OYQ_!U5+jWFMm#**snvn~{m(n4&<)k-{}x5SyV$XliBJ zh!?3{@VUK~^k4x6n)saqt(m*X%5j))hG*u-A5EGS?`dyE zsfCAM*1mC>1Gz9h|KWQ$5Y0FnFBY}chpF0CnK z*E06OO)-mf{#g7Y9JayDpBCwQ;?XV1=w`=r4h93+u1M+jwV67Hl^GiU5e`Sy=a3XV zK())#B&Al3)_HV8%i6A@Iam8aI*J2ZQ-6&KNxO|jP?g1Hn;L$Z2iL*kv}yJ_@8q)w zeN%7FaJ8dt`jtH!=;SoUh(G$;b^@=@1Lt5Rb*`7W#J}g)gF6xE{M-7FQ7N2$?lF5jm&UD$@>hcon;hiT_|n#PCl zYs`~ojIim(&94T__IQM z(@9;&4|Jbu!kW$+YtR#pTYpwbLMeVA_yJmq_dHeF$}cB$sUUR8D4Q<`A1w(VHK!i` zdjG35mvs?SXAu+fERyIf((Wu$bP*-0lPvB3A)=EkqEl3b8>sp}U^g=RO(3QwZl)p* zR2Dbm_&oI?Py0j$x%eVZW(Ii=&nDy|j;KWxvWlhESq$S@jGaXkk^EGG_!jH$*DSf| zDXN*H#4DE%VPgr7Z3qaj^&DMHBW1?2lE*J3-KSn z$s1D)#2%=05eihT7kX6^)m3F$|2)>-PDYaj1m1Q8*1Aq-A2VLvZceywUCGHyn7FX| z$|ZK*XHl!w1{g$?svzROE2c54$k>HoDL&Dq%Bn$Wl<6-1(N&|7E%`26#&$=mP{iAu zt~u{|hX~4Vvu5#^fj_b2ld?P^f8oVFJ|x#qWY|T0Uk9BH&5!c6B$-+}=4g&J=vV7R zmo{W?S4uW%2e5Q#Bx%!O_^_*SMdd?bNw=v`b>`TpQP_y*RM4R0@7=KqN-bD33yN1+ zQP`K}+@bnQ7|nt2klthh7pPF39HvJkJFv9eJQ*d$Ot55NEAUbZBsxPc3x*dH*Hv-P zB%!TgVoPMchaSyg=qhAcA%O}7@7Vkm;7`90mo>=~0iC928uT+U#lY(0iYn^AqttXN z`S;$1fP>1=E(SD zX-))?BAh94fj{-bF~z}mDvIOcZ0aH7YS^98XDS?>@#|`yXL90JSb}0|Co;M}X6E^P z5?bf7?u7iMUQVT-V-@FxtFv>8+P~r+H|q1cDG47IcB{kKY6MrRDpV>>(Pi)f0-xuU z2^27`=mjOCt$1t7(yaJFrD!Lv jS8h?v_0FhqM*~DNhdgv{GZ2TRe(G4h*cAj@ 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-SemiBold.woff b/Resources/views/backend/_resources/assets/fonts/FaktPro/FaktPro-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e18a1e656f47f49fecb5558881b6ec7b33c46ba GIT binary patch literal 80771 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 b`B3UeZe8%HYR%w`gc<$lpl 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.eot b/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..aa2f9d6a6e1a5517b9bd5017e6fbf4fc4bc9269e GIT binary patch literal 7188 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 RZU!V#HVekb?+KrB{V$kWaijnM literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.svg b/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.svg new file mode 100644 index 00000000..4c877626 --- /dev/null +++ b/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.svg @@ -0,0 +1,36 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.ttf b/Resources/views/backend/_resources/assets/fonts/ad-icons/ad-icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..230d044e18c3c9453a147ccb8ae3f3fbe2a2b631 GIT binary patch literal 7020 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.eot b/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..dbe9f4d0dc73837e6e4c3e55c7414e42230bb731 GIT binary patch literal 7388 zcmcgxeQX=Ym7m!qcllv1xl3|a62D1_lt_sp#V^@nEj6)JCz0yJwVYTomB_Xv+p#4_ zb}ljEi`_#7&w3R z<~l+YGE0t-6QqwEBZtWnStO@HNFsa599bYwLd`5$298Sh17{g(k1?q*$&xh5LCx(o zKn1?oPA(9hWcGZnf552-1HgG3?#B+FoIR!O|LJQW1fwDQ7G_VMf`1p3@!zs=;_UoO zzu&nV%1;xby>oPK_DJ-jmroGVJ_z;2qrec~<*z{*XU$CVSKQ+;T!!>XZ-U_ z%1=xL$7mxKm}Cxk;p-h+)vYaT1T*~9}UDQ#yW4Y|AXV8mN% zpm+`Rgh+~%$i0NPqk>oVsJX~Mu^{K;F>_=<1%?odMB~6HYCr;&FXjf+JJFX%rlv-? zb$nLy+`1YJs?|I^uLQl`Al{dQUSxWMt91^)Ha%R;4NpxCa~s3c3jwv7Qv(5&+fW0m zhG@OXjei__t^ZjtI`lgW{mw?HM7l70)t<}QuP@}-0SU

Ng8znm(UQ{24WW2H7( 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.svg b/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.svg new file mode 100644 index 00000000..75ba7777 --- /dev/null +++ b/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.svg @@ -0,0 +1,37 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.ttf b/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..60afff95062989acf970e26b152d06b28773506b GIT binary patch literal 7216 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 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.woff b/Resources/views/backend/_resources/assets/fonts/adl-icons/adl-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e247cec2821e6924ccd134e56cace21517e6525 GIT binary patch literal 7292 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 .adl-sidebar { + display: flex; + flex-direction: column; + padding-top: 24px; +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar { + z-index: 11; + } +} +#adl-page > .adl-sidebar span, #adl-page > .adl-sidebar a, #adl-page > .adl-sidebar h3 { + white-space: nowrap; +} +#adl-page > .adl-sidebar .adlp-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 48px; + padding-right: 24px; +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar .adlp-header { + padding-right: 0; + } +} +#adl-page > .adl-sidebar .adlp-mobile-menu { + display: none; +} +#adl-page > .adl-sidebar .adlp-mobile-menu:before { + font-family: "adl-icons"; + content: "\e902"; + line-height: 1; + font-weight: 500; + font-size: 24px; +} +#adl-page > .adl-sidebar .adlp-mobile-menu:focus { + box-shadow: none; +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar .adlp-mobile-menu { + display: block; + } +} +#adl-page > .adl-sidebar .adlp-mobile-underlay { + transform: translateX(130%); + position: absolute; + opacity: 0; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 17, 44, 0.4); + z-index: 1; + transition: opacity 0.3s ease; +} +#adl-page > .adl-sidebar .adl-logo { + display: flex; + gap: 12px; +} +#adl-page > .adl-sidebar .adlp-version-info { + background: rgba(10, 191, 83, 0.12); + color: #08A648; + border-radius: 6px; + padding: 6px 12px; + font-size: 13px; + font-weight: 600; +} +#adl-page > .adl-sidebar .adlp-version-info.adls--warning { + background: #FFEACC; + color: #7F4A00; +} +#adl-page > .adl-sidebar .adlp-version-info.adls--warning:hover .adlp-tooltip { + display: block; +} +#adl-page > .adl-sidebar .adlp-body { + overflow: auto; + flex-grow: 1; + max-height: 100%; + padding-bottom: 80px; +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar .adlp-body { + pointer-events: none; + transform: translateX(130%); + transition: all 0.3s ease; + position: absolute; + z-index: 2; + right: 0; + background: #fff; + border-radius: 8px 0 0 0; + padding: 44px; + top: 70px; + bottom: 0; + } +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu { + color: #394962; + font-size: 14px; + line-height: 18px; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li h3 { + text-transform: uppercase; + border-bottom: none; + font-weight: 600; + margin-bottom: 8px; + background-color: transparent; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul { + margin-bottom: 24px; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul .adlp-menu-item.adls--disabled { + pointer-events: none; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul a, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul button { + display: block; + padding: 8px 8px 8px 24px; + border: none; + background: none; + border-radius: 6px; + margin-bottom: 2px; + font-size: inherit; + color: inherit; + font-weight: 400; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul a:hover, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul button:hover { + background: #f3f6f9; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul a.adls--active, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul button.adls--active { + background: #f3f6f9; + font-weight: 600; +} +#adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul a:disabled, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul a.adls--disabled, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul button:disabled, #adl-page > .adl-sidebar .adlp-body .adlp-menu > li > ul button.adls--disabled { + pointer-events: none; + cursor: not-allowed; +} +#adl-page > .adl-sidebar .adlp-quick-links { + display: flex; + flex-direction: column; + gap: 6px; + font-size: 15px; + line-height: 21px; + color: #20304c; +} +#adl-page > .adl-sidebar .adlp-quick-links h3 { + font-weight: 600; + margin: 8px 0; +} +#adl-page > .adl-sidebar .adlp-quick-links a { + align-self: flex-start; +} +#adl-page > .adl-sidebar.adls--menu-active .adlp-mobile-menu { + z-index: 2; + color: #fff; +} +#adl-page > .adl-sidebar.adls--menu-active .adlp-mobile-menu:before { + content: "\e90a"; +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar.adls--menu-active .adlp-mobile-underlay { + opacity: 1; + transform: translateX(0); + } + #adl-page > .adl-sidebar.adls--menu-active .adlp-body { + transform: translateX(0); + pointer-events: auto; + } + #adl-page > .adl-sidebar.adls--menu-active .adlp-body > ul { + min-width: 330px; + } +} +@media (max-width: 767.98px) { + #adl-page > .adl-sidebar.adls--menu-active .adlp-mobile-menu { + color: #000; + } + #adl-page > .adl-sidebar.adls--menu-active .adlp-mobile-underlay { + opacity: 0; + } + #adl-page > .adl-sidebar.adls--menu-active .adlp-body { + scale: 1; + opacity: 1; + transform: none; + width: 100%; + max-height: calc(100vh - 70px); + } +} +@media (max-width: 1280.98px) { + #adl-page > .adl-sidebar { + padding: 12px 12px 0; + } +} +#adl-page > main { + flex-grow: 1; + width: 100%; + max-height: 100%; + overflow: auto; + padding-right: 24px; +} +#adl-page > main .adlp-content-holder { + max-width: 1300px; + display: flex; + flex-direction: column; + column-gap: 24px; + row-gap: 24px; + margin: 0 auto; + padding-left: 5px; + padding-bottom: 260px; + padding-right: 12px; +} +@media (max-width: 767.98px) { + #adl-page > main .adlp-content-holder { + padding-right: 0; + } +} +@media (max-width: 1280.98px) { + #adl-page > main { + max-width: 100%; + padding-right: 5px; + } +} + +.adl-hint { + position: relative; +} +.adl-hint .adlp-tooltip { + display: none; + position: absolute; + width: max-content; + max-width: 300px; +} +.adl-hint .adlp-tooltip.adlt--bottom { + top: calc(100% + 5px); + padding: 4px 7px; + background: #20304c; + color: #fff; + border-radius: 4px; + left: 50%; + transform: translateX(-50%); +} +.adl-hint .adlp-tooltip.adlt--bottom:before { + content: ""; + display: block; + position: absolute; + width: 6px; + height: 6px; + background: #20304c; + transform: rotate(45deg); + border-radius: 2px; + top: -3px; + left: calc(50% - 3px); +} +.adl-hint .adlp-tooltip.adlt--top { + bottom: calc(100% + 10px); + padding: 16px; + background: #fff; + color: #00112c; + border: 1px solid #dce0e5; + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); + border-radius: 4px; + left: 50%; + transform: translateX(-50%); +} +.adl-hint .adlp-tooltip.adlt--top:after { + content: ""; + display: block; + position: absolute; + width: 16px; + height: 16px; + background: #fff; + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); + transform: rotate(45deg); + border-radius: 2px; + bottom: -7px; + left: calc(50% - 10px); + clip-path: inset(0px -10px -10px 0); +} +.adl-hint.adls--active .adlp-tooltip { + display: block; +} + +.adl-file-drop-zone { + border: 1px dashed #a5afbd; + border-radius: 4px; + padding: 24px 36px; + width: fit-content; + color: #69778c; +} +.adl-file-drop-zone.adls--active { + border-color: #cef2dd; +} +.adl-file-drop-zone .adlp-input-file-label input[type=file] { + display: none; +} +.adl-file-drop-zone .adlp-file-label { + display: flex; + column-gap: 12px; + cursor: pointer; +} +.adl-file-drop-zone .adlp-file-label img { + max-width: 50px; + max-height: 25px; + object-fit: contain; +} +.adl-file-drop-zone .adlp-file-label.adls--empty:before { + font-family: "adl-icons"; + content: "\e909"; + line-height: 1; + font-weight: 500; + font-size: 24px; +} + +.adl-form-footer { + position: absolute; + bottom: 0; + width: 100%; + left: 0; + padding: 14px 48px; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + gap: 12px; + background: #fff; + box-shadow: 0px -5px 0px rgba(105, 119, 140, 0.1), inset 0px 1px 0px #dce0e5; + z-index: 10; +} +.adl-form-footer .adlp-changes-count { + opacity: 0; + color: #00112c; + font-size: 15px; +} +.adl-form-footer .adlp-changes-count.adls--active { + opacity: 1; +} +.adl-form-footer .adlp-actions { + display: flex; + flex-wrap: wrap; + gap: 8px; +} +@media (max-width: 767.98px) { + .adl-form-footer { + padding: 14px; + } + .adl-form-footer .adlp-changes-count { + font-size: 13px; + } + .adl-form-footer .adl-button span { + white-space: nowrap; + } +} + +.adl-confirm-modal .adlp-modal-content { + max-width: 600px; +} +.adl-confirm-modal .adlp-modal-content .adlp-body { + padding: 24px 24px 40px; + font-size: 16px; +} +.adl-confirm-modal .adlp-modal-content ul { + list-style: disc; + padding-left: 15px; + margin-top: 16px; +} +.adl-confirm-modal .adlp-modal-content ul li { + padding-left: 5px; +} + +.adlp-merchant-account-description { + margin-bottom: -12px; +} + +.adl-notifications-page .adl-notifications-table .adl-table-wrapper { + max-height: 585px; + overflow-y: auto; +} +@media (max-width: 1280.98px) { + .adl-notifications-page .adl-notifications-table .adl-table-wrapper { + display: block; + } + .adl-notifications-page .adl-notifications-table .adl-table-wrapper table { + overflow-x: auto; + } +} +.adl-notifications-page .adl-notifications-table .adl-table-wrapper table tr td { + padding: 16px 7px 19px 16px; + font-size: 13px; +} +.adl-notifications-page .adl-notifications-table .adl-table-wrapper table tr td:last-of-type { + white-space: normal; +} +.adl-notifications-page .adl-notifications-table .adl-table-wrapper .adl-button.adlt--primary { + display: initial; + padding: 0; + text-align: left; +} +.adl-notifications-page .adl-notifications-table .adl-table-wrapper .adl-button.adlt--primary:hover, .adl-notifications-page .adl-notifications-table .adl-table-wrapper .adl-button.adlt--primary:focus { + background: inherit; + box-shadow: none; + text-decoration: underline; +} +.adl-notifications-page .adl-notifications-table .adl-table-wrapper .adlp-payment-logo { + max-width: 25px; + max-height: 25px; + margin: 0; +} + +.adl-modal.adl-webhook-notifications-modal .adlp-body { + overflow: initial; + font-size: 14px; +} +.adl-modal.adl-webhook-notifications-modal.adls--full-height { + max-height: initial; +} +.adl-modal.adl-webhook-notifications-modal .adlp-title { + padding: 16px 24px 31px; +} +.adl-modal.adl-webhook-notifications-modal .adlp-reason { + margin-bottom: 12px; +} +.adl-modal.adl-webhook-notifications-modal .adlp-failure-description { + margin-bottom: 27px; +} +.adl-modal.adl-webhook-notifications-modal .adlp-reason-title, .adl-modal.adl-webhook-notifications-modal .adlp-failure-description-title { + font-weight: 600; +} +.adl-modal.adl-webhook-notifications-modal .adlp-modal-content { + max-width: 515px; +} +.adl-modal.adl-webhook-notifications-modal .adlp-adyen-link, +.adl-modal.adl-webhook-notifications-modal .adlp-shop-link { + width: 100%; + font-size: 14px; + margin-bottom: 18px; +} + +.adlp-system-info-settings .adlp-setting-field button, .adlp-system-info-settings .adlp-setting-field a { + width: fit-content; +} +.adlp-system-info-settings .adlp-contact-adyen-support a, .adlp-system-info-settings .adlp-download-report a { + position: relative; + display: inline-block; + padding: 10px 16px; + font-weight: 600; + font-size: 15px; + cursor: pointer; + transition: all 0.2s; + border-radius: 6px; + margin-right: 0; + padding: 6px 16px; + border: 1px solid #dce0e5; + color: #394962; + font-weight: 600; +} +.adlp-system-info-settings .adlp-contact-adyen-support a:focus, .adlp-system-info-settings .adlp-download-report a:focus { + box-shadow: 0 0 0 3px #cce0ff; +} +.adlp-system-info-settings .adlp-contact-adyen-support a span, .adlp-system-info-settings .adlp-download-report a span { + display: flex; + align-items: center; + column-gap: 8px; +} +.adlp-system-info-settings .adlp-contact-adyen-support a span:before, .adlp-system-info-settings .adlp-contact-adyen-support a span:after, .adlp-system-info-settings .adlp-download-report a span:before, .adlp-system-info-settings .adlp-download-report a span:after { + font-family: "adl-icons"; + line-height: 1; + font-weight: 500; + font-size: inherit; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlm--full-width, .adlp-system-info-settings .adlp-download-report a.adlm--full-width { + width: 100%; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlm--small, .adlp-system-info-settings .adlp-download-report a.adlm--small { + padding: 4px 8px; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlm--medium, .adlp-system-info-settings .adlp-download-report a.adlm--medium { + padding: 6px 16px; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary, .adlp-system-info-settings .adlp-download-report a.adlt--primary { + background-color: #0066ff; + color: #fff; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary.adlm--destructive, .adlp-system-info-settings .adlp-download-report a.adlt--primary.adlm--destructive { + background-color: #e50000; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary.adls--disabled, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary:disabled, .adlp-system-info-settings .adlp-download-report a.adlt--primary.adls--disabled, .adlp-system-info-settings .adlp-download-report a.adlt--primary:disabled { + background-color: #dce0e5; + color: #a5afbd; + pointer-events: none; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary:hover, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--primary:focus, .adlp-system-info-settings .adlp-download-report a.adlt--primary:hover, .adlp-system-info-settings .adlp-download-report a.adlt--primary:focus { + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary, .adlp-system-info-settings .adlp-download-report a.adlt--secondary { + border: 1px solid #dce0e5; + background-color: #fff; + color: #394962; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary:hover, .adlp-system-info-settings .adlp-download-report a.adlt--secondary:hover { + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary.adlm--destructive, .adlp-system-info-settings .adlp-download-report a.adlt--secondary.adlm--destructive { + color: #e50000; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary.adlm--blue, .adlp-system-info-settings .adlp-download-report a.adlt--secondary.adlm--blue { + color: #0066ff; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary.adls--disabled, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--secondary:disabled, .adlp-system-info-settings .adlp-download-report a.adlt--secondary.adls--disabled, .adlp-system-info-settings .adlp-download-report a.adlt--secondary:disabled { + color: #a5afbd; + pointer-events: none; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost, .adlp-system-info-settings .adlp-download-report a.adlt--ghost { + border: none; + background-color: transparent; + color: #394962; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost:hover, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost:focus, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost:active, .adlp-system-info-settings .adlp-download-report a.adlt--ghost:hover, .adlp-system-info-settings .adlp-download-report a.adlt--ghost:focus, .adlp-system-info-settings .adlp-download-report a.adlt--ghost:active { + background-color: #fff; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost.adlm--blue, .adlp-system-info-settings .adlp-download-report a.adlt--ghost.adlm--blue { + color: #0066ff; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost.adlm--destructive, .adlp-system-info-settings .adlp-download-report a.adlt--ghost.adlm--destructive { + color: #e50000; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost.adls--disabled, .adlp-system-info-settings .adlp-contact-adyen-support a.adlt--ghost:disabled, .adlp-system-info-settings .adlp-download-report a.adlt--ghost.adls--disabled, .adlp-system-info-settings .adlp-download-report a.adlt--ghost:disabled { + background-color: #dce0e5; + color: #a5afbd; + pointer-events: none; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlm--icon-only, .adlp-system-info-settings .adlp-download-report a.adlm--icon-only { + padding: 10px; +} +.adlp-system-info-settings .adlp-contact-adyen-support a.adlm--icon-only span, .adlp-system-info-settings .adlp-download-report a.adlm--icon-only span { + display: none; +} +.adlp-system-info-settings .adlp-contact-adyen-support a:after, .adlp-system-info-settings .adlp-download-report a:after { + display: none; +} + +.adlp-no-items-wrapper { + margin: 80px auto; + max-width: 330px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 15px; +} +.adlp-no-items-wrapper p { + text-align: center; +} +@media (max-width: 767.98px) { + .adlp-no-items-wrapper { + margin: 50px auto; + } +} + +.adl-multiselect-filter { + position: relative; + width: fit-content; +} +.adl-multiselect-filter .adlp-filter-button { + padding: 0 16px; + height: 32px; + display: inline-flex; + align-items: center; + font-weight: 400; +} +.adl-multiselect-filter .adlp-filter-button .adlp-tooltip { + position: absolute; + top: calc(-100% - 3px); + white-space: nowrap; + background-color: #20304c; + color: #fff; + font-weight: 600; + left: 50%; + transform: translateX(-50%); + font-size: 13px; + padding: 4px 8px; + border-radius: 4px; + display: none; +} +.adl-multiselect-filter .adlp-filter-button .adlp-tooltip:after { + content: ""; + display: block; + position: absolute; + width: 10px; + height: 10px; + background: #00112c; + transform: rotate(45deg); + border-radius: 2px; + bottom: -5px; + left: calc(50% - 5px); +} +.adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button { + display: none; + border-radius: 50%; + width: 24px; + height: 24px; +} +.adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:after { + font-family: "adl-icons"; + content: "\e90a"; + line-height: 1; + font-weight: 500; + font-size: 9px; + font-weight: 600; + color: #fff; +} +.adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:hover { + background: #fff; +} +.adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:hover:after { + color: #20304c; +} +.adl-multiselect-filter .adlp-filter-button.adls--selected { + display: inline-flex; + align-items: center; + padding: 0 8px 0 16px; + gap: 8px; + background-color: #20304c; + color: #fff; + border-color: transparent; + font-weight: 600; +} +.adl-multiselect-filter .adlp-filter-button.adls--selected:hover .adlp-tooltip { + display: block; +} +.adl-multiselect-filter .adlp-filter-button.adls--selected .adlp-delete-text-button { + display: inline-block; +} +.adl-multiselect-filter .adl-single-select-dropdown .adlp-dropdown-list-item.adls--selected:after { + display: none; +} +.adl-multiselect-filter .adlp-dropdown-container { + display: none; + position: absolute; + top: 48px; + z-index: 1; +} +.adl-multiselect-filter .adlp-dropdown-container .adlp-content { + width: 350px; + border-radius: 6px; + border: 1px solid #dce0e5; + box-shadow: 0 8px 16px rgba(0, 17, 44, 0.1); + background-color: #fff; +} +.adl-multiselect-filter .adlp-dropdown-container.adls--open { + display: block; +} +@media (max-width: 767.98px) { + .adl-multiselect-filter .adlp-dropdown-container.adls--open { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 10px; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(0, 17, 44, 0.4); + } +} +.adl-multiselect-filter .adlp-filter-header { + position: relative; + display: none; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 16px; +} +@media (max-width: 767.98px) { + .adl-multiselect-filter .adlp-filter-header { + display: flex; + } +} +.adl-multiselect-filter .adlp-filter-header span { + font-size: 20px; + font-weight: 600; +} +.adl-multiselect-filter .adlp-filter-header .adlp-close-button { + width: 24px; + height: 24px; + color: #394962; +} +.adl-multiselect-filter .adlp-filter-header .adlp-close-button:before { + font-family: "adl-icons"; + content: "\e90a"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +.adl-multiselect-filter .adlp-dropdown-data { + position: relative; + padding: 16px; + border-radius: 6px 6px 0 0; + background-color: #fff; +} +.adl-multiselect-filter .adlp-selected-data { + display: block; +} +.adl-multiselect-filter .adlp-selected-data-item { + font-size: 15px; + color: #00112c; + font-weight: 300; +} +.adl-multiselect-filter .adlp-selected-data-item:first-child { + margin-top: 16px; +} +.adl-multiselect-filter .adlp-selected-data-item .adlt--remove-item { + margin: 4px 8px 4px 0; +} +.adl-multiselect-filter .adlp-selected-data-item .adlt--remove-item:before { + font-family: "adl-icons"; + content: "\e903"; + line-height: 1; + font-weight: 500; + font-size: 9px; + display: flex; + align-items: center; + justify-content: center; + width: 13px; + height: 13px; + border-radius: 50%; + border: 1px solid #dce0e5; + color: #394962; +} +.adl-multiselect-filter .adlp-data-label { + display: block; + margin-bottom: 8px; + font-size: 15px; + font-weight: 600; + color: #00112c; +} +.adl-multiselect-filter .adlp-buttons { + position: relative; + display: flex; + justify-content: space-between; + padding: 16px; + background: #f3f6f9; + border-top: 1px solid #dce0e5; + border-radius: 0 0 6px 6px; +} +.adl-multiselect-filter .adlp-buttons .adl-button { + font-size: 13px; +} + +body { + color: #000; + background-color: #f3f6f9; +} + +table { + width: 100%; + border-collapse: collapse; +} +table thead tr th { + border-bottom: 1px solid #dce0e5; +} +table tr:not(:last-of-type) td { + border-bottom: 1px solid #dce0e5; +} +table tr th, table tr td { + text-align: center; + padding: 14px; +} +table tr th.adlm--left-aligned, table tr td.adlm--left-aligned { + text-align: left; +} +table tr th.adlm--blue-text, table tr td.adlm--blue-text { + color: #0066ff; +} +table tr td { + font-weight: 300; +} +table tr td:last-of-type { + white-space: nowrap; +} +table tr th { + font-weight: 600; +} + +ul.adl-bullet-list { + list-style: disc; + padding-left: 15px; + margin-top: 16px; +} +ul.adl-bullet-list li { + padding-left: 5px; +} + +@font-face { + font-family: "FaktPro"; + font-style: normal; + font-weight: 300; + src: local("Fakt Blond"), url(../assets/fonts/FaktPro/FaktPro-Blond.woff) format("woff"); +} +@font-face { + font-family: "FaktPro"; + font-style: italic; + font-weight: 300; + src: local("FaktPro Blond Italic"), url(../assets/fonts/FaktPro/FaktPro-BlondItalic.woff) format("woff"); +} +@font-face { + font-family: "FaktPro"; + font-style: normal; + font-weight: 400; + src: local("FaktPro Normal"), url(../assets/fonts/FaktPro/FaktPro-Normal.woff) format("woff"); +} +@font-face { + font-family: "FaktPro"; + font-style: italic; + font-weight: 400; + src: local("FaktPro Normal Italic"), url(../assets/fonts/FaktPro/FaktPro-NormalItalic.woff) format("woff"); +} +@font-face { + font-family: "FaktPro"; + font-style: normal; + font-weight: 600; + src: local("FaktPro SemiBold"), url(../assets/fonts/FaktPro/FaktPro-SemiBold.woff) format("woff"); +} +/** + * Font face declaration for icons + */ +@font-face { + font-family: "adl-icons"; + src: url("../assets/fonts/adl-icons/adl-icons.eot"); + src: url("../assets/fonts/adl-icons/adl-icons.eot") format("embedded-opentype"), url("../assets/fonts/adl-icons/adl-icons.ttf") format("truetype"), url("../assets/fonts/adl-icons/adl-icons.woff") format("woff"), url("../assets/fonts/adl-icons/adl-icons.svg") format("svg"); + font-weight: normal; + font-style: normal; +} +#adl-page { + /* + description: 'Remove default browser button styles.' + */ + /* + description: + 'Fix placeholder styles (https://css-tricks.com/almanac/selectors/p/placeholder/).', + '(default placeholder opacity)' + */ +} +#adl-page button, #adl-page a { + cursor: pointer; +} +#adl-page button { + background: transparent; + border: 0; + padding: 0; + font: inherit; + color: inherit; + text-decoration: inherit; + text-transform: inherit; +} +#adl-page a { + text-decoration: none; + color: inherit; +} +#adl-page input, #adl-page textarea, #adl-page select, #adl-page button, #adl-page a { + font-size: inherit; + font-family: inherit; + line-height: inherit; + font-weight: inherit; + text-decoration: inherit; + text-transform: inherit; +} +#adl-page button, #adl-page a, #adl-page ul, #adl-page li, #adl-page div, #adl-page tr, #adl-page input, #adl-page textarea { + outline: none; + box-sizing: border-box; +} +#adl-page button:focus, #adl-page button:hover, #adl-page a:focus, #adl-page a:hover, #adl-page ul:focus, #adl-page ul:hover, #adl-page li:focus, #adl-page li:hover, #adl-page div:focus, #adl-page div:hover, #adl-page tr:focus, #adl-page tr:hover, #adl-page input:focus, #adl-page input:hover, #adl-page textarea:focus, #adl-page textarea:hover { + outline: none; +} +#adl-page ul { + list-style-type: none; + margin: 0; + padding: 0; + padding-inline-start: 0; +} +#adl-page ul > li { + margin: 0; + padding: 0; +} +#adl-page input::placeholder { + opacity: 1; +} +#adl-page input::-ms-input-placeholder { + opacity: 1; +} +#adl-page input:-ms-input-placeholder { + opacity: 1; +} +#adl-page div, #adl-page p, #adl-page pre, #adl-page table, +#adl-page form, #adl-page fieldset, +#adl-page main, #adl-page header, #adl-page footer, #adl-page nav, #adl-page section, +#adl-page ul, #adl-page li, #adl-page ol, #adl-page dl, #adl-page dt, #adl-page dd, +#adl-page h1, #adl-page h2, #adl-page h3, #adl-page h4, #adl-page h5, #adl-page h6, +#adl-page hr, +#adl-page article, #adl-page aside, #adl-page details, #adl-page dialog, #adl-page figcaption, #adl-page figure { + box-sizing: border-box; + font: inherit; + font-family: "FaktPro", sans-serif; + font-size: 16px; + line-height: 1.4; +} +#adl-page h1, #adl-page h2, #adl-page h3, #adl-page h4, #adl-page h5, #adl-page h6, #adl-page p { + margin: 0; + padding: 0; + font-weight: 400; + text-decoration: inherit; + text-transform: inherit; +} +#adl-page h2 { + font-weight: 600; + font-size: 24px; + line-height: 1.33; + margin: 12px 0; +} +#adl-page p a { + font-weight: normal; +} +#adl-page button[disabled] { + pointer-events: none; +} +#adl-page button[disabled] > * { + pointer-events: none; +} +#adl-page *, #adl-page *:before, #adl-page *:after { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: geometricPrecision; +} +#adl-page .adl-button { + position: relative; + display: inline-block; + padding: 10px 16px; + font-weight: 600; + font-size: 15px; + cursor: pointer; + transition: all 0.2s; + border-radius: 6px; +} +#adl-page .adl-button:focus { + box-shadow: 0 0 0 3px #cce0ff; +} +#adl-page .adl-button span { + display: flex; + align-items: center; + column-gap: 8px; +} +#adl-page .adl-button span:before, #adl-page .adl-button span:after { + font-family: "adl-icons"; + line-height: 1; + font-weight: 500; + font-size: inherit; +} +#adl-page .adl-button.adlm--full-width { + width: 100%; +} +#adl-page .adl-button.adlm--small { + padding: 4px 8px; +} +#adl-page .adl-button.adlm--medium { + padding: 6px 16px; +} +#adl-page .adl-button.adlt--primary { + background-color: #0066ff; + color: #fff; +} +#adl-page .adl-button.adlt--primary.adlm--destructive { + background-color: #e50000; +} +#adl-page .adl-button.adlt--primary.adls--disabled, #adl-page .adl-button.adlt--primary:disabled { + background-color: #dce0e5; + color: #a5afbd; + pointer-events: none; +} +#adl-page .adl-button.adlt--primary:hover, #adl-page .adl-button.adlt--primary:focus { + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); +} +#adl-page .adl-button.adlt--secondary { + border: 1px solid #dce0e5; + background-color: #fff; + color: #394962; +} +#adl-page .adl-button.adlt--secondary:hover { + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); +} +#adl-page .adl-button.adlt--secondary.adlm--destructive { + color: #e50000; +} +#adl-page .adl-button.adlt--secondary.adlm--blue { + color: #0066ff; +} +#adl-page .adl-button.adlt--secondary.adls--disabled, #adl-page .adl-button.adlt--secondary:disabled { + color: #a5afbd; + pointer-events: none; +} +#adl-page .adl-button.adlt--ghost { + border: none; + background-color: transparent; + color: #394962; +} +#adl-page .adl-button.adlt--ghost:hover, #adl-page .adl-button.adlt--ghost:focus, #adl-page .adl-button.adlt--ghost:active { + background-color: #fff; +} +#adl-page .adl-button.adlt--ghost.adlm--blue { + color: #0066ff; +} +#adl-page .adl-button.adlt--ghost.adlm--destructive { + color: #e50000; +} +#adl-page .adl-button.adlt--ghost.adls--disabled, #adl-page .adl-button.adlt--ghost:disabled { + background-color: #dce0e5; + color: #a5afbd; + pointer-events: none; +} +#adl-page .adl-button.adlm--icon-only { + padding: 10px; +} +#adl-page .adl-button.adlm--icon-only span { + display: none; +} +#adl-page .adl-payments-page .adl-payment-methods-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + column-gap: 20px; + margin-top: 20px; +} +#adl-page .adl-payments-page .adl-payment-methods-header h2 { + margin: 0 0 18px; +} +#adl-page .adl-payments-page .adl-payment-methods-header .adlp-add-methods-button span { + white-space: nowrap; +} +@media (max-width: 767.98px) { + #adl-page .adl-payments-page .adl-payment-methods-header .adlp-add-methods-button { + position: fixed; + margin: auto; + bottom: 12px; + left: 50%; + width: calc(100% - 24px); + transform: translateX(-50%); + z-index: 1; + } + #adl-page .adl-payments-page .adl-payment-methods-header .adlp-add-methods-button span { + display: block; + text-align: center; + } +} +#adl-page .adl-payments-page .adlp-payment-logo { + max-width: 20px; + max-height: 20px; + margin-right: 8px; +} +@media (max-width: 1280.98px) { + #adl-page .adl-payments-page .adlp-payment-logo { + max-width: 40px; + max-height: 26px; + margin-right: 16px; + } +} +#adl-page .adl-payments-page .adlp-status-header { + display: flex; + gap: 4px; +} +#adl-page .adl-payments-page .adlp-status-header .adl-hint { + width: 14px; + height: 18px; + color: #0075ff; +} +#adl-page .adl-payments-page .adlp-status-header .adl-hint:before { + font-family: "adl-icons"; + content: "\e910"; + line-height: 1; + font-weight: 500; + font-size: 10px; +} +#adl-page .adl-payments-page .adlp-status-header .adl-hint .adlp-tooltip { + font-weight: 300; + max-width: 230px; + text-align: left; +} +#adl-page .adl-payments-page .adlp-configure-method-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; +} +#adl-page .adl-payments-page .adlp-configure-method-header h2 { + display: flex; + align-items: flex-start; + gap: 20px; + margin-bottom: 18px; +} +#adl-page .adl-payments-page .adlp-configure-method-header .adlp-status-badge { + padding: 4px 8px; + color: #08A648; + border: solid 1px #cef2dd; + background-color: #E6F8ED; + border-radius: 4px; + font-size: 12px; +} +#adl-page .adl-payments-page .adlp-configure-method-header .adlp-status-badge.adlt--inactive { + color: #720000; + border: solid 1px #e50000; + background-color: #facccc; +} +#adl-page .adl-payments-page .adlp-configure-method-header .adlp-payment-logo { + max-width: 50px; + max-height: 25px; + margin: 0; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper { + margin-top: 24px; + position: relative; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-table-filters { + display: flex; + flex-direction: row; + margin-top: 24px; + column-gap: 8px; + flex-wrap: wrap; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-reset-button:hover { + background-color: #dce0e5; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-reset-button span:before { + font-family: "adl-icons"; + content: "\e90e"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-filters-switch-button { + display: none; +} +#adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-filters-switch-button span:before { + font-family: "adl-icons"; + content: "\e912"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +@media (max-width: 767.98px) { + #adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-table-filters { + display: none; + column-gap: 24px; + row-gap: 18px; + } + #adl-page .adl-payments-page .adlp-table-filter-wrapper.adls--filters-active .adlp-table-filters { + display: flex; + } + #adl-page .adl-payments-page .adlp-table-filter-wrapper.adls--filters-active .adlp-filters-switch-button { + background-color: #dce0e5; + } + #adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-filters-switch-button { + display: block; + } + #adl-page .adl-payments-page .adlp-table-filter-wrapper .adlp-reset-button { + position: absolute; + top: 0; + right: 0; + } +} +#adl-page .adl-payments-page .adlp-separator { + margin-top: 16px; + width: 100%; + height: 6px; + background-color: #f3f6f9; +} +#adl-page .adl-payments-page .adl-file-drop-zone { + margin-top: 20px; +} +@media (max-width: 1280.98px) { + #adl-page .adl-payments-page .adlp-info-status .adlp-info-label .adl-hint { + display: none; + } +} +#adl-page .adl-payments-page .adlm--inline { + position: relative; +} +#adl-page .adl-single-select-dropdown { + position: relative; + border-radius: 6px; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button { + width: 100%; + padding: 8px 16px; + display: flex; + justify-content: space-between; + column-gap: 30px; + align-items: center; + border-radius: 6px; + border: 1px solid #dce0e5; + background-color: #fff; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button:after { + font-family: "adl-icons"; + content: "\e90d"; + line-height: 1; + font-weight: 500; + font-size: 11px; + color: #8390a3; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button:focus { + border: 1px solid #599bff; + box-shadow: 0 0 0 3px #cce0ff; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button span { + font-weight: 300; + display: flex; + width: 100%; + justify-content: space-between; + color: #69778c; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button span.adls--selected { + color: #00112c; +} +@media (max-width: 767.98px) { + #adl-page .adl-single-select-dropdown .adlp-dropdown-button span.adls--selected { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-button input { + display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + border-radius: 6px 6px 0 0; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list { + display: none; + position: absolute; + width: 100%; + scrollbar-width: none; + max-height: 180px; + overflow-y: auto; + flex-direction: column; + gap: 0; + border-top: none; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + background-color: #fff; + color: #00112c; + box-shadow: 2px 2px 2px -1px rgba(0, 0, 0, 0.25); + z-index: 5; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list.adls--show { + display: flex; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list::-webkit-scrollbar { + display: none; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list-item { + position: relative; + display: flex; + align-items: center; + padding: 8px 16px; + font-size: 15px; + font-weight: 300; + line-height: 1.6; + color: #00112c; + cursor: pointer; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list-item:hover { + background-color: #f3f6f9; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list-item.adls--selected { + position: relative; +} +#adl-page .adl-single-select-dropdown .adlp-dropdown-list-item.adls--selected:after { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 11px; + position: absolute; + right: 16px; + color: #394962; + font-weight: 700; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border: 1px solid #599bff; + border-bottom: 1px solid #e3e6eb; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(-10px -10px -1px -10px); +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active { + box-shadow: none; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active + .adlp-dropdown-list { + box-shadow: none; + border: 1px solid #dce0e5; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active input { + display: block; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results { + border-radius: 6px; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results input { + border-radius: 6px; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results + .adlp-dropdown-list { + display: none; +} +#adl-page .adl-single-select-dropdown.adls--active .adlp-dropdown-list { + border: 1px solid #599bff; + border-top: none; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(0 -10px -10px -10px); +} +#adl-page .adl-single-select-dropdown.adls--disabled .adlp-dropdown-button { + background-color: #f3f6f9; + color: #69778c; + border: 1px solid #dce0e5; + pointer-events: none; +} +#adl-page .adl-single-select-dropdown.adls--error .adlp-dropdown-button { + border: 1px solid #ee5959; +} +#adl-page .adl-single-select-dropdown.adlm--inline .adlp-dropdown-list { + position: relative; +} +#adl-page .adl-multiselect-dropdown { + position: relative; + border-radius: 6px; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button { + width: 100%; + padding: 8px 16px; + display: flex; + justify-content: space-between; + column-gap: 30px; + align-items: center; + border-radius: 6px; + border: 1px solid #dce0e5; + background-color: #fff; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button:after { + font-family: "adl-icons"; + content: "\e90d"; + line-height: 1; + font-weight: 500; + font-size: 11px; + color: #8390a3; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button:focus { + border: 1px solid #599bff; + box-shadow: 0 0 0 3px #cce0ff; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button span { + font-weight: 300; + display: flex; + width: 100%; + justify-content: space-between; + color: #69778c; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button span.adls--selected { + color: #00112c; +} +@media (max-width: 767.98px) { + #adl-page .adl-multiselect-dropdown .adlp-dropdown-button span.adls--selected { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-button input { + display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + border-radius: 6px 6px 0 0; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list { + display: none; + position: absolute; + width: 100%; + scrollbar-width: none; + max-height: 180px; + overflow-y: auto; + flex-direction: column; + gap: 0; + border-top: none; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + background-color: #fff; + color: #00112c; + box-shadow: 2px 2px 2px -1px rgba(0, 0, 0, 0.25); + z-index: 5; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list.adls--show { + display: flex; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list::-webkit-scrollbar { + display: none; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item { + position: relative; + display: flex; + align-items: center; + padding: 8px 16px; + font-size: 15px; + font-weight: 300; + line-height: 1.6; + color: #00112c; + cursor: pointer; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item:hover { + background-color: #f3f6f9; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--selected { + position: relative; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--selected:after { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 11px; + position: absolute; + right: 16px; + color: #394962; + font-weight: 700; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border: 1px solid #599bff; + border-bottom: 1px solid #e3e6eb; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(-10px -10px -1px -10px); +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active { + box-shadow: none; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active + .adlp-dropdown-list { + box-shadow: none; + border: 1px solid #dce0e5; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active input { + display: block; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results { + border-radius: 6px; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results input { + border-radius: 6px; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-button.adls--search-active.adls--no-results + .adlp-dropdown-list { + display: none; +} +#adl-page .adl-multiselect-dropdown.adls--active .adlp-dropdown-list { + border: 1px solid #599bff; + border-top: none; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(0 -10px -10px -10px); +} +#adl-page .adl-multiselect-dropdown.adls--disabled .adlp-dropdown-button { + background-color: #f3f6f9; + color: #69778c; + border: 1px solid #dce0e5; + pointer-events: none; +} +#adl-page .adl-multiselect-dropdown.adls--error .adlp-dropdown-button { + border: 1px solid #ee5959; +} +#adl-page .adl-multiselect-dropdown.adlm--inline .adlp-dropdown-list { + position: relative; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item:before { + content: ""; + -webkit-appearance: none; + background: #fff; + border: 1px solid #a5afbd; + border-radius: 4px; + padding: 7px; + display: inline-block; + position: relative; + cursor: pointer; + margin-right: 12px; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--selected:before { + background-color: #0066ff; + border: 1px solid #0066ff; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--selected:after { + right: unset; + left: 19px; + color: #fff; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--disabled { + pointer-events: none; + color: #8390a3; +} +#adl-page .adl-multiselect-dropdown .adlp-dropdown-list-item.adls--disabled:before { + background: #dce0e5; +} +#adl-page .adl-multiselect-dropdown .adlp-checkbox { + display: none; +} +#adl-page .adl-multiselect-filter { + position: relative; + width: fit-content; +} +#adl-page .adl-multiselect-filter .adlp-filter-button { + padding: 0 16px; + height: 32px; + display: inline-flex; + align-items: center; + font-weight: 400; +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-tooltip { + position: absolute; + top: calc(-100% - 3px); + white-space: nowrap; + background-color: #20304c; + color: #fff; + font-weight: 600; + left: 50%; + transform: translateX(-50%); + font-size: 13px; + padding: 4px 8px; + border-radius: 4px; + display: none; +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-tooltip:after { + content: ""; + display: block; + position: absolute; + width: 10px; + height: 10px; + background: #00112c; + transform: rotate(45deg); + border-radius: 2px; + bottom: -5px; + left: calc(50% - 5px); +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button { + display: none; + border-radius: 50%; + width: 24px; + height: 24px; +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:after { + font-family: "adl-icons"; + content: "\e90a"; + line-height: 1; + font-weight: 500; + font-size: 9px; + font-weight: 600; + color: #fff; +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:hover { + background: #fff; +} +#adl-page .adl-multiselect-filter .adlp-filter-button .adlp-delete-text-button:hover:after { + color: #20304c; +} +#adl-page .adl-multiselect-filter .adlp-filter-button.adls--selected { + display: inline-flex; + align-items: center; + padding: 0 8px 0 16px; + gap: 8px; + background-color: #20304c; + color: #fff; + border-color: transparent; + font-weight: 600; +} +#adl-page .adl-multiselect-filter .adlp-filter-button.adls--selected:hover .adlp-tooltip { + display: block; +} +#adl-page .adl-multiselect-filter .adlp-filter-button.adls--selected .adlp-delete-text-button { + display: inline-block; +} +#adl-page .adl-multiselect-filter .adl-single-select-dropdown .adlp-dropdown-list-item.adls--selected:after { + display: none; +} +#adl-page .adl-multiselect-filter .adlp-dropdown-container { + display: none; + position: absolute; + top: 48px; + z-index: 1; +} +#adl-page .adl-multiselect-filter .adlp-dropdown-container .adlp-content { + width: 350px; + border-radius: 6px; + border: 1px solid #dce0e5; + box-shadow: 0 8px 16px rgba(0, 17, 44, 0.1); + background-color: #fff; +} +#adl-page .adl-multiselect-filter .adlp-dropdown-container.adls--open { + display: block; +} +@media (max-width: 767.98px) { + #adl-page .adl-multiselect-filter .adlp-dropdown-container.adls--open { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 10px; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(0, 17, 44, 0.4); + } +} +#adl-page .adl-multiselect-filter .adlp-filter-header { + position: relative; + display: none; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 16px; +} +@media (max-width: 767.98px) { + #adl-page .adl-multiselect-filter .adlp-filter-header { + display: flex; + } +} +#adl-page .adl-multiselect-filter .adlp-filter-header span { + font-size: 20px; + font-weight: 600; +} +#adl-page .adl-multiselect-filter .adlp-filter-header .adlp-close-button { + width: 24px; + height: 24px; + color: #394962; +} +#adl-page .adl-multiselect-filter .adlp-filter-header .adlp-close-button:before { + font-family: "adl-icons"; + content: "\e90a"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page .adl-multiselect-filter .adlp-dropdown-data { + position: relative; + padding: 16px; + border-radius: 6px 6px 0 0; + background-color: #fff; +} +#adl-page .adl-multiselect-filter .adlp-selected-data { + display: block; +} +#adl-page .adl-multiselect-filter .adlp-selected-data-item { + font-size: 15px; + color: #00112c; + font-weight: 300; +} +#adl-page .adl-multiselect-filter .adlp-selected-data-item:first-child { + margin-top: 16px; +} +#adl-page .adl-multiselect-filter .adlp-selected-data-item .adlt--remove-item { + margin: 4px 8px 4px 0; +} +#adl-page .adl-multiselect-filter .adlp-selected-data-item .adlt--remove-item:before { + font-family: "adl-icons"; + content: "\e903"; + line-height: 1; + font-weight: 500; + font-size: 9px; + display: flex; + align-items: center; + justify-content: center; + width: 13px; + height: 13px; + border-radius: 50%; + border: 1px solid #dce0e5; + color: #394962; +} +#adl-page .adl-multiselect-filter .adlp-data-label { + display: block; + margin-bottom: 8px; + font-size: 15px; + font-weight: 600; + color: #00112c; +} +#adl-page .adl-multiselect-filter .adlp-buttons { + position: relative; + display: flex; + justify-content: space-between; + padding: 16px; + background: #f3f6f9; + border-top: 1px solid #dce0e5; + border-radius: 0 0 6px 6px; +} +#adl-page .adl-multiselect-filter .adlp-buttons .adl-button { + font-size: 13px; +} +#adl-page .adl-store-switcher { + position: relative; + width: 100%; + display: flex; + align-items: center; + gap: 12px; + padding: 0; + background-color: #fff; +} +@media (min-width: 768px) { + #adl-page .adl-store-switcher { + max-width: 200px; + } +} +#adl-page .adl-store-switcher .adlp-stores { + display: none; +} +#adl-page .adl-store-switcher .adlp-stores.adls--show { + display: flex; + flex-direction: column; + gap: 0; + min-width: 190px; + top: 57px; + left: -12px; + max-height: 123px; + overflow-y: auto; + scrollbar-width: none; + position: absolute; + border-radius: 8px; + border: 1px solid #dce0e5; + background-color: #fff; + color: #00112c; + z-index: 5; +} +#adl-page .adl-store-switcher .adlp-stores.adls--show .adlp-store { + cursor: pointer; +} +#adl-page .adl-store-switcher .adlp-stores.adls--show .adlp-store:hover { + background-color: #f3f6f9; +} +#adl-page .adl-store-switcher .adlp-store { + font-weight: 300; + padding: 8px 16px; + color: #00112c; + font-size: 15px; + line-height: 1.6; +} +#adl-page .adl-store-switcher .adlp-store.adls--selected { + display: flex; + justify-content: space-between; + align-items: center; + column-gap: 10px; +} +#adl-page .adl-store-switcher .adlp-store.adls--selected:after { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 11px; + font-weight: 600; + color: #394962; +} +#adl-page .adl-store-switcher .adl-store-icon { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 32px; + height: 32px; + border-radius: 6px; + background-color: #20304c; + color: #fff; +} +#adl-page .adl-store-switcher .adl-store-icon:before { + font-family: "adl-icons"; + content: "\e915"; + line-height: 1; + font-weight: 500; + font-size: 14px; +} +#adl-page .adl-store-switcher .adlp-switch-text { + height: fit-content; + padding: 0; + font-weight: 300; + font-size: 13px; + line-height: 1.3; + color: #69778c; + text-transform: none; + border-bottom: none; +} +#adl-page .adl-store-switcher .adlp-switch-store-button { + font-weight: 600; + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; + font-size: 15px; + line-height: 1.4; + color: #20304c; +} +@media (min-width: 768px) { + #adl-page .adl-store-switcher .adlp-switch-store-button { + max-width: 123px; + } + #adl-page .adl-store-switcher .adlp-switch-store-button span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +#adl-page .adl-store-switcher .adlp-switch-store-button span { + text-align: left; +} +#adl-page .adl-store-switcher .adlp-switch-store-button:after { + font-family: "adl-icons"; + content: "\e90d"; + line-height: 1; + font-weight: 500; + font-size: 7px; + color: #00112c; +} +#adl-page #adl-main-header .adl-header-navigation { + width: 100%; + max-width: fit-content; + padding: 10px 12px; + border-radius: 8px; + border: 1px solid #dce0e5; +} +@media (max-width: 767.98px) { + #adl-page #adl-main-header .adl-header-navigation { + max-width: unset; + padding: 5px 12px; + } +} +#adl-page #adl-main-header .adl-alert { + margin-top: 20px; +} +#adl-page #adl-main-header .adlp-nav-list { + display: flex; + column-gap: 1px; + flex-wrap: wrap; + background-color: #dce0e5; +} +@media (max-width: 767.98px) { + #adl-page #adl-main-header .adlp-nav-list { + flex-direction: column; + } +} +#adl-page #adl-main-header .adlp-nav-item { + background-color: #fff; + display: flex; + align-items: center; + padding: 9px 12px; + gap: 12px; + min-width: 184px; + flex: 1; +} +@media (max-width: 767.98px) { + #adl-page #adl-main-header .adlp-nav-item { + padding-left: 0; + } + #adl-page #adl-main-header .adlp-nav-item:not(:first-child) { + border-left: none; + } +} +#adl-page #adl-main-header .adlp-nav-item-icon { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 32px; + height: 32px; + border-radius: 6px; + background-color: #20304c; + color: #fff; +} +#adl-page #adl-main-header .adlm--merchant .adlp-nav-item-icon:before { + font-family: "adl-icons"; + content: "\e913"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page #adl-main-header .adlm--mode .adlp-nav-item-icon:before { + font-family: "adl-icons"; + content: "\e900"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page #adl-main-header .adlm--download .adlp-nav-item-icon:before { + font-family: "adl-icons"; + content: "\e914"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page #adl-main-header .adlp-download-link { + align-items: center; +} +#adl-page #adl-main-header .adlp-download-link:after { + display: none; +} +#adl-page #adl-main-header .adlp-download-link:hover span { + text-decoration: none; +} +#adl-page #adl-main-header h3.adlp-nav-item-title { + height: initial; + padding: 0; + font-weight: 300; + font-family: "FaktPro", sans-serif; + font-size: 13px; + border-bottom: none; + color: #69778c; + line-height: 1; + text-transform: none; +} +#adl-page #adl-main-header .adlp-nav-item-subtitle { + font-weight: 600; + font-size: 15px; + line-height: 1.4; + color: #20304c; +} +@media (min-width: 768px) { + #adl-page #adl-main-header .adlp-nav-item-subtitle { + max-width: 123px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +#adl-page #adl-main-header .adl-store-switcher { + position: relative; + width: 100%; + display: flex; + align-items: center; + gap: 12px; + padding: 0; + background-color: #fff; +} +@media (min-width: 768px) { + #adl-page #adl-main-header .adl-store-switcher { + max-width: 200px; + } +} +#adl-page #adl-main-header .adl-store-switcher .adlp-stores { + display: none; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-stores.adls--show { + display: flex; + flex-direction: column; + gap: 0; + min-width: 190px; + top: 57px; + left: -12px; + max-height: 123px; + overflow-y: auto; + scrollbar-width: none; + position: absolute; + border-radius: 8px; + border: 1px solid #dce0e5; + background-color: #fff; + color: #00112c; + z-index: 5; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-stores.adls--show .adlp-store { + cursor: pointer; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-stores.adls--show .adlp-store:hover { + background-color: #f3f6f9; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-store { + font-weight: 300; + padding: 8px 16px; + color: #00112c; + font-size: 15px; + line-height: 1.6; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-store.adls--selected { + display: flex; + justify-content: space-between; + align-items: center; + column-gap: 10px; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-store.adls--selected:after { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 11px; + font-weight: 600; + color: #394962; +} +#adl-page #adl-main-header .adl-store-switcher .adl-store-icon { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 32px; + height: 32px; + border-radius: 6px; + background-color: #20304c; + color: #fff; +} +#adl-page #adl-main-header .adl-store-switcher .adl-store-icon:before { + font-family: "adl-icons"; + content: "\e915"; + line-height: 1; + font-weight: 500; + font-size: 14px; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-switch-text { + height: fit-content; + padding: 0; + font-weight: 300; + font-size: 13px; + line-height: 1.3; + color: #69778c; + text-transform: none; + border-bottom: none; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-switch-store-button { + font-weight: 600; + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; + font-size: 15px; + line-height: 1.4; + color: #20304c; +} +@media (min-width: 768px) { + #adl-page #adl-main-header .adl-store-switcher .adlp-switch-store-button { + max-width: 123px; + } + #adl-page #adl-main-header .adl-store-switcher .adlp-switch-store-button span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +#adl-page #adl-main-header .adl-store-switcher .adlp-switch-store-button span { + text-align: left; +} +#adl-page #adl-main-header .adl-store-switcher .adlp-switch-store-button:after { + font-family: "adl-icons"; + content: "\e90d"; + line-height: 1; + font-weight: 500; + font-size: 7px; + color: #00112c; +} +#adl-page a, #adl-page .adl-link { + position: relative; + margin-right: 8px; + color: #0066ff; + font-weight: 300; + font-size: 15px; + text-decoration: none; + transition: color 0.2s; + display: inline-flex; + flex-direction: row; + gap: 8px; +} +#adl-page a:hover span, #adl-page .adl-link:hover span { + text-decoration: underline; +} +#adl-page a[target=_blank]:after, #adl-page .adl-link[target=_blank]:after { + font-family: "adl-icons"; + content: "\e901"; + line-height: 1; + font-weight: 500; + font-size: 7px; + position: relative; + top: 3px; +} +#adl-page a.adlt--underlined span, #adl-page .adl-link.adlt--underlined span { + text-decoration: underline; +} +#adl-page .adl-text-input { + height: initial; + padding: 8px 16px; + font-weight: 300; + font-size: 16px; + font-family: "FaktPro", sans-serif; + color: #000; + background-color: #fff; + border: 1px solid #dce0e5; + border-radius: 6px; +} +#adl-page .adl-text-input:focus, #adl-page .adl-text-input:active { + border-color: #0066ff; +} +#adl-page .adl-text-input.adlm--full-width { + width: 100%; +} +#adl-page .adl-text-input::placeholder { + color: #69778c; +} +#adl-page .adl-text-input::-ms-input-placeholder { + color: #69778c; +} +#adl-page .adl-text-input:-ms-input-placeholder { + color: #69778c; +} +#adl-page .adl-password { + position: relative; + display: flex; + flex-direction: row; + align-items: center; +} +#adl-page .adl-password input { + height: initial; + padding: 8px 16px; + font-weight: 300; + font-size: 16px; + font-family: "FaktPro", sans-serif; + color: #000; + background-color: #fff; + border: 1px solid #dce0e5; + border-radius: 6px; + padding-right: 41px; + width: 100%; +} +#adl-page .adl-password input:focus, #adl-page .adl-password input:active { + border-color: #0066ff; +} +#adl-page .adl-password input.adlm--full-width { + width: 100%; +} +#adl-page .adl-password input::placeholder { + color: #69778c; +} +#adl-page .adl-password input::-ms-input-placeholder { + color: #69778c; +} +#adl-page .adl-password input:-ms-input-placeholder { + color: #69778c; +} +#adl-page .adl-password span { + cursor: pointer; + position: absolute; + right: 15px; + height: 18px; +} +#adl-page .adl-password span:before { + font-family: "adl-icons"; + content: "\e911"; + line-height: 1; + font-weight: 500; + font-size: 16px; +} +#adl-page .adl-password span:hover:before { + font-weight: 600; +} +#adl-page .adl-radio-input span { + font-weight: 300; +} +#adl-page .adl-radio-input [type=radio] { + display: none; +} +#adl-page .adl-radio-input [type=radio] + span { + position: relative; + padding-left: 28px; + cursor: pointer; + line-height: 20px; + display: inline-block; + color: #555; +} +#adl-page .adl-radio-input [type=radio] + span:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + box-sizing: border-box; + border: 1px solid #ddd; + border-radius: 100%; + background: #fff; +} +#adl-page .adl-radio-input [type=radio] + span:after { + content: ""; + width: 16px; + height: 16px; + box-sizing: border-box; + border: 4px solid #0066ff; + position: absolute; + top: 0; + left: 0; + border-radius: 100%; + transition: all 0.2s ease; + opacity: 0; + transform: scale(0); +} +#adl-page .adl-radio-input [type=radio]:checked + span:after { + opacity: 1; + transform: scale(1); +} +#adl-page .adl-radio-input-group { + display: flex; + align-items: center; + gap: 20px; +} +#adl-page .adl-loader { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} +#adl-page .adl-loader .adlp-spinner { + border: 3px solid rgba(0, 102, 255, 0.1); + border-top-color: #0066ff; + border-radius: 50%; + width: 24px; + height: 24px; + animation: loader-spin 0.8s linear infinite; +} +#adl-page .adl-loader.adlt--small .adlp-spinner { + border-width: 2px; + width: 16px; + height: 16px; +} +#adl-page .adl-loader.adlt--large .adlp-spinner { + border-width: 4px; + width: 48px; + height: 48px; +} +#adl-page .adl-loader.adlm--dark .adlp-spinner { + border-color: rgba(255, 255, 255, 0.1); + border-top-color: #fff; +} +@keyframes loader-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +#adl-page .adl-toggle { + position: relative; + display: inline-block; + width: 34px; + height: 17px; +} +#adl-page .adl-toggle input { + opacity: 0; + width: 0; + height: 0; +} +#adl-page .adl-toggle .adlp-toggle-round { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #a5afbd; + transition: 0.4s; + border-radius: 13px; +} +#adl-page .adl-toggle .adlp-toggle-round:before { + position: absolute; + content: ""; + height: 13px; + width: 13px; + left: 2px; + bottom: 2px; + background-color: #fff; + transition: 0.4s; + border-radius: 50%; +} +#adl-page .adl-toggle input:checked + .adlp-toggle-round { + background-color: #0066ff; +} +#adl-page .adl-toggle input:focus + .adlp-toggle-round { + box-shadow: 0 0 1px #0066ff; +} +#adl-page .adl-toggle input:checked + .adlp-toggle-round:before { + transform: translateX(17px); +} +#adl-page .adl-field-wrapper { + width: 100%; + display: flex; + flex-direction: column; + margin: 24px 0; +} +#adl-page .adl-field-wrapper .adlp-field-subtitle { + font-size: 16px; +} +#adl-page .adl-field-wrapper h3.adlp-field-title { + font-weight: 600; + text-transform: none; + font-size: 18px; + height: initial; + padding: 0; + margin-bottom: 0; + border-bottom: none; + color: #00112c; + background-color: transparent; +} +#adl-page .adl-field-wrapper .adlp-field-subtitle { + display: block; + margin-bottom: 4px; + color: #20304c; +} +#adl-page .adl-field-wrapper .adlp-field-component:invalid { + border: 1px solid #e50000; + color: #e50000; +} +#adl-page .adl-field-wrapper .adlp-field-component:invalid + .adlp-input-error { + display: block; +} +#adl-page .adl-field-wrapper .adlp-input-error { + display: none; + margin-top: 4px; + font-size: 13px; + color: #e50000; +} +#adl-page .adl-field-wrapper.adlt--checkbox .adlp-field-title { + display: flex; + align-items: center; + justify-content: space-between; + column-gap: 10px; +} +#adl-page .adl-field-wrapper.adlt--checkbox .adlp-field-subtitle { + padding-right: 40px; +} +#adl-page .adl-field-wrapper.adls--error .adlp-field-component { + border: 1px solid #e50000; + color: #e50000; +} +#adl-page .adl-field-wrapper.adls--error .adlp-input-error { + display: block; +} +#adl-page .adl-field-wrapper.adlm--turned .adls--active .adlp-dropdown-button { + border-radius: 0 0 6px 6px; + border: 1px solid #599bff; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(-10px -10px -10px -10px); +} +#adl-page .adl-field-wrapper.adlm--turned .adls--active .adlp-dropdown-button:after { + transform: rotate(180deg); +} +#adl-page .adl-field-wrapper.adlm--turned .adls--active .adlp-dropdown-list { + bottom: 40px; + border-radius: 6px 6px 0 0; + border: 1px solid #599bff; + border-bottom: 1px solid #e3e6eb; + box-shadow: 0 0 0 3px #cce0ff; + clip-path: inset(-10px -10px 0 -10px); +} +#adl-page .adl-table-wrapper { + margin: 24px 0; + padding: 24px; + border: 1px solid #dce0e5; + border-radius: 6px; + font-size: 13px; +} +@media (max-width: 1280.98px) { + #adl-page .adl-table-wrapper { + display: none; + } +} +#adl-page .adl-table-wrapper table tr .adl-button { + font-size: inherit; + display: inline-flex; + align-items: center; + column-gap: 8px; +} +#adl-page .adl-table-wrapper table tr .adlt--add-button:before { + font-family: "adl-icons"; + content: "\e90f"; + line-height: 1; + font-weight: 500; + font-size: inherit; +} +#adl-page .adl-table-wrapper table tr .adlt--edit-button:before { + font-family: "adl-icons"; + content: "\e904"; + line-height: 1; + font-weight: 500; + font-size: inherit; +} +#adl-page .adl-table-wrapper table tr .adlt--edit-button span { + display: none; +} +#adl-page .adl-table-wrapper table tr .adlt--delete-button:before { + font-family: "adl-icons"; + content: "\e90c"; + line-height: 1; + font-weight: 500; + font-size: inherit; +} +@media (max-width: 1280.98px) { + #adl-page .adl-table-wrapper table tr .adlt--delete-button { + display: none; + } +} +#adl-page .adl-table-wrapper table tr .adlt--delete-button span { + display: none; +} +#adl-page .adl-table-wrapper table th { + text-align: center; +} +#adl-page .adl-table-wrapper table th.adlm--left-aligned { + text-align: left; +} +@media (max-width: 1280.98px) { + #adl-page .adl-notifications-table .adl-table-wrapper { + display: block; + } +} +#adl-page .adl-toaster { + width: fit-content; + max-width: 420px; + display: flex; + justify-content: space-between; + padding: 12px 9px 12px 16px; + border-radius: 8px; + background-color: #00112c; + position: fixed; + bottom: 10px; + left: 50%; + transform: translateX(-50%); + gap: 20px; +} +#adl-page .adl-toaster.adls--closed { + display: none; +} +#adl-page .adl-toaster .adlp-toaster-title { + display: flex; + align-items: center; + gap: 8px; + font-weight: 600; + font-size: 15px; + color: #fff; + line-height: 21px; +} +#adl-page .adl-toaster .adlp-toaster-title:before { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 9px; + width: 18px; + height: 18px; + background-color: #60d58f; + border-radius: 50%; + display: inline-flex; + justify-content: center; + align-items: center; + flex-shrink: 0; +} +#adl-page .adl-toaster .adl-button { + padding: 7px; +} +#adl-page .adl-toaster .adl-button span:before { + font-family: "adl-icons"; + content: "\e90b"; + line-height: 1; + font-weight: 500; + font-size: 7px; + color: #394962; +} +#adl-page .adl-alert { + width: 100%; + display: flex; + justify-content: space-between; + padding: 24px 19px 24px 24px; + border-radius: 4px; +} +#adl-page .adl-alert.adls--closed { + display: none; +} +#adl-page .adl-alert .adlp-alert-title { + display: flex; + align-items: flex-start; + font-size: 15px; + line-height: 21px; +} +#adl-page .adl-alert .adlp-alert-title:before { + position: relative; + top: 3px; +} +#adl-page .adl-alert .adlp-message { + display: flex; + flex-direction: column; +} +#adl-page .adl-alert .adlp-message .adlp-message-title { + font-weight: 600; +} +#adl-page .adl-alert .adl-button { + padding: 7px; +} +#adl-page .adl-alert .adl-button span:before { + font-family: "adl-icons"; + content: "\e90b"; + line-height: 1; + font-weight: 500; + font-size: 7px; + color: inherit; +} +#adl-page .adl-alert.adlt--success { + background-color: #cef2dd; + color: #055f29; +} +#adl-page .adl-alert.adlt--success .adlp-alert-title { + gap: 18px; +} +#adl-page .adl-alert.adlt--success .adlp-alert-title:before { + font-family: "adl-icons"; + content: "\e91a"; + line-height: 1; + font-weight: 500; + font-size: 11px; + top: 5px; +} +#adl-page .adl-alert.adlt--warning { + background-color: #ffeacc; + color: #7F4A00; +} +#adl-page .adl-alert.adlt--warning .adlp-alert-title { + gap: 17px; +} +#adl-page .adl-alert.adlt--warning .adlp-alert-title:before { + font-family: "adl-icons"; + content: "\e919"; + line-height: 1; + font-weight: 500; + font-size: 13px; +} +#adl-page .adl-alert.adlt--error { + background-color: #facccc; + color: #720000; +} +#adl-page .adl-alert.adlt--error .adlp-alert-title { + gap: 16px; +} +#adl-page .adl-alert.adlt--error .adlp-alert-title:before { + font-family: "adl-icons"; + content: "\e908"; + line-height: 1; + font-weight: 500; + font-size: 15px; +} +#adl-page .adl-data-table-wrapper { + display: none; + width: 100%; + margin: 24px 0; +} +@media (max-width: 1280.98px) { + #adl-page .adl-data-table-wrapper { + display: flex; + flex-direction: column; + row-gap: 24px; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card { + position: relative; + display: flex; + flex-direction: column; + padding: 0 14px 16px; + border: 1px solid #dce0e5; + border-radius: 4px; +} +@media (max-width: 767.98px) { + #adl-page .adl-data-table-wrapper .adlp-data-card { + padding: 40px 6px 16px; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-method-name { + max-width: calc(100% - 220px); + padding: 27px 0; + display: flex; + align-items: center; + font-size: 22px; + line-height: 1.45; + color: #000; +} +@media (max-width: 767.98px) { + #adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-method-name { + padding: 0 10px 27px; + max-width: 100%; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-info-item { + flex: 1; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions { + position: absolute; + right: 14px; + top: 20px; + display: flex; + align-items: center; + justify-content: flex-end; + column-gap: 9px; +} +@media (max-width: 767.98px) { + #adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions { + right: unset; + top: unset; + padding: 0 10px; + position: relative; + justify-content: center; + column-gap: 16px; + flex-direction: row-reverse; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adl-button { + font-size: inherit; + display: flex; + align-items: center; + justify-content: center; + column-gap: 8px; + padding: 10px 16px; + border: 1px solid #dce0e5; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adl-button:not(.adlm--destructive) { + color: #0066ff; +} +@media (max-width: 1280.98px) { + #adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adl-button { + width: 100%; + } + #adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adl-button span { + justify-content: center; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adlt--add-button span:before { + content: "\e90f"; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adlt--edit-button span:before { + content: "\e904"; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-actions .adlt--delete-button span:before { + content: "\e90c"; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-info-list { + display: flex; + column-gap: 32px; + row-gap: 32px; + padding-top: 16px; + border-top: 1px solid #dce0e5; +} +@media (max-width: 767.98px) { + #adl-page .adl-data-table-wrapper .adlp-data-card .adlp-payment-info-list { + display: grid; + padding: 26px 20px 0; + margin-bottom: 32px; + grid-template-areas: "info-status info-currencies" "info-countries info-type"; + } +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-info-label { + font-weight: 600; + display: block; + margin-bottom: 15px; + font-size: 15px; + line-height: 21px; + color: #00112c; + text-transform: uppercase; +} +#adl-page .adl-data-table-wrapper .adlp-data-card .adlp-info-data { + font-weight: 300; + font-size: 18px; + line-height: 1.17; + color: #00112c; +} +#adl-page .adl-modal { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(0, 17, 44, 0.4); + z-index: 100; + display: flex; + align-items: center; + justify-content: center; +} +@media (max-width: 767.98px) { + #adl-page .adl-modal { + padding: 10px; + } +} +#adl-page .adl-modal .adlp-modal-content { + background: #fff; + display: flex; + max-height: 90%; + max-width: 90%; + flex-direction: column; + align-items: center; + position: relative; + margin: 0 auto; + box-shadow: 0 8px 8px rgba(0, 17, 44, 0.04), 0 2px 4px rgba(0, 17, 44, 0.08); + border-radius: 12px; +} +#adl-page .adl-modal .adlp-modal-content .adlp-close-button { + position: absolute; + width: 24px; + height: 24px; + top: 15px; + right: 12px; + display: flex; + align-items: center; + justify-content: center; + color: #394962; + z-index: 1; +} +#adl-page .adl-modal .adlp-modal-content .adlp-close-button span:before { + content: "\e90a"; +} +#adl-page .adl-modal .adlp-modal-content .adlp-title { + color: #00112c; + font-size: 20px; + font-weight: 600; + text-align: left; + padding: 16px 40px 16px 24px; + width: 100%; +} +#adl-page .adl-modal .adlp-modal-content .adlp-body { + padding: 0 24px; + align-items: flex-start; + justify-content: flex-start; + width: 100%; + overflow: hidden auto; + font-size: 15px; + font-weight: 300; +} +#adl-page .adl-modal .adlp-modal-content .adlp-body.adlm--full-width { + padding: 20px 0; +} +#adl-page .adl-modal .adlp-modal-content .adlp-footer { + padding: 24px; + display: flex; + flex-direction: row; + justify-content: flex-end; + width: 100%; + flex-shrink: 0; + gap: 10px; +} +#adl-page .adls--hidden { + display: none !important; +} +#adl-page .adl-page-loader { + position: fixed; + z-index: 500; + background-color: rgba(0, 17, 44, 0.4); + display: flex; + justify-content: center; + align-items: center; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +#adl-page .adlp-status { + display: flex; + align-items: center; + gap: 6px; +} +#adl-page .adlp-status:before { + content: ""; + width: 6px; + height: 6px; + display: block; + border-radius: 50%; +} +#adl-page .adlp-status.adlt--active:before { + background: #0ABF53; +} +#adl-page .adlp-status.adlt--inactive:before { + background: #e50000; +} +#adl-page .adlp-status.adlt--warning:before { + background: #ff9900; +} +#adl-page .adlp-status.adlt--error:before { + background: #ff3d00; +} +#adl-page .adlp-status.adlt--info:before { + background: #00a3ff; +} +#adl-page .adlp-status.adlt--created:before { + background: #00a3ff; +} +#adl-page .adlp-status.adlt--queued:before { + background: #b5b5b5; +} +#adl-page .adlp-status.adlt--in_progress:before { + background: #00a3ff; +} +#adl-page .adlp-status.adlt--completed:before { + background: #0a7001; +} +#adl-page .adlp-status.adlt--aborted:before { + background: #ff3d00; +} +#adl-page .adlp-status.adlt--failed:before { + background: #ff3d00; +} +#adl-page * + .adlp-flash-message-wrapper, #adl-page .adlp-flash-message-wrapper + * { + margin-top: 20px; +} + +body { + background-color: white; + box-sizing: border-box; + display: flex; +} diff --git a/tests/Integration/.gitkeep b/Resources/views/backend/_resources/css/adyen.css similarity index 100% rename from tests/Integration/.gitkeep rename to Resources/views/backend/_resources/css/adyen.css diff --git a/Resources/views/backend/_resources/favicon.ico b/Resources/views/backend/_resources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0dc0000a834e874d6d355893049be93c1b21a722 GIT binary patch literal 1150 zcmc&zK?;B%5S*Y>U8Fz9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLMfuL^+7WFhI$72aI=A0Z9t+{{zaLoK$}74+Zoz`RicPN?Xl4Z zS&rlwh)=>@JPUP4@D)KXV`NSl-i@wz5t2U(%MS;H`HwUT*x) z+8`)!WSv<=KuZrmH_yBpdR7_ug2Z$WYfK(82%5s*LeRs$4VIe9;6@ O+) => Promise | any, fallthrough?: + * boolean) => Promise} get + * @property {(url:string, data?: any, customHeader?: Record, errorCallback: (error?: + * Record) => Promise) => Promise} post + * @property {(url:string, data?: any, customHeader?: Record, errorCallback: (error?: + * Record) => Promise) => Promise} put + * @property {(url:string, data?: any, errorCallback?: (error?: Record) => Promise) => + * Promise} delete + */ +(function () { + /** + * Ajax/API service. + * + * @returns {AjaxServiceType} + */ + const AjaxService = () => { + let callValidationState = ''; + + /** + * Handles the server response. + * @param {Response} response + * @param {(error: Record) => Promise?} errorCallback + * @returns {Record} + */ + const handleResponse = (response, errorCallback) => { + if (!errorCallback) { + errorCallback = AdyenFE.responseService.errorHandler; + } + + try { + if (response.ok) { + return response.json(); + } + + if (response.status === 401) { + // reset the state so all requests should become obsolete + callValidationState = Math.random().toString(36); + + return response.json().then(AdyenFE.responseService.unauthorizedHandler).catch(errorCallback); + } + + if (response.status === 400) { + return response.json().then(errorCallback); + } + } catch (e) {} + + return errorCallback({ status: response.status, error: response.statusMessage }); + }; + + /** + * Performs GET ajax request. + * + * @param {string} url The URL to call. + * @param {(error: Record) => Promise?} errorCallback + * @param {boolean?} [fallthrough=false] + * @returns {Promise} + */ + const get = (url, errorCallback, fallthrough = false) => + call({ + method: 'GET', + url, + errorCallback, + fallthrough + }); + + /** + * Performs POST ajax request. + * + * @param {string} url The URL to call. + * @param {Record?} data + * @param {Record?} customHeader + * @param {(error: Record) => Promise?} errorCallback + */ + const post = (url, data, customHeader, errorCallback) => + call({ + method: 'POST', + url, + data, + errorCallback, + customHeader + }); + + /** + * Performs PUT ajax request. + * + * @param {string} url The URL to call. + * @param {Record} data + * @param {Record?} customHeader + * @param {(error: Record) => Promise?} errorCallback + */ + const put = (url, data, customHeader, errorCallback) => + call({ + method: 'PUT', + url, + data, + errorCallback, + customHeader + }); + + /** + * Performs DELETE ajax request. + * + * @param {string} url The URL to call. + * @param {Record?} data + * @param {(error: Record) => Promise?} errorCallback + */ + const del = (url, data, errorCallback) => + call({ + method: 'DELETE', + url, + data, + errorCallback + }); + + /** + * Performs ajax call. + * + * @param {'GET' | 'POST' | 'PUT' | 'DELETE'} method The HTTP method. + * @param {string} url The URL to call. + * @param {Record?} data The data to send. + * @param {(error: Record) => Promise?} errorCallback An error callback. If not set, the + * default one will be used. + * @param {Record?} customHeader + * @param {boolean} fallthrough Indicates whether the request should not be cancelled on generic cancel call. + * + * @returns {Promise>} + */ + const call = ({ method, url, data, errorCallback, customHeader, fallthrough = false }) => { + const callState = callValidationState; + + return new Promise((resolve, reject) => { + url = url.replace('https:', ''); + url = url.replace('http:', ''); + + const headers = { + 'Content-Type': 'application/json', + ...(customHeader || {}) + }; + + if (headers['Content-Type'] === 'multipart/form-data') { + delete headers['Content-Type']; + } + + const body = data + ? headers['Content-Type'] === 'application/json' + ? JSON.stringify(data) + : data + : undefined; + + fetch(url, { method, headers, body }).then((response) => { + if (!fallthrough && callState !== callValidationState) { + // Obsolete request. Some call cancelled all other requests. + console.debug('cancelling an obsolete request', url); + reject({ errorCode: 0 }); + } else { + handleResponse(response, errorCallback).then(resolve).catch(reject); + } + }); + }); + }; + + return { + get, + post, + put, + delete: del + }; + }; + + AdyenFE.ajaxService = AjaxService(); +})(); diff --git a/Resources/views/backend/_resources/js/ConnectionController.js b/Resources/views/backend/_resources/js/ConnectionController.js new file mode 100644 index 00000000..3444bf89 --- /dev/null +++ b/Resources/views/backend/_resources/js/ConnectionController.js @@ -0,0 +1,490 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef ConnectionInfo + * @property {string} apiKey + * @property {string} merchantId + */ + + /** + * @typedef Connection + * @property {'test' | 'live'} mode + * @property {ConnectionInfo?} testData + * @property {ConnectionInfo?} liveData + */ + + /** + * @typedef ConnectionSettings + * @property {'test' | 'live'} mode + * @property {string} apiKey + * @property {string} merchantId + * @property {{label: string, value: string}[]?} merchants + */ + /** + * Handles connection page logic. + * + * @param {{getSettingsUrl: string, submitUrl: string, disconnectUrl: string, getMerchantsUrl: string, + * validateConnectionUrl: string, validateWebhookUrl: string, page: string}} configuration + * @constructor + */ + function ConnectionController(configuration) { + /** @type AjaxServiceType */ + const api = AdyenFE.ajaxService; + + const { + templateService, + elementGenerator: generator, + validationService: validator, + components, + state, + utilities + } = AdyenFE; + /** @type {HTMLElement} */ + let form; + let currentStoreId; + /** @type {boolean} */ + let merchantPage; + /** @type {boolean} */ + let isConnectionSet; + /** @type {ConnectionSettings} */ + let activeSettings; + /** @type {ConnectionSettings} */ + let changedSettings; + /** @type {number} */ + let numberOfChanges = 0; + + /** + * Displays page content. + * + * @param {{ state?: string, storeId: string }} config + */ + this.display = ({ storeId }) => { + utilities.showLoader(); + currentStoreId = storeId; + merchantPage = configuration.page === 'merchant'; + templateService.clearMainPage(); + + configuration.getSettingsUrl = configuration.getSettingsUrl.replace('{storeId}', storeId); + configuration.getMerchantsUrl = configuration.getMerchantsUrl.replace('{storeId}', currentStoreId); + configuration.submitUrl = configuration.submitUrl.replace('{storeId}', storeId); + configuration.validateConnectionUrl = configuration.validateConnectionUrl.replace('{storeId}', storeId); + configuration.validateWebhookUrl = configuration.validateWebhookUrl.replace('{storeId}', storeId); + configuration.disconnectUrl = configuration.disconnectUrl.replace('{storeId}', storeId); + + state + .getCurrentMerchantState() + .then((state) => { + isConnectionSet = state === 'dashboard'; + return api.get(configuration.getSettingsUrl, () => null).then(createForm); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Sets the unsaved changes. + * + * @return {boolean} + */ + this.hasUnsavedChanges = () => false; + + /** + * Renders the form. + * + * @param {ConnectionSettings} data + */ + const renderForm = (data) => { + form = generator.createElement('form'); + + const components = [ + generator.createRadioGroupField({ + name: 'mode', + value: data.mode || 'test', + label: 'connection.environment.title', + description: 'connection.environment.description', + options: [ + { label: 'connection.environment.options.test', value: 'test' }, + { label: 'connection.environment.options.live', value: 'live' } + ], + onChange: (value) => handleChange('mode', value) + }), + generator.createPasswordField({ + name: 'apiKey', + value: data.apiKey, + label: 'connection.apiKey.title', + description: 'connection.apiKey.description', + error: 'connection.apiKey.error', + onChange: (value) => handleChange('apiKey', value) + }), + generator.createDropdownField({ + name: 'merchantId', + value: data.merchantId, + placeholder: 'connection.merchant.placeholder', + options: data.merchants, + label: 'connection.merchant.title', + description: 'connection.merchant.description', + error: 'connection.merchant.error', + onChange: (value) => handleChange('merchantId', value) + }) + ]; + + if (merchantPage) { + components[0].classList.add('adls--hidden'); + components[1].classList.add('adls--hidden'); + } else { + components[2].classList.add('adls--hidden'); + } + + form.append( + generator.createElement('div', 'adlp-flash-message-wrapper'), + generator.createElement('h2', '', `connection.title${merchantPage ? '_merchant' : ''}`), + generator.createElement( + 'p', + 'adlp-merchant-account-description', + `connection.subtitle${merchantPage ? '_merchant' : ''}` + ), + ...components + ); + + if (isConnectionSet) { + if (!merchantPage) { + form.append( + generator.createButton({ + type: 'secondary', + name: 'validateButton', + disabled: !data.apiKey, + label: 'connection.validateCredentials', + onClick: handleValidateCredentials + }) + ); + } + + form.append( + generator.createFormFooter( + handleFormSubmit, + () => { + this.display({ storeId: currentStoreId }); + }, + 'general.discardChanges', + !merchantPage + ? [ + generator.createButton({ + type: 'secondary', + name: 'disconnectButton', + label: 'connection.disconnect', + className: 'adlm--destructive', + onClick: showDisconnectModal + }) + ] + : [] + ) + ); + } else { + form.append( + generator.createButton({ + type: 'primary', + name: 'saveButton', + disabled: !data.apiKey, + label: merchantPage ? 'connection.next' : 'connection.connect', + onClick: handleFormSubmit + }) + ); + } + + templateService.clearMainPage(); + templateService.getMainPage().append(form); + }; + + /** + * Creates the form. + * + * @param {Connection?} settings + */ + const createForm = (settings) => { + const mode = settings?.mode || 'test'; + /** @type ConnectionSettings */ + const data = { mode: mode, apiKey: '', merchantId: '', merchants: [] }; + if (settings?.[`${mode}Data`]) { + data.apiKey = settings[`${mode}Data`].apiKey; + data.merchantId = settings[`${mode}Data`].merchantId; + } + + changedSettings = utilities.cloneObject(data); + activeSettings = utilities.cloneObject(data); + + if (data.apiKey) { + document + .querySelector('.adl-sidebar [href="#connection-merchant"]') + .parentElement.classList.remove('adls--disabled'); + } + + if (merchantPage) { + if (!data.apiKey) { + state.goToState('connection'); + return Promise.resolve(); + } + + return api + .get(configuration.getMerchantsUrl, () => []) + .then( + /** @param {Merchant[]} response */ + (response) => { + data.merchants = response.map((merchant) => ({ + value: merchant.merchantId, + label: merchant.merchantName + })); + + renderForm(data); + } + ); + } else { + renderForm(data); + + return Promise.resolve(); + } + }; + + /** + * + * @param {keyof ConnectionSettings} prop + * @param {any} value + */ + const handleChange = (prop, value) => { + changedSettings[prop] = value; + if (prop === 'mode') { + changedSettings.apiKey = ''; + form['apiKey'].value = ''; + } else { + validator.validateRequiredField(form['apiKey'], 'connection.apiKey.error'); + } + + if (isConnectionSet) { + renderFooterState(); + } else { + form['saveButton'].disabled = !form['apiKey'].value; + } + }; + + /** + * Converts form data to the settings object. + * + * @return {Connection} + */ + const getFormData = () => ({ + mode: changedSettings.mode, + [changedSettings.mode + 'Data']: { + apiKey: changedSettings.apiKey, + merchantId: changedSettings.merchantId || null + } + }); + + /** + * Saves the connection configuration. + * + * @returns {boolean} + */ + const handleFormSubmit = () => { + const isValid = + validator.validateRequiredField(form['mode']) && + validator.validateRequiredField(form['apiKey'], 'connection.apiKey.error') && + (!merchantPage || validator.validateRequiredField(form['merchantId'])); + + if (isValid) { + if (isConnectionSet && activeSettings.mode !== changedSettings.mode) { + performChangeEnvironmentSteps(); + + return false; + } + + utilities.showLoader(); + api.post(configuration.submitUrl, getFormData()) + .then(handleSaveSuccess) + .finally(() => { + utilities.hideLoader(); + }); + } + + return false; + }; + + const performChangeEnvironmentSteps = () => { + showConfirmModal('changeEnvironment').then((confirmed) => { + if (!confirmed) { + return; + } + + utilities.showLoader(); + changedSettings.merchantId = ''; + + return api + .post(configuration.validateConnectionUrl, getFormData()) + .then((response) => { + if (!response.status) { + showFlashMessage(response.errorCode, 'error'); + return false; + } + + return true; + }) + .then((next) => next && api.delete(configuration.disconnectUrl).then(() => true)) + .then( + (next) => + next && + api.post(configuration.submitUrl, getFormData()).then(() => { + state.goToState('connection-merchant'); + }) + ) + .finally(() => { + utilities.hideLoader(); + }); + }); + }; + + const handleSaveSuccess = () => { + const finishSave = () => { + activeSettings = { ...changedSettings }; + renderFooterState(); + showFlashMessage('connection.messages.connectionUpdated', 'success'); + }; + + utilities.remove401Message(); + if (merchantPage) { + if (!isConnectionSet) { + state.enableSidebar(); + state.goToState('payments'); + state.setHeader(); + } else { + finishSave(); + } + } else if (!isConnectionSet) { + state.goToState('connection-merchant'); + } else { + finishSave(); + } + }; + + /** + * Validates credentials. + * + * @return {Promise} + */ + const handleValidateCredentials = () => { + utilities.showLoader(); + return Promise.all([ + api + .post(configuration.validateConnectionUrl, getFormData(), () => false) + .then((response) => response.status), + api.post(configuration.validateWebhookUrl).then((response) => response.status) + ]) + .then(([t1, t2]) => { + if (t1 && t2) { + showFlashMessage('connection.messages.validCredentials', 'success'); + } else if (!t1) { + showFlashMessage('connection.errors.credentialsValidationError', 'error'); + } else { + showFlashMessage('connection.errors.webhookValidationError', 'error'); + } + + return t1 && t2; + }) + .catch(() => false) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Shows the disconnect confirmation modal. + */ + const showDisconnectModal = () => { + showConfirmModal('disconnect').then((confirmed) => confirmed && handleDisconnect()); + }; + + /** + * Shows the confirmation modal dialog. + * + * @param {string} type + * @returns {Promise} + */ + const showConfirmModal = (type) => { + return new Promise((resolve) => { + const modal = components.Modal.create({ + title: `connection.${type}Modal.title`, + className: `adl-confirm-modal`, + content: [generator.createElement('p', '', `connection.${type}Modal.message`)], + footer: true, + buttons: [ + { + type: 'secondary', + label: 'general.cancel', + onClick: () => { + modal.close(); + resolve(false); + } + }, + { + type: 'primary', + className: 'adlm--destructive', + label: 'general.confirm', + onClick: () => { + modal.close(); + resolve(true); + } + } + ] + }); + + modal.open(); + }); + }; + + const handleDisconnect = () => { + utilities.showLoader(); + api.delete(configuration.disconnectUrl) + .then(() => { + window.location.reload(); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Displays the flash message. + * + * @param {string} message Translation key or message + * @param {'success' | 'error'} status + */ + const showFlashMessage = (message, status = 'success') => { + const container = form?.querySelector('.adlp-flash-message-wrapper'); + if (!container) { + return; + } + + templateService.clearComponent(container); + container.append(utilities.createFlashMessage(message, status)); + container.scrollIntoView({ behavior: 'smooth' }); + }; + + /** + * Handles footer visibility state. + */ + const renderFooterState = () => { + numberOfChanges = 0; + + Object.entries(changedSettings).forEach(([prop, value]) => { + if (prop !== 'merchants' && activeSettings[prop] !== value) { + numberOfChanges++; + } + }); + + utilities.renderFooterState(numberOfChanges); + }; + } + + AdyenFE.ConnectionController = ConnectionController; +})(); diff --git a/Resources/views/backend/_resources/js/DataTableComponent.js b/Resources/views/backend/_resources/js/DataTableComponent.js new file mode 100644 index 00000000..676e0740 --- /dev/null +++ b/Resources/views/backend/_resources/js/DataTableComponent.js @@ -0,0 +1,168 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +if (!window.AdyenFE.components) { + window.AdyenFE.components = {}; +} + +(function () { + const { elementGenerator: generator, translationService } = AdyenFE; + /** + * @typedef TableCell + * @property {string?} label + * @property {string?} className + * @property {(cell: HTMLTableCellElement) => void?} renderer + */ + + /** + * Renders table cell. + * + * @param {'td' | 'th'} type + * @param {TableCell} cellData + * @returns {HTMLElement} + */ + const renderCell = (type, cellData) => { + const cell = generator.createElement(type, cellData.className, cellData.label); + cellData.renderer && cellData.renderer(cell); + + return cell; + }; + + const getTableElement = () => { + return generator.createElementFromHTML( + '

' + ); + }; + + /** + * Data table component. + * + * @param {TableCell[]} headers + * @param {TableCell[][]} items + * @param {string?} className + */ + const createDataTable = (headers, items, className) => { + const tableWrapper = getTableElement(); + + headers.forEach((header) => { + header.label = translationService.translate(header.label); + }); + + const heading = tableWrapper.querySelector('thead tr'); + heading.append(...headers.map((cellData) => renderCell('th', cellData))); + + createTableRows(tableWrapper, items); + + return generator.createElement('div', className, '', null, [tableWrapper]); + }; + + /** + * Creates a data table. + * + * @param {TableCell[]} header + * @param {TableCell[][]} items + * @return {HTMLElement} + */ + const createPaymentsDataTable = (header, items) => { + /** + * Renders item card data. + * + * @param {TableCell} cellHeader + * @param {TableCell} cellData + * @param {string} className + * @returns {HTMLElement} + */ + const createCardItemElements = (cellHeader, cellData, className) => { + const header = generator.createElement('span', 'adlp-info-label', cellHeader.label); + cellHeader.renderer && cellHeader.renderer(header); + const cell = generator.createElement('span', 'adlp-info-data', cellData.label); + cellData.renderer && cellData.renderer(cell); + + return generator.createElement('li', `adlp-payment-info-item ${className}`, '', null, [header, cell]); + }; + + const tableWrapper = getTableElement(); + const mobileWrapper = generator.createElement('div', 'adl-data-table-wrapper'); + mobileWrapper.append( + ...items.map((item) => { + const paymentName = generator.createElement('div', 'adlp-payment-method-name', item[0].label); + const infoList = generator.createElement('ul', 'adlp-payment-info-list', '', null, [ + createCardItemElements(header[4], item[4], 'adlp-info-status'), + createCardItemElements(header[1], item[1], 'adlp-info-currencies'), + createCardItemElements(header[2], item[2], 'adlp-info-countries'), + createCardItemElements(header[3], item[3], 'adlp-info-type') + ]); + + const paymentActions = generator.createElement('div', 'adlp-payment-actions'); + + item[0].renderer(paymentName); + item[5].renderer(paymentActions); + + return generator.createElement('div', 'adlp-data-card', '', null, [ + paymentName, + infoList, + paymentActions + ]); + }) + ); + + const heading = tableWrapper.querySelector('thead tr'); + heading.append(...header.map((cellData) => renderCell('th', cellData))); + + createTableRows(tableWrapper, items); + + return generator.createElement('div', '', '', null, [tableWrapper, mobileWrapper]); + }; + + /** + * Renders table rows. + * + * @param tableWrapper + * @param {TableCell[][]} items + */ + const createTableRows = (tableWrapper, items) => { + items.length && + tableWrapper.querySelector('tbody').append( + ...items.map((item) => { + const row = generator.createElement('tr'); + row.append(...item.map((cellData) => renderCell('td', cellData))); + + return row; + }) + ); + }; + + /** + * Renders the empty list message with the image. + * + * @param {string} label + * @returns {HTMLElement} + */ + const createNoItemsMessage = (label) => { + return generator.createElement('div', 'adlp-no-items-wrapper', '', null, [ + generator.createElementFromHTML( + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + ), + generator.createElement('p', '', label) + ]); + }; + + AdyenFE.components.DataTable = { + createDataTable, + createPaymentsDataTable, + createTableRows, + createNoItemsMessage + }; +})(); diff --git a/Resources/views/backend/_resources/js/DropdownComponent.js b/Resources/views/backend/_resources/js/DropdownComponent.js new file mode 100644 index 00000000..25a8682b --- /dev/null +++ b/Resources/views/backend/_resources/js/DropdownComponent.js @@ -0,0 +1,136 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +if (!window.AdyenFE.components) { + window.AdyenFE.components = {}; +} + +(function () { + /** + * @typedef DropdownComponentModel + * + * @property {Option[]} options + * @property {string?} name + * @property {string?} value + * @property {string?} placeholder + * @property {(value: string) => void?} onChange + * @property {boolean?} updateTextOnChange + * @property {boolean?} searchable + */ + + /** + * Single-select dropdown component. + * + * @param {DropdownComponentModel} props + * + * @constructor + */ + const DropdownComponent = ({ + options, + name, + value = '', + placeholder, + onChange, + updateTextOnChange = true, + searchable = false + }) => { + const { elementGenerator: generator, translationService } = AdyenFE; + const filterItems = (text) => { + const filteredItems = text + ? options.filter((option) => option.label.toLowerCase().includes(text.toLowerCase())) + : options; + + if (filteredItems.length === 0) { + selectButton.classList.add('adls--no-results'); + } else { + selectButton.classList.remove('adls--no-results'); + } + + renderOptions(filteredItems); + }; + + const renderOptions = (options) => { + list.innerHTML = ''; + options.forEach((option) => { + const listItem = generator.createElement( + 'li', + 'adlp-dropdown-list-item' + (option === selectedItem ? ' adls--selected' : ''), + option.label + ); + list.append(listItem); + + listItem.addEventListener('click', () => { + hiddenInput.value = option.value; + updateTextOnChange && (buttonSpan.innerHTML = translationService.translate(option.label)); + list.classList.remove('adls--show'); + list.childNodes.forEach((node) => node.classList.remove('adls--selected')); + listItem.classList.add('adls--selected'); + wrapper.classList.remove('adls--active'); + buttonSpan.classList.add('adls--selected'); + selectButton.classList.remove('adls--search-active'); + onChange && onChange(option.value); + }); + }); + }; + + const hiddenInput = generator.createElement('input', 'adlp-hidden-input', '', { type: 'hidden', name, value }); + const wrapper = generator.createElement('div', 'adl-single-select-dropdown'); + + const selectButton = generator.createElement('button', 'adlp-dropdown-button adlp-field-component', '', { + type: 'button' + }); + const selectedItem = options.find((option) => option.value === value); + const buttonSpan = generator.createElement( + 'span', + selectedItem ? 'adls--selected' : '', + selectedItem ? selectedItem.label : placeholder + ); + selectButton.append(buttonSpan); + + const searchInput = generator.createElement('input', 'adl-text-input', '', { + type: 'text', + placeholder: translationService.translate('general.search') + }); + searchInput.addEventListener('input', (event) => filterItems(event.currentTarget?.value || '')); + if (searchable) { + selectButton.append(searchInput); + } + + const list = generator.createElement('ul', 'adlp-dropdown-list'); + renderOptions(options); + + selectButton.addEventListener('click', () => { + list.classList.toggle('adls--show'); + wrapper.classList.toggle('adls--active'); + if (searchable) { + selectButton.classList.toggle('adls--search-active'); + if (selectButton.classList.contains('adls--search-active')) { + searchInput.focus(); + searchInput.value = ''; + filterItems(''); + } + } + }); + + document.documentElement.addEventListener('click', (event) => { + if (!wrapper.contains(event.target) && event.target !== wrapper) { + list.classList.remove('adls--show'); + wrapper.classList.remove('adls--active'); + selectButton.classList.remove('adls--search-active'); + } + }); + + wrapper.append(hiddenInput, selectButton, list); + + return wrapper; + }; + + AdyenFE.components.Dropdown = { + /** + * @param {DropdownComponentModel} config + * @returns {HTMLElement} + */ + create: (config) => DropdownComponent(config) + }; +})(); diff --git a/Resources/views/backend/_resources/js/ElementGenerator.js b/Resources/views/backend/_resources/js/ElementGenerator.js new file mode 100644 index 00000000..6a3fa344 --- /dev/null +++ b/Resources/views/backend/_resources/js/ElementGenerator.js @@ -0,0 +1,691 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef Option + * @property {string?} label + * @property {any} value + */ + + /** + * @typedef {Object.} ElementProps + * @property {string?} name + * @property {any?} value + * @property {string?} className + * @property {string?} placeholder + * @property {(value: any) => any?} onChange + * @property {string?} label + * @property {string?} description + * @property {string?} error + */ + + /** + * @typedef {ElementProps} FormField + * @property {'text' | 'number' | 'radio' |'dropdown' | 'checkbox' | 'file' | 'multiselect' | 'button' | + * 'buttonLink'} type + */ + + const translationService = AdyenFE.translationService; + + /** + * Prevents default event handling. + * @param {Event} e + */ + const preventDefaults = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + /** + * Creates a generic HTML node element and assigns provided class and inner text. + * + * @param {keyof HTMLElementTagNameMap} type Represents the name of the tag + * @param {string?} className CSS class + * @param {string?} innerHTMLKey Inner text translation key. + * @param {Record?} properties An object of additional properties. + * @param {HTMLElement[]?} children + * @returns {HTMLElement} + */ + const createElement = (type, className, innerHTMLKey, properties, children) => { + const child = document.createElement(type); + className && child.classList.add(...className.trim().split(' ')); + if (innerHTMLKey) { + let params = innerHTMLKey.split('|'); + child.innerHTML = translationService.translate(params[0], params.slice(1)); + } + + if (properties) { + if (properties.dataset) { + Object.assign(child.dataset, properties.dataset); + delete properties.dataset; + } + + Object.assign(child, properties); + if (properties.onChange) { + child.addEventListener('change', properties.onChange, false); + } + + if (properties.onClick) { + child.addEventListener('click', properties.onClick, false); + } + } + + if (children) { + child.append(...children); + } + + return child; + }; + + /** + * Creates an element out of provided HTML markup. + * + * @param {string} html + * @returns {HTMLElement} + */ + const createElementFromHTML = (html) => { + const element = document.createElement('div'); + element.innerHTML = html; + + return element.firstElementChild; + }; + + /** + * Creates a button. + * + * @param {{ label?: string, type?: 'primary' | 'secondary' | 'ghost', size?: 'small' | 'medium', className?: + * string, [key: string]: any, onClick?: () => void}} props + * @return {HTMLButtonElement} + */ + const createButton = ({ type, size, className, onClick, label, ...properties }) => { + const cssClass = ['adl-button']; + type && cssClass.push('adlt--' + type); + size && cssClass.push('adlm--' + size); + className && cssClass.push(className); + + const button = createElement('button', cssClass.join(' '), '', { type: 'button', ...properties }, [ + createElement('span', '', label) + ]); + + onClick && + button.addEventListener( + 'click', + (event) => { + preventDefaults(event); + onClick(); + }, + false + ); + + return button; + }; + + /** + * Creates a link that looks like a button. + * + * @param {{text?: string, className?: string, href: string, useDownload?: boolean, downloadFile?: string}} props + * @return {HTMLLinkElement} + */ + const createButtonLink = ({ text, className = '', href, useDownload, downloadFile }) => { + const link = createElement('a', className, `${text}`, { href: href, target: '_blank' }); + if (useDownload) { + link.setAttribute('download', downloadFile); + } + + return link; + }; + + /** + * Creates an input field wrapper around the provided input element. + * + * @param {HTMLElement} input The input element. + * @param {string?} label Label translation key. + * @param {string?} description Description translation key. + * @param {string?} error Error translation key. + * @return {HTMLDivElement} + */ + const createFieldWrapper = (input, label, description, error) => { + const field = createElement('div', 'adl-field-wrapper'); + if (label) { + field.appendChild(createElement('h3', 'adlp-field-title', label)); + } + + if (description) { + field.appendChild(createElement('span', 'adlp-field-subtitle', description)); + } + + field.appendChild(input); + + if (error) { + field.appendChild(createElement('span', 'adlp-input-error', error)); + } + + return field; + }; + + /** + * Creates store switcher. + * + * @param {{value: string, label: string}[]} options + * @param {string?} name + * @param {string?} title + * @param {string?} value + * @param {(value: string) => Promise?} onBeforeChange + * @param {(value: string) => void?} onChange + * @param {boolean?} updateTextOnChange + * @return {HTMLDivElement} + */ + const createStoreSwitcher = (options, name, title, value, onBeforeChange, onChange, updateTextOnChange = true) => { + const hiddenInput = createElement('input', 'adlp-hidden-input', '', { type: 'hidden', name, value }); + const wrapper = createElement('div', 'adl-store-switcher'); + const storeIcon = createElement('span', 'adl-store-icon'); + const switchContent = createElement('div', 'adlp-switch-content'); + const switchText = createElement('h3', 'adlp-switch-text', title); + const list = createElement('ul', 'adlp-stores'); + const switchButton = createElement('button', 'adlp-switch-store-button adlp-field-component', '', { + type: 'button' + }); + const selectedItem = options.find((option) => option.value === value) || options[0]; + const buttonSpan = createElement('span', '', selectedItem.label); + + switchButton.append(buttonSpan); + const listItems = []; + + const handleOnOptionChange = (listItem, storeId) => { + hiddenInput.value = storeId; + updateTextOnChange && (switchButton.firstElementChild.innerHTML = listItem.innerText); + list.classList.remove('adls--show'); + + listItems.forEach((li) => li.classList.remove('adls--selected')); + listItem.classList.add('adls--selected'); + onChange && onChange(storeId); + }; + + options.forEach((option) => { + const listItem = createElement('li', 'adlp-store', option.label); + listItems.push(listItem); + list.append(listItem); + if (option.value === selectedItem.value) { + listItem.classList.add('adls--selected'); + } + + listItem.addEventListener('click', () => { + if (option.value === hiddenInput.value) { + list.classList.remove('adls--show'); + return; + } + + if (!onBeforeChange) { + handleOnOptionChange(listItem, option.value); + } else { + onBeforeChange(option.value).then((resume) => { + if (resume) { + handleOnOptionChange(listItem, option.value); + } else { + list.classList.remove('adls--show'); + } + }); + } + }); + }); + + switchButton.addEventListener('click', (event) => { + preventDefaults(event); + list.classList.toggle('adls--show'); + }); + + document.documentElement.addEventListener('click', () => { + list.classList.remove('adls--show'); + }); + + switchContent.append(switchText, switchButton); + wrapper.append(hiddenInput, storeIcon, switchContent, list); + + return wrapper; + }; + + /** + * Creates dropdown wrapper around the provided dropdown element. + * + * @param {ElementProps & DropdownComponentModel} props The properties. + * @return {HTMLDivElement} + */ + const createDropdownField = ({ label, description, error, ...dropdownProps }) => { + return createFieldWrapper(AdyenFE.components.Dropdown.create(dropdownProps), label, description, error); + }; + + /** + * Creates dropdown wrapper around the provided dropdown element. + * + * @param {(ElementProps & MultiselectDropdownComponentModel)} props The properties. + * @return {HTMLDivElement} + */ + const createMultiselectDropdownField = ({ label, description, error, ...dropdownProps }) => { + return createFieldWrapper( + AdyenFE.components.MultiselectDropdown.create(dropdownProps), + label, + description, + error + ); + }; + + /** + * Creates a password input field. + * + * @param {ElementProps} props The properties. + * @return {HTMLElement} + */ + const createPasswordField = ({ className = '', label, description, error, onChange, ...rest }) => { + const wrapper = createElement('div', `adl-password ${className}`); + const input = createElement('input', 'adlp-field-component', '', { type: 'password', ...rest }); + const span = createElement('span'); + span.addEventListener('click', () => { + if (input.type === 'password') { + input.type = 'text'; + } else { + input.type = 'password'; + } + }); + onChange && input.addEventListener('change', (event) => onChange(event.currentTarget?.value)); + + wrapper.append(input, span); + + return createFieldWrapper(wrapper, label, description, error); + }; + + /** + * Creates a text input field. + * + * @param {ElementProps & { type?: 'text' | 'number' }} props The properties. + * @return {HTMLElement} + */ + const createTextField = ({ className = '', label, description, error, onChange, ...rest }) => { + /** @type HTMLInputElement */ + const input = createElement('input', `adlp-field-component ${className}`, '', { type: 'text', ...rest }); + onChange && input.addEventListener('change', (event) => onChange(event.currentTarget?.value)); + + return createFieldWrapper(input, label, description, error); + }; + + /** + * Creates a number input field. + * + * @param {ElementProps} props The properties. + * @return {HTMLElement} + */ + const createNumberField = ({ onChange, ...rest }) => { + const handleChange = (value) => onChange(value === '' ? null : Number(value)); + + return createTextField({ type: 'number', step: '0.01', onChange: handleChange, ...rest }); + }; + + /** + * Creates a radio group field. + * + * @param {ElementProps} props The properties. + * @return {HTMLElement} + */ + const createRadioGroupField = ({ name, value, className, options, label, description, error, onChange }) => { + const wrapper = createElement('div', 'adl-radio-input-group'); + options.forEach((option) => { + const label = createElement('label', 'adl-radio-input'); + const props = { type: 'radio', value: option.value, name }; + if (value === option.value) { + props.checked = 'checked'; + } + + label.append(createElement('input', className, '', props), createElement('span', '', option.label)); + wrapper.append(label); + onChange && label.addEventListener('click', () => onChange(option.value)); + }); + + return createFieldWrapper(wrapper, label, description, error); + }; + + /** + * Creates a checkbox field. + * + * @param {ElementProps} props The properties. + * @return {HTMLElement} + */ + const createCheckboxField = ({ className = '', label, description, error, onChange, value, ...rest }) => { + /** @type HTMLInputElement */ + const checkbox = createElement('input', 'adlp-toggle-input', '', { type: 'checkbox', checked: value, ...rest }); + onChange && checkbox.addEventListener('change', () => onChange(checkbox.checked)); + + const field = createElement('div', 'adl-field-wrapper adlt--checkbox', '', null, [ + createElement('h3', 'adlp-field-title', label, null, [ + createElement('label', 'adl-toggle', '', null, [checkbox, createElement('span', 'adlp-toggle-round')]) + ]) + ]); + + if (description) { + field.appendChild(createElement('span', 'adlp-field-subtitle', description)); + } + + if (error) { + field.appendChild(createElement('span', 'adlp-input-error', error)); + } + + return field; + }; + + /** + * Creates a button field. + * + * @param {ElementProps & { onClick?: () => void , buttonType?: string, buttonSize?: string, + * buttonLabel?: string}} props The properties. + * @return {HTMLElement} + */ + const createButtonField = ({ label, description, buttonType, buttonSize, buttonLabel, onClick, error }) => { + const button = createButton({ + type: buttonType, + size: buttonSize, + className: '', + label: translationService.translate(buttonLabel), + onClick: onClick + }); + + return createFieldWrapper(button, label, description, error); + }; + + /** + * Creates a field with a link that looks like a button. + * + * @param {ElementProps & {text: string, href: string}} props + */ + const createButtonLinkField = ({ label, text, description, href, error }) => { + const buttonLink = createButtonLink({ + text: translationService.translate(text), + className: '', + href: href + }); + + return createFieldWrapper(buttonLink, label, description, error); + }; + + /** + * Creates a flash message. + * + * @param {string|string[]} messageKey + * @param {'error' | 'warning' | 'success'} status + * @param {number?} clearAfter Time in ms to remove alert message. + * @return {HTMLElement} + */ + const createFlashMessage = (messageKey, status, clearAfter) => { + const hideHandler = () => { + wrapper.remove(); + }; + const wrapper = createElement('div', `adl-alert adlt--${status}`); + let messageBlock; + if (Array.isArray(messageKey)) { + const [titleKey, descriptionKey] = messageKey; + messageBlock = createElement('div', 'adlp-alert-title', '', null, [ + createElement('span', 'adlp-message', '', null, [ + createElement('span', 'adlp-message-title', titleKey), + createElement('span', 'adlp-message-description', descriptionKey) + ]) + ]); + } else { + messageBlock = createElement('span', 'adlp-alert-title', messageKey); + } + + const button = createButton({ onClick: hideHandler }); + + if (clearAfter) { + setTimeout(hideHandler, clearAfter); + } + + wrapper.append(messageBlock, button); + + return wrapper; + }; + + /** + * Adds a label with a hint. + * + * @param {string} label + * @param {string} hint + * @param {'left' | 'right' | 'top' | 'bottom'} position + * @param {string?} className + * @returns HTMLElement + */ + const createHint = (label, hint, position, className = '') => { + const element = createElement('div', `adl-hint ${className}`, label); + element.append(createElement('span', 'adlp-tooltip adlt--' + position, hint)); + element.addEventListener('mouseenter', () => { + element.classList.add('adls--active'); + }); + element.addEventListener('mouseout', () => { + element.classList.remove('adls--active'); + }); + + return element; + }; + + /** + * Creates a toaster message. + * + * @param {string} label + * @param {number} timeout Clear timeout in ms. + * @returns {HTMLElement} + */ + const createToaster = (label, timeout = 5000) => { + const toaster = createElement('div', 'adl-toaster', '', null, [ + createElement('span', 'adlp-toaster-title', label), + createElement('button', 'adl-button', '', null, [createElement('span')]) + ]); + + toaster.children[1].addEventListener('click', () => toaster.remove()); + + setTimeout(() => toaster.remove(), timeout); + + return toaster; + }; + + /** + * + * @param {ElementProps & { supportedMimeTypes: string[] }} props + * @returns {HTMLDivElement} + */ + const createFileUploadField = ({ + name, + placeholder, + label, + description, + error, + value, + onChange, + supportedMimeTypes + }) => { + const setActive = (e) => { + preventDefaults(e); + wrapper.classList.add('adls--active'); + }; + + const setInactive = (e) => { + preventDefaults(e); + wrapper.classList.remove('adls--active'); + }; + + const previewFile = (file, img) => { + let reader = new FileReader(); + reader.readAsDataURL(file); + reader.onloadend = function () { + img.src = reader.result; + }; + }; + + const handleDrop = (e) => { + const file = e.dataTransfer?.files?.[0] || null; + if (file) { + handleFileChange(file); + } + }; + + const handleFileChange = (file) => { + if (!supportedMimeTypes.includes(file.type)) { + AdyenFE.validationService.setError(wrapper, 'validation.invalidImageType'); + return; + } + + if (file.size > 10000000) { + AdyenFE.validationService.setError(wrapper, 'validation.invalidImageSize'); + return; + } + + onChange(file); + AdyenFE.validationService.removeError(wrapper); + textElem.classList.remove('adls--empty'); + textElem.innerText = file.name; + const img = createElement('img'); + textElem.prepend(img); + previewFile(file, img); + }; + + const wrapper = createElement('div', 'adl-file-drop-zone adlp-field-component'); + const labelElem = createElement('label', 'adlp-input-file-label'); + const textElem = createElement('span', 'adlp-file-label' + (!value ? ' adls--empty' : ''), placeholder); + if (value) { + textElem.prepend(createElement('img', '', '', { src: value })); + } + + const fileUpload = createElement('input', 'adlp-input-file', '', { + type: 'file', + accept: 'image/*', + name: name + }); + fileUpload.addEventListener('change', () => handleFileChange(fileUpload.files?.[0])); + + labelElem.append(textElem, fileUpload); + wrapper.append(labelElem); + + ['dragenter', 'dragover'].forEach((eventName) => { + wrapper.addEventListener(eventName, setActive, false); + }); + ['dragleave', 'drop'].forEach((eventName) => { + wrapper.addEventListener(eventName, setInactive, false); + }); + wrapper.addEventListener('drop', handleDrop, false); + + return createFieldWrapper(wrapper, label, description, error); + }; + + /** + * Adds a form footer with save and cancel buttons. + * + * @param {() => void} onSave + * @param {() => void} onCancel + * @param {string} cancelLabel + * @param {HTMLButtonElement[]} extraButtons + * @returns HTMLElement + */ + const createFormFooter = (onSave, onCancel, cancelLabel = 'general.cancel', extraButtons = []) => { + return createElement('div', 'adl-form-footer', '', null, [ + createElement('span', 'adlp-changes-count', 'general.unsavedChanges'), + createElement('div', 'adlp-actions', '', null, [ + ...extraButtons, + createButton({ + type: 'secondary', + className: 'adlp-cancel', + label: cancelLabel, + onClick: onCancel, + disabled: true + }), + createButton({ + type: 'primary', + className: 'adlp-save', + label: 'general.saveChanges', + onClick: onSave, + disabled: true + }) + ]) + ]); + }; + + /** + * Creates form fields based on the fields configurations. + * + * @param {FormField[]} fields + */ + const createFormFields = (fields) => { + /** @type HTMLElement[] */ + const result = []; + fields.forEach(({ type, ...rest }) => { + switch (type) { + case 'text': + result.push(createTextField({ ...rest, className: 'adl-text-input' })); + break; + case 'number': + result.push(createNumberField({ ...rest, className: 'adl-text-input' })); + break; + case 'dropdown': + result.push(createDropdownField(rest)); + break; + case 'multiselect': + result.push(createMultiselectDropdownField(rest)); + break; + case 'radio': + result.push(createRadioGroupField(rest)); + break; + case 'checkbox': + result.push(createCheckboxField(rest)); + break; + case 'file': + result.push(createFileUploadField(rest)); + break; + case 'button': + result.push(createButtonField(rest)); + break; + case 'buttonLink': + result.push(createButtonLinkField(rest)); + break; + } + + rest.className && result[result.length - 1].classList.add(...rest.className.trim().split(' ')); + }); + + return result; + }; + + /** + * Creates a main header item. + * + * @param {string} title + * @param {string} text + * @returns {[HTMLElement,HTMLElement]} + */ + const createHeaderItem = (title, text) => { + return [ + createElement('span', 'adlp-nav-item-icon', ''), + createElement('div', 'adlp-nav-item-text', '', null, [ + createElement('h3', 'adlp-nav-item-title', title), + createElement('span', 'adlp-nav-item-subtitle', text) + ]) + ]; + }; + + AdyenFE.elementGenerator = { + createElement, + createElementFromHTML, + createButton, + createHint, + createDropdownField, + createMultiselectDropdownField, + createPasswordField, + createTextField, + createNumberField, + createRadioGroupField, + createFlashMessage, + createStoreSwitcher, + createFileUploadField, + createButtonField, + createButtonLinkField, + createFormFields, + createFormFooter, + createToaster, + createHeaderItem + }; +})(); diff --git a/Resources/views/backend/_resources/js/ModalComponent.js b/Resources/views/backend/_resources/js/ModalComponent.js new file mode 100644 index 00000000..75cea8ef --- /dev/null +++ b/Resources/views/backend/_resources/js/ModalComponent.js @@ -0,0 +1,139 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +if (!window.AdyenFE.components) { + window.AdyenFE.components = {}; +} + +(function () { + /** + * @typedef ButtonConfig + * @property {string} label + * @property {string?} className + * @property {'primary' | 'secondary'} type + * @property {() => void} onClick + */ + + /** + * @typedef ModalConfiguration + * @property {string?} title + * @property {string?} className + * @property {HTMLElement} content The content of the body. + * @property {ButtonConfig[]} buttons Footer buttons. + * @property {(modal: HTMLDivElement) => void?} onOpen Will fire after the modal is opened. + * @property {() => boolean?} onClose Will fire before the modal is closed. + * If the return value is false, the modal will not be closed. + * @property {boolean} [footer=false] Indicates whether to use footer. Defaults to false. + * @property {boolean} [canClose=true] Indicates whether to use an (X) button or click outside the modal + * to close it. Defaults to true. + * @property {boolean} [fullWidthBody=false] Indicates whether to make body full width + */ + + /** + * @param {ModalConfiguration} configuration + * @constructor + */ + function ModalComponent(configuration) { + const { templateService, translationService, utilities, elementGenerator } = AdyenFE, + config = configuration; + + /** + * @type {HTMLDivElement} + */ + let modal; + + /** + * Closes the modal on Esc key. + * + * @param {KeyboardEvent} event + */ + const closeOnEsc = (event) => { + if (event.key === 'Escape') { + this.close(); + } + }; + + /** + * Closes the modal. + */ + this.close = () => { + if (!config.onClose || config.onClose()) { + window.removeEventListener('keyup', closeOnEsc); + modal?.remove(); + } + }; + + /** + * Opens the modal. + */ + this.open = () => { + const modalTemplate = + '
\n' + + '
' + + ' ' + + '
' + + '
' + + ' ' + + '
' + + '
'; + + modal = AdyenFE.elementGenerator.createElementFromHTML(modalTemplate); + const closeBtn = modal.querySelector('.adlp-close-button'), + closeBtnSpan = modal.querySelector('.adlp-close-button span'), + title = modal.querySelector('.adlp-title'), + body = modal.querySelector('.adlp-body'), + footer = modal.querySelector('.adlp-footer'); + + utilities.showElement(modal); + if (config.canClose === false) { + utilities.hideElement(closeBtn); + } else { + window.addEventListener('keyup', closeOnEsc); + closeBtn.addEventListener('click', this.close); + closeBtnSpan.style.display = 'flex'; + modal.addEventListener('click', (event) => { + if (event.target.id === 'adl-modal') { + event.preventDefault(); + this.close(); + + return false; + } + }); + } + + if (config.title) { + title.innerHTML = translationService.translate(config.title); + } else { + utilities.hideElement(title); + } + + if (config.className) { + modal.classList.add(config.className); + } + + body.append(...(Array.isArray(config.content) ? config.content : [config.content])); + if (configuration.fullWidthBody) { + body.classList.add('adlm--full-width'); + } + + if (config.footer === false || !config.buttons) { + utilities.hideElement(footer); + } else { + config.buttons.forEach((button) => { + footer.appendChild(elementGenerator.createButton(button)); + }); + } + + templateService.getMainPage().parentNode.appendChild(modal); + if (config.onOpen) { + config.onOpen(modal); + } + }; + } + + AdyenFE.components.Modal = { + /** @param {ModalConfiguration} config */ + create: (config) => new ModalComponent(config) + }; +})(); diff --git a/Resources/views/backend/_resources/js/MultiselectDropdownComponent.js b/Resources/views/backend/_resources/js/MultiselectDropdownComponent.js new file mode 100644 index 00000000..ebc81a82 --- /dev/null +++ b/Resources/views/backend/_resources/js/MultiselectDropdownComponent.js @@ -0,0 +1,179 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +if (!window.AdyenFE.components) { + window.AdyenFE.components = {}; +} + +(function () { + const preventDefaults = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + /** + * @typedef MultiselectDropdownComponentModel + * + * @property {Option[]} options + * @property {string?} name + * @property {string[]?} values + * @property {string?} placeholder + * @property {string?} selectedText + * @property {(values: string[]) => void} onChange + * @property {boolean?} updateTextOnChange + * @property {boolean?} useAny + * @property {string?} className + * */ + + /** + * Multiselect dropdown component. + * + * @param {MultiselectDropdownComponentModel} params + * @returns {HTMLElement} + * @constructor + */ + const MultiselectDropdownComponent = ({ + options, + name = '', + values = [], + placeholder, + selectedText, + onChange, + updateTextOnChange = true, + useAny = true, + className = '' + }) => { + const { elementGenerator: generator, translationService } = AdyenFE; + + options.forEach((option) => { + option.label = translationService.translate(option.label); + }); + + const handleDisplayedItems = (fireChange = true) => { + hiddenInput.value = selectedItems.map((item) => item.value).join(','); + if (useAny) { + const anyItem = list.querySelector('.adlt--any'); + if (selectedItems.length > 0) { + anyItem?.classList.remove('adls--selected'); + } else { + anyItem.classList.toggle('adls--selected'); + + list.querySelectorAll(':not(.adlt--any)').forEach((listItem) => { + listItem.classList.remove('adls--selected'); + if (anyItem.classList.contains('adls--selected')) { + listItem.classList.add('adls--disabled'); + } else { + listItem.classList.remove('adls--disabled'); + } + }); + } + } + + let textToDisplay; + if (selectedItems.length > 2) { + textToDisplay = translationService.translate(selectedText, [selectedItems.length]); + } else { + textToDisplay = + selectedItems.map((item) => item.label).join(', ') || translationService.translate(placeholder); + } + + updateTextOnChange && (selectButton.firstElementChild.innerHTML = textToDisplay); + fireChange && onChange?.(selectedItems.map((item) => item.value)); + }; + + const createListItem = (additionalClass, label, htmlKey) => { + const item = generator.createElement('li', `adlp-dropdown-list-item ${additionalClass}`, label, htmlKey, [ + generator.createElement('input', 'adlp-checkbox', '', { type: 'checkbox' }) + ]); + list.append(item); + return item; + }; + + const renderOption = (option) => { + const listItem = createListItem(values?.includes(option.value) ? 'adls--selected' : '', option.label, null); + + selectedItems.forEach((item) => { + if (option.value === item.value) { + listItem.classList.add('adls--selected'); + } + }); + + listItem.addEventListener('click', () => { + listItem.classList.toggle('adls--selected'); + listItem.childNodes[0].checked = listItem.classList.contains('adls--selected'); + if (!selectedItems.includes(option)) { + selectedItems.push(option); + } else { + const index = selectedItems.indexOf(option); + selectedItems.splice(index, 1); + } + + handleDisplayedItems(); + }); + }; + + let selectedItems = options.filter((option) => values?.includes(option.value)); + + const hiddenInput = generator.createElement('input', 'adlp-hidden-input', '', { + type: 'hidden', + name, + value: values?.join(',') || '' + }); + const wrapper = generator.createElement('div', 'adl-multiselect-dropdown' + (className ? ' ' + className : '')); + const selectButton = generator.createElement( + 'button', + 'adlp-dropdown-button adlp-field-component', + '', + { + type: 'button' + }, + [generator.createElement('span', selectedItems ? 'adls--selected' : '', placeholder)] + ); + + const list = generator.createElement('ul', 'adlp-dropdown-list'); + if (useAny) { + const anyItem = createListItem( + 'adlt--any' + (!values?.length ? ' adls--selected' : ''), + 'general.any', + null + ); + + anyItem.addEventListener('click', () => { + selectedItems = []; + anyItem.childNodes[0].checked = anyItem.classList.contains('adls--selected'); + + handleDisplayedItems(); + }); + } + + options.forEach(renderOption); + + selectButton.addEventListener('click', (event) => { + preventDefaults(event); + list.classList.toggle('adls--show'); + wrapper.classList.toggle('adls--active'); + }); + + window.addEventListener('click', (event) => { + if (!list.contains(event.target) && event.target !== list) { + list.classList.remove('adls--show'); + wrapper.classList.remove('adls--active'); + } + }); + + wrapper.append(hiddenInput, selectButton, list); + + values?.length && handleDisplayedItems(false); + + return wrapper; + }; + + AdyenFE.components.MultiselectDropdown = { + /** + * @param {MultiselectDropdownComponentModel} config + * @returns {HTMLElement} + */ + create: (config) => MultiselectDropdownComponent(config) + }; +})(); diff --git a/Resources/views/backend/_resources/js/NotificationsController.js b/Resources/views/backend/_resources/js/NotificationsController.js new file mode 100644 index 00000000..06183a99 --- /dev/null +++ b/Resources/views/backend/_resources/js/NotificationsController.js @@ -0,0 +1,415 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef ShopNotification + * @property {string} orderId + * @property {string} paymentMethod + * @property {string} severity + * @property {string} dateAndTime + * @property {string} message + * @property {string} details + */ + + /** + * @typedef ShopNotifications + * @property {boolean} nextPageAvailable + * @property {ShopNotification[]} notifications + */ + + /** + * @typedef WebhookNotification + * @property {string} orderId + * @property {string} logo + * @property {string} paymentMethod + * @property {string} notificationID + * @property {string} dateAndTime + * @property {string} code + * @property {boolean} successful + * @property {string} status + * @property {boolean} hasDetails + * @property {{reason: string, failureDescription: string, adyenLink: string, shopLink: string}?} details + */ + + /** + * @typedef WebhookNotifications + * @property {boolean} nextPageAvailable + * @property {WebhookNotification[]} notifications + */ + + /** + * Handles notification pages logic. + * + * @param {{ + * getShopEventsNotifications: string, + * getWebhookEventsNotifications : string, + * page: string}} configuration + * @constructor + */ + function NotificationsController(configuration) { + /** @type AjaxServiceType */ + const api = AdyenFE.ajaxService; + + const { templateService, elementGenerator: generator, utilities, components } = AdyenFE; + const dataTableComponent = components.DataTable; + + /** @type string */ + let currentStoreId = ''; + + let nextPageAvailable = true; + let currentlyLoading = false; + let page = 1; + const limit = 10; + + /** + * Displays page content. + * + * @param {{state?: string, storeId: string}} config + */ + this.display = ({ storeId }) => { + currentStoreId = storeId; + templateService.clearMainPage(); + + configuration.getShopEventsNotifications = configuration.getShopEventsNotifications.replace( + '{storeId}', + storeId + ); + configuration.getWebhookEventsNotifications = configuration.getWebhookEventsNotifications.replace( + '{storeId}', + storeId + ); + + return renderPage(); + }; + + /** + * Sets the unsaved changes. + * + * @return {boolean} + */ + this.hasUnsavedChanges = () => false; + + const renderPage = () => { + utilities.showLoader(); + let url; + let renderer; + + templateService.clearMainPage(); + + switch (configuration.page) { + case 'shop': + url = `${configuration.getShopEventsNotifications}?page=${page}&limit=${limit}`; + renderer = renderShopNotificationsTable; + break; + case 'webhook': + url = `${configuration.getWebhookEventsNotifications}?page=${page}&limit=${limit}`; + renderer = renderWebhookNotificationsTable; + break; + } + + return api + .get(url, () => {}) + .then(renderer) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Renders a modal to display notification details. + * + * @param {WebhookNotification} webhookNotification + */ + const renderDetailsModal = (webhookNotification) => { + const modal = components.Modal.create({ + title: 'notifications.webhook.notificationDetailsModal.title', + className: 'adl-webhook-notifications-modal', + content: [ + generator.createElement('p', 'adlp-reason', '', null, [ + generator.createElement( + 'span', + 'adlp-reason-title', + 'notifications.webhook.notificationDetailsModal.reason' + ), + generator.createElement('span', 'adlp-reason-text', webhookNotification.details.reason) + ]), + generator.createElement('p', 'adlp-failure-description', '', null, [ + generator.createElement( + 'span', + 'adlp-failure-description-title', + 'notifications.webhook.notificationDetailsModal.failureDescription' + ), + generator.createElement( + 'span', + 'adlp-failure-description-text', + webhookNotification.details.failureDescription + ) + ]), + generator.createElement( + 'a', + 'adlp-adyen-link', + '', + { href: webhookNotification.details.adyenLink, target: '_blank' }, + [ + generator.createElement( + 'span', + '', + 'notifications.webhook.notificationDetailsModal.paymentLink' + ) + ] + ), + generator.createElement( + 'a', + 'adlp-shop-link', + '', + { href: webhookNotification.details.shopLink, target: '_blank' }, + [generator.createElement('span', '', 'notifications.webhook.notificationDetailsModal.shopLink')] + ) + ], + footer: true, + canClose: true, + buttons: [ + { + type: 'primary', + label: 'general.ok', + onClick: () => modal.close() + } + ] + }); + + modal.open(); + }; + + /** + * Renders shop table rows. + * + * @param {ShopNotification[]} shopNotifications + * @returns {TableCell[][]} + */ + const getRowsConfig = (shopNotifications) => { + return shopNotifications?.map((notification) => { + return [ + { + label: notification.orderId, + className: 'adlm--left-aligned' + }, + { + label: notification.paymentMethod, + className: 'adlm--left-aligned adlm--blue-text' + }, + { + renderer: (cell) => + cell.append( + generator.createElement( + 'span', + `adlp-status adlt--${notification.severity}`, + `notifications.shop.severity.${notification.severity}` + ) + ), + className: 'adlm--left-aligned' + }, + { + label: notification.dateAndTime, + className: 'adlm--left-aligned' + }, + { + label: `notifications.shop.` + notification.message, + className: 'adlm--left-aligned' + }, + { + label: `notifications.shop.` + notification.details, + className: 'adlm--left-aligned' + } + ]; + }); + }; + + /** + * Renders webhook table rows. + * + * @param {WebhookNotification[]} webhookNotifications + * @returns {TableCell[][]} + */ + const getWebhookRowsConfig = (webhookNotifications) => { + return webhookNotifications?.map((notification) => { + const options = { + day: 'numeric', + month: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + hour12: false + }; + + const formattedDateTime = new Date(notification.dateAndTime) + .toLocaleString('en-US', options) + .replace(/, /g, ' ') + .replace(/\//g, '-'); + + return [ + { + label: notification.orderId, + className: 'adlm--left-aligned' + }, + { + className: 'adlm--left-aligned', + renderer: (cell) => + cell.prepend( + generator.createElement('img', 'adlp-payment-logo', '', { src: notification.logo }) + ) + }, + { + label: notification.paymentMethod, + className: 'adlm--left-aligned adlm--blue-text' + }, + { + label: notification.code, + className: 'adlm--left-aligned' + }, + { + label: formattedDateTime, + className: 'adlm--left-aligned' + }, + { + label: notification.successful ? 'general.yes' : 'general.no', + className: 'adlm--left-aligned' + }, + { + renderer: (cell) => + cell.append( + generator.createElement( + 'span', + `adlp-status adlt--${notification.status}`, + `notifications.webhook.status.${notification.status}` + ) + ), + className: 'adlm--left-aligned' + }, + notification.status === 'failed' + ? { + className: 'adlm--left-aligned', + renderer: (cell) => + cell.append( + generator.createButton({ + type: 'primary', + className: 'adl-button adlt--ghost adlm--blue', + label: 'general.viewDetails', + onClick: () => renderDetailsModal(notification) + }) + ) + } + : {} + ]; + }); + }; + + /** + * Renders the shop notifications table. + * + * @param {ShopNotifications} shopNotificationsPage + */ + const renderShopNotificationsTable = (shopNotificationsPage) => { + const headers = [ + 'notifications.shop.shopEventsNotifications.orderId', + 'notifications.shop.shopEventsNotifications.paymentMethod', + 'notifications.shop.shopEventsNotifications.severity', + 'notifications.shop.shopEventsNotifications.dateAndTime', + 'notifications.shop.shopEventsNotifications.message', + 'notifications.shop.shopEventsNotifications.details' + ]; + + createNotifications(headers, getRowsConfig, 'Shop', shopNotificationsPage); + }; + + /** + * Renders the webhook notifications table. + * + * @param {WebhookNotifications} webhookNotificationsPage + */ + const renderWebhookNotificationsTable = (webhookNotificationsPage) => { + const headers = [ + 'notifications.webhook.webhookEventsNotifications.orderId', + 'notifications.webhook.webhookEventsNotifications.logo', + 'notifications.webhook.webhookEventsNotifications.paymentMethod', + 'notifications.webhook.webhookEventsNotifications.eventCode', + 'notifications.webhook.webhookEventsNotifications.dateAndTime', + 'notifications.webhook.webhookEventsNotifications.success', + 'notifications.webhook.webhookEventsNotifications.status', + 'notifications.webhook.webhookEventsNotifications.action' + ]; + createNotifications(headers, getWebhookRowsConfig, 'Webhook', webhookNotificationsPage); + }; + + /** + * Returns a function that renders a notifications table and handles pagination. + * + * @param {string[]} headers The table headers. + * @param {(notifications: any[]) => TableCell[][]} getRowsConfig A function that maps notifications to table + * rows. + * @param {string} type The type of notifications. + * @param {ShopNotifications | WebhookNotifications} notificationsPage Notifications page. + */ + const createNotifications = (headers, getRowsConfig, type, notificationsPage) => { + const typeLc = type.toLowerCase(); + nextPageAvailable = notificationsPage.nextPageAvailable; + page = 1; + currentlyLoading = false; + + const headerCells = headers.map((headerLabel) => ({ + label: headerLabel, + className: 'adlm--left-aligned' + })); + + const rows = getRowsConfig(notificationsPage.notifications); + + templateService + .getMainPage() + .append( + generator.createElement('div', `adl-notifications-page`, '', null, [ + generator.createElement('h2', '', `notifications.${typeLc}.title`), + generator.createElement('p', '', `notifications.${typeLc}.description`), + rows.length + ? dataTableComponent.createDataTable(headerCells, rows, `adl-notifications-table`) + : dataTableComponent.createNoItemsMessage(`notifications.${typeLc}.noNotificationsMessage`) + ]) + ); + + const tableWrapper = document.querySelector( + `.adl-notifications-page .adl-notifications-table .adl-table-wrapper` + ); + + tableWrapper?.addEventListener('scroll', (event) => { + if ( + nextPageAvailable && + !currentlyLoading && + tableWrapper.scrollTop + tableWrapper.clientHeight > tableWrapper.scrollHeight - 10 + ) { + page++; + currentlyLoading = true; + + let spinnerWrapper = generator.createElement('div', 'adl-loader adlt--large', '', '', [ + generator.createElement('div', 'adlp-spinner') + ]); + tableWrapper.append(spinnerWrapper); + + api.get(`${configuration[`get${type}EventsNotifications`]}?page=${page}&limit=${limit}`, () => null) + .then((newPage) => { + nextPageAvailable = newPage?.nextPageAvailable; + + !!newPage?.notifications?.length && + dataTableComponent.createTableRows(event.target, getRowsConfig(newPage.notifications)); + }) + .catch(console.error) + .finally(() => { + spinnerWrapper.remove(); + currentlyLoading = false; + }); + } + }); + }; + } + + AdyenFE.NotificationsController = NotificationsController; +})(); diff --git a/Resources/views/backend/_resources/js/PageControllerFactory.js b/Resources/views/backend/_resources/js/PageControllerFactory.js new file mode 100644 index 00000000..c8e5aa6c --- /dev/null +++ b/Resources/views/backend/_resources/js/PageControllerFactory.js @@ -0,0 +1,28 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + function PageControllerFactory() { + /** + * Instantiates page controller; + * + * @param {string} controller + * @param {Record} configuration + */ + this.getInstance = (controller, configuration) => { + let parts = controller.split('-'); + let name = ''; + for (let part of parts) { + part = part.charAt(0).toUpperCase() + part.slice(1); + name += part; + } + + name += 'Controller'; + + return AdyenFE[name] ? new AdyenFE[name](configuration) : null; + }; + } + + AdyenFE.pageControllerFactory = new PageControllerFactory(); +})(); diff --git a/Resources/views/backend/_resources/js/PaymentsController.js b/Resources/views/backend/_resources/js/PaymentsController.js new file mode 100644 index 00000000..ca103283 --- /dev/null +++ b/Resources/views/backend/_resources/js/PaymentsController.js @@ -0,0 +1,1542 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef PaymentMethod + * @property {string} methodId + * @property {string} name + * @property {string} code + * @property {string?} methodName + * @property {string} logo + * @property {'creditOrDebitCard' | 'buyNowPayLater' | 'cashOrAtm' | 'directDebit' | 'onlinePayments' | 'wallet' | + * 'prepaidAndGiftCard' | 'mobile'} paymentType + * @property {boolean} status + * @property {string[]} currencies + * @property {string[]} countries + */ + + /** + * Map between a method code and a method identifier on Adyen + * + * @type {Record} + */ + const methodMap = { + ach: 'ach-direct-debit', + alipay: 'alipay', + amazonpay: 'amazon-pay', + applepay: 'apple-pay', + blik: 'blik', + directEbanking: 'cards', + ebanking_FI: 'finland-online-banking', + eps: 'eps', + giropay: 'giropay', + googlepay: 'google-pay', + ideal: 'ideal', + klarna: 'klarna', + klarna_account: 'klarna', + klarna_paynow: 'klarna', + mbway: 'mb-way', + mobilepay: 'mobilepay', + momo_wallet: 'momo-wallet', + multibanco: 'multibanco', + molpay_ebanking_TH: 'online-banking-thailand', + oney: 'oney', + onlineBanking_PL: 'online-banking-poland', + paypal: 'paypal', + paysafecard: 'paysafecard', + paywithgoogle: 'google-pay', + ratepay: 'ratepay', + ratepay_directdebit: 'ratepay', + scheme: 'cards', + sepadirectdebit: 'sepa-direct-debit', + swish: 'swish', + trustly: 'trustly', + twint: 'twint', + vipps: 'vipps' + }; + + const methodTypes = [ + 'creditOrDebitCard', + 'buyNowPayLater', + 'cashOrAtm', + 'directDebit', + 'onlinePayments', + 'wallet', + 'prepaidAndGiftCard', + 'mobile' + ]; + + const currencies = [ + 'AED', + 'AUD', + 'BGN', + 'BHD', + 'BRL', + 'CAD', + 'CHF', + 'CNY', + 'CZK', + 'DKK', + 'EUR', + 'GBP', + 'HKD', + 'HUF', + 'ISK', + 'ILS', + 'INR', + 'JOD', + 'JPY', + 'KRW', + 'KWD', + 'MYR', + 'NOK', + 'NZD', + 'OMR', + 'PLN', + 'QAR', + 'RON', + 'RUB', + 'SAR', + 'SEK', + 'SGD', + 'THB', + 'TWD', + 'USD', + 'ZAR' + ]; + + const countries = [ + 'AU', + 'AT', + 'BE', + 'BG', + 'CA', + 'HR', + 'CY', + 'CZ', + 'DK', + 'EE', + 'FI', + 'FR', + 'DE', + 'GI', + 'GR', + 'HK', + 'HU', + 'IS', + 'IE', + 'IT', + 'JP', + 'LV', + 'LI', + 'LT', + 'LU', + 'MT', + 'NL', + 'NZ', + 'NO', + 'PL', + 'PT', + 'PR', + 'RO', + 'SG', + 'SK', + 'SI', + 'ES', + 'SE', + 'CH', + 'AE', + 'GB', + 'US' + ]; + + /** + * @typedef AdditionalDataConfig + * @property {boolean?} showLogos + * @property {boolean?} singleClickPayment + * @property {boolean?} sendBasket + * @property {boolean?} installments + * @property {boolean?} installmentAmounts + * @property {string[]?} installmentCountries + * @property {string?} supportedInstallments + * @property {number?} minimumAmount + * @property {string?} numberOfInstallments + * @property {string?} bankIssuer + * @property {string?} merchantId + * @property {string?} publicKeyId + * @property {string?} storeId + * @property {string?} gatewayMerchantId + * @property {string?} merchantName + * @property {boolean?} displayButtonOn + */ + + /** + * @typedef PaymentMethodConfiguration + * @property {boolean} isNew + * @property {string} methodId + * @property {string} code + * @property {string?} name + * @property {string?} description + * @property { 'none' | 'fixed' | 'percent' | 'combined' } surchargeType + * @property {number?} fixedSurcharge + * @property {number?} percentSurcharge + * @property {number?} surchargeLimit + * @property {string?} logo + * @property {Blob?} logoFile + * @property {'creditOrDebitCard' | 'buyNowPayLater' | 'cashOrAtm' | 'directDebit' | 'onlinePayments' | 'wallet' | + * 'prepaidAndGiftCard' | 'mobile'} paymentType + * @property {AdditionalDataConfig?} additionalData + */ + /** + * Handles payments pages logic. + * + * @param {{getConfiguredPaymentsUrl: string, getAvailablePaymentsUrl: string, addMethodConfigurationUrl: string, + * saveMethodConfigurationUrl: string, getMethodConfigurationUrl: string, deleteMethodConfigurationUrl: string + * }} configuration + * @constructor + */ + function PaymentsController(configuration) { + /** @type AjaxServiceType */ + const api = AdyenFE.ajaxService; + + const { + templateService, + translationService, + elementGenerator: generator, + validationService: validator, + components, + utilities + } = AdyenFE; + + const dataTableComponent = AdyenFE.components.DataTable; + + /** @type {HTMLElement} */ + let page; + + /** @type {Record} */ + let activeFilters = {}; + + /** @type {PaymentMethod[]} */ + let activeMethods = []; + + /** @type {PaymentMethod[]} */ + let availableMethods = []; + + /** @type {PaymentMethodConfiguration | null} */ + let activeMethod = null; + + /** @type {PaymentMethodConfiguration | null} */ + let changedMethod = null; + + /** @type {number} */ + let numberOfChanges = 0; + + /** + * Replaces an active page with the other one rendered by a provider renderer method. + * + * @param {() => void} renderer + */ + const switchPage = (renderer) => { + utilities.showLoader(); + document.querySelector('.adl-form-footer')?.remove(); + if (!page) { + page = generator.createElement('div', 'adl-payments-page'); + } else { + templateService.clearComponent(page); + } + + activeFilters = {}; + renderer(); + }; + + /** + * Creates payment methods table. + * + * @param {PaymentMethod[]} paymentMethods + * @param {(cell: HTMLElement, method: PaymentMethod) => void} actionsCellRenderer + * @return {HTMLElement} + */ + const createMethodsTable = (paymentMethods, actionsCellRenderer) => { + /** + * @param {string[]} items + */ + const createHintCell = (items) => { + return (cell) => { + return cell.append( + generator.createHint( + `payments.list.multiItemLabel|${items[0]}|${items.length - 1}`, + items.join(', '), + 'bottom' + ) + ); + }; + }; + + /** @type {TableCell[]} */ + const header = [ + { + label: 'payments.list.paymentMethod', + className: 'adlm--left-aligned' + }, + { + label: 'payments.list.currencies' + }, + { + label: 'payments.list.regions' + }, + { + label: 'payments.list.type' + }, + { + renderer: (cell) => + cell.append( + generator.createElement('div', 'adlp-status-header', 'payments.list.status', null, [ + generator.createHint('', 'payments.list.statusHint', 'top') + ]) + ) + }, + { + label: 'payments.list.actions' + } + ]; + + /** @type {TableCell[][]} */ + const rows = paymentMethods.map((method) => { + return [ + { + label: method.name, + className: 'adlm--left-aligned', + renderer: (cell) => + cell.prepend(generator.createElement('img', 'adlp-payment-logo', '', { src: method.logo })) + }, + { + label: method.currencies?.length <= 2 ? method.currencies?.join(', ') : '', + renderer: method.currencies?.length > 2 ? createHintCell(method.currencies) : null + }, + { + label: method.countries?.length <= 2 ? method.countries?.join(', ') : '', + renderer: method.countries?.length > 2 ? createHintCell(method.countries) : null + }, + { + label: `payments.paymentTypes.${method.paymentType}` + }, + { + renderer: (cell) => + cell.append( + generator.createElement( + 'span', + 'adlp-status adlt--' + (method.status ? 'active' : 'inactive'), + `payments.list.status${method.status ? 'Active' : 'Inactive'}` + ) + ) + }, + { + renderer: (cell) => actionsCellRenderer(cell, method) + } + ]; + }); + + return dataTableComponent.createPaymentsDataTable(header, rows); + }; + + /** + * Renders or replaces the methods table. + * + * @param {HTMLElement} table + */ + const renderMethodsTable = (table) => { + page.querySelector('.adlp-no-items-wrapper')?.remove(); + const existingTable = page.querySelector('.adl-table-wrapper'); + const backButton = page.querySelector('.adlp-back-button'); + if (existingTable) { + existingTable.parentElement?.remove(); + } + + if (backButton) { + page.insertBefore(table, backButton); + } else { + page.append(table); + } + }; + + /** + * Filters methods based on the current filter. + * + * @param {PaymentMethod[]} methods + * @returns {PaymentMethod[]} + */ + const applyFilter = (methods) => { + return methods.filter((method) => { + if (activeFilters.types?.length && !activeFilters.types.includes(method.paymentType)) { + return false; + } + + if ( + activeFilters.status?.length && + !activeFilters.status.includes(method.status ? 'active' : 'inactive') + ) { + return false; + } + + if (activeFilters.currencies?.length) { + return method.currencies.reduce( + (result, code) => result || activeFilters.currencies.includes(code) || code === 'ANY', + false + ); + } + + if (activeFilters.countries?.length) { + return method.countries.reduce( + (result, code) => result || activeFilters.countries.includes(code) || code === 'ANY', + false + ); + } + + return true; + }); + }; + + /** + * Renders the active payments form. + */ + const renderActivePaymentsForm = () => { + page.append( + generator.createElement('div', 'adl-payment-methods-header', '', null, [ + generator.createElement('div', '', '', null, [ + generator.createElement('h2', '', 'payments.active.title'), + generator.createElement('p', '', 'payments.active.description') + ]), + generator.createButton({ + type: 'primary', + className: 'adlp-add-methods-button', + label: 'payments.active.addMethod', + onClick: () => switchPage(renderChooseMethodPage) + }) + ]) + ); + + api.get(configuration.getConfiguredPaymentsUrl) + .then((methods) => { + activeMethods = methods; + if (!methods?.length) { + page.append(dataTableComponent.createNoItemsMessage('payments.active.noMethodsMessage')); + templateService.getMainPage().append(page); + } else { + return api.get(configuration.getAvailablePaymentsUrl).then((allMethods) => { + allMethods.forEach((m) => (m.methodName = m.name)); + availableMethods = allMethods; + + page.append(renderPaymentsTableFilter(renderActiveMethodsTable)); + renderActiveMethodsTable(); + + templateService.getMainPage().append(page); + }); + } + }) + .catch(() => false) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Renders table for the active payment methods. + */ + const renderActiveMethodsTable = () => { + const data = applyFilter( + activeMethods.map((method) => ({ + ...availableMethods.find((m) => m.methodId === method.methodId), + ...method + })) + ); + if (data.length) { + renderMethodsTable( + createMethodsTable(data, (cell, method) => { + cell.append( + generator.createButton({ + type: 'ghost', + size: 'small', + className: 'adlt--edit-button', + label: 'general.edit', + onClick: () => switchPage(() => renderPaymentConfigForm(method)) + }), + generator.createButton({ + type: 'ghost', + size: 'small', + className: 'adlt--delete-button adlm--destructive', + label: 'general.delete', + onClick: () => renderDeleteModal(method) + }) + ); + }) + ); + } else { + renderMethodsTable(dataTableComponent.createNoItemsMessage('payments.list.noMethodsForFilter')); + } + }; + + /** + * Handles choosing method page. + */ + const renderChooseMethodPage = () => { + page.append( + generator.createElement('h2', '', 'payments.add.title'), + generator.createElement('p', '', 'payments.add.description'), + renderPaymentsTableFilter(renderAvailableMethodsTable) + ); + + api.get(configuration.getAvailablePaymentsUrl) + .then((methods) => { + return api.get(configuration.getConfiguredPaymentsUrl).then((configuredPayments) => { + // filter out already configured methods. + methods = (methods || []).filter( + (a) => !(configuredPayments || []).find((c) => c.methodId === a.methodId) + ); + + availableMethods = methods; + + if (!methods?.length) { + page.append(dataTableComponent.createNoItemsMessage('payments.add.noMethodsMessage')); + } else { + renderAvailableMethodsTable(); + } + + templateService.getMainPage().append(page); + }); + }) + .finally(() => { + page.append( + generator.createButton({ + type: 'secondary', + label: 'payments.add.back', + className: 'adlp-back-button', + onClick: () => switchPage(renderActivePaymentsForm) + }) + ); + utilities.hideLoader(); + }); + }; + + /** + * Renders the list of available payment methods + */ + const renderAvailableMethodsTable = () => { + const data = applyFilter(availableMethods); + if (data.length) { + renderMethodsTable( + createMethodsTable(data, (cell, method) => { + cell.append( + generator.createButton({ + type: 'secondary', + size: 'small', + className: 'adlt--add-button adlm--blue adlm--no-wrap', + label: 'payments.list.actionsAdd', + onClick: () => switchPage(() => renderPaymentConfigForm(method)) + }) + ); + }) + ); + } else { + renderMethodsTable(dataTableComponent.createNoItemsMessage('payments.list.noMethodsForFilter')); + } + }; + + /** + * Creates payments table filer. + */ + const renderPaymentsTableFilter = (renderer) => { + let container = page.querySelector('.adlp-table-filter-wrapper'); + let filters; + if (!container) { + filters = generator.createElement('div', 'adlp-table-filters'); + container = generator.createElement('div', 'adlp-table-filter-wrapper', '', null, [ + generator.createButton({ + type: 'ghost', + size: 'medium', + className: 'adlm--blue adlp-filters-switch-button', + label: 'payments.list.filter', + onClick: () => { + container.classList.toggle('adls--filters-active'); + } + }), + filters + ]); + } else { + filters = container.querySelector('.adlp-table-filters'); + filters.innerHTML = ''; + } + + const changeFilter = (filter, values) => { + activeFilters[filter] = values; + resetButton.disabled = + Object.values(activeFilters).reduce((result, options) => result + options.length, 0) === 0; + renderer(); + }; + + const resetButton = generator.createButton({ + type: 'ghost', + label: 'payments.filter.resetAll', + size: 'small', + className: 'adlp-reset-button', + disabled: true, + onClick: () => { + activeFilters = {}; + renderPaymentsTableFilter(renderer); + renderer(); + resetButton.disabled = true; + } + }); + + filters.append( + ...[ + components.TableFilter.create({ + name: 'types', + isMultiselect: true, + label: translationService.translate('payments.filter.types.label'), + labelPlural: translationService.translate('payments.filter.types.labelPlural'), + values: activeFilters.types || [], + options: methodTypes.map((key) => ({ + value: key, + label: translationService.translate(`payments.paymentTypes.${key}`) + })), + selectPlaceholder: 'payments.filter.types.selectPlaceholder', + onChange: (values) => changeFilter('types', values) + }), + components.TableFilter.create({ + name: 'status', + isMultiselect: false, + label: translationService.translate('payments.filter.statuses.label'), + labelPlural: translationService.translate('payments.filter.statuses.labelPlural'), + values: activeFilters.status || [], + options: [ + { + value: 'active', + label: translationService.translate(`payments.list.statusActive`) + }, + { + value: 'inactive', + label: translationService.translate(`payments.list.statusInactive`) + } + ], + selectPlaceholder: 'payments.filter.statuses.selectPlaceholder', + onChange: (values) => changeFilter('status', values) + }), + components.TableFilter.create({ + name: 'currencies', + isMultiselect: true, + label: translationService.translate('payments.filter.currencies.label'), + labelPlural: translationService.translate('payments.filter.currencies.labelPlural'), + values: activeFilters.currencies || [], + options: currencies.map((c) => ({ value: c, label: c })), + selectPlaceholder: 'payments.filter.currencies.selectPlaceholder', + onChange: (values) => changeFilter('currencies', values) + }), + components.TableFilter.create({ + name: 'countries', + isMultiselect: true, + label: translationService.translate('payments.filter.countries.label'), + labelPlural: translationService.translate('payments.filter.countries.labelPlural'), + values: activeFilters.countries || [], + options: countries.map((c) => ({ + value: c, + label: translationService.translate(`countries.${c}`) + })), + selectPlaceholder: 'payments.filter.countries.selectPlaceholder', + onChange: (values) => changeFilter('countries', values) + }), + resetButton + ] + ); + + return container; + }; + + /** + * Gets the default payment method configuration. + * + * @param {PaymentMethod} method + * @returns {PaymentMethodConfiguration} + */ + const getDefaultConfig = (method) => { + const config = { + isNew: true, + methodId: method.methodId, + code: method.code, + paymentType: method.paymentType, + logo: method.logo, + name: method.methodName || method.name, + description: 'Adyen ' + (method.methodName || method.name), + surchargeType: 'none', + additionalData: {} + }; + + if (method.paymentType === 'creditOrDebitCard') { + config.additionalData = { + showLogos: true, + singleClickPayment: true, + sendBasket: true, + installments: false, + installmentAmounts: false, + numberOfInstallments: '', + installmentCountries: ['ANY'], + minimumAmount: null + }; + } + + switch (method.code) { + case 'molpay_ebanking_TH': + config.additionalData = { + showLogos: true, + bankIssuer: '' + }; + break; + case 'ideal': + config.additionalData = { + showLogos: true, + bankIssuer: '' + }; + break; + case 'eps': + config.additionalData = { + bankIssuer: '' + }; + break; + case 'applepay': + config.additionalData = { + merchantId: '', + merchantName: '', + displayButtonOn: true + }; + break; + case 'amazonpay': + config.additionalData = { + publicKeyId: '', + merchantId: '', + storeId: '', + displayButtonOn: true + }; + break; + case 'googlepay': + case 'paywithgoogle': + config.additionalData = { + merchantId: '', + gatewayMerchantId: '', + displayButtonOn: true + }; + break; + case 'paypal': + config.additionalData = { + displayButtonOn: true + }; + break; + } + + return config; + }; + + /** + * Renders the config form for the given payment method. + * + * @param {PaymentMethod} method + */ + const renderPaymentConfigForm = (method) => { + page.append( + generator.createElement('div', 'adlp-configure-method-header', '', null, [ + generator.createElement( + 'h2', + '', + 'payments.configure.title|' + (method.methodName || method.name), + null, + [ + generator.createElement( + 'div', + 'adlp-status-badge adlt--' + (method.status ? 'active' : 'inactive'), + 'payments.list.status' + (method.status ? 'Active' : 'Inactive') + ) + ] + ), + generator.createElement('img', 'adlp-payment-logo', '', { src: method.logo }) + ]), + generator.createElement( + 'p', + '', + 'payments.configure.description|' + (methodMap[method.code] || method.code) + ), + generator.createElement('p', 'adlp-flash-message-wrapper') + ); + + templateService.getMainPage().append(page); + + api.get(configuration.getMethodConfigurationUrl.replace('{methodId}', method.methodId), (error) => { + if (error.status === 404) { + return Promise.resolve(null); + } + + throw error; + }) + .then( + /** @param {PaymentMethodConfiguration} config */ + (config) => { + activeMethod = utilities.cloneObject(config); + if (!config?.code) { + config = getDefaultConfig(method); + activeMethod = utilities.cloneObject(config); + + numberOfChanges = 2; + } else { + config.isNew = false; + config.paymentType = method.paymentType; + + numberOfChanges = 0; + } + + changedMethod = utilities.cloneObject(config); + + renderCommonConfigForm(); + + switch (method.paymentType) { + case 'creditOrDebitCard': + renderCreditCardForm(); + renderInstallmentsForm(); + } + + switch (method.code) { + case 'oney': + renderOneyForm(); + break; + case 'molpay_ebanking_TH': + case 'ideal': + renderIssuersConfigurationForm(); + break; + case 'eps': + renderEpsForm(); + break; + case 'applepay': + renderApplePayForm(); + break; + case 'amazonpay': + renderAmazonPayForm(); + break; + case 'googlepay': + case 'paywithgoogle': + renderGooglePayForm(); + break; + case 'paypal': + renderPayPalForm(); + break; + } + + page.append(generator.createFormFooter(handleSavePaymentMethod, navigateToPaymentsForm)); + renderFooterState(); + handleDependencies('installments', config.additionalData.installments, true); + } + ) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Renders the common payment method config form. + */ + const renderCommonConfigForm = () => { + page.append( + generator.createElement('div', 'adlp-separator'), + ...generator.createFormFields( + [ + { + name: 'name', + value: changedMethod.name, + type: 'text', + label: 'payments.configure.fields.name.label', + description: 'payments.configure.fields.name.description', + error: 'validation.requiredField' + }, + { + name: 'description', + value: changedMethod.description, + type: 'text', + label: 'payments.configure.fields.description.label', + description: 'payments.configure.fields.description.description', + error: 'validation.requiredField' + }, + { + name: 'surchargeType', + value: changedMethod.surchargeType, + type: 'dropdown', + label: 'payments.configure.fields.surchargeType.label', + description: 'payments.configure.fields.surchargeType.description', + placeholder: 'payments.configure.fields.surchargeType.placeholder', + options: [ + { label: 'payments.configure.fields.surchargeType.none', value: 'none' }, + { label: 'payments.configure.fields.surchargeType.fixed', value: 'fixed' }, + { label: 'payments.configure.fields.surchargeType.percent', value: 'percent' }, + { label: 'payments.configure.fields.surchargeType.combined', value: 'combined' } + ] + }, + { + name: 'fixedSurcharge', + value: changedMethod.fixedSurcharge, + type: 'number', + dataset: { + validationRule: 'nonNegative' + }, + label: 'payments.configure.fields.fixedSurcharge.label', + description: 'payments.configure.fields.fixedSurcharge.description', + error: 'validation.numeric' + }, + { + name: 'percentSurcharge', + value: changedMethod.percentSurcharge, + type: 'number', + dataset: { + validationRule: 'nonNegative' + }, + label: 'payments.configure.fields.percentSurcharge.label', + description: 'payments.configure.fields.percentSurcharge.description', + error: 'validation.numeric' + }, + { + name: 'surchargeLimit', + value: changedMethod.surchargeLimit, + type: 'number', + dataset: { + validationRule: 'greaterThanZero,greaterThanX|fixedSurcharge' + }, + label: 'payments.configure.fields.surchargeLimit.label', + description: 'payments.configure.fields.surchargeLimit.description', + error: 'payments.configure.fields.surchargeLimit.error' + }, + { + name: 'logo', + value: changedMethod.logo, + type: 'file', + supportedMimeTypes: ['image/jpeg', 'image/jpg', 'image/png', 'image/svg+xml', 'image/svg'], + label: 'payments.configure.fields.logo.label', + placeholder: 'payments.configure.fields.logo.placeholder' + } + ].map((config) => ({ + ...config, + onChange: (value) => handleConfigMethodChange(config.name, value) + })) + ) + ); + + handleDependencies('surchargeType', changedMethod.surchargeType); + }; + + /** + * Renders the credit card config form. + */ + const renderCreditCardForm = () => { + page.append( + ...generator.createFormFields([ + getRadioField('creditCardFields', 'showLogos'), + getRadioField('creditCardFields', 'singleClickPayment'), + getRadioField('creditCardFields', 'sendBasket') + ]) + ); + }; + + /** + * Renders the Apple Pay config form. + */ + const renderApplePayForm = () => { + page.append( + ...generator.createFormFields([ + getTextField('applePayFields', 'merchantId'), + getTextField('applePayFields', 'merchantName'), + getRadioField('applePayFields', 'displayButtonOn') + ]) + ); + }; + + /** + * Renders the Amazon Pay config form. + */ + const renderAmazonPayForm = () => { + page.append( + ...generator.createFormFields([ + getTextField('amazonPayFields', 'publicKeyId', 'adl-amazon-pay-public-key-id'), + getTextField('amazonPayFields', 'merchantId', 'adl-amazon-pay-merchant-id'), + getTextField('amazonPayFields', 'storeId', 'adl-amazon-pay-store-id'), + getRadioField('amazonPayFields', 'displayButtonOn', 'adl-amazon-pay-display-button') + ]) + ); + }; + + /** + * Renders the Google Pay config form. + */ + const renderGooglePayForm = () => { + page.append( + ...generator.createFormFields([ + getTextField('googlePayFields', 'gatewayMerchantId'), + getTextField('googlePayFields', 'merchantId'), + getRadioField('googlePayFields', 'displayButtonOn') + ]) + ); + }; + + /** + * Renders the PayPal config form. + */ + const renderPayPalForm = () => { + page.append(...generator.createFormFields([getRadioField('paypalFields', 'displayButtonOn')])); + }; + + /** + * Renders the EPS config form. + */ + const renderEpsForm = () => { + page.append(...generator.createFormFields([getTextField('issuersFields', 'bankIssuer')])); + }; + + /** + * Renders the Oney config form. + */ + const renderOneyForm = () => { + page.append( + ...generator.createFormFields([ + getMultiselectField( + 'oneyFields', + 'supportedInstallments', + [ + { label: 'oneyValues.3x', value: '3' }, + { label: 'oneyValues.4x', value: '4' }, + { label: 'oneyValues.6x', value: '6' }, + { label: 'oneyValues.10x', value: '10' }, + { label: 'oneyValues.12x', value: '12' } + ], + 'adlm--inline', + false, + 'payments.configure.fields.oneyFields.supportedInstallments.placeholder' + ) + ]) + ); + }; + + /** + * Renders the installments config form. + */ + const renderInstallmentsForm = () => { + page.append( + ...generator.createFormFields([ + getRadioField('installmentFields', 'installments'), + getRadioField('installmentFields', 'installmentAmounts'), + getMultiselectField('installmentFields', 'installmentCountries', [ + { label: 'countries.BR', value: 'BR' }, + { label: 'countries.MX', value: 'MX' }, + { label: 'countries.TK', value: 'TK' }, + { label: 'countries.JP', value: 'JP' } + ]), + getNumberField('installmentFields', 'minimumAmount', '', false, 0.01, 0.01), + getTextField('installmentFields', 'numberOfInstallments') + ]) + ); + }; + + /** + * Renders the issuers config form. + */ + const renderIssuersConfigurationForm = () => { + page.append( + ...generator.createFormFields([ + getRadioField('issuersFields', 'showLogos'), + getTextField('issuersFields', 'bankIssuer') + ]) + ); + }; + + /** + * Gets the configuration for the radio input field. + * + * @param {string} type + * @param {string} name + * @param {string} className + * @returns {FormField} + */ + const getRadioField = (type, name, className = '') => { + return { + name, + value: changedMethod.additionalData?.[name] ? '1' : '0', + type: 'radio', + className, + label: `payments.configure.fields.${type}.${name}.label`, + description: `payments.configure.fields.${type}.${name}.description`, + options: [ + { label: 'general.yes', value: '1' }, + { label: 'general.no', value: '0' } + ], + onChange: (value) => handleConfigMethodChange(name, value === '1', true) + }; + }; + + /** + * Gets the configuration for the text input field. + * + * @param {string} type + * @param {string} name + * @param {string} className + * @returns {FormField} + */ + const getTextField = (type, name, className = '') => { + return { + name, + value: changedMethod.additionalData?.[name] || '', + type: 'text', + className, + label: `payments.configure.fields.${type}.${name}.label`, + description: `payments.configure.fields.${type}.${name}.description`, + error: 'validation.requiredField', + onChange: (value) => handleConfigMethodChange(name, value, true) + }; + }; + + /** + * Gets the configuration for the number input field. + * + * @param {string} type + * @param {string} name + * @param {string} className + * @param {boolean?} isInt + * @param {number?} step + * @param {number?} min + * @returns {FormField} + */ + const getNumberField = (type, name, className = '', isInt = true, step = 1, min = 1) => { + return { + name, + value: changedMethod.additionalData?.[name] || '', + type: 'number', + className, + step: step, + min: min, + dataset: { + validationRule: (isInt ? 'integer,' : '') + 'greaterThanZero' + }, + label: `payments.configure.fields.${type}.${name}.label`, + description: `payments.configure.fields.${type}.${name}.description`, + error: 'validation.greaterThanZero', + onChange: (value) => handleConfigMethodChange(name, value, true) + }; + }; + + /** + * Gets the configuration for the multiselect field. + * + * @param {string} type + * @param {string} name + * @param {Option[]} options + * @param {string} className + * @param {boolean} useAny + * @param {string} placeholder + * @returns {FormField} + */ + const getMultiselectField = ( + type, + name, + options, + className = '', + useAny = true, + placeholder = 'general.any' + ) => { + return { + name, + values: changedMethod.additionalData?.[name] || [], + type: 'multiselect', + className, + label: `payments.configure.fields.${type}.${name}.label`, + description: `payments.configure.fields.${type}.${name}.description`, + selectedText: 'general.selectedItems', + placeholder, + options, + useAny, + error: 'validation.requiredField', + onChange: (value) => handleConfigMethodChange(name, value, true) + }; + }; + + /** + * Renders the modal for confirming the deletion of the payment method configuration. + * + * @param {PaymentMethod} method + */ + const renderDeleteModal = (method) => { + const modal = components.Modal.create({ + title: 'payments.delete.title', + content: [generator.createElement('span', '', 'payments.delete.description')], + footer: true, + canClose: true, + buttons: [ + { type: 'secondary', label: 'general.cancel', onClick: () => modal.close() }, + { + type: 'primary', + className: 'adlm--destructive', + label: 'general.delete', + onClick: () => { + deleteMethod(method).finally(() => { + modal.close(); + }); + } + } + ] + }); + + modal.open(); + }; + + /** + * Handles form input field change. + * + * @param {string} prop Changed property name. + * @param {any} value New value. + * @param {boolean?} additional Indicates whether the changed property belongs to the additional config fields. + */ + const handleConfigMethodChange = (prop, value, additional) => { + const areDifferent = (source, target) => { + if (Array.isArray(source) && Array.isArray(target)) { + return !AdyenFE.utilities.compareArrays(source, target); + } + + return source !== target; + }; + + numberOfChanges = 0; + if (additional) { + if (!changedMethod.additionalData) { + changedMethod.additionalData = {}; + } + + changedMethod.additionalData[prop] = value; + } else if (prop === 'logo') { + changedMethod.logoFile = value; + numberOfChanges = 1; + } else { + changedMethod[prop] = value; + } + + Object.entries(changedMethod).forEach(([prop, value]) => { + if (prop === 'additionalData') { + Object.entries(changedMethod.additionalData).forEach(([prop, value]) => { + areDifferent(activeMethod.additionalData[prop], value) && numberOfChanges++; + }); + } else if (!['logoFile', 'isNew', 'paymentType'].includes(prop)) { + areDifferent(activeMethod[prop], value) && numberOfChanges++; + } + }); + + renderFooterState(); + handleDependencies(prop, value, additional); + + if ( + [ + 'name', + 'description', + 'showLogos', + 'singleClickPayment', + 'merchantName', + 'sendBasket', + 'gatewayMerchantId', + 'merchantId', + 'publicKeyId', + 'storeId', + 'installmentAmounts', + 'supportedInstallments' + ].includes(prop) + ) { + validateRequiredField([prop]); + } + + if (prop === 'surchargeType') { + ['fixedSurcharge', 'percentSurcharge', 'surchargeLimit'].forEach((prop) => { + validator.removeError(page.querySelector(`[name="${prop}"]`)); + }); + } + + const field = page.querySelector(`[name="${prop}"]`); + + if (['fixedSurcharge', 'percentSurcharge'].includes(prop)) { + validator.validateNumber(field); + } + + if (prop === 'surchargeLimit') { + if (changedMethod.surchargeType === 'combined') { + field.dataset.validationRule = 'greaterThanZero,greaterThanX|fixedSurcharge'; + } else { + field.dataset.validationRule = 'greaterThanZero'; + } + + validator.validateNumber(field); + } + + if (prop === 'numberOfInstallments') { + validator.validateNumberList(page.querySelector('[name="numberOfInstallments"]'), true, false); + } + }; + + /** + * Handles dependencies change. + * + * @param {string} prop + * @param {string | boolean} value + * @param {boolean} additional + */ + const handleDependencies = (prop, value, additional = false) => { + if (prop === 'surchargeType') { + handleFieldVisibility('fixedSurcharge', value === 'fixed' || value === 'combined'); + handleFieldVisibility('percentSurcharge', value === 'percent' || value === 'combined'); + handleFieldVisibility('surchargeLimit', value === 'percent' || value === 'combined'); + } + + if (additional && prop === 'installments') { + handleFieldVisibility('installmentAmounts', value); + handleFieldVisibility('installmentCountries', value); + handleFieldVisibility('minimumAmount', value); + handleFieldVisibility('numberOfInstallments', value); + } + }; + + /** + * + * @param {string} fieldName + * @param {boolean} condition + */ + const handleFieldVisibility = (fieldName, condition) => { + const field = utilities.getAncestor(page.querySelector(`[name="${fieldName}"]`), 'adl-field-wrapper'); + condition ? utilities.showElement(field) : utilities.hideElement(field); + }; + + /** + * Handles save payment method. + */ + const handleSavePaymentMethod = () => { + utilities.showLoader(); + + // Cannot use utilities.cloneObject here because it will delete uploaded file. + const data = { + ...changedMethod, + additionalData: utilities.cloneObject(changedMethod.additionalData) + }; + const create = data.isNew; + delete data.isNew; + delete data.paymentType; + + if (!isValid()) { + utilities.hideLoader(); + return; + } + + if (data.surchargeType === 'fixed') { + data.percentSurcharge = ''; + } else if (data.surchargeType === 'percent') { + data.fixedSurcharge = ''; + } else if (data.surchargeType === 'none') { + data.percentSurcharge = ''; + data.fixedSurcharge = ''; + data.surchargeLimit = ''; + } + + const postData = new FormData(); + Object.entries(data).forEach(([key, value]) => { + if (key !== 'logoFile' && key !== 'additionalData') { + postData.append(key, value); + } + }); + + if (!data.additionalData?.installments) { + delete data.additionalData.installmentAmounts; + delete data.additionalData.installmentCountries; + delete data.additionalData.numberOfInstallments; + delete data.additionalData.minimumAmount; + } else { + if (!Object.hasOwn(data.additionalData, 'installmentAmounts')) { + data.additionalData.installmentAmounts = false; + } + + if ( + !Object.hasOwn(data.additionalData, 'installmentCountries') || + (Array.isArray(data.additionalData?.installmentCountries) && + data.additionalData.installmentCountries.length === 0) + ) { + data.additionalData.installmentCountries = ['ANY']; + } + + if (!Object.hasOwn(data.additionalData, 'minimumAmount')) { + data.additionalData.minimumAmount = null; + } + } + + postData.append('additionalData', JSON.stringify(data.additionalData || null)); + + if (data.logoFile) { + postData.set('logo', data.logoFile, data.logoFile.name); + } + + const method = create ? 'post' : 'post'; + const url = create + ? configuration.addMethodConfigurationUrl + : configuration.saveMethodConfigurationUrl.replace('{methodId}', data.methodId); + + api[method](url, postData, { + 'Content-Type': 'multipart/form-data' + }) + .then(() => { + utilities.createToasterMessage('payments.configure.method' + (create ? 'Added' : 'Saved')); + navigateToPaymentsForm(); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Validates the configuration form. + * + * @returns {boolean} + */ + const isValid = () => { + const result = [validateRequiredField(['name', 'description']), !page.querySelector(':invalid')]; + + if (['fixed', 'combined'].includes(changedMethod.surchargeType)) { + changedMethod.fixedSurcharge && + result.push(validator.validateNumber(page.querySelector('[name="fixedSurcharge"]'))); + } + + if (['percent', 'combined'].includes(changedMethod.surchargeType)) { + changedMethod.percentSurcharge && + result.push(validator.validateNumber(page.querySelector('[name="percentSurcharge"]'))); + if (changedMethod.surchargeLimit) { + const surchargeLimitField = page.querySelector('[name="surchargeLimit"]'); + if (changedMethod.surchargeType === 'combined') { + surchargeLimitField.dataset.validationRule = 'greaterThanZero,greaterThanX|fixedSurcharge'; + } else { + surchargeLimitField.dataset.validationRule = 'greaterThanZero'; + } + + result.push(validator.validateNumber(surchargeLimitField)); + } + } + + if (changedMethod.additionalData?.installments) { + if (changedMethod.additionalData.minimumAmount) { + result.push(validator.validateNumber(page.querySelector('[name="minimumAmount"]'))); + } + + changedMethod.paymentType === 'creditOrDebitCard' && + result.push( + validator.validateNumberList(page.querySelector('[name="numberOfInstallments"]'), true, false) + ); + } + + if (changedMethod.paymentType === 'creditOrDebitCard') { + result.push( + ...validateRequiredField(['showLogos', 'singleClickPayment', 'sendBasket', 'installmentAmounts']) + ); + } else if (changedMethod.code === 'applepay') { + result.push(...validateRequiredField(['merchantId', 'merchantName'])); + } else if (changedMethod.code === 'amazonpay') { + result.push(...validateRequiredField(['publicKeyId', 'merchantId', 'storeId'])); + } else if (changedMethod.code === 'googlepay' || changedMethod.code === 'paywithgoogle') { + result.push(...validateRequiredField(['gatewayMerchantId', 'merchantId'])); + } else if (changedMethod.code === 'oney') { + result.push(...validateRequiredField(['supportedInstallments'])); + } + + return !result.includes(false); + }; + + /** + * Validates the additional form fields. + * + * @param {(keyof AdditionalDataConfig | 'name' | 'description')[]} fieldNames + * @returns {boolean[]} + */ + const validateRequiredField = (fieldNames) => { + return fieldNames.map((fieldName) => + validator.validateRequiredField(page.querySelector(`[name=${fieldName}]`)) + ); + }; + + /** + * Deletes the payment method configuration. + * + * @param {PaymentMethod} method + */ + const deleteMethod = (method) => { + utilities.showLoader(); + + return api + .delete(configuration.deleteMethodConfigurationUrl.replace('{methodId}', method.methodId)) + .then(() => { + switchPage(renderActivePaymentsForm); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Handles footer visibility state. + */ + const renderFooterState = () => { + utilities.renderFooterState(numberOfChanges, false); + }; + + /** + * Handles switching to payments form. + */ + const navigateToPaymentsForm = () => { + activeMethod = null; + changedMethod = null; + numberOfChanges = 0; + switchPage(renderActivePaymentsForm); + }; + + /** + * Displays page content. + * + * @param {{ storeId: string }} config + */ + this.display = ({ storeId }) => { + configuration.getConfiguredPaymentsUrl = configuration.getConfiguredPaymentsUrl.replace( + '{storeId}', + storeId + ); + configuration.getAvailablePaymentsUrl = configuration.getAvailablePaymentsUrl.replace('{storeId}', storeId); + configuration.getMethodConfigurationUrl = configuration.getMethodConfigurationUrl.replace( + '{storeId}', + storeId + ); + configuration.saveMethodConfigurationUrl = configuration.saveMethodConfigurationUrl.replace( + '{storeId}', + storeId + ); + configuration.addMethodConfigurationUrl = configuration.addMethodConfigurationUrl.replace( + '{storeId}', + storeId + ); + configuration.deleteMethodConfigurationUrl = configuration.deleteMethodConfigurationUrl.replace( + '{storeId}', + storeId + ); + templateService.clearMainPage(); + switchPage(renderActivePaymentsForm); + }; + + /** + * Sets the unsaved changes. + * + * @return {boolean} + */ + this.hasUnsavedChanges = () => { + if (numberOfChanges > 0) { + return true; + } + }; + } + + AdyenFE.PaymentsController = PaymentsController; +})(); diff --git a/Resources/views/backend/_resources/js/ResponseService.js b/Resources/views/backend/_resources/js/ResponseService.js new file mode 100644 index 00000000..92feb75d --- /dev/null +++ b/Resources/views/backend/_resources/js/ResponseService.js @@ -0,0 +1,56 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * The ResponseService constructor. + * + * @constructor + */ + function ResponseService() { + /** + * Handles an error response from the submit action. + * + * @param {{error?: string, errorCode?: string, status?: number}} response + * @returns {Promise} + */ + this.errorHandler = (response) => { + if (response.status !== 401) { + const { utilities, templateService, elementGenerator } = AdyenFE; + let container = document.querySelector('.adlp-flash-message-wrapper'); + if (!container) { + container = elementGenerator.createElement('div', 'adlp-flash-message-wrapper'); + templateService.getMainPage().prepend(container); + } + + templateService.clearComponent(container); + + if (response.error) { + container.prepend(utilities.createFlashMessage(response.error, 'error')); + } else if (response.errorCode) { + container.prepend(utilities.createFlashMessage('general.errors.' + response.errorCode, 'error')); + } else { + container.prepend(utilities.createFlashMessage('general.errors.unknown', 'error')); + } + } + + return Promise.reject(response); + }; + + /** + * Handles 401 response. + * + * @param {{error?: string, errorCode?: string}} response + * @returns {Promise} + */ + this.unauthorizedHandler = (response) => { + AdyenFE.utilities.create401FlashMessage(`general.errors.${response.errorCode}`); + AdyenFE.state.goToState('connection'); + + return Promise.reject({ ...response, status: 401 }); + }; + } + + AdyenFE.responseService = new ResponseService(); +})(); diff --git a/Resources/views/backend/_resources/js/SettingsController.js b/Resources/views/backend/_resources/js/SettingsController.js new file mode 100644 index 00000000..4662492d --- /dev/null +++ b/Resources/views/backend/_resources/js/SettingsController.js @@ -0,0 +1,966 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef GeneralSettings + * @property {boolean} basketItemSync + * @property {'delayed' | 'immediate' | 'manual' | null} capture + * @property {number | null} captureDelay + * @property {string | null} shipmentStatus + * @property {number} retentionPeriod + */ + + /** + * @typedef OrderStatusMappingSettings + * @property {string | null} inProgress + * @property {string | null} pending + * @property {string | null} paid + * @property {string | null} failed + * @property {string | null} refunded + * @property {string | null} cancelled + * @property {string | null} partiallyRefunded + * @property {string | null} new + * @property {string | null} chargeBack + */ + + /** + * @typedef AdyenGivingSettings + * @property {boolean} enableAdyenGiving + * @property {string} charityName + * @property {string} charityDescription + * @property {string} charityMerchantAccount + * @property {string} donationAmount + * @property {string} logo + * @property {Blob?} logoFile + * @property {string} backgroundImage + * @property {Blob?} backgroundImageFile + * @property {string} charityWebsite + */ + + /** + * @typedef SystemInfoSettings + * @property {boolean} debugMode + * @property {{status: boolean, message: string}} webhookValidate + * @property {{status: boolean, message: string}} infoValidate + * @property {string} systemInformation + */ + + /** + * Handles connection page logic. + * + * @param {{ + * getShippingStatusesUrl: string, + * getSettingsUrl: string, + * saveSettingsUrl: string, + * getOrderMappingsUrl: string, + * saveOrderMappingsUrl: string, + * getGivingUrl: string, + * saveGivingUrl: string, + * getSystemInfoUrl: string, + * saveSystemInfoUrl: string, + * webhookValidationUrl: string, + * integrationValidationUrl: string, + * integrationValidationTaskCheckUrl: string, + * downloadWebhookReportUrl: string, + * downloadIntegrationReportUrl: string, + * downloadSystemInfoFileUrl: string, + * page: string}} configuration + * @constructor + */ + function SettingsController(configuration) { + /** @type AjaxServiceType */ + const api = AdyenFE.ajaxService; + + const { templateService, elementGenerator: generator, validationService: validator, utilities } = AdyenFE; + /** @type string */ + let currentStoreId = ''; + /** @type HTMLElement | null */ + let form = null; + + /** @type GeneralSettings | AdyenGivingSettings | OrderStatusMappingSettings */ + let activeSettings; + /** @type GeneralSettings | AdyenGivingSettings | OrderStatusMappingSettings */ + let changedSettings; + /** @type number */ + let numberOfChanges = 0; + + /** @type SystemInfoSettings */ + let systemSettings; + + /** + * Displays page content. + * + * @param {{ state?: string, storeId: string }} config + */ + this.display = ({ storeId }) => { + currentStoreId = storeId; + templateService.clearMainPage(); + [ + 'getShippingStatusesUrl', + 'getSettingsUrl', + 'saveSettingsUrl', + 'getGivingUrl', + 'saveGivingUrl', + 'getOrderMappingsUrl', + 'saveOrderMappingsUrl', + 'webhookValidationUrl', + 'downloadWebhookReportUrl' + ].forEach((prop) => { + configuration[prop] = configuration[prop].replace('{storeId}', storeId); + }); + + return renderPage(); + }; + + /** + * Sets the unsaved changes. + * + * @return {boolean} + */ + this.hasUnsavedChanges = () => false; + + const scrollToTop = () => { + document.querySelector('#adl-page > main')?.scrollTo({ top: 0, left: 0, behavior: 'smooth' }); + }; + + const renderPage = () => { + utilities.showLoader(); + numberOfChanges = 0; + scrollToTop(); + let url; + let renderer; + switch (configuration.page) { + case 'adyen_giving': + url = configuration.getGivingUrl; + renderer = renderAdyenGivingSettingsForm; + break; + case 'order_status_mapping': + url = configuration.getOrderMappingsUrl; + renderer = renderOrderStatusMappingForm; + break; + case 'system_info': + url = configuration.getSystemInfoUrl; + renderer = renderSystemInfoForm; + break; + default: + url = configuration.getSettingsUrl; + renderer = renderGeneralSettingsForm; + break; + } + + return api + .get(url, () => null) + .then(renderer) + .catch(renderer) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Renders the general settings form. + * + * @param {GeneralSettings} settings + */ + const renderGeneralSettingsForm = (settings) => { + activeSettings = utilities.cloneObject(settings); + if (!settings || Object.keys(settings).length === 0) { + /** @type GeneralSettings */ + settings = { + basketItemSync: false, + retentionPeriod: 60, + capture: null, + captureDelay: null, + shipmentStatus: null + }; + + numberOfChanges = 3; + } + + changedSettings = utilities.cloneObject(settings); + + return api + .get(configuration.getShippingStatusesUrl, () => []) + .then( + /** @param {{statusName: string, statusId: string}[]} shippingStatuses */ + (shippingStatuses) => { + renderPageForm( + 'adlp-general-settings', + 'general', + true, + generator.createFormFields( + [ + { + name: 'basketItemSync', + value: settings.basketItemSync, + type: 'checkbox' + }, + { + name: 'capture', + value: settings.capture, + type: 'dropdown', + placeholder: 'settings.general.fields.capture.placeholder', + error: 'settings.general.fields.capture.error', + options: [ + { label: 'settings.general.fields.capture.delayed', value: 'delayed' }, + { label: 'settings.general.fields.capture.immediate', value: 'immediate' }, + { label: 'settings.general.fields.capture.manual', value: 'manual' } + ] + }, + { + name: 'captureDelay', + value: settings.captureDelay, + type: 'number', + className: + 'adlt--capture-delay' + + (settings.capture !== 'delayed' ? ' adls--hidden ' : ''), + step: 1, + dataset: { + validationRule: 'required,integer,minValue|1,maxValue|7' + }, + error: 'settings.general.fields.captureDelay.error' + }, + { + name: 'shipmentStatus', + value: settings.shipmentStatus, + type: 'dropdown', + placeholder: 'settings.general.fields.shipmentStatus.placeholder', + options: shippingStatuses.map((status) => ({ + label: status.statusName, + value: status.statusId + })), + className: + 'adlt--shipment-status' + + (settings.capture !== 'manual' ? ' adls--hidden ' : '') + }, + { + name: 'retentionPeriod', + value: settings.retentionPeriod, + type: 'number', + step: 1, + min: 0, + dataset: { + validationRule: 'required,integer,minValue|60' + }, + error: 'settings.general.fields.retentionPeriod.error' + } + ].map( + /** @param {FormField} config */ + (config) => ({ + ...config, + label: `settings.general.fields.${config.name}.label`, + description: `settings.general.fields.${config.name}.description`, + onChange: (value) => handleChange(config.name, value) + }) + ) + ) + ); + } + ); + }; + + /** + * Renders the order status mappings form. + * + * @param {OrderStatusMappingSettings} mappings + */ + const renderOrderStatusMappingForm = (mappings) => { + if (!mappings || Object.keys(mappings).length === 0) { + /** @type {OrderStatusMappingSettings} */ + mappings = { + inProgress: null, + pending: null, + paid: null, + failed: null, + refunded: null, + partiallyRefunded: null, + cancelled: null, + new: null, + chargeBack: null + }; + } + + activeSettings = utilities.cloneObject(mappings); + changedSettings = utilities.cloneObject(mappings); + + return api + .get(configuration.getShippingStatusesUrl, () => []) + .then( + /** + * @param {{statusName: string, statusId: string}[]} orderStatuses + **/ + (orderStatuses) => { + orderStatuses = [ + { statusId: null, statusName: 'settings.orderStatusMapping.none' }, + ...orderStatuses + ]; + renderPageForm( + 'adlp-order-status-mapping', + 'orderStatusMapping', + true, + generator.createFormFields([ + getDropdownField('inProgress', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField('pending', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField('paid', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField('failed', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField('refunded', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField('partiallyRefunded', mappings, 'orderStatusMapping', orderStatuses), + getDropdownField( + 'cancelled', + mappings, + 'orderStatusMapping', + orderStatuses, + 'adlm--turned' + ), + getDropdownField('new', mappings, 'orderStatusMapping', orderStatuses, 'adlm--turned'), + getDropdownField( + 'chargeBack', + mappings, + 'orderStatusMapping', + orderStatuses, + 'adlm--turned' + ) + ]) + ); + } + ); + }; + + /** + * Gets the default settings for Adyen giving form. + * + * @returns {AdyenGivingSettings} + */ + const getDefaultAdyenGivingSettings = () => ({ + enableAdyenGiving: false, + charityName: '', + logo: '', + logoFile: null, + backgroundImage: '', + backgroundImageFile: null, + charityDescription: '', + charityMerchantAccount: '', + charityWebsite: '', + donationAmount: '' + }); + + /** + * Renders the adyen giving settings form. + * + * @param {AdyenGivingSettings} adyenGiving + */ + const renderAdyenGivingSettingsForm = (adyenGiving) => { + activeSettings = utilities.cloneObject(adyenGiving); + + if (!adyenGiving || Object.keys(adyenGiving).length === 0) { + /** @type AdyenGivingSettings */ + adyenGiving = getDefaultAdyenGivingSettings(); + + numberOfChanges = 3; + } + + changedSettings = utilities.cloneObject(adyenGiving); + renderPageForm( + 'adlp-adyen-giving-settings', + 'adyenGiving', + true, + generator.createFormFields([ + { + name: 'enableAdyenGiving', + value: changedSettings.enableAdyenGiving || false, + type: 'checkbox', + label: `settings.adyenGiving.fields.enableAdyenGiving.label`, + description: `settings.adyenGiving.fields.enableAdyenGiving.description`, + onChange: (value) => handleChange('enableAdyenGiving', value) + }, + getTextField('charityName', 'adyenGiving'), + getTextField('charityDescription', 'adyenGiving'), + getTextField('charityMerchantAccount', 'adyenGiving'), + getTextField('donationAmount', 'adyenGiving'), + getTextField('charityWebsite', 'adyenGiving'), + getFileUploadField('backgroundImage', 'adyenGiving'), + getFileUploadField('logo', 'adyenGiving') + ]) + ); + + handleDependencies('enableAdyenGiving', adyenGiving.enableAdyenGiving); + }; + + /** + * Renders settings form. + * + * @param {string} className + * @param {string} page + * @param {boolean?} useFooter + * @param {HTMLElement[]} formFields + */ + const renderPageForm = (className, page, useFooter, formFields) => { + if (form) { + templateService.clearComponent(form); + } + + form = generator.createElement('div', className, '', null, [ + generator.createElement('div', 'adlp-flash-message-wrapper'), + generator.createElement('h2', '', `settings.${page}.title`), + generator.createElement('p', '', `settings.${page}.description`), + ...formFields, + useFooter + ? generator.createFormFooter( + handleSave, + () => { + if (numberOfChanges > 0) { + return renderPage(); + } else { + scrollToTop(); + } + }, + 'general.discardChanges' + ) + : '' + ]); + + templateService.getMainPage().append(form); + if (useFooter) { + renderFooterState(numberOfChanges); + } + }; + + /** + * Renders the system info settings form. + * + * @param {SystemInfoSettings} systemInfoSettings + */ + const renderSystemInfoForm = (systemInfoSettings) => { + systemSettings = { ...systemInfoSettings }; + + renderPageForm( + 'adlp-system-info-settings', + 'system', + false, + generator.createFormFields([ + { + name: 'debugMode', + value: systemInfoSettings.debugMode, + type: 'checkbox', + label: `settings.system.fields.debugMode.label`, + description: `settings.system.fields.debugMode.description`, + onChange: (value) => handleDebugMode(!!value) + }, + getButtonField('adyenWebhooksValidation', 'adlp-setting-field', 'validate', handleValidateWebhooks), + getButtonField( + 'integrationConfigurationValidation', + 'adlp-setting-field', + 'validate', + performIntegrationValidation + ), + getButtonLinkField( + 'downloadSystemInformation', + 'adlp-setting-field adlp-download-report', + 'downloadReport', + configuration.downloadSystemInfoFileUrl + ), + getButtonLinkField( + 'contactAdyenSupport', + 'adlp-setting-field adlp-contact-adyen-support', + 'contactAdyenSupport', + 'https://www.adyen.help/hc/en-us' + ) + ]) + ); + }; + + /** + * Handles form input field change. + * + * @param {keyof (GeneralSettings & OrderStatusMappingSettings & AdyenGivingSettings & SystemInfoSettings)} prop + * @param {any} value + */ + const handleChange = (prop, value) => { + if (['captureDelay', 'retentionPeriod'].includes(prop)) { + changedSettings[prop] = Number(value); + } else { + changedSettings[prop] = value; + } + + if (prop === 'capture') { + handleOnCaptureChange(value); + } + + if (prop === 'logo') { + changedSettings.logoFile = value; + } + + if (prop === 'backgroundImage') { + changedSettings.backgroundImageFile = value; + } + + validator.removeError(form.querySelector('[name="' + prop + '"]')); + + if (!configuration.page) { + validateGeneralSettings(prop); + } else if (configuration.page === 'adyen_giving') { + validateAdyenGivingSettings(prop); + } + + renderFooterState(); + handleDependencies(prop, value); + }; + + /** + * Handles capture field change. + * + * @param {'delayed' | 'immediate' | 'manual'} value + */ + const handleOnCaptureChange = (value) => { + utilities.hideElement(form.querySelector('.adlt--capture-delay')); + utilities.hideElement(form.querySelector('.adlt--shipment-status')); + switch (value) { + case 'delayed': + utilities.showElement(form.querySelector('.adlt--capture-delay')); + break; + case 'manual': + utilities.showElement(form.querySelector('.adlt--shipment-status')); + break; + } + }; + + /** + * Handles dependencies change. + * + * @param {string} prop + * @param {string | boolean} value + */ + const handleDependencies = (prop, value) => { + if (prop === 'enableAdyenGiving') { + handleFieldVisibility('charityName', value); + handleFieldVisibility('charityDescription', value); + handleFieldVisibility('charityMerchantAccount', value); + handleFieldVisibility('donationAmount', value); + handleFieldVisibility('charityWebsite', value); + handleFieldVisibility('backgroundImage', value); + handleFieldVisibility('logo', value); + } + }; + + /** + * Handles field visibility. + * + * @param {string} fieldName + * @param {boolean} condition + */ + const handleFieldVisibility = (fieldName, condition) => { + const field = utilities.getAncestor(form.querySelector(`[name="${fieldName}"]`), 'adl-field-wrapper'); + condition ? utilities.showElement(field) : utilities.hideElement(field); + }; + + /** + * Gets the configuration for the dropdown field. + * + * @param {string} name + * @param {GeneralSettings | OrderStatusMappingSettings | AdyenGivingSettings} settingsTypeObject + * @param {string} settingsTypeName + * @param {string?} className + * @param {{statusName: string, statusId: string}[]} options + * @returns {FormField} + */ + const getDropdownField = (name, settingsTypeObject, settingsTypeName, options, className = '') => { + return { + name, + value: settingsTypeObject?.[name] || null, + type: 'dropdown', + className, + placeholder: `settings.${settingsTypeName}.fields.${name}.placeholder`, + label: `settings.${settingsTypeName}.fields.${name}.label`, + description: `settings.${settingsTypeName}.fields.${name}.description`, + options: options.map((status) => ({ + label: status.statusName, + value: status.statusId + })), + onChange: (value) => handleChange(name, value) + }; + }; + + /** + * Gets the configuration for the file upload field. + * + * @param {string} name + * @param {string} settingsTypeName + * @returns {FormField} + */ + const getFileUploadField = (name, settingsTypeName) => { + return { + name, + value: changedSettings?.[name] || '', + type: 'file', + supportedMimeTypes: ['image/jpeg', 'image/jpg', 'image/png', 'image/svg+xml', 'image/svg'], + label: `settings.${settingsTypeName}.fields.${name}.label`, + description: `settings.${settingsTypeName}.fields.${name}.description`, + placeholder: `settings.${settingsTypeName}.fields.${name}.placeholder`, + error: 'validation.requiredField', + onChange: (value) => handleChange(name, value) + }; + }; + + /** + * Gets the configuration for the text input field. + * + * @param {string} name + * @param {string} settingsTypeName + * @returns {FormField} + */ + const getTextField = (name, settingsTypeName) => { + return { + name, + value: changedSettings?.[name] || '', + type: 'text', + label: `settings.${settingsTypeName}.fields.${name}.label`, + description: `settings.${settingsTypeName}.fields.${name}.description`, + error: 'validation.requiredField', + onChange: (value) => handleChange(name, value) + }; + }; + + /** + * Gets the configuration for the button field. + * + * @param {string} name + * @param {string?} className + * @param {string} buttonText + * @param {() => void?} onClick + */ + const getButtonField = (name, className, buttonText, onClick) => { + return { + name: name, + className: className, + value: '', + type: 'button', + buttonType: 'secondary', + buttonSize: 'medium', + buttonLabel: `settings.system.buttons.` + buttonText, + label: `settings.system.fields.${name}.label`, + description: `settings.system.fields.${name}.description`, + onClick: onClick + }; + }; + + /** + * Gets the configuration for the link (that looks like a button) field. + * + * @param {string} name + * @param {string?} className + * @param {string} text + * @param {string} href + * @param {boolean?} useDownload + * @param {string?} downloadFile + */ + const getButtonLinkField = (name, className, text, href, useDownload, downloadFile) => { + return { + name: name, + className: className, + value: '', + type: 'buttonLink', + text: `settings.system.buttons.` + text, + href: href, + useDownload: useDownload, + downloadFile: downloadFile, + label: `settings.system.fields.${name}.label`, + description: `settings.system.fields.${name}.description` + }; + }; + + /** + * Handles footer visibility state. + * + * @param {number} changes + */ + const renderFooterState = (changes = 0) => { + numberOfChanges = changes; + Object.entries(changedSettings).forEach(([prop, value]) => { + if (!['logoFile', 'backgroundImageFile'].includes(prop) && activeSettings[prop] !== value) { + numberOfChanges++; + } + }); + + if (changedSettings.logoFile) { + numberOfChanges++; + } + + if (changedSettings.backgroundImageFile) { + numberOfChanges++; + } + + utilities.renderFooterState(numberOfChanges); + }; + + /** + * Handles debug mode change. + * + * @param {boolean} value + */ + const handleDebugMode = (value) => { + utilities.showLoader(); + + let data = { debugMode: value }; + + api.post(configuration.saveSystemInfoUrl, data) + .then(renderPage) + .then(() => { + utilities.createToasterMessage('settings.system.debugMode' + (value ? 'Enabled' : 'Disabled')); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + const performIntegrationValidation = () => { + let url; + + const doCall = () => { + api.get(url, (e) => { + throw e; + }) + .then((response) => { + if (response?.finished) { + showMessage( + [ + `settings.system.messages.${ + response?.status + ? 'successIntegrationValidation' + : 'failedIntegrationValidation' + }`, + 'settings.system.messages.downloadReportText|' + + configuration.downloadIntegrationReportUrl + ], + response?.status ? 'success' : 'error' + ); + + utilities.hideLoader(); + } else { + setTimeout(doCall, 500); + } + }) + .catch((reason) => { + showMessage(`general.errors.${reason?.errorCode || 'unknown'}`, 'error'); + utilities.hideLoader(); + }); + }; + + utilities.showLoader(); + api.post(configuration.integrationValidationUrl).then( + /** @param {{queueItemId: string}} response */ + (response) => { + url = configuration.integrationValidationTaskCheckUrl.replace( + '{queueItemId}', + response.queueItemId + ); + + setTimeout(doCall, 500); + } + ); + }; + + /** + * Handles webhooks and integration configuration validation. + */ + const handleValidateWebhooks = () => { + utilities.showLoader(); + + api.post(configuration.webhookValidationUrl, null, null, (response) => response) + .then((response) => { + showMessage( + [ + 'settings.system.messages.' + + (response?.status ? 'success' : 'failed') + + 'WebhookValidation', + 'settings.system.messages.downloadReportText|' + configuration.downloadWebhookReportUrl + ], + response?.status ? 'success' : 'error' + ); + }) + .catch(() => false) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Saves the current page. + */ + const handleSave = () => { + utilities.showLoader(); + + if (!configuration.page && !validateGeneralSettings()) { + utilities.hideLoader(); + return; + } + + if (configuration.page === 'adyen_giving' && !validateAdyenGivingSettings()) { + utilities.hideLoader(); + return; + } + + let data = { ...changedSettings }; + + let promise; + if (configuration.page === 'adyen_giving') { + if (!data.enableAdyenGiving) { + data = getDefaultAdyenGivingSettings(); + } + + const postData = new FormData(); + Object.entries(data).forEach(([key, value]) => { + if (!['logo', 'logoFile', 'backgroundImage', 'backgroundImageFile'].includes(key)) { + postData.append(key, value); + } + }); + + if (data.logoFile) { + postData.set('logo', data.logoFile, data.logoFile.name); + } + + if (data.backgroundImageFile) { + postData.set('backgroundImage', data.backgroundImageFile, data.backgroundImageFile.name); + } + + promise = api.post(configuration.saveGivingUrl, postData, { + 'Content-Type': 'multipart/form-data' + }); + } else if (configuration.page === 'order_status_mapping') { + promise = api.post(configuration.saveOrderMappingsUrl, data); + } else { + if (data.capture !== 'delayed') { + data.captureDelay = null; + } + promise = api.post(configuration.saveSettingsUrl, data); + } + + promise + .then(renderPage) + .then(showMessage) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Validates the general settings form. + * + * @param {keyof GeneralSettings?} prop Indicates a field to be validated. + * @returns {boolean} TRUE if all the fields are valid. + */ + const validateGeneralSettings = (prop) => { + const captureInput = form.querySelector('[name="capture"]'); + + const result = []; + if (!prop || prop === 'capture') { + result.push(validator.validateRequiredField(captureInput)); + } + + if (!prop || prop === 'captureDelay') { + result.push( + captureInput.value !== 'delayed' || + validator.validateNumber(form.querySelector('[name="captureDelay"]')) + ); + } + + if (!prop || prop === 'shipmentStatus') { + result.push( + captureInput.value !== 'manual' || + validator.validateRequiredField(form.querySelector('[name="shipmentStatus"]')) + ); + } + + if (!prop || prop === 'retentionPeriod') { + result.push(validator.validateNumber(form.querySelector('[name="retentionPeriod"]'))); + } + + if (!prop) { + result.push(!form.querySelector(':invalid')); + } + + return !result.includes(false); + }; + + /** + * Validates Adyen giving form. + * + * @param {keyof AdyenGivingSettings?} prop Indicates a field to be validated. + * @returns {boolean} TRUE if all the fields are valid. + */ + const validateAdyenGivingSettings = (prop) => { + if (changedSettings.enableAdyenGiving) { + const fields = prop + ? [prop] + : [ + 'charityName', + 'logo', + 'backgroundImage', + 'charityDescription', + 'charityMerchantAccount', + 'charityWebsite', + 'donationAmount' + ]; + + const result = []; + fields.forEach((fieldName) => { + const field = form.querySelector(`[name=${fieldName}]`); + if (['charityName', 'charityDescription', 'charityMerchantAccount'].includes(fieldName)) { + result.push(validator.validateRequiredField(field)); + } else if (fieldName === 'charityWebsite') { + result.push(validateUrlField(fieldName, false)); + } else if (['logo', 'backgroundImage'].includes(fieldName)) { + if (!changedSettings[fieldName] && !changedSettings[fieldName + 'File']) { + validator.setError(field); + result.push(false); + } + } + + if (fieldName === 'donationAmount') { + result.push(validator.validateNumberList(field)); + } + }); + + return !result.includes(false); + } + + return true; + }; + + /** + * Validates if the field is a valid URL. Additionally, validates if the field is set, if it is mandatory. + * @param {string} name The name of the field. + * @param {boolean} mandatory Indicates whether to validate a required field. + * @return {boolean} TRUE if the field is a valid URL. + */ + const validateUrlField = (name, mandatory) => { + if (changedSettings[name]) { + return validator.validateUrl(form.querySelector(`[name="${name}"]`), 'validation.invalidUrl'); + } + + return mandatory + ? validator.validateRequiredField(form.querySelector(`[name="${name}"]`), 'validation.requiredField') + : true; + }; + + /** + * Displays the success flash message. + * + * @param {string|string[]} message + * @param {'success'|'error'} type + */ + const showMessage = (message = 'general.changesSaved', type = 'success') => { + const container = form?.querySelector('.adlp-flash-message-wrapper'); + if (!container) { + return; + } + + templateService.clearComponent(container); + container.append(utilities.createFlashMessage(message, type)); + scrollToTop(); + }; + } + + AdyenFE.SettingsController = SettingsController; +})(); diff --git a/Resources/views/backend/_resources/js/StateController.js b/Resources/views/backend/_resources/js/StateController.js new file mode 100644 index 00000000..d0b8845c --- /dev/null +++ b/Resources/views/backend/_resources/js/StateController.js @@ -0,0 +1,490 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef Store + * @property {string} storeId + * @property {string} storeName + * @property {boolean} maintenanceMode + */ + /** + * @typedef Merchant + * @property {string} merchantId + * @property {string} merchantName + */ + + /** + * @typedef StateConfiguration + * @property {string?} pagePlaceholder + * @property {string} stateUrl + * @property {string} storesUrl + * @property {string} currentStoreUrl + * @property {string} connectionDetailsUrl + * @property {string} merchantsUrl + * @property {string} versionUrl + * @property {string} downloadVersionUrl + * @property {string?} systemId + * @property {Record} pageConfiguration + * @property {Record} templates + */ + + /** + * Main controller of the application. + * + * @param {StateConfiguration} configuration + * + * @constructor + */ + function StateController(configuration) { + /** @type AjaxServiceType */ + const api = AdyenFE.ajaxService; + + const { pageControllerFactory, utilities, templateService, elementGenerator, translationService } = AdyenFE; + + let currentState = ''; + let previousState = ''; + let controller = null; + + /** + * Main entry point for the application. + * Initializes the sidebar. + * Determines the current state and runs the start controller. + */ + this.display = () => { + utilities.showLoader(); + templateService.setTemplates(configuration.templates); + templateService.clearMainPage(); + + window.addEventListener('hashchange', updateStateOnHashChange, false); + + api.get(!getStoreId() ? configuration.currentStoreUrl : configuration.storesUrl, () => null, true) + .then( + /** @param {Store|Store[]} response */ + (response) => { + const loadStore = (store) => { + setStoreId(store.storeId); + setMaintenanceMode(store.maintenanceMode); + + return Promise.all([displayPageBasedOnState(), this.setHeader()]); + }; + + let store; + if (!Array.isArray(response)) { + store = response; + } else { + store = response.find((s) => s.storeId === getStoreId()); + } + + if (!store) { + // the active store is probably deleted, we need to switch to the default store + return api.get(configuration.currentStoreUrl, null, true).then(loadStore); + } + + return loadStore(store); + } + ) + .catch(() => { + initializeSidebar(); + this.disableSidebar(); + return this.setHeader(); + }) + .finally(() => { + utilities.hideLoader(); + }); + }; + + /** + * Navigates to a state. + * + * @param {string} state + * @param {Record | null?} additionalConfig + * @param {boolean} [force=false] + */ + this.goToState = (state, additionalConfig = null, force = false) => { + if (currentState === state && !force) { + return; + } + + window.location.hash = state; + + const config = { + storeId: getStoreId(), + ...(additionalConfig || {}) + }; + + const sidebar = document.querySelector('#adl-page .adl-sidebar'); + if (!window.location.hash.startsWith('#settings')) { + sidebar && utilities.hideElement(sidebar.querySelector('.adlp-quick-links')); + } else { + sidebar && utilities.showElement(sidebar.querySelector('.adlp-quick-links')); + } + + const [controllerName, page, stateParam] = state.split('-'); + controller = pageControllerFactory.getInstance( + controllerName, + getControllerConfiguration(controllerName, page, stateParam) + ); + + if (controller) { + controller.display(config); + } + + previousState = currentState; + currentState = state; + }; + + /** + * Enables the sidebar. + */ + this.enableSidebar = () => { + document + .querySelectorAll('.adl-sidebar .adlp-menu-item') + .forEach((item) => item.classList.remove('adls--disabled')); + }; + + /** + * Disables the sidebar. + */ + this.disableSidebar = () => { + document + .querySelectorAll('.adl-sidebar .adlp-menu-item:not(.adlt--connection)') + .forEach((item) => item.classList.add('adls--disabled')); + }; + + /** + * Updates the main header. + * + * @returns {Promise} + */ + this.setHeader = () => { + return Promise.all([setStoresSwitcher(), setConnectionData()]); + }; + + const updateStateOnHashChange = () => { + const state = window.location.hash.substring(1); + if (state) { + this.goToState(state); + updateSidebarState(); + } + + getSidebar().classList.remove('adls--menu-active'); + }; + + /** + * Selects active sidebar item based on the location hash. + */ + const updateSidebarState = () => { + const sidebar = getSidebar(); + sidebar.querySelectorAll('.adlp-menu-item a').forEach((el) => el.classList.remove('adls--active')); + sidebar.querySelector(`[href="${location.hash}"]`)?.classList.add('adls--active'); + }; + + /** + * Gets the sidebar DOM element. + * + * @returns {HTMLElement} + */ + const getSidebar = () => { + return document.querySelector('#adl-page .adl-sidebar'); + }; + + /** + * Handles version download. + * + * @param {string} latest + */ + const setDownloadVersion = (latest) => { + if (configuration.downloadVersionUrl) { + const downloadVersionBox = document.querySelector( + '#adl-page .adl-header-navigation .adlp-nav-list .adlp-nav-item.adlm--download' + ); + const title = translationService.translate('mainHeader.download'); + + downloadVersionBox.classList.remove('adls--hidden'); + templateService.clearComponent(downloadVersionBox); + downloadVersionBox.append( + elementGenerator.createElement( + 'a', + 'adlp-download-link', + '', + { href: configuration.downloadVersionUrl, target: '_blank' }, + [ + elementGenerator.createElement('span', 'adlp-nav-item-icon adlm--download'), + elementGenerator.createElement('div', 'adlp-nav-item-text', '', null, [ + elementGenerator.createElement('h3', 'adlp-nav-item-title', title), + elementGenerator.createElement('span', 'adlp-nav-item-subtitle', latest) + ]) + ] + ) + ); + } + }; + + /** + * Renders a confirmation modal for a store change when there are unsaved changes. + */ + const renderSwitchToStoreModal = () => { + return new Promise((resolve) => { + const modal = AdyenFE.components.Modal.create({ + title: 'payments.switchToStore.title', + content: [AdyenFE.elementGenerator.createElement('span', '', 'payments.switchToStore.description')], + footer: true, + canClose: false, + buttons: [ + { + type: 'secondary', + label: 'general.back', + onClick: () => { + modal.close(); + resolve(false); + } + }, + { + type: 'primary', + className: 'adlt--primary', + label: 'general.yes', + onClick: () => { + modal.close(); + resolve(true); + } + } + ] + }); + + modal.open(); + }); + }; + + /** + * Sets the store switcher in the main header. + */ + const setStoresSwitcher = () => { + return api.get(configuration.storesUrl, null, true).then( + /** @param {Store[]} stores */ + (stores) => { + if (!stores?.length) { + return; + } + + const storesData = stores.map((store) => ({ + label: store.storeName, + value: store.storeId + })); + const elem = document.getElementById('adl-store-switcher'); + templateService.clearComponent(elem); + elem.append( + elementGenerator.createStoreSwitcher( + storesData, + '', + 'mainHeader.switchStore', + getStoreId(), + () => { + if (controller !== null && controller.hasUnsavedChanges()) { + return renderSwitchToStoreModal(); + } + + return Promise.resolve(true); + }, + (storeId) => { + setStoreId(storeId); + window.location.hash = ''; + this.enableSidebar(); + this.display(); + } + ) + ); + elem.classList.remove('adls--hidden'); + } + ); + }; + + /** + * Updated the connection data in the main header. + * + * @returns {Promise} + */ + const setConnectionData = () => { + return api + .get(configuration.connectionDetailsUrl.replace('{storeId}', getStoreId()), () => null, true) + .then( + /** @param {Connection} connection */ + (connection) => { + const modeElem = document.querySelector('.adlp-nav-item.adlm--mode'); + const merchantElem = document.querySelector('.adlp-nav-item.adlm--merchant'); + const data = connection?.mode === 'test' ? connection?.testData : connection?.liveData; + if (!data?.apiKey) { + modeElem.classList.add('adls--hidden'); + merchantElem.classList.add('adls--hidden'); + return; + } + + templateService.clearComponent(modeElem); + modeElem.classList.remove('adls--hidden'); + modeElem.append( + ...elementGenerator.createHeaderItem( + 'mainHeader.mode', + 'connection.environment.options.' + connection.mode + ) + ); + + return api + .get(configuration.merchantsUrl.replace('{storeId}', getStoreId()), () => [], true) + .then( + /** @param {Merchant[]} merchants} */ + (merchants) => { + const merchantName = merchants.find( + (m) => m.merchantId === data.merchantId + )?.merchantName; + templateService.clearComponent(merchantElem); + if (!merchantName) { + merchantElem.classList.add('adls--hidden'); + } else { + merchantElem.classList.remove('adls--hidden'); + } + + merchantElem.append( + ...elementGenerator.createHeaderItem('mainHeader.merchant', merchantName) + ); + } + ); + } + ); + }; + + /** + * Display the maintenance mode message. + * + * @param {boolean} enabled If a message should be displayed. + */ + const setMaintenanceMode = (enabled) => { + const container = templateService.getHeaderSection(); + templateService.clearComponent(container); + enabled && + container.append( + elementGenerator.createFlashMessage(['maintenance.title', 'maintenance.description'], 'warning') + ); + }; + + /** + * Initializes the sidebar. + */ + const initializeSidebar = () => { + const sidebar = getSidebar(); + + if (sidebar) { + sidebar.innerHTML = templateService.getTemplate('sidebar'); + const versionInfo = sidebar.querySelector('.adlp-version-info'); + versionInfo.classList.add('adls--hidden'); + + // initialize version + api.get(configuration.versionUrl, null, true) + .then((version) => { + versionInfo.classList.remove('adls--hidden'); + versionInfo.innerHTML = version.installed; + + if (version.installed !== version.latest) { + versionInfo.classList.add('adls--warning'); + versionInfo.classList.add('adl-hint'); + versionInfo.append( + elementGenerator.createElement( + 'span', + 'adlp-tooltip adlt--bottom', + 'sidebar.newVersionAvailable' + ) + ); + setDownloadVersion(version.latest); + } + }) + .catch(() => { + // probably not implemented yet + sidebar.querySelector('.adlp-version-info').remove(); + }); + + sidebar.querySelector('.adlp-mobile-menu').addEventListener('click', () => { + sidebar.classList.toggle('adls--menu-active'); + }); + sidebar.querySelector('.adlp-mobile-underlay').addEventListener('click', () => { + sidebar.classList.remove('adls--menu-active'); + }); + updateSidebarState(); + } + }; + + /** + * Returns the current merchant state. + * + * @return {Promise<"onboarding" | "dashboard">} + */ + this.getCurrentMerchantState = () => { + return api + .get(configuration.stateUrl.replace('{storeId}', getStoreId()), () => {}) + .then((response) => response?.state || 'onboarding'); + }; + + /** + * Opens a specific page based on the current state. + */ + const displayPageBasedOnState = () => { + initializeSidebar(); + return this.getCurrentMerchantState().then((state) => { + // if user is logged in, go to payments + switch (state) { + case 'onboarding': + this.disableSidebar(); + api.get(configuration.connectionDetailsUrl.replace('{storeId}', getStoreId()), () => null).then( + (connection) => { + if (connection?.testData?.apiKey || connection?.liveData?.apiKey) { + this.goToState('connection-merchant', null, true); + } else { + this.goToState('connection', null, true); + } + } + ); + break; + default: + this.goToState(window.location.hash.substring(1) || 'payments', null, true); + break; + } + }); + }; + + /** + * Gets controller configuration. + * + * @param {string} controllerName + * @param {string?} page + * @param {string?} stateParam + * @return {Record}} + */ + const getControllerConfiguration = (controllerName, page, stateParam) => { + let config = utilities.cloneObject(configuration.pageConfiguration[controllerName] || {}); + + page && (config.page = page); + stateParam && (config.stateParam = stateParam); + + return config; + }; + + /** + * Sets the store ID. + * + * @param {string} storeId + */ + const setStoreId = (storeId) => { + sessionStorage.setItem('adl-active-store-id', storeId); + }; + + /** + * Gets the store ID. + * + * @returns {string} + */ + const getStoreId = () => { + return sessionStorage.getItem('adl-active-store-id'); + }; + } + + AdyenFE.StateController = StateController; +})(); diff --git a/Resources/views/backend/_resources/js/TableFilterComponent.js b/Resources/views/backend/_resources/js/TableFilterComponent.js new file mode 100644 index 00000000..93e3a59a --- /dev/null +++ b/Resources/views/backend/_resources/js/TableFilterComponent.js @@ -0,0 +1,320 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +if (!window.AdyenFE.components) { + window.AdyenFE.components = {}; +} + +(function () { + /** + * @typedef TableFilterParams + * + * @property {Option[]} options + * @property {string?} name + * @property {string[]?} values + * @property {(values: string[]) => void} onChange + * @property {string?} label + * @property {string?} selectPlaceholder + * @property {boolean?} isMultiselect + */ + const { elementGenerator: generator, components } = AdyenFE; + + const preventDefaults = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + /** + * Compares contents of two arrays. + * + * @param {string[]} a1 + * @param {string[]} a2 + * @return {boolean} + */ + const arraysHaveSameContent = (a1, a2) => { + if (a1.length !== a2.length) { + return false; + } + + for (let i = 0; i < a1.length; i++) { + if (!a2.includes(a1[i])) { + return false; + } + } + + for (let i = 0; i < a2.length; i++) { + if (!a1.includes(a2[i])) { + return false; + } + } + + return true; + }; + + /** + * Gets the label to be displayed in the main button. + * + * @param {string} label The default label when nothing is selected. + * @param {string} labelPlural Label when more than two options are selected. + * @param {Option[]} options Possible options. + * @param {string[]} values Selected values. + * @return {string} + */ + const getButtonLabel = (label, labelPlural, options, values) => { + if (values.length === 0) { + return label; + } + + if (values.length < 2) { + return values.map((value) => options.find((o) => o.value === value).label).join(', '); + } + + return `${values.length} ${labelPlural.toLowerCase()}`; + }; + + /** + * Gets the label to be displayed in the main button. + * + * @param {string} label The default label when nothing is selected. + * @param {Option[]} options Possible options. + * @param {string[]} values Selected values. + * @return {string} + */ + const getButtonTooltip = (label, options, values) => { + if (values.length === 0) { + return ''; + } + + if (values.length < 2) { + return label; + } + + return values.map((value) => options.find((o) => o.value === value).label).join(', '); + }; + + /** + * Renders the main button. + * + * @param {string} label + * @param {string} labelPlural + * @param {Option[]} options + * @param {string[]} values + * @param {() => void} onClick + * @param {() => void} onClear + * @return {HTMLButtonElement} + */ + const renderButton = (label, labelPlural, options, values, onClick, onClear) => { + const button = generator.createButton({ + type: 'secondary', + className: 'adlp-filter-button' + (values.length > 0 ? ' adls--selected' : ''), + label: getButtonLabel(label, labelPlural, options, values), + onClick: onClick + }); + + const deleteButton = generator.createElement('button', 'adlp-delete-text-button'); + deleteButton.addEventListener('click', (e) => { + preventDefaults(e); + onClear(); + }); + + button.append( + deleteButton, + generator.createElement('span', 'adlp-tooltip', getButtonTooltip(label, options, values)) + ); + + return button; + }; + + /** + * Renders selected options. + * + * @param {Option[]} options + * @param {string[]} selectedValues + * @param {(value: string) =>, void} onRemove + * @return {HTMLElement[]} + */ + const getOptionsList = (options, selectedValues, onRemove) => { + return selectedValues.map((value) => { + const deleteButton = generator.createElementFromHTML(''); + deleteButton.addEventListener('click', (e) => { + preventDefaults(e); + onRemove(value); + }); + + const element = generator.createElement( + 'li', + 'adlp-selected-data-item', + options.find((o) => o.value === value).label, + null + ); + + element.prepend(deleteButton); + + return element; + }); + }; + + /** + * Creates a table filter element. + * + * @param {TableFilterParams} args + * @return {HTMLElement} + */ + const create = ({ + options, + name = '', + values = [], + onChange, + label = '', + labelPlural = '', + selectPlaceholder = '', + isMultiselect = true + }) => { + let selectedValues = [...values]; + + const createDropdown = () => + components.Dropdown.create({ + options, + name, + placeholder: selectPlaceholder, + onChange: handleSelectChange, + value: isMultiselect ? undefined : selectedValues[0], + updateTextOnChange: !isMultiselect, + searchable: true + }); + + const createFilterContainerContent = () => { + dataContainer.append( + ...[ + generator.createElement('span', 'adlp-data-label', label), + createDropdown(), + generator.createElement( + 'ul', + 'adlp-selected-data', + '', + null, + isMultiselect + ? getOptionsList(options, selectedValues, (value) => handleSelectChange(value, false)) + : [] + ) + ] + ); + + clearButton.disabled = selectedValues.length === 0; + applyButton.disabled = arraysHaveSameContent(selectedValues, values); + }; + + const fireOnChange = (values) => { + selectedValues = values; + handleSelectedValuesChange(); + filterContainer.classList.remove('adls--open'); + values.length ? button.classList.add('adls--selected') : button.classList.remove('adls--selected'); + button.firstElementChild.innerHTML = getButtonLabel(label, labelPlural, options, selectedValues); + button.lastElementChild.innerHTML = getButtonTooltip(label, options, selectedValues); + dataContainer.innerHTML = ''; + onChange?.(selectedValues); + }; + + const handleSelectedValuesChange = () => { + const list = filterContainer.querySelector('.adlp-selected-data'); + if (list && isMultiselect) { + list.innerHTML = ''; + list.append(...getOptionsList(options, selectedValues, (value) => handleSelectChange(value, false))); + } else if (!isMultiselect && selectedValues.length === 0) { + // reset value for the dropdown + const previousDD = filterContainer.querySelector('.adl-single-select-dropdown'); + dataContainer.insertBefore(createDropdown(), previousDD); + + previousDD?.remove(); + } + + clearButton.disabled = selectedValues.length === 0; + applyButton.disabled = arraysHaveSameContent(selectedValues, values); + }; + + const handleSelectChange = (value, add = true) => { + if (add) { + isMultiselect && !selectedValues.includes(value) && selectedValues.push(value); + !isMultiselect && (selectedValues = [value]); + } else if (isMultiselect) { + selectedValues = selectedValues.filter((v) => v !== value); + } else { + selectedValues = []; + } + + handleSelectedValuesChange(); + }; + + const closeFilter = () => { + selectedValues = [...values]; + filterContainer.classList.remove('adls--open'); + dataContainer.innerHTML = ''; + }; + + const button = renderButton( + label, + labelPlural, + options, + values, + () => { + if (filterContainer.classList.contains('adls--open')) { + dataContainer.innerHTML = ''; + } else { + createFilterContainerContent(); + } + + filterContainer.classList.toggle('adls--open'); + }, + () => { + fireOnChange([]); + } + ); + + const clearButton = generator.createButton({ + type: 'secondary', + size: 'small', + label: 'general.clear', + className: 'adlm--blue', + disabled: values.length === 0, + onClick: () => { + selectedValues = []; + handleSelectedValuesChange(); + } + }); + const applyButton = generator.createButton({ + type: 'primary', + size: 'small', + label: 'general.apply', + className: 'adlm--blue', + disabled: true, + onClick: () => fireOnChange(selectedValues) + }); + + const dataContainer = generator.createElement('div', 'adlp-dropdown-data'); + const filterContainer = generator.createElement('div', 'adlp-dropdown-container', '', null, [ + generator.createElement('div', 'adlp-content', '', null, [ + generator.createElement('div', 'adlp-filter-header', '', null, [ + generator.createElement('span', '', 'payments.filter.filter'), + generator.createElement('button', 'adlp-close-button', '', { onClick: closeFilter }) + ]), + dataContainer, + generator.createElement('span', 'adlp-buttons', '', null, [clearButton, applyButton]) + ]) + ]); + + const element = generator.createElement('div', 'adl-multiselect-filter', '', null, [button, filterContainer]); + + window.addEventListener('click', (event) => { + if (!element.contains(event.target) && event.target !== element) { + closeFilter(); + } + }); + + return element; + }; + + AdyenFE.components.TableFilter = { + create + }; +})(); diff --git a/Resources/views/backend/_resources/js/TemplateService.js b/Resources/views/backend/_resources/js/TemplateService.js new file mode 100644 index 00000000..e6441f6e --- /dev/null +++ b/Resources/views/backend/_resources/js/TemplateService.js @@ -0,0 +1,77 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + function TemplateService() { + /** + * The configuration object for all templates. + */ + let templates = {}; + let mainPlaceholder = '#adl-main-page-holder'; + + /** + * Gets the main page DOM element. + * + * @returns {HTMLElement} + */ + this.getMainPage = () => document.querySelector(mainPlaceholder); + + /** + * Gets the main header element. + * + * @returns {HTMLElement} + */ + this.getHeaderSection = () => document.getElementById('adl-header-section'); + + /** + * Clears the main page. + * + * @return {HTMLElement} + */ + this.clearMainPage = () => { + this.clearComponent(this.getMainPage()); + }; + + /** + * Sets the content templates. + * + * @param {{}} configuration + */ + this.setTemplates = (configuration) => { + templates = configuration; + }; + + /** + * Gets the template with translated text. + * + * @param {string} templateId + * + * @return {string} HTML as string. + */ + this.getTemplate = (templateId) => translate(templates[templateId]); + + /** + * Removes component's children. + * + * @param {Element} component + */ + this.clearComponent = (component) => { + while (component.firstChild) { + component.removeChild(component.firstChild); + } + }; + + /** + * Replaces all translation keys in the provided HTML. + * + * @param {string} html + * @return {string} + */ + const translate = (html) => { + return html ? AdyenFE.translationService.translateHtml(html) : ''; + }; + } + + AdyenFE.templateService = new TemplateService(); +})(); diff --git a/Resources/views/backend/_resources/js/TranslationService.js b/Resources/views/backend/_resources/js/TranslationService.js new file mode 100644 index 00000000..7cbd992f --- /dev/null +++ b/Resources/views/backend/_resources/js/TranslationService.js @@ -0,0 +1,125 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * A Translation service. This class turns an input key and params to the translated text. + * The translations are used from the global AdyenFE.translations object. It expects two keys in this object: + * 'current' and 'default', where 'current' holds the translations for the current language, + * and 'default' holds the translations in the default language. The 'default' will be used as a fallback if + * the 'current' object does not have the given entry. Both properties should be objects with the "section - key" + * format. For example: + * current: { + * login: { + * title: 'The title', + * subtitle: 'This is the subtitle of the %s app.' + * }, + * secondPage: { + * title: 'The second page title', + * description: 'Use this page to set the second thing.' + * } + * } + * + * With this in mind, the translation keys are in format "section.key", for example "login.title". + * + * @constructor + */ + function TranslationService() { + /** + * Gets the translation from the dictionary if exists. + * + * @param {'default' | 'current'} type + * @param {string} group + * @param {string | string[]} key + * @returns {null|string} + */ + const getTranslation = (type, group, key) => { + if (AdyenFE.translations[type][group] && AdyenFE.translations[type][group]) { + let value = AdyenFE.translations[type][group]; + if (Array.isArray(key)) { + return key.reduce((value, key) => { + if (value && value.hasOwnProperty(key)) { + return value[key]; + } + + return null; + }, value); + } + + if (value && value.hasOwnProperty(key)) { + return value[key]; + } + + return null; + } + + return null; + }; + + /** + * Replaces the parameters in the given text, if any. + * + * @param {string} text + * @param {[]} params + * @return {string} + */ + const replaceParams = (text, params) => { + if (!params) { + return text; + } + + let i = 0; + return text.replace(/%s/g, function () { + const param = params[i] !== undefined ? params[i] : '%s'; + i++; + + return param; + }); + }; + + /** + * Returns a translated string based on the input key and given parameters. If the string to translate + * has parameters, the placeholder is "%s". For example: Input key %s is not valid. This method will + * replace parameters in the order given in the params array, if any. + * + * @param {string} key The translation key in format "group.key". + * @param {[]} [params] An array of parameters to be replaced in the output string. + * + * @return {string} + */ + this.translate = (key, params) => { + const [group, ...keys] = key.split('.'); + + const result = getTranslation('current', group, keys) || getTranslation('default', group, keys); + if (result !== null) { + return replaceParams(result, params); + } + + return replaceParams(key, params); + }; + + /** + * Replaces the translations in the given HTML code. + * + * @param {string} html + * @return {string} The updated HTML. + */ + this.translateHtml = (html) => { + // Replace the placeholders for translations. They are in the format {$key|param1|param2}. + let format = /{\$[.\-_A-Za-z|]+}/g; + const me = this; + + return html.replace(format, (key) => { + // remove the placeholder characters to get "key|param1|param2" + key = key.substring(2, key.length - 1); + // split parameters + let params = key.split('|'); + + return me.translate(params[0], params.slice(1)) || key; + }); + }; + } + + AdyenFE.translationService = new TranslationService(); +})(); diff --git a/Resources/views/backend/_resources/js/UtilityService.js b/Resources/views/backend/_resources/js/UtilityService.js new file mode 100644 index 00000000..74b3e14b --- /dev/null +++ b/Resources/views/backend/_resources/js/UtilityService.js @@ -0,0 +1,168 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + function UtilityService() { + let loaderCount = 0; + + /** + * Shows the HTML node. + * + * @param {HTMLElement} element + */ + this.showElement = (element) => { + element?.classList.remove('adls--hidden'); + }; + + /** + * Hides the HTML node. + * + * @param {HTMLElement} element + */ + this.hideElement = (element) => { + element?.classList.add('adls--hidden'); + }; + + /** + * Enables loading spinner. + */ + this.showLoader = () => { + if (loaderCount === 0) { + this.showElement(document.getElementById('adl-spinner')); + } + + loaderCount++; + }; + + /** + * Hides loading spinner. + */ + this.hideLoader = () => { + loaderCount--; + if (loaderCount === 0) { + this.hideElement(document.getElementById('adl-spinner')); + } + }; + + /** + * Shows flash message. + * + * @note Only one flash message will be shown at the same time. + * + * @param {string} message + * @param {'error' | 'warning' | 'success'} status + * @param {number?} clearAfter Time in ms to remove alert message. + */ + this.createFlashMessage = (message, status, clearAfter) => { + return AdyenFE.elementGenerator.createFlashMessage(message, status, clearAfter); + }; + + /** + * Creates the 401 error flash message. + * + * @param {string} message + */ + this.create401FlashMessage = (message) => { + this.remove401Message(); + const messageElement = AdyenFE.elementGenerator.createFlashMessage(message, 'error'); + messageElement.classList.add('adlv--401-error'); + AdyenFE.templateService.getHeaderSection().append(messageElement); + }; + + /** + * Removes the 401 flash message. + */ + this.remove401Message = () => { + AdyenFE.templateService + .getHeaderSection() + .querySelectorAll(`.adlv--401-error`) + .forEach((e) => e.remove()); + }; + + /** + * Creates a toaster message. + * + * @param {string} message A message translation key. + */ + this.createToasterMessage = (message) => { + document.getElementById('adl-page').append(AdyenFE.elementGenerator.createToaster(message)); + }; + + /** + * Updates a form's footer state based on the number of changes. + * + * @param {number} numberOfChanges + * @param {boolean} disableCancel + */ + this.renderFooterState = (numberOfChanges, disableCancel = true) => { + if (numberOfChanges) { + document.querySelector('.adl-form-footer .adlp-changes-count')?.classList.add('adls--active'); + document.querySelector('.adl-form-footer .adlp-actions .adlp-save').disabled = false; + document.querySelector('.adl-form-footer .adlp-actions .adlp-cancel').disabled = false; + } else { + document.querySelector('.adl-form-footer .adlp-changes-count')?.classList.remove('adls--active'); + document.querySelector('.adl-form-footer .adlp-actions .adlp-save').disabled = true; + document.querySelector('.adl-form-footer .adlp-actions .adlp-cancel').disabled = disableCancel; + } + }; + + /** + * Creates deep clone of an object with object's properties. + * Removes object's methods. + * + * @note Object cannot have values that cannot be converted to json (undefined, infinity etc). + * + * @param {object} obj + * @return {object} + */ + this.cloneObject = (obj) => JSON.parse(JSON.stringify(obj || {})); + + /** + * Gets the first ancestor element with the corresponding class name. + * + * @param {HTMLElement} element + * @param {string} className + * @return {HTMLElement} + */ + this.getAncestor = (element, className) => { + let parent = element?.parentElement; + + while (parent) { + if (parent.classList.contains(className)) { + break; + } + + parent = parent.parentElement; + } + + return parent; + }; + + /** + * Check if two arrays are equal. + * + * @param {any[]} source + * @param {any[]} target + * @return {boolean} TRUE if arrays are equal; otherwise, FALSE. + */ + this.compareArrays = (source, target) => { + if (source.length !== target.length) { + return false; + } + + const sortedSource = source.slice().sort(); + const sortedTarget = target.slice().sort(); + + for (let i = 0; i < sortedSource.length; i++) { + if (sortedSource[i] !== sortedTarget[i]) { + return false; + } + } + + return true; + }; + } + + AdyenFE.utilities = new UtilityService(); +})(); diff --git a/Resources/views/backend/_resources/js/ValidationService.js b/Resources/views/backend/_resources/js/ValidationService.js new file mode 100644 index 00000000..4c4bcc6c --- /dev/null +++ b/Resources/views/backend/_resources/js/ValidationService.js @@ -0,0 +1,267 @@ +if (!window.AdyenFE) { + window.AdyenFE = {}; +} + +(function () { + /** + * @typedef ValidationMessage + * @property {string} code The message code. + * @property {string} field The field name that the error is related to. + * @property {string} message The error message. + */ + + const validationRule = { + numeric: 'numeric', + integer: 'integer', + required: 'required', + greaterThanZero: 'greaterThanZero', + minValue: 'minValue', + maxValue: 'maxValue', + nonNegative: 'nonNegative', + greaterThanX: 'greaterThanX' + }; + + const { templateService, utilities, translationService } = AdyenFE; + + /** + * Validates if the input has a value. If the value is not set, adds an error class to the input element. + * + * @param {HTMLInputElement|HTMLSelectElement} input + * @param {string?} message + * @return {boolean} + */ + const validateRequiredField = (input, message) => { + return validateField(input, !input.value?.trim() || (input.type === 'checkbox' && !input.checked), message); + }; + + /** + * Validates a numeric input. + * + * @param {HTMLInputElement} input + * @param {string?} message + * @return {boolean} Indication of the validity. + */ + const validateNumber = (input, message) => { + const ruleset = input.dataset?.validationRule ? input.dataset.validationRule.split(',') : []; + let result = true; + + if (!validateField(input, Number.isNaN(input.value), message)) { + return false; + } + + const value = Number(input.value); + ruleset.forEach((rule) => { + if (!result) { + // break on first false rule + return; + } + + let condition = false; + let subValue = null; + if (rule.includes('|')) { + [rule, subValue] = rule.split('|'); + } + + // condition should be positive for valid values + switch (rule) { + case validationRule.integer: + condition = Number.isInteger(value); + break; + case validationRule.greaterThanZero: + condition = value > 0; + break; + case validationRule.minValue: + condition = value >= Number(subValue); + break; + case validationRule.maxValue: + condition = value <= Number(subValue); + break; + case validationRule.nonNegative: + condition = value >= 0; + break; + case validationRule.required: + condition = !!input.value?.trim(); + break; + case validationRule.greaterThanX: + condition = value >= Number(document.querySelector(`input[name="${subValue}"]`)?.value); + break; + default: + return; + } + + if (!validateField(input, !condition, message)) { + result = false; + } + }); + + return result; + }; + + /** + * Validates a list of numbers. + * + * @param {HTMLInputElement} input + * @param {boolean} [required=true] + * @param {boolean} [decimal=true] + * @returns {boolean} + */ + const validateNumberList = (input, required = true, decimal = true) => { + let error; + const value = input.value; + if (!value.trim()) { + if (!required) { + return true; + } + + error = 'validation.requiredField'; + } else { + const values = value.split(',').map((value) => value.trim()); + if (values.map((value) => Number.isNaN(Number(value)) || Number(value) <= 0).includes(true)) { + error = decimal ? 'validation.invalidNumberInList' : 'validation.invalidWholeNumberInList'; + } else if ( + values.filter((value, index) => { + return values.indexOf(value) !== index; + }).length > 0 + ) { + error = 'validation.duplicateNumberInList'; + } else if (!decimal) { + values.forEach((value) => { + if (!Number.isInteger(Number(value))) { + error = 'validation.invalidWholeNumberInList'; + } + }); + } + } + + return validateField(input, !!error, error); + }; + + /** + * Validates if the input is a valid email. If not, adds the error class to the input element. + * + * @param {HTMLInputElement} input + * @param {string?} message + * @return {boolean} + */ + const validateEmail = (input, message) => { + let regex = + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + + return validateField(input, !regex.test(String(input.value).toLowerCase()), message); + }; + + /** + * Validates if the input is a valid URL. If not, adds an error class to the input element. + * + * @param {HTMLInputElement} input + * @param {string?} message + * @return {boolean} + */ + const validateUrl = (input, message) => { + let regex = /(https?:\/\/)([\w\-])+\.([a-zA-Z]{2,63})([\/\w-]*)*\/?\??([^#\n\r]*)?#?([^\n\r]*)/m; + + return validateField(input, !regex.test(String(input.value).toLowerCase()), message); + }; + + /** + * Validates if the input field is longer than a specified number of characters. + * If so, adds an error class to the input element. + * + * @param {HTMLInputElement} input + * @param {string?} message + * @return {boolean} + */ + const validateMaxLength = (input, message) => { + return validateField(input, input.dataset.maxLength && input.value.length > input.dataset.maxLength, message); + }; + + /** + * Handles validation errors. These errors come from the back end. + * + * @param {ValidationMessage[]} errors + */ + const handleValidationErrors = (errors) => { + for (const error of errors) { + markFieldGroupInvalid(`[name=${error.field}]`, error.message); + } + }; + + /** + * Marks a field as invalid. + * + * @param {string} fieldSelector The field selector. + * @param {string} message The message to display. + * @param {Element} [parent] A parent element. + */ + const markFieldGroupInvalid = (fieldSelector, message, parent) => { + if (!parent) { + parent = templateService.getMainPage(); + } + + const inputEl = parent.querySelector(fieldSelector); + inputEl && setError(inputEl, message); + }; + + /** + * Sets error for an input. + * + * @param {HTMLElement} element + * @param {string?} message + */ + const setError = (element, message) => { + const parent = utilities.getAncestor(element, 'adl-field-wrapper'); + parent && parent.classList.add('adls--error'); + if (message) { + let errorField = parent.querySelector('.adlp-input-error'); + if (!errorField) { + errorField = AdyenFE.elementGenerator.createElement('span', 'adlp-input-error', message); + parent.append(errorField); + } + + errorField.innerHTML = translationService.translate(message); + } + }; + + /** + * Removes error from input form group element. + * + * @param {HTMLElement} element + */ + const removeError = (element) => { + const parent = utilities.getAncestor(element, 'adl-field-wrapper'); + parent && parent.classList.remove('adls--error'); + }; + + /** + * Validates the condition against the input field and marks field invalid if the error condition is met. + * + * @param {HTMLElement} element + * @param {boolean} errorCondition Error condition. + * @param {string?} message + * @return {boolean} + */ + const validateField = (element, errorCondition, message) => { + if (errorCondition) { + setError(element, message); + + return false; + } + + removeError(element); + + return true; + }; + + AdyenFE.validationService = { + setError, + removeError, + validateEmail, + validateNumber, + validateNumberList, + validateUrl, + validateMaxLength, + validateField, + validateRequiredField, + handleValidationErrors + }; +})(); diff --git a/Resources/views/backend/_resources/lang/de.json b/Resources/views/backend/_resources/lang/de.json new file mode 100644 index 00000000..53c3ece8 --- /dev/null +++ b/Resources/views/backend/_resources/lang/de.json @@ -0,0 +1,60 @@ +{ + "general": { + "basicSettings": "Einstellungen", + "systemInfo": "Systeminformationen", + "help": "Hilfe", + "loading": "Lädt...", + "save": "Speichern", + "saveChanges": "Speichern", + "accept": "Akzeptieren", + "cancel": "Abbrechen", + "continue": "Weiter", + "add": "Hinzufügen", + "edit": "Bearbeiten", + "delete": "Löschen", + "discard": "Verwerfen" + }, + "validation": { + "requiredField": "Dies ist ein Pflichtfeld.", + "invalidField": "This field is invalid.", + "invalidEmail": "Das Feld muss eine gültige E-Mail-Adresse sein.", + "maxLength": "Dieses Feld darf maximal %s Zeichen enthalten.", + "numeric": "Bitte geben Sie einen numerischen Wert ein.", + "greaterThanZero": "Der Wert muss größer als 0 sein.", + "nonNegative": "Das Feld darf keine negativen Werte enthalten.", + "numberOfDecimalPlaces": "Das Feld muss 2 Dezimalstellen haben.", + "integer": "Das Feld muss eine ganze Zahl sein.", + "invalidUrl": "Dieses Feld muss eine gültige URL enthalten.", + "invalidFieldValue": "Dieses Feld muss auf „%s“ gesetzt werden.", + "invalidMaxValue": "Der maximale Wert beträgt %s." + }, + "login": { + "apiKey": "API-Schlüssel", + "apiKeyIncorrect": "Falscher API-Schlüssel", + "validateApiKey": "API-Schlüssel bestätigen" + }, + "countries": { + "ES": "Spanien", + "DE": "Deutschland", + "FR": "Frankreich", + "IT": "Italien", + "AT": "Österreich", + "NL": "Niederlande", + "BE": "Belgien", + "PT": "Portugal", + "TR": "Türkei", + "IE": "Irland", + "GB": "Vereinigtes Königreich", + "HU": "Ungarn", + "PL": "Polen", + "CH": "Schweiz", + "LU": "Luxemburg", + "AR": "Argentinien", + "US": "Vereinigte Staaten", + "BO": "Bolivien", + "MX": "Mexiko", + "CL": "Chile", + "CZ": "Tschechien", + "SE": "Schweden" + } +} \ No newline at end of file diff --git a/Resources/views/backend/_resources/lang/en.json b/Resources/views/backend/_resources/lang/en.json new file mode 100644 index 00000000..0a521076 --- /dev/null +++ b/Resources/views/backend/_resources/lang/en.json @@ -0,0 +1,704 @@ +{ + "general": { + "save": "Save", + "saveChanges": "Save changes", + "unsavedChanges": "Unsaved changes", + "discardChanges": "Discard changes", + "cancel": "Cancel", + "yes": "Yes", + "no": "No", + "ok": "Ok", + "back": "Back", + "confirm": "Confirm", + "enable": "Enable", + "disable": "Disable", + "add": "Add", + "edit": "Edit", + "delete": "Remove", + "discard": "Discard", + "any": "ANY", + "clear": "Clear", + "apply": "Apply", + "search": "Search...", + "viewDetails": "View details", + "changesSaved": "Changes saved successfully.", + "errors": { + "InvalidOperationException": "An error occurred on the server side. Please check the data and try again.", + "unknown": "An unknown error occurred. Please try again later.", + "saveEntityFailed": "Failed to save entity because %s", + "getEntityFailed": "Failed to retrieve entity because %s", + "failedToRetrieveStores": "Failed to retrieve stores.", + "failedToRetrieveOrderStatuses": "Failed to retrieve order statuses.", + "general": { + "unhandled": "An error occurred. Please check all inputs and try again." + }, + "stores": { + "invalidIdAndStatus": "Status Id and status name are invalid." + }, + "connection": { + "emptyStoreId": "Empty store ID.", + "invalidMode": "Invalid environment.", + "emptyData": "API key data must not be empty.", + "settingsNotFound": "Connection settings not found.", + "invalidRoles": "User does not have all necessary roles.", + "invalidSettings": "Connection settings are not valid.", + "credentialsDoNotExist": "Api credential details do not exist.", + "testKeyChanged": "Test api key has been changed.", + "liveKeyChanged": "Live api key has been changed.", + "testMerchantIdChanged": "Test merchant ID has been changed.", + "liveMerchantIdChanged": "Live merchant ID has been changed.", + "companyLevelKey": "We didn't recognize this API key on merchant level. Check that you have copied the API key on merchant level from your Adyen Customer Area.", + "invalidKey": "We didn't recognize this API key. Check that you have copied the API key for the right environment from your Adyen Customer Area.", + "invalidMerchant": "Merchant account is not connected to provided credentials.", + "originFailed": "Adding allowed origin failed.", + "clientKeyGenerationFailed": "Failed to generate client key." + }, + "payments": { + "requiredFieldsError": "Method id and code fields are required.", + "notConfigured": "Payment method with id %s is not configured", + "emptyDataError": "Empty payment method data.", + "failedToRetrieveMethods": "Failed to retrieve payment methods.", + "saveFailed": "Failed to save payment method.", + "updateFailed": "Failed to update payment method.", + "deleteFailed": "Failed to remove payment method.", + "failedToRetrieveMethodsAdyen": "Failed to retrieve payment methods from Adyen.", + "invalidCardConfig": "The configuration of installments is invalid." + }, + "generalSettings": { + "captureDelayError": "Number of days must be between 1 and 7.", + "retentionPeriodError": "Minimum number of retention period is 60." + }, + "webhooks": { + "merchantError": "Error occured: Merchant with ID %s is not found.", + "failedToRegisterWebhook": "Error occured: Unable to register webhooks on Adyen API. Make sure that storefront is publicly available, so Adyen webhooks can reach the store.", + "hmacError": "Error occured: Generating HMAC on Adyen API failed." + } + }, + "selectedItems": "%s items selected" + }, + "sidebar": { + "newVersionAvailable": "New version is available", + "gettingStarted": "Getting started", + "setupConnection": "Setup", + "selectMerchantAccount": "Merchant account", + "paymentMethods": "Payment methods", + "configurePaymentMethods": "Payment methods", + "settings": "Settings", + "generalSettings": "General settings", + "orderStatusMapping": "Order status mapping", + "adyenGiving": "Adyen Giving", + "notifications": "Notifications", + "webhookNotification": "Webhook notifications", + "shopNotification": "Shop event notifications", + "quickLinks": "Quick links", + "goToDocumentation": "Go to Adyen docs", + "goToCustomerArea": "Go to Customer Area", + "goToAdyenGiving": "Go to Adyen Giving", + "troubleshooting": "System troubleshooting", + "contactAdyenSupport": "Contact Adyen support", + "systemInformation": "System information" + }, + "mainHeader": { + "merchant": "Merchant", + "switchStore": "Switch Store", + "mode": "Environment", + "download": "Download new version", + "version": "Version %s" + }, + "maintenance": { + "title": "Store maintenance mode has been detected", + "description": "Integration won't work while the store is in maintenance mode. Make sure that storefront is publicly available, so Adyen webhooks can reach the store." + }, + "validation": { + "requiredField": "This field is required.", + "invalidField": "This field is invalid.", + "invalidEmail": "This field must be a valid email.", + "maxLength": "The field cannot have more than %s characters.", + "numeric": "Value must be a valid number with max two decimals.", + "greaterThanZero": "Value must be greater than 0.", + "nonNegative": "Field cannot have a negative value.", + "numberOfDecimalPlaces": "Field must have 2 decimal places.", + "integer": "Field must be an integer.", + "invalidNumberInList": "Each value must be a positive number.", + "invalidWholeNumberInList": "Each value must be a positive whole number.", + "duplicateNumberInList": "The list cannot contain duplicate values.", + "invalidUrl": "Field must be a valid URL.", + "invalidFieldValue": "Field must be set to \"%s\".", + "invalidMaxValue": "Maximal allowed value is %s.", + "invalidImageType": "Provide a file in one of the supported image types (PNG, JPG, SVG).", + "invalidImageSize": "The provided file exceeds the limit of 10MB." + }, + "connection": { + "title": "Setup", + "title_merchant": "Merchant account", + "subtitle": "Make sure you're logged in to the Adyen Customer Area. You will need top copy several settings from there to here. If you don't have an account yet,
sign up.", + "subtitle_merchant": "", + "environment": { + "title": "Environment", + "description": "Connect to the test environment to test your store's payments. When you're ready to process for real shoppers, connect to live.", + "options": { + "test": "Test", + "live": "Live" + } + }, + "apiKey": { + "title": "Merchant API key", + "description": "Copy the API key for the merchant account you want to connect. You can find this in the Adyen Customer Area.", + "error": "API key is required." + }, + "merchant": { + "title": "Merchant account", + "description": "Select which Adyen merchant account you want to connect to this store.", + "placeholder": "Select Adyen merchant account", + "error": "Merchant account is required." + }, + "next": "Next", + "connect": "Connect", + "disconnect": "Disconnect", + "disconnectModal": { + "title": "Disconnect from Adyen?", + "message": "Are you sure you want to disconnect your shop from Adyen? This will remove all configured payment methods and settings, and shoppers will not be able to complete purchases on your shop." + }, + "changeEnvironmentModal": { + "title": "Change the environment?", + "message": "Are you sure you want to change the environment? This will remove all configured payment methods and settings on the current environment, and reconnect you to the newly selected environment." + }, + "validateCredentials": "Validate credentials", + "errors": { + "invalidApiKey": "We didn't recognize this API key. Check that you have copied the API key for the right environment from your Adyen Customer Area.", + "credentialsValidationError": "Connection settings are not valid.", + "webhookValidationError": "Webhook validation failed. Make sure that storefront is publicly available, so Adyen webhooks can reach the store." + }, + "messages": { + "validCredentials": "Your connection to Adyen was successful.", + "connectionUpdated": "Your connection details are updated and connection to Adyen was successful." + } + }, + "payments": { + "list": { + "filter": "Filter", + "paymentMethod": "Payment method", + "currencies": "Currencies", + "regions": "Supported regions", + "type": "Type", + "status": "Status", + "statusActive": "Active", + "statusInactive": "Inactive", + "statusHint": "Payment method status in Adyen Customer Area.", + "actions": "Actions", + "actionsAdd": "Add", + "multiItemLabel": "%s and %s others", + "noMethodsForFilter": "We couldn't find any payment methods matching the chosen criteria." + }, + "filter": { + "filter": "Filter", + "types": { + "label": "Type", + "labelPlural": "Types", + "selectPlaceholder": "Select types to filter by" + }, + "statuses": { + "label": "Status", + "labelPlural": "Statuses", + "selectPlaceholder": "Select a status to filter by" + }, + "currencies": { + "label": "Currency", + "labelPlural": "Currencies", + "selectPlaceholder": "Select currencies to filter by" + }, + "countries": { + "label": "Country", + "labelPlural": "Countries", + "selectPlaceholder": "Select countries to filter by" + }, + "resetAll": "Reset all" + }, + "active": { + "title": "Payment methods", + "description": "This overview shows payment methods that are available for shoppers at this store's checkout.", + "addMethod": "Add payment method", + "noMethodsMessage": "There are no Adyen payment methods configured to this store." + }, + "add": { + "title": "Add payment method", + "description": "Choose a new payment method to be available in your store.", + "noMethodsMessage": "There are no Adyen payment methods.", + "back": "Back" + }, + "configure": { + "title": "Setup %s payment method", + "description": "Configure your preferences for this payment method. When you save your preferences, the payment method will be available on your store. Learn more", + "methodAdded": "Added new payment method.", + "methodSaved": "Payment method is saved.", + "fields": { + "name": { + "label": "Payment method name", + "description": "This is the name the shoppers will see on the checkout page." + }, + "description": { + "label": "Payment method description (optional)", + "description": "This is the description the shoppers will see on the checkout page. You can show shoppers more information about this payment method." + }, + "surchargeType": { + "label": "Surcharge type", + "description": "You can decide whether to add a surcharge when a shopper uses this payment method.", + "placeholder": "Select surcharge type", + "none": "None", + "fixed": "Fixed surcharge", + "percent": "Percent surcharge", + "combined": "Combined surcharge" + }, + "fixedSurcharge": { + "label": "Fixed surcharge", + "description": "Enter the specific amount to add to the order total when a shopper uses this payment method. Set the amount in default store currency." + }, + "percentSurcharge": { + "label": "Percent surcharge", + "description": "Enter the percentage amount of the order total that is added to the total when a shopper uses this payment method." + }, + "surchargeLimit": { + "label": "Surcharge limit", + "description": "Enter the threshold for the total surcharge. This is the maximum surcharge that a shopper can be charged when using this payment method. Set the amount in default store currency.", + "error": "Surcharge limit must be a positive number with maximum two decimals and greater or equal to the fixed surcharge." + }, + "logo": { + "label": "Upload payment method logo", + "description": "", + "error": "Provide a file in one of the supported image types (PNG, JPG, SVG).", + "errorSize": "The selected file exceeds the limit of 10MB.", + "placeholder": "Drop image or click here to upload" + }, + "creditCardFields": { + "showLogos": { + "label": "Show credit card logos", + "description": "You can decide whether to show shoppers credit card logos on the checkout." + }, + "singleClickPayment": { + "label": "Enable single click payments", + "description": "Do you want shoppers to have the option to save their card details for future payments?" + }, + "sendBasket": { + "label": "Enable L2/L3 data", + "description": "Do you want to send additional data to shopper's card statements? This is useful for companies to track corporate card usage when a single card can have multiple users. Learn more" + } + }, + "oneyFields": { + "supportedInstallments": { + "label": "Supported installments", + "description": "Do you want to allow shoppers to pay their bill in installments? Learn more", + "placeholder": "Select one or more" + } + }, + "installmentFields": { + "installments": { + "label": "Enable installments", + "description": "Do you want to allow shoppers to pay their bill in installments? Learn more" + }, + "installmentAmounts": { + "label": "Show installment amounts", + "description": "You can decide whether to show shoppers installment amounts on the checkout." + }, + "installmentCountries": { + "label": "Allowed installment countries", + "description": "You can decide for which countries installments should be offered to shoppers on the checkout." + }, + "minimumAmount": { + "label": "Minimum installment amount (optional)", + "description": "You can specify minimum order amount threshold for which installments should be offered to shoppers on the checkout." + }, + "numberOfInstallments": { + "label": "Number of installments", + "description": "Provide a comma-separated list of options representing the number of installments offered to shoppers on checkout. Learn more" + } + }, + "issuersFields": { + "showLogos": { + "label": "Show issuer logos", + "description": "You can decide whether to show shoppers bank issuer logos on the checkout." + }, + "bankIssuer": { + "label": "Bank issuer description (optional)", + "description": "This is a bank issuer dropdown description. The default description is 'Select your bank'" + } + }, + "applePayFields": { + "merchantId": { + "label": "Apple Pay merchant ID", + "description": "Enter identifier of the Apple Pay merchant." + }, + "merchantName": { + "label": "Apple Pay merchant name", + "description": "Enter name of the Apple Pay merchant." + }, + "displayButtonOn": { + "label": "Enable express checkout", + "description": "Do you want to show Apple Pay Express Checkout on the product, cart, and checkout pages?" + } + }, + "amazonPayFields": { + "publicKeyId": { + "label": "Amazon Pay public key ID", + "description": "Enter identifier of the Amazon Pay public key." + }, + "merchantId": { + "label": "Amazon Pay merchant ID", + "description": "Enter identifier of the Amazon Pay merchant." + }, + "storeId": { + "label": "Store ID", + "description": "Enter identifier of the store" + }, + "displayButtonOn": { + "label": "Enable express checkout", + "description": "Do you want to show Amazon Pay Express Checkout on the product, cart, and checkout pages?" + } + }, + "googlePayFields": { + "gatewayMerchantId": { + "label": "Google Pay merchant gateway ID", + "description": "Enter identifier of the Google Pay merchant gateway." + }, + "merchantId": { + "label": "Google Pay merchant ID", + "description": "Enter identifier of the Google Pay merchant." + }, + "displayButtonOn": { + "label": "Enable express checkout", + "description": "Do you want to show Google Pay Express Checkout on the product, cart, and checkout pages?" + } + }, + "paypalFields": { + "displayButtonOn": { + "label": "Enable express checkout", + "description": "Do you want to show PayPal Express Checkout on the product, cart, and checkout pages?" + } + } + } + }, + "delete": { + "title": "Remove payment method", + "description": "Do you want to remove this payment method from your store? Shoppers will no longer be able to pay with this payment method." + }, + "switchToStore": { + "title": "Unsaved changes", + "description": "Changes you made are not saved. Are you sure that you want to proceed with switching to another store?" + }, + "messages": { + "methodAdded": "Added new payment method." + }, + "paymentTypes": { + "creditOrDebitCard": "Credit and Debit cards", + "buyNowPayLater": "Buy now - pay later", + "cashOrAtm": "Cash and ATM payment methods", + "directDebit": "Direct Debit", + "onlinePayments": "Online payments", + "wallet": "Wallets", + "prepaidAndGiftCard": "Prepaid and gift cards", + "mobile": "Mobile" + } + }, + "settings": { + "general": { + "title": "General settings", + "description": "These settings are applicable globally and will be implemented across all payment methods.", + "fields": { + "basketItemSync": { + "label": "Send basket data", + "description": "Sending basket data as additional risk fields makes it easier to detect fraud and can be used for custom risk rules. Do you want to send this data to Adyen?" + }, + "capture": { + "label": "Capture", + "description": "Some payment methods support separate authorisation and capture. By default, capture is set to immediately after authorisation, but you can choose to delay the capture for these payment methods. This can be helpful if you want to have the option to cancel a payment in case of issues with shipment, for example.", + "placeholder": "Select capture type", + "error": "Capture type is mandatory", + "delayed": "Delayed", + "immediate": "Immediate", + "manual": "Manual" + }, + "captureDelay": { + "label": "Capture delay", + "description": "How many days after authorisation do you want the payment to be captured? Enter a number from 1 to 7.", + "error": "Number of days must be between 1 and 7." + }, + "shipmentStatus": { + "label": "Capture on status change", + "description": "Select the status that will trigger the payment capture.", + "placeholder": "Status" + }, + "retentionPeriod": { + "label": "Notifications retention period", + "description": "Define number of days that notification logs will be stored in the system.", + "error": "Minimum number of the retention period is 60 days." + } + } + }, + "orderStatusMapping": { + "title": "Order status mapping", + "description": "This page allows you to map shop order statuses to Adyen payment statuses.", + "none": "None", + "fields": { + "inProgress": { + "label": "In progress", + "description": "The Adyen payment status In progress should represent the following shop status:", + "placeholder": "Select status" + }, + "pending": { + "label": "Pending", + "description": "The Adyen payment status Pending should represent the following shop status:", + "placeholder": "Select status" + }, + "paid": { + "label": "Paid", + "description": "The Adyen payment status Paid should represent the following shop status:", + "placeholder": "Select status" + }, + "failed": { + "label": "Failed", + "description": "The Adyen payment status Failed should represent the following shop status:", + "placeholder": "Select status" + }, + "refunded": { + "label": "Refunded", + "description": "The Adyen payment status Refunded should represent the following shop status:", + "placeholder": "Select status" + }, + "cancelled": { + "label": "Cancelled", + "description": "The Adyen payment status Cancelled should represent the following shop status:", + "placeholder": "Select status" + }, + "partiallyRefunded": { + "label": "Partially refunded", + "description": "The Adyen payment status Partially refunded should represent the following shop status:", + "placeholder": "Select status" + }, + "new": { + "label": "New", + "description": "The Adyen payment status New should represent the following shop status:", + "placeholder": "Select status" + }, + "chargeBack": { + "label": "Charge back", + "description": "The Adyen payment status Charge back should represent the following shop status:", + "placeholder": "Select status" + } + } + }, + "adyenGiving": { + "title": "Adyen giving", + "description": "With Adyen Giving, your shoppers can have the option to donate to a charity of your choice during checkout. Make sure you have an Adyen merchant account set up for Adyen Giving, or contact your Adyen Account Manager or Support. Learn more", + "fields": { + "enableAdyenGiving": { + "label": "Enable Adyen Giving", + "description": "You need a charity account to enable Adyen Giving. Do you want to enable Adyen Giving?" + }, + "charityName": { + "label": "Charity name", + "description": "Enter the name of the charity. This will be shown to shoppers on the donation page." + }, + "charityDescription": { + "label": "Charity description", + "description": "Enter a short description of the charity to show to shoppers on the donation page." + }, + "charityMerchantAccount": { + "label": "Charity merchant account", + "description": "Enter your Adyen merchant account name for charity." + }, + "donationAmount": { + "label": "Donation Amounts", + "description": "Enter suggested donation amounts for shoppers to choose from. Use comma-separated values in your default store currency. Example: 2, 3, 5, 10" + }, + "charityWebsite": { + "label": "Charity website", + "description": "Enter the link to the charity website." + }, + "logo": { + "label": "Logo in Adyen Giving component", + "description": "", + "placeholder": "Drop image or click here to upload" + }, + "backgroundImage": { + "label": "Background image for Adyen Giving component", + "description": "", + "placeholder": "Drop image or click here to upload" + } + } + }, + "system": { + "title": "System information and troubleshooting", + "description": "This page comprehensively details the integration's current configuration, system status, and diagnostic information. ", + "fields": { + "debugMode": { + "label": "Debug mode", + "description": "Enable debug log level for Adyen payment requests." + }, + "adyenWebhooksValidation": { + "label": "Adyen webhooks validation", + "description": "Validate whether webhooks are received from Adyen to your store." + }, + "integrationConfigurationValidation": { + "label": "Integration configuration validation", + "description": "Performs validation if background tasks are executed in your store." + }, + "downloadSystemInformation": { + "label": "Download system information", + "description": "Download the system information report so that you can pass it to Adyen support for easier and faster troubleshooting of the issue." + }, + "contactAdyenSupport": { + "label": "Contact Adyen support", + "description": "If you need help troubleshooting the issue, please feel free to contact our support." + } + }, + "buttons": { + "validate": "Validate", + "downloadReport": "Download report", + "contactAdyenSupport": "Contact Adyen support" + }, + "messages": { + "successWebhookValidation": "Webhook validated successfully", + "failedWebhookValidation": "Store was not able to receive webhook from Adyen", + "downloadReportText": "Download the full report here.", + "successIntegrationValidation": "Auto-test completed successfully", + "failedIntegrationValidation": "Auto-test did not complete successfully" + }, + "debugModeEnabled": "Debug mode enabled.", + "debugModeDisabled": "Debug mode disabled." + } + }, + "notifications": { + "shop": { + "title": "Shop event notifications", + "description": "This page displays any important store events that were not able to be synced with Adyen.", + "noNotificationsMessage": "There are no shop notifications.", + "severity": { + "error": "Error", + "warning": "Warning", + "info": "Info" + }, + "shopEventsNotifications": { + "orderId": "Order ID", + "paymentMethod": "Payment method", + "severity": "Severity", + "dateAndTime": "Date and time", + "message": "Message", + "details": "Details" + }, + "event": { + "failedPaymentAuthorizationMessage": "Payment authorization failed.", + "failedPaymentAuthorizationDetails": "Payment authorization failed on Adyen.", + "successfulPaymentAuthorizationEventMessage": "Payment has been authorized successfully.", + "successfulPaymentAuthorizationEventDetails": "Payment has been authorized by Adyen.", + "failedCancellationEventMessage": "Cancellation failed on Adyen.", + "failedCancellationEventDetails": "Cancellation failed on Adyen.", + "failedCancellationRequestEventMessage": "Cancellation request failed.", + "failedCancellationRequestEventDetails": "Cancellation request failed.", + "successfulCancellationEventMessage": "Payment has been cancelled on Adyen.", + "successfulCancellationEventDetails": "Payment has been cancelled on Adyen.", + "successfulCancellationRequestEventMessage": "Cancellation request has been sent to Adyen.", + "successfulCancellationRequestEventDetails": "Cancellation request has been sent to Adyen.", + "failedCaptureEventMessage": "Capture failed on Adyen.", + "failedCaptureEventDetails": "Capture failed on Adyen.", + "failedCaptureRequestEventMessage": "Capture request failed.", + "failedCaptureRequestEventDetails": "Capture request failed.", + "successfulCaptureEventMessage": "Payment has been captured successfully on Adyen.", + "successfulCaptureEventDetails": "Payment has been captured successfully on Adyen.", + "successfulCaptureRequestEventMessage": "Capture request has been sent to Adyen.", + "successfulCaptureRequestEventDetails": "Capture request has been sent to Adyen.", + "failedRefundEventMessage": "Refund failed on Adyen.", + "failedRefundEventDetails": "Refund failed on Adyen.", + "failedRefundRequestEventMessage": "Refund request failed.", + "failedRefundRequestEventDetails": "Refund request failed.", + "successfulRefundEventMessage": "Payment has been refunded successfully on Adyen.", + "successfulRefundEventDetails": "Payment has been refunded successfully on Adyen.", + "successfulRefundRequestEventMessage": "Refund request has been sent to Adyen.", + "successfulRefundRequestEventDetails": "Refund request has been sent to Adyen." + } + }, + "webhook": { + "title": "Webhook notifications", + "description": "This log shows all notifications for Adyen webhooks that have been received.", + "noNotificationsMessage": "There are no webhook notifications.", + "status": { + "created": "Created", + "queued": "Queued", + "in_progress": "In progress", + "aborted": "Aborted", + "failed": "Failed", + "completed": "Completed" + }, + "webhookEventsNotifications": { + "orderId": "Order ID", + "logo": "Logo", + "paymentMethod": "Payment method", + "eventCode": "Event code", + "dateAndTime": "Date and time", + "success": "Success", + "status": "Status", + "action": "Action" + }, + "notificationDetailsModal": { + "title": "Notification details", + "reason": "Reason: ", + "failureDescription": "Failure description: ", + "paymentLink": "Go to payment in Adyen CA", + "shopLink": "Go to shop order" + } + } + }, + "countries": { + "BR": "Brazil", + "MX": "Mexico", + "TK": "Tokelau", + "TR": "Turkey", + "AU": "Australia", + "AT": "Austria", + "BE": "Belgium", + "BG": "Bulgaria", + "CA": "Canada", + "HR": "Croatia", + "CY": "Cyprus", + "CZ": "Czech Republic", + "DK": "Denmark", + "EE": "Estonia", + "FI": "Finland", + "FR": "France", + "DE": "Germany", + "GI": "Gibraltar", + "GR": "Greece", + "HK": "Hong Kong", + "HU": "Hungary", + "IS": "Iceland", + "IE": "Ireland", + "IT": "Italy", + "JP": "Japan", + "LV": "Latvia", + "LI": "Liechtenstein", + "LT": "Lithuania", + "LU": "Luxembourg", + "MT": "Malta", + "NL": "Netherlands", + "NZ": "New Zealand", + "NO": "Norway", + "PL": "Poland", + "PT": "Portugal", + "PR": "Puerto Rico", + "RO": "Romania", + "SG": "Singapore", + "SK": "Slovakia", + "SI": "Slovenia", + "ES": "Spain", + "SE": "Sweden", + "CH": "Switzerland", + "AE": "United Arab Emirates", + "GB": "United Kingdom", + "US": "United States of America" + }, + "oneyValues": { + "3x": "3x", + "4x": "4x", + "6x": "6x", + "10x": "10x", + "12x": "12x" + } +} diff --git a/Resources/views/backend/_resources/templates/sidebar.html b/Resources/views/backend/_resources/templates/sidebar.html new file mode 100644 index 00000000..8eea299a --- /dev/null +++ b/Resources/views/backend/_resources/templates/sidebar.html @@ -0,0 +1,86 @@ + +
+ + +
+
+
+ + +
diff --git a/Resources/views/backend/adyen_detail/app.js b/Resources/views/backend/adyen_detail/app.js new file mode 100644 index 00000000..4a14c3e3 --- /dev/null +++ b/Resources/views/backend/adyen_detail/app.js @@ -0,0 +1,8 @@ +//{block name="backend/order/application"} +// {$smarty.block.parent} +// {include file="backend/adyen_detail/model/transaction.js"} +// {include file="backend/adyen_detail/store/transaction.js"} +// {include file="backend/adyen_detail/view/adyen_order_detail_data.js"} +// {include file="backend/adyen_detail/view/adyen_order_detail_list.js"} +// {include file="backend/adyen_detail/controller/adyen_order_details_controller.js"} +//{/block} diff --git a/Resources/views/backend/adyen_detail/controller/adyen_order_details_controller.js b/Resources/views/backend/adyen_detail/controller/adyen_order_details_controller.js new file mode 100644 index 00000000..a84c8819 --- /dev/null +++ b/Resources/views/backend/adyen_detail/controller/adyen_order_details_controller.js @@ -0,0 +1,156 @@ +// Adyen order details controller +//{block name="backend/order/controller/detail" append} + +Ext.define('Shopware.apps.AdyenTransaction.controller.OrderDetailsController', { + /** + * Override the order details main controller + * @string + */ + override: 'Shopware.apps.Order.controller.Detail', + + + onTabChange: function () { + let me = this, + captureBtn = Ext.WindowManager.getActive().down('#adyenCaptureBtn'), + cancelBtn = Ext.WindowManager.getActive().down('#adyenCancelBtn'), + refundBtn = Ext.WindowManager.getActive().down('#adyenRefundBtn'); + + // me.callParent will execute the init function of the overridden controller + me.callParent(arguments); + + if (cancelBtn !== null && !cancelBtn.hasListener('click')) { + cancelBtn.on('click', me.cancel.bind(me)); + } + + if (captureBtn !== null && !captureBtn.hasListener('click')) { + captureBtn.on('click', me.capture.bind(me)); + } + + if (refundBtn !== null && !refundBtn.hasListener('click')) { + refundBtn.on('click', me.refund.bind(me)); + } + }, + + capture: function () { + let amount = Ext.WindowManager.getActive().down('#adyenCaptureAmount'), + currencyIso = Ext.WindowManager.getActive().down('#adyenCurrencyIso'), + merchantReference = Ext.WindowManager.getActive().down('#adyenMerchantReference'), + storeId = Ext.WindowManager.getActive().down('#adyenStoreId'), + tab = Ext.WindowManager.getActive().down('#adyen-tab'), + me = this; + + me.loadingMask = new Ext.LoadMask(tab); + me.loadingMask.show(); + + Ext.Ajax.request({ + method: 'GET', + url: '{url controller=AdyenMerchantActions action="capture"}', + params: { + amount: amount.getValue(), + currency: currencyIso.getValue(), + merchantReference: merchantReference.getValue(), + storeId: storeId.getValue() + }, + success: function () { + me.refreshTable(merchantReference, storeId); + }, + failure: function (response, options) { + me.refreshTable(merchantReference, storeId); + Shopware.Notification.createStickyGrowlMessage({ + title: Ext.String.format( + "{s name='notification/adyen/header'}You have new Adyen notifications {/s}", + ), + text: "{s name='notification/adyen/message'}" + response.responseText + "{/s}", + }) + } + }); + }, + + cancel: function () { + let me = this, + merchantReference = Ext.WindowManager.getActive().down('#adyenMerchantReference'), + storeId = Ext.WindowManager.getActive().down('#adyenStoreId'), + tab = Ext.WindowManager.getActive().down('#adyen-tab'); + + me.loadingMask = new Ext.LoadMask(tab); + me.loadingMask.show(); + + Ext.Ajax.request({ + method: 'GET', + url: '{url controller=AdyenMerchantActions action="cancel"}', + params: { + merchantReference: merchantReference.getValue(), + storeId: storeId.getValue() + }, + success: function () { + me.refreshTable(merchantReference, storeId); + }, + failure: function (response, options) { + me.refreshTable(merchantReference, storeId); + Shopware.Notification.createStickyGrowlMessage({ + title: Ext.String.format( + "{s name='notification/adyen/header'}You have new Adyen notifications {/s}", + ), + text: "{s name='notification/adyen/message'}" + response.responseText + "{/s}", + }) + } + }); + }, + + refund: function () { + let me = this, + amount = Ext.WindowManager.getActive().down('#adyenRefundAmount'), + currencyIso = Ext.WindowManager.getActive().down('#adyenCurrencyIso'), + merchantReference = Ext.WindowManager.getActive().down('#adyenMerchantReference'), + storeId = Ext.WindowManager.getActive().down('#adyenStoreId'), + tab = Ext.WindowManager.getActive().down('#adyen-tab'); + + me.loadingMask = new Ext.LoadMask(tab); + me.loadingMask.show(); + + Ext.Ajax.request({ + method: 'GET', + url: '{url controller=AdyenMerchantActions action="refund"}', + params: { + amount: amount.getValue(), + currency: currencyIso.getValue(), + merchantReference: merchantReference.getValue(), + storeId: storeId.getValue() + }, + success: function (response) { + me.refreshTable(merchantReference, storeId); + }, + failure: function (response, options) { + // Handle failed response + me.refreshTable(merchantReference, storeId); + Shopware.Notification.createStickyGrowlMessage({ + title: Ext.String.format( + "{s name='notification/adyen/header'}You have new Adyen notifications {/s}", + ), + text: "{s name='notification/adyen/message'}" + response.responseText + "{/s}", + }) + } + }); + }, + + refreshTable: function (merchantReference, storeId) { + let me = this; + + Ext.Ajax.request({ + method: 'GET', + url: '{url controller=AdyenTransaction action="get"}', + params: { + temporaryId: merchantReference.getValue(), + storeId: storeId.getValue() + }, + success: function (response) { + var list = Ext.WindowManager.getActive().down('adyen-order-detail-list'); + list.getStore().loadData(JSON.parse(response.responseText)); + list.getView().refresh() + me.loadingMask.hide(); + } + }); + } +}); + +//{/block} diff --git a/Resources/views/backend/adyen_detail/model/transaction.js b/Resources/views/backend/adyen_detail/model/transaction.js new file mode 100644 index 00000000..9fa63d08 --- /dev/null +++ b/Resources/views/backend/adyen_detail/model/transaction.js @@ -0,0 +1,32 @@ +//{block name="backend/adyen/transaction"} +Ext.define('Shopware.apps.AdyenTransaction.model.Transaction', { + extend: 'Shopware.data.Model', + + fields: [ + { name : 'pspReference', type: 'string' }, + { name : 'date', type: 'date' }, + { name : 'status', type: 'string' }, + { name : 'paymentMethod', type: 'string' }, + { name : 'eventCode', type: 'string' }, + { name : 'success', type: 'string' }, + { name : 'merchantAccountCode', type: 'string' }, + { name : 'paidAmount', type: 'float' }, + { name : 'amountCurrency', type: 'string' }, + { name : 'refundedAmount', type: 'float' }, + { name : 'viewOnAdyenUrl', type: 'string' }, + { name : 'merchantReference', type: 'string'}, + { name: 'storeId', type: 'string'}, + { name: 'currencyIso', type: 'string'}, + { name: 'captureSupported', type: 'boolean'}, + { name: 'captureAmount', type: 'string'}, + { name: 'partialCapture', type: 'boolean'}, + { name: 'refund', type: 'boolean'}, + { name: 'partialRefund', type: 'boolean'}, + { name: 'refundAmount', type: 'string'}, + { name: 'riskScore', type: 'string'}, + { name: 'capturableAmount', type: 'string'}, + { name: 'refundableAmount', type: 'string'}, + { name: 'cancelSupported', type: 'boolean'} + ] +}); +//{/block} diff --git a/Resources/views/backend/adyen_detail/store/transaction.js b/Resources/views/backend/adyen_detail/store/transaction.js new file mode 100644 index 00000000..efd7cde9 --- /dev/null +++ b/Resources/views/backend/adyen_detail/store/transaction.js @@ -0,0 +1,21 @@ +//{block name="backend/adyen/transaction"} +Ext.define('Shopware.apps.AdyenTransaction.store.Transaction', { + extend:'Shopware.store.Listing', + model: 'Shopware.apps.AdyenTransaction.model.Transaction', + autoLoad: false, + proxy: { + type: 'ajax', + url: '{url controller=AdyenTransaction action="get"}', + reader: { + type: 'json', + root: 'data' + } + }, + configure: function () { + return { + controller: 'AdyenTransaction', + action: 'get' + }; + } +}); +//{/block} diff --git a/Resources/views/backend/adyen_detail/view/adyen_order_detail_data.js b/Resources/views/backend/adyen_detail/view/adyen_order_detail_data.js new file mode 100644 index 00000000..a9924a38 --- /dev/null +++ b/Resources/views/backend/adyen_detail/view/adyen_order_detail_data.js @@ -0,0 +1,292 @@ +//{namespace name=backend/adyen/configuration} + +Ext.define('Shopware.apps.AdyenTransaction.AdyenOrderDetailData', { + extend: 'Ext.container.Container', + record: null, + cls: 'shopware-form', + + initComponent: function () { + var me = this; + + me.items = [ + me.createDetailsContainer() + ]; + + me.store.on('datachanged', function (store, records, options) { + me.record = store.first(); + me.detailsPanel.loadRecord(me.record); + me.query('#adyenPaymentMethod')[0].setSrc(me.record.get('paymentMethod')); + me.query('#captureCurrency')[0].setValue(me.record.get('amountCurrency')); + me.query('#refundCurrency')[0].setValue(me.record.get('amountCurrency')); + + if (!me.record.get('captureSupported') || (parseFloat(me.record.get('capturableAmount')) === 0)) { + me.query('#adyenCaptureToolbar')[0].hide(); + } else { + me.query('#adyenCaptureToolbar')[0].show(); + } + + if (!me.record.get('partialCapture')) { + me.query('#adyenCaptureAmount')[0].hide(); + me.query('#captureCurrency')[0].hide(); + } else { + me.query('#adyenCaptureAmount')[0].show(); + me.query('#captureCurrency')[0].show(); + } + + me.query('#adyenCaptureAmount')[0].maxValue = parseFloat(me.record.get('capturableAmount')); + if (!me.record.get('refund') || (parseFloat(me.record.get('refundableAmount')) === 0)) { + me.query('#adyenRefundToolbar')[0].hide(); + } else { + me.query('#adyenRefundToolbar')[0].show(); + } + + if (!me.record.get('partialRefund')) { + me.query('#adyenRefundAmount')[0].hide(); + me.query('#refundCurrency')[0].hide(); + } else { + me.query('#adyenRefundAmount')[0].show(); + me.query('#refundCurrency')[0].show(); + } + + me.query('#adyenRefundAmount')[0].maxValue = parseFloat(me.record.get('refundableAmount')); + + if (!me.record.get('cancelSupported')) { + me.query('#adyenCancelBtn')[0].hide(); + } else { + me.query('#adyenCancelBtn')[0].show(); + } + }); + + me.callParent(arguments); + }, + + /** + * Creates the container for the detail form panel. + * @return Ext.form.Panel + */ + createDetailsContainer: function () { + var me = this; + + me.detailsPanel = Ext.create('Ext.form.Panel', { + title: '{s name="payment/adyen/detail/transaction"}Transaction{/s}', + titleAlign: 'left', + bodyPadding: 10, + layout: 'anchor', + defaults: { + anchor: '100%' + }, + margin: '10 0', + width: '100%', + items: [ + me.createInnerDetailContainer() + ] + }); + return me.detailsPanel; + }, + + /** + * Creates the outer container for the detail panel which + * has a column layout to display the detail information in two columns. + * + * @return Ext.container.Container + */ + createInnerDetailContainer: function () { + var me = this; + + return Ext.create('Ext.container.Container', { + layout: 'column', + items: [ + me.createDetailElementContainer(me.createLeftDetailElements()), + me.createDetailElementContainer(me.createRightDetailElements()) + ] + }); + }, + + /** + * Creates the column container for the detail elements which displayed + * in two columns. + * + * @param { Array } items - The container items. + */ + createDetailElementContainer: function (items) { + return Ext.create('Ext.container.Container', { + columnWidth: 0.5, + defaults: { + xtype: 'displayfield', + labelWidth: 155 + }, + items: items + }); + }, + + /** + * Creates the elements for the left column container which displays the + * fields in two columns. + * + * @return array - Contains the form fields + */ + createLeftDetailElements: function () { + var me = this, fields; + fields = [ + { name: 'pspReference', fieldLabel: '{s name="payment/adyen/detail/pspreference"}PSP Reference{/s}'}, + { name: 'date', fieldLabel: '{s name="payment/adyen/detail/date"}Date{/s}'}, + { name: 'eventCode', fieldLabel: '{s name="payment/adyen/detail/eventcode"}Event code{/s}'}, + { name: 'merchantAccountCode', fieldLabel: '{s name="payment/adyen/detail/merchant"}Merchant{/s}'}, + { + xtype: 'toolbar', + itemId: 'adyenCaptureToolbar', + style: { + 'background-color': 'rgb(240, 242, 244)' + }, + items: [ + { + xtype: 'numberfield', + hideTrigger: true, + minValue: 0, + name: 'capturableAmount', + itemId: 'adyenCaptureAmount', + fieldLabel: '', + allowBlank: false, + width: 250, + forcePrecision: true, + decimalPrecision: 3 + }, + { + xtype: 'displayfield', + itemId: 'captureCurrency', + name: 'captureCurrency', + margin: '0 10 0 0' + }, + { + action: 'capturePayment', + xtype: 'button', + itemId: 'adyenCaptureBtn', + cls: 'primary', + text: 'Capture', + margin: '10 0 0 0', + width: 105 + } + ] + }, + { + xtype: 'toolbar', + itemId: 'adyenRefundToolbar', + style: { + 'background-color': 'rgb(240, 242, 244)' + }, + items: [ + { + xtype: 'numberfield', + hideTrigger: true, + minValue: 0, + name: 'refundableAmount', + itemId: 'adyenRefundAmount', + fieldLabel: '', + allowBlank: false, + width: 250, + forcePrecision: true, + decimalPrecision: 3 + }, + { + xtype: 'displayfield', + itemId: 'refundCurrency', + name: 'refundCurrency', + margin: '0 10 0 0' + }, + { + action: 'refundPayment', + xtype: 'button', + itemId: 'adyenRefundBtn', + cls: 'primary', + text: '{s name="payment/adyen/detail/refund"}Refund{/s}', + margin: '10 0 0 0', + width: 105 + } + ] + }, + { + xtype: 'toolbar', + style: { + 'background-color': 'rgb(240, 242, 244)' + }, + items: [ + { + action: 'cancelPayment', + xtype: 'button', + itemId: 'adyenCancelBtn', + cls: 'primary', + text: '{s name="payment/adyen/detail/cancel"}Cancel{/s}', + margin: '10 10 0 0', + width: 105 + }, + { + action: 'viewOnAdyen', + xtype: 'button', + cls: 'secondary', + text: '{s name="payment/adyen/detail/viewonadyenca"}View payment on Adyen CA{/s}', + margin: '10 0 0 0', + handler: function () { + window.open(me.record.get('viewOnAdyenUrl') ); + } + } + ] + } + ]; + return fields; + }, + + /** + * Creates the elements for the right column container which displays the + * fields in two columns. + * + * @return Array - Contains the form fields + */ + createRightDetailElements: function () { + var me = this; + + return [ + { + xtype: 'panel', + layout: 'hbox', + border: false, + height: 30, + items: [ + { + xtype: 'displayfield', + labelWidth: 155, + fieldLabel: '{s name="payment/adyen/detail/paymentmethod"}Payment method{/s}', + height: 30 + }, + { + xtype: 'image', + itemId: 'adyenPaymentMethod', + name: 'paymentMethod', + src: '', + height: 30 + }, + ] + }, + { name: 'amountCurrency', fieldLabel: '{s name="payment/adyen/detail/currency"}Currency{/s}'}, + { name: 'status', fieldLabel: '{s name="payment/adyen/detail/status"}Status{/s}'}, + { name: 'success', fieldLabel: '{s name="payment/adyen/detail/success"}Success{/s}'}, + { name: 'riskScore', fieldLabel: '{s name="payment/adyen/detail/riskscore"}Risk score{/s}'}, + { name: 'paidAmount', fieldLabel: '{s name="payment/adyen/detail/paidamount"}Paid amount{/s}'}, + { name: 'refundedAmount', fieldLabel: '{s name="payment/adyen/detail/refundedamount"}Refunded amount{/s}'}, + { + xtype: 'hidden', + itemId: 'adyenMerchantReference', + name: 'merchantReference' + }, + { + xtype: 'hidden', + itemId: 'adyenStoreId', + name: 'storeId', + }, + { + xtype: 'hidden', + itemId: 'adyenCurrencyIso', + name: 'currencyIso' + } + ]; + }, +}); diff --git a/Resources/views/backend/adyen_detail/view/adyen_order_detail_list.js b/Resources/views/backend/adyen_detail/view/adyen_order_detail_list.js new file mode 100644 index 00000000..f271d055 --- /dev/null +++ b/Resources/views/backend/adyen_detail/view/adyen_order_detail_list.js @@ -0,0 +1,36 @@ +//{namespace name=backend/adyen/configuration} + +Ext.define('Shopware.apps.AdyenTransaction.AdyenOrderDetailList', { + extend: 'Ext.grid.Panel', + alias: 'widget.adyen-order-detail-list', + width: '100%', + + initComponent: function () { + var me = this; + + me.columns = me.getColumns(); + + me.callParent(arguments); + }, + + getColumns: function () { + return [{ + header: '{s name="payment/adyen/detail/datetime"}Date & time{/s}', + dataIndex: 'date', + sortable: false, + xtype: 'datecolumn', + format: 'd.m.Y H:i:s', + flex: 1, + }, { + header: '{s name="payment/adyen/detail/eventcode"}Event code{/s}', + dataIndex: 'eventCode', + sortable: false, + flex: 1, + }, { + header: '{s name="payment/adyen/detail/status"}Status{/s}', + dataIndex: 'status', + sortable: false, + flex: 1, + }]; + } +}); diff --git a/Resources/views/backend/adyen_detail/view/window.js b/Resources/views/backend/adyen_detail/view/window.js new file mode 100644 index 00000000..ed5c7e48 --- /dev/null +++ b/Resources/views/backend/adyen_detail/view/window.js @@ -0,0 +1,72 @@ +//{block name="backend/order/view/detail/window"} +// {$smarty.block.parent} +Ext.define('Shopware.apps.AdyenTransaction.Window', { + override: 'Shopware.apps.Order.view.detail.Window', + + initComponent: function () { + var me = this; + me.callParent(); + }, + + createTabPanel: function () { + let me = this, + result = me.callParent(); + + result.add(me.createAdyenTab(!!me.record.raw.adyenTransaction)); + + return result; + }, + + createAdyenTab: function (enableTab) { + var me = this; + + var transactionStore = Ext.create('Shopware.apps.AdyenTransaction.store.Transaction'); + + let items = []; + if (enableTab) { + items.push( + Ext.create('Shopware.apps.AdyenTransaction.AdyenOrderDetailData', { + store: transactionStore, + layout: { + type: 'vbox', + align: 'stretch' + }, + region: 'north' + }), + Ext.create('Shopware.apps.AdyenTransaction.AdyenOrderDetailList', { + region: 'center', + store: transactionStore, + record: me.record + }) + ); + } + + me.adyenTransactionTab = Ext.create('Ext.container.Container', { + title: 'Adyen', + itemId: 'adyen-tab', + layout: 'border', + items: items, + disabled: !enableTab + }); + + me.loadingMask = new Ext.LoadMask(me.adyenTransactionTab); + me.adyenTransactionTab.addListener('activate', function () { + me.loadingMask.show(); + Ext.Ajax.request({ + method: 'GET', + url: '{url controller=AdyenTransaction action="get"}', + params: { + temporaryId: me.record.get('temporaryId'), + storeId: me.record.get('shopId') + }, + success: function (response) { + transactionStore.loadData(JSON.parse(response.responseText)); + me.loadingMask.hide(); + } + }); + }, me); + + return me.adyenTransactionTab; + } +}); +//{/block} diff --git a/Resources/views/backend/adyen_list/adyen_order_list.js b/Resources/views/backend/adyen_list/adyen_order_list.js new file mode 100644 index 00000000..212bbd83 --- /dev/null +++ b/Resources/views/backend/adyen_list/adyen_order_list.js @@ -0,0 +1,51 @@ +// {namespace name=backend/adyen/configuration} + +//{block name="backend/order/view/list/list"} +// {$smarty.block.parent} + +Ext.define('Shopware.apps.Adyen.view.Order.List', { + override: 'Shopware.apps.Order.view.list.List', + getColumns: function () { + let result = this.callParent(); + + result = this.addAdyenColumns(result); + + return result; + }, + addAdyenColumns: function (columns) { + let i = 0; + for (i; i < columns.length; i++) { + if (columns[i].dataIndex === 'number') { + break; + } + } + + columns.splice(i + 1, 0, { + header: '{s name="order/adyen/psp"}Adyen PSP reference{/s}', + dataIndex: 'adyenPspReference', + flex: 4, + sortable: false, + renderer: renderAdyenPspReferenceColumn + }); + + columns.splice(i + 2, 0, { + header: '{s name="order/adyen/paymentMethod"}Adyen payment method{/s}', + dataIndex: 'adyenPaymentMethod', + flex: 1, + sortable: false, + renderer: renderPrintLabelsColumn + }); + + return columns; + + function renderAdyenPspReferenceColumn(value, meta, model) { + return model.get('adyenPspReference'); + } + + function renderPrintLabelsColumn(value, meta, model) { + return model.get('adyenPaymentMethod'); + } + } +}); + +//{/block} diff --git a/Resources/views/backend/adyen_list/models/adyen_order_model.js b/Resources/views/backend/adyen_list/models/adyen_order_model.js new file mode 100644 index 00000000..a5358f41 --- /dev/null +++ b/Resources/views/backend/adyen_list/models/adyen_order_model.js @@ -0,0 +1,7 @@ +//{block name="backend/order/model/order/fields"} +// {$smarty.block.parent} + +{ name : 'adyenPspReference', type : 'string' }, +{ name : 'adyenPaymentMethod', type : 'string', defaultValue : ''}, + +//{/block} diff --git a/Resources/views/backend/adyen_payment_main/index.tpl b/Resources/views/backend/adyen_payment_main/index.tpl new file mode 100644 index 00000000..b1d3b7a9 --- /dev/null +++ b/Resources/views/backend/adyen_payment_main/index.tpl @@ -0,0 +1,84 @@ +{namespace name=backend/adyen/configuration} +{extends file="parent:backend/_base/layout.tpl"} +{block name="styles"} + + +{/block} +{block name="scripts"} + + + + + + + + + + + + + + + + + + +{/block} +{block name="content/main"} +
+ +
+
+
+
+
    +
  • +
  • +
  • +
  • +
+
+
+
+
+
+
+
+
+ +
+
+
+{/block} +{block name="content/javascript"} + +{/block} diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/app.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/app.js deleted file mode 100755 index 76020f0a..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/app.js +++ /dev/null @@ -1,29 +0,0 @@ - -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension', { - extend: 'Enlight.app.SubApplication', - - name:'Shopware.apps.AdyenPaymentNotificationsListingExtension', - - loadPath: '{url action=load}', - bulkLoad: true, - - controllers: [ 'Main' ], - - views: [ - 'list.Window', - 'list.Notification', - 'list.extensions.NotificationFilter', - ], - - models: [ - 'Notification', - ], - - stores: [ - 'Notification', - ], - - launch: function () { - return this.getController('Main').mainWindow; - } -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/controller/main.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/controller/main.js deleted file mode 100755 index 1c160ee8..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/controller/main.js +++ /dev/null @@ -1,11 +0,0 @@ - -// {namespace name=backend/adyen/notification/listing} -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.controller.Main', { - extend: 'Enlight.app.Controller', - - init: function () { - var me = this; - - me.mainWindow = me.getView('list.Window').create({ }).show(); - }, -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/model/notification.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/model/notification.js deleted file mode 100755 index efe2d4df..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/model/notification.js +++ /dev/null @@ -1,41 +0,0 @@ - -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.model.Notification', { - extend: 'Shopware.data.Model', - - configure: function () { - return { - controller: 'AdyenPaymentNotificationsListingExtension', - }; - }, - - fields: [ - { name : 'id', type: 'int', useNull: true }, - { name : 'pspReference', type: 'string' }, - { name : 'createdAt', type: 'date' }, - { name : 'updatedAt', type: 'date' }, - { name : 'status', type: 'string' }, - { name : 'paymentMethod', type: 'string' }, - { name : 'eventCode', type: 'string' }, - { name : 'success', type: 'string' }, - { name : 'merchantAccountCode', type: 'string' }, - { name : 'amountValue', type: 'float', convert: function (v) { - return v / 100; - } }, - { name : 'amountCurrency', type: 'string' }, - { name : 'errorDetails', type: 'string' }, - { name : 'orderId', type: 'int' }, - ], - - associations: [ - { - relation: 'ManyToOne', - field: 'orderId', - type: 'hasMany', - model: 'Shopware.apps.Order.model.Order', - name: 'getOrder', - associationKey: 'id' - }, - ] - -}); - diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/store/notification.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/store/notification.js deleted file mode 100755 index 86123682..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/store/notification.js +++ /dev/null @@ -1,11 +0,0 @@ - -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.store.Notification', { - extend:'Shopware.store.Listing', - - configure: function () { - return { - controller: 'AdyenPaymentNotificationsListingExtension' - }; - }, - model: 'Shopware.apps.AdyenPaymentNotificationsListingExtension.model.Notification' -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/extensions/notification_filter.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/extensions/notification_filter.js deleted file mode 100644 index 054ea8ea..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/extensions/notification_filter.js +++ /dev/null @@ -1,59 +0,0 @@ -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.view.list.extensions.NotificationFilter', { - extend: 'Shopware.listing.FilterPanel', - alias: 'widget.notification-listing-filter-panel', - width: 270, - controller: 'AdyenPaymentNotificationsListingExtension', - - configure: function () { - var me = this; - - return { - controller: me.controller, - model: 'Shopware.apps.AdyenPaymentNotificationsListingExtension.model.Notification', - fields: { - createdAt: { }, - updatedAt: { }, - status: { - xtype: 'combobox', - displayField: 'status', - valueField: 'status', - store: new Ext.data.Store({ - autoLoad: true, - proxy: { - type: 'ajax', - url: window.location.href.substr(0, window.location.href.indexOf('backend')) + 'backend/' + me.controller + '/getNotificationStatusses', - reader: { - type: 'json', - root: 'statusses' - } - }, - fields: [ - 'status' - ] - }), - fieldLabel: '{s name="column/status"}Status{/s}', - }, - eventCode: { - xtype: 'combobox', - displayField: 'eventCode', - valueField: 'eventCode', - store: new Ext.data.Store({ - autoLoad: true, - proxy: { - type: 'ajax', - url: window.location.href.substr(0, window.location.href.indexOf('backend')) + 'backend/' + me.controller + '/getEventCodes', - reader: { - type: 'json', - root: 'eventCodes' - } - }, - fields: [ - 'eventCode' - ] - }), - fieldLabel: '{s name="column/eventCode"}Event Code{/s}', - }, - } - }; - }, -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/notification.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/notification.js deleted file mode 100755 index 191eac70..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/notification.js +++ /dev/null @@ -1,101 +0,0 @@ - -// {namespace name=backend/adyen/notification/listing} -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.view.list.Notification', { - extend: 'Shopware.grid.Panel', - alias: 'widget.product-listing-grid', - region: 'center', - - configure: function () { - return { - addButton: false, - deleteButton: false, - deleteColumn: false, - editColumn: false, - columns: { - 'pspReference': { }, - 'createdAt': { }, - 'updatedAt': { }, - 'status': { }, - 'paymentMethod': { }, - 'eventCode': { }, - 'success': { }, - 'merchantAccountCode': { }, - 'amountValue': { }, - 'amountCurrency': { }, - 'errorDetails': { }, - 'orderId': { - renderer: this.orderIdRenderer - }, - } - }; - }, - - orderIdRenderer: function (value, styles, row) { - return !Ext.isEmpty(row.raw.order) ? row.raw.order.number : ''; - }, - - - /** - * Contains all snippets for the view component - * @object - */ - snippets:{ - columns: { - pspReference:'{s name="column/pspReference"}PSP Reference{/s}', - createdAt:'{s name="column/createdAt"}Created at{/s}', - updatedAt:'{s name="column/updatedAt"}Updated at{/s}', - status:'{s name="column/status"}Status{/s}', - paymentMethod:'{s name="column/paymentMethod"}Payment method{/s}', - eventCode:'{s name="column/eventCode"}Event Code{/s}', - success:'{s name="column/success"}Success{/s}', - merchantAccountCode:'{s name="column/merchantAccountCode"}Merchant Account Code{/s}', - amountValue:'{s name="column/amountValue"}Amount Value{/s}', - amountCurrency:'{s name="column/amountCurrency"}Amount Currency{/s}', - errorDetails:'{s name="column/errorDetails"}Error Details{/s}', - orderDetails:'{s name="column/orderDetails"}Order Details{/s}', - }, - successTitle: '{s name="message/save/success_title"}Successful{/s}', - failureTitle: '{s name="message/save/error_title"}Error{/s}', - orderDoesNotExistAnymore: '{s name="order_does_not_exist_anymore"}This order does not exist anymore{/s}', - }, - - createActionColumnItems: function() { - var me = this, items; - items = me.callParent(arguments); - items.push(me.createEditOrderColumn()); - - return items; - }, - - createEditOrderColumn: function () { - var me = this; - - return { - iconCls: 'sprite-eye', - action: 'editOrder', - tooltip: me.snippets.columns.orderDetails, - - isDisabled: function (view, rowIndex, colIndex, item, record) { - return Ext.isEmpty(record.raw.order); - }, - handler: function (view, rowIndex, colIndex, item) { - var store = view.getStore(), - record = store.getAt(rowIndex); - - if (Ext.isEmpty(record.raw.order)) { - Shopware.Msg.createGrowlMessage(me.snippets.failureTitle, me.snippets.orderDoesNotExistAnymore); - - return; - } - - Shopware.app.Application.addSubApplication({ - name: 'Shopware.apps.Order', - action: 'detail', - params: { - orderId: record.data.orderId - } - }); - } - } - }, -}); diff --git a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/window.js b/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/window.js deleted file mode 100755 index 087980a0..00000000 --- a/Resources/views/backend/adyen_payment_notifications_listing_extension/view/list/window.js +++ /dev/null @@ -1,18 +0,0 @@ - -Ext.define('Shopware.apps.AdyenPaymentNotificationsListingExtension.view.list.Window', { - extend: 'Shopware.window.Listing', - alias: 'widget.product-list-window', - height: 450, - title : '{s name="window_title"}Notification listing{/s}', - - configure: function () { - return { - listingGrid: 'Shopware.apps.AdyenPaymentNotificationsListingExtension.view.list.Notification', - listingStore: 'Shopware.apps.AdyenPaymentNotificationsListingExtension.store.Notification', - - extensions: [ - { xtype: 'notification-listing-filter-panel' } - ] - }; - } -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/app.js b/Resources/views/backend/adyen_payment_order/app.js deleted file mode 100644 index 1636470e..00000000 --- a/Resources/views/backend/adyen_payment_order/app.js +++ /dev/null @@ -1,10 +0,0 @@ -//{block name="backend/order/application"} -// {$smarty.block.parent} -// {include file="backend/adyen_payment_order/view/detail/transaction_details.js"} -// {include file="backend/adyen_payment_order/view/detail/transaction_tabs.js"} -// {include file="backend/adyen_payment_order/view/detail/tabs/notifications.js"} -// {include file="backend/adyen_payment_order/view/detail/tabs/refunds.js"} -// {include file="backend/adyen_payment_order/view/detail/tabs/notifications/list.js"} -// {include file="backend/adyen_payment_order/view/detail/tabs/notifications/detail.js"} -// {include file="backend/adyen_payment_order/view/detail/tabs/refunds/detail.js"} -//{/block} \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/model/order.js b/Resources/views/backend/adyen_payment_order/model/order.js deleted file mode 100644 index f9bc4aa2..00000000 --- a/Resources/views/backend/adyen_payment_order/model/order.js +++ /dev/null @@ -1,6 +0,0 @@ -// - -//{block name="backend/order/model/order/fields"} -//{$smarty.block.parent} -{ name : 'adyenRefundable', type: 'boolean' }, -//{/block} \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications.js b/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications.js deleted file mode 100644 index e40da291..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications.js +++ /dev/null @@ -1,53 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.Notifications', { - extend: 'Ext.container.Container', - - layout: 'border', - formActions: {}, - - initComponent: function () { - var me = this; - me.items = me.getNotifications(); - me.callParent(arguments); - }, - - getNotifications: function () { - var me = this; - - return [ - Ext.create('Ext.container.Container', { - layout: 'border', - region: 'center', - items: [ - me.getWidgetList(), - me.getWidgetDetail() - ] - }) - ]; - }, - - getWidgetList: function () { - var me = this; - - me.listView = Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.notifications.List', { - store: me.store, - notifications: me, - flex: 1, - region: 'west' - }); - return me.listView; - }, - - getWidgetDetail: function () { - var me = this; - - me.detailView = Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.notifications.Detail', { - flex: 2, - region: 'center' - }); - - me.detailView.disable(); - return me.detailView; - }, -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/detail.js b/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/detail.js deleted file mode 100644 index 4ddc6bae..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/detail.js +++ /dev/null @@ -1,41 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.notifications.Detail', { - extend: 'Ext.form.Panel', - layout: 'anchor', - - initComponent: function () { - var me = this; - - me.items = me.getItems(); - me.callParent(arguments); - - if (me.store && me.store.first()) { - me.loadRecord(me.store.first()); - } - }, - - getItems: function () { - return [Ext.create('Ext.container.Container', { - columnWidth: 0.5, - padding: 10, - defaults: { - xtype: 'displayfield', - labelWidth: 155 - }, - items: [ - { name: 'pspReference', fieldLabel: 'PSP Reference'}, - { name: 'createdAt', fieldLabel: 'Created at'}, - { name: 'updatedAt', fieldLabel: 'Updated at'}, - { name: 'eventCode', fieldLabel: 'Event code'}, - { name: 'merchantAccountCode', fieldLabel: 'Merchant'}, - { name: 'paymentMethod', fieldLabel: 'Payment method'}, - { name: 'amountValue', fieldLabel: 'Amount'}, - { name: 'amountCurrency', fieldLabel: 'Currency'}, - { name: 'status', fieldLabel: 'Status'}, - { name: 'success', fieldLabel: 'Success'}, - { name: 'errorDetails', fieldLabel: 'Error Details'}, - ] - })]; - } -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/list.js b/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/list.js deleted file mode 100644 index 15cc6429..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/tabs/notifications/list.js +++ /dev/null @@ -1,41 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.notifications.List', { - extend: 'Ext.grid.Panel', - - initComponent: function () { - var me = this; - - me.columns = me.getColumns(); - - me.store.sort([{ - property : 'id', - direction: 'DESC' - }]); - - me.getSelectionModel().on('selectionchange', function (row, selected, options) { - me.notifications.detailView.loadRecord(selected[0]); - me.notifications.detailView.enable(); - }); - - me.callParent(arguments); - }, - - getColumns: function () { - return [{ - header: 'Date & time', - dataIndex: 'createdAt', - sortable: false, - xtype:'datecolumn', - format:'d.m.Y H:i:s', - }, { - header: 'Event code', - dataIndex: 'eventCode', - sortable: false, - }, { - header: 'Status', - dataIndex: 'status', - sortable: false, - }]; - } -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds.js b/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds.js deleted file mode 100644 index ae55c6d9..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds.js +++ /dev/null @@ -1,29 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.Refunds', { - extend: 'Ext.container.Container', - - initComponent: function () { - var me = this; - me.items = me.createItems(); - me.callParent(arguments); - }, - - createItems: function () { - var me = this; - - return [ - me.getRefundsDetail() - ]; - }, - - getRefundsDetail: function () { - var me = this; - - me.detailView = Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.refunds.Detail', { - record: me.record, - refunds: me, - }); - return me.detailView; - } -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds/detail.js b/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds/detail.js deleted file mode 100644 index 508f986d..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/tabs/refunds/detail.js +++ /dev/null @@ -1,96 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.refunds.Detail', { - extend: 'Ext.form.Panel', - - layout: { - type: 'table', - columns: 2, - }, - bodyPadding: 10, - height: '100%', - autoScroll: true, - ui: 'footer', - - initComponent: function () { - var me = this; - me.items = me.createItems(); - me.dockedItems = me.createDock(); - me.callParent(arguments); - - me.loadRecord(me.record); - }, - - createItems: function () { - var me = this, - fields = []; - - fields.push({ - xtype: 'label', - text: 'Order amount', - width: 200 - }); - fields.push({ - xtype: 'displayfield', - name: 'invoiceAmount', - }); - - fields.push({ - xtype: 'label', - text: 'Total refund amount', - }); - fields.push({ - xtype: 'displayfield', - value: me.record.raw.adyenNotification.amountValue, - }); - - fields.push({ - xtype: 'label', - text: 'Currency', - }); - fields.push({ - xtype: 'displayfield', - value: me.record.raw.adyenNotification.amountCurrency, - }); - - return fields; - }, - - createDock: function () { - var me = this, - items = []; - - items.push({ - type: 'button', - text: 'Full refund', - cls: 'primary', - handler: function () { - me.up('window').setLoading(true); - - Ext.Ajax.request({ - url: '{url controller="AdyenPaymentRefund" action="refund"}', - params: { - orderId: me.record.get('id') - }, - success: function (response) { - var json = JSON.parse(response.responseText); - me.up('window').setLoading(false); - Ext.Msg.alert( - 'Adyen Refund', - 'A refund with Reference ID ' - + json.refundReference - + ' has been created. Check again in a few minutes to see if it has succeeded.', - Ext.emptyFn - ); - } - }); - } - }); - - return [{ - xtype: 'toolbar', - dock: 'bottom', - items: items - }]; - }, -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/transaction_details.js b/Resources/views/backend/adyen_payment_order/view/detail/transaction_details.js deleted file mode 100644 index 60e6cb4b..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/transaction_details.js +++ /dev/null @@ -1,119 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.TransactionDetails', { - extend: 'Ext.container.Container', - title: 'Transaction', - record: null, - - initComponent: function () { - var me = this; - - me.items = [ - me.createDetailsContainer() - ]; - - me.store.on('load', function (store, records, options ) { - me.record = store.first(); - me.detailsPanel.loadRecord(me.record); - }); - - me.callParent(arguments); - }, - - /** - * Creates the container for the detail form panel. - * @return Ext.form.Panel - */ - createDetailsContainer: function () { - var me = this; - - me.detailsPanel = Ext.create('Ext.form.Panel', { - title: 'Latest notification', - titleAlign: 'left', - bodyPadding: 10, - layout: 'anchor', - defaults: { - anchor: '100%' - }, - margin: '10 0', - items: [ - me.createInnerDetailContainer() - ] - }); - return me.detailsPanel; - }, - - /** - * Creates the outer container for the detail panel which - * has a column layout to display the detail information in two columns. - * - * @return Ext.container.Container - */ - createInnerDetailContainer: function () { - var me = this; - - return Ext.create('Ext.container.Container', { - layout: 'column', - items: [ - me.createDetailElementContainer(me.createLeftDetailElements()), - me.createDetailElementContainer(me.createRightDetailElements()) - ] - }); - }, - - /** - * Creates the column container for the detail elements which displayed - * in two columns. - * - * @param { Array } items - The container items. - */ - createDetailElementContainer: function (items) { - return Ext.create('Ext.container.Container', { - columnWidth: 0.5, - defaults: { - xtype: 'displayfield', - labelWidth: 155 - }, - items: items - }); - }, - - /** - * Creates the elements for the left column container which displays the - * fields in two columns. - * - * @return array - Contains the form fields - */ - createLeftDetailElements: function () { - var me = this, fields; - fields = [ - { name: 'pspReference', fieldLabel: 'PSP Reference'}, - { name: 'createdAt', fieldLabel: 'Created at'}, - { name: 'updatedAt', fieldLabel: 'Updated at'}, - { name: 'eventCode', fieldLabel: 'Event code'}, - { name: 'merchantAccountCode', fieldLabel: 'Merchant'}, - - ]; - return fields; - }, - - /** - * Creates the elements for the right column container which displays the - * fields in two columns. - * - * @return Array - Contains the form fields - */ - createRightDetailElements: function () { - var me = this; - - return [ - { name: 'paymentMethod', fieldLabel: 'Payment method'}, - { name: 'amountValue', fieldLabel: 'Amount'}, - { name: 'amountCurrency', fieldLabel: 'Currency'}, - { name: 'status', fieldLabel: 'Status'}, - { name: 'success', fieldLabel: 'Success'}, - { name: 'errorDetails', fieldLabel: 'Error Details'}, - ]; - }, - -}); diff --git a/Resources/views/backend/adyen_payment_order/view/detail/transaction_tabs.js b/Resources/views/backend/adyen_payment_order/view/detail/transaction_tabs.js deleted file mode 100644 index e994de6f..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/transaction_tabs.js +++ /dev/null @@ -1,50 +0,0 @@ -// - -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.TransactionTabs', { - extend: 'Ext.tab.Panel', - - border: 0, - bodyBorder: false, - tabBarPosition: 'bottom', - - initComponent: function () { - var me = this; - me.callParent(arguments); - - me.createItems(); - }, - - defaults: { - styleHtmlContent: true - }, - - createItems: function () { - var me = this; - me.add(me.createNotificationsTab()); - me.add(me.createRefundsTab()); - - me.doLayout(); - me.setActiveTab(0); - }, - - createNotificationsTab: function () { - var me = this; - me.tabNotifications = Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.Notifications', { - title: 'Notifications', - record: me.record, - store: me.store, - }); - return me.tabNotifications; - }, - - createRefundsTab: function () { - var me = this; - me.tabRefunds = Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.tabs.Refunds', { - title: 'Refunds', - record: me.record, - store: me.store, - disabled: !me.record.get('adyenRefundable') - }); - return me.tabRefunds; - }, -}); \ No newline at end of file diff --git a/Resources/views/backend/adyen_payment_order/view/detail/window.js b/Resources/views/backend/adyen_payment_order/view/detail/window.js deleted file mode 100644 index 430119f3..00000000 --- a/Resources/views/backend/adyen_payment_order/view/detail/window.js +++ /dev/null @@ -1,77 +0,0 @@ -//{block name="backend/order/view/detail/window"} -// {$smarty.block.parent} -Ext.define('Shopware.apps.AdyenPaymentOrder.view.detail.Window', { - /** - * Override the customer detail window - * @string - */ - override: 'Shopware.apps.Order.view.detail.Window', - - initComponent: function () { - var me = this; - me.callParent(); - }, - - /** - * Overwrite to add adyen transaction tab if necessary - */ - createTabPanel: function () { - var me = this, - result = me.callParent(); - - result.add(me.createAdyenTab(!!me.record.raw.adyenTransaction)); - - return result; - }, - - /** - * Generate Adyen Tab - */ - createAdyenTab: function (enableTab) { - var me = this; - - var transactionStore = Ext.create('Shopware.apps.AdyenPaymentNotificationsListingExtension.store.Notification'); - - let items = []; - if (enableTab) { - items.push( - Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.TransactionDetails', { - store: transactionStore, - layout: { - type: 'vbox', - align: 'stretch' - }, - region: 'north' - }), - Ext.create('Shopware.apps.AdyenPaymentOrder.view.detail.TransactionTabs', { - region: 'center', - store: transactionStore, - record: me.record - }) - ); - } - - me.adyenTransactionTab = Ext.create('Ext.container.Container', { - title: 'Adyen Notifications', - layout: 'border', - items: items, - disabled: !enableTab - }); - - me.adyenTransactionTab.addListener('activate', function () { - transactionStore.load({ - params: { - filter: JSON.stringify([{ - property: "orderId", - value: me.record.get('id'), - operator: null, - expression: '=' - }]) - } - }); - }, me); - - return me.adyenTransactionTab; - } -}); -//{/block} diff --git a/Resources/views/backend/customer/adyen_payment_method/app.js b/Resources/views/backend/customer/adyen_payment_method/app.js deleted file mode 100644 index b27ff47d..00000000 --- a/Resources/views/backend/customer/adyen_payment_method/app.js +++ /dev/null @@ -1,4 +0,0 @@ -//{block name="backend/customer/application"} - //{$smarty.block.parent} - //{include file="backend/customer/adyen_payment_method/view/list.js"} -//{/block} \ No newline at end of file diff --git a/Resources/views/backend/customer/adyen_payment_method/view/list.js b/Resources/views/backend/customer/adyen_payment_method/view/list.js deleted file mode 100644 index 954ad8e6..00000000 --- a/Resources/views/backend/customer/adyen_payment_method/view/list.js +++ /dev/null @@ -1,22 +0,0 @@ -// -// {namespace name=backend/customer/view/order} - -// {block name="backend/customer/view/order/list"} - Ext.define('Shopware.apps.Customer.AdyenPayment.view.List', { - override: 'Shopware.apps.Customer.view.order.List', - - getColumns: function () { - var columns = this.callParent(arguments); - columns.splice(2, 0, { - header: 'Adyen payment', - dataIndex: 'adyen_payment_order_payment', - flex:1, - sortable: false, - renderer: function (value, metaData, record) { - return record.raw.adyen_payment_order_payment; - } - }); - return columns; - }, - }); -//{/block} \ No newline at end of file diff --git a/Resources/views/backend/index/adyen_header.tpl b/Resources/views/backend/index/adyen_header.tpl new file mode 100644 index 00000000..9ea76b2d --- /dev/null +++ b/Resources/views/backend/index/adyen_header.tpl @@ -0,0 +1,9 @@ +{block name="backend/base/header/css" append} + +{/block} diff --git a/Resources/views/backend/order/adyen_payment_method/app.js b/Resources/views/backend/order/adyen_payment_method/app.js deleted file mode 100644 index f85d467d..00000000 --- a/Resources/views/backend/order/adyen_payment_method/app.js +++ /dev/null @@ -1,4 +0,0 @@ -//{block name="backend/order/application"} - //{$smarty.block.parent} - //{include file="backend/order/adyen_payment_method/view/list.js"} -//{/block} \ No newline at end of file diff --git a/Resources/views/backend/order/adyen_payment_method/view/list.js b/Resources/views/backend/order/adyen_payment_method/view/list.js deleted file mode 100644 index b7f00aaf..00000000 --- a/Resources/views/backend/order/adyen_payment_method/view/list.js +++ /dev/null @@ -1,22 +0,0 @@ -// -// {namespace name=backend/order/main} - -// {block name="backend/order/view/list/list"} - Ext.define('Shopware.apps.Order.AdyenPayment.view.List', { - override: 'Shopware.apps.Order.view.list.List', - - getColumns: function () { - var columns = this.callParent(arguments); - columns.splice(2, 0, { - header: 'Adyen payment', - dataIndex: 'adyen_payment_order_payment', - flex:1, - sortable: false, - renderer: function (value, metaData, record) { - return record.raw.adyen_payment_order_payment; - } - }); - return columns; - }, - }); -//{/block} \ No newline at end of file diff --git a/Resources/views/frontend/adyen_payment_process/index.tpl b/Resources/views/frontend/adyen_payment_process/index.tpl new file mode 100644 index 00000000..b5c3f8c4 --- /dev/null +++ b/Resources/views/frontend/adyen_payment_process/index.tpl @@ -0,0 +1,33 @@ +{extends file="frontend/checkout/confirm.tpl"} + +{block name='frontend_index_content_left'} + {if !$theme.checkoutHeader} + {$smarty.block.parent} + {/if} +{/block} + +{block name="frontend_index_after_body"} + {$smarty.block.parent} + + {include file="frontend/checkout/adyen_libaries.tpl"} +{/block} + +{* Main content *} +{block name="frontend_index_content"} +
+ + +
 
+{/block} diff --git a/Resources/views/frontend/checkout/adyen_configuration.tpl b/Resources/views/frontend/checkout/adyen_configuration.tpl deleted file mode 100644 index 6cd0cca3..00000000 --- a/Resources/views/frontend/checkout/adyen_configuration.tpl +++ /dev/null @@ -1,5 +0,0 @@ -
-
diff --git a/Resources/views/frontend/checkout/adyen_libaries.tpl b/Resources/views/frontend/checkout/adyen_libaries.tpl index 9758ed7b..fffb7ba6 100644 --- a/Resources/views/frontend/checkout/adyen_libaries.tpl +++ b/Resources/views/frontend/checkout/adyen_libaries.tpl @@ -1,11 +1,10 @@ {block name='frontend_checkout_payment_content_adyen_libaries'} - {if $sAdyenGoogleConfig} - - {/if} - - + + {/block} diff --git a/Resources/views/frontend/checkout/cart.tpl b/Resources/views/frontend/checkout/cart.tpl new file mode 100755 index 00000000..398ac690 --- /dev/null +++ b/Resources/views/frontend/checkout/cart.tpl @@ -0,0 +1,45 @@ +{extends file='parent:frontend/checkout/cart.tpl'} + +{block name="frontend_index_after_body"} + {$smarty.block.parent} + + {if $adyenShowExpressCheckout } + {include file="frontend/checkout/adyen_libaries.tpl"} + + {/if} + +{/block} + +{* Spike test Express Checkout integration *} +{block name='frontend_checkout_cart_table_actions_bottom'} + {$smarty.block.parent} + + {if $adyenShowExpressCheckout } + {block name='adyen_frontend_detail_express_buy_button'} +
+
+
+ {assign var="adyenExpressCheckoutPaymentTypes" value=['applepay', 'amazonpay', 'paywithgoogle', 'paypal']} + {foreach $adyenExpressCheckoutPaymentTypes as $adyenPaymentMethodType} +
+ + + +
+
+
+ {/foreach} +
+
+
+ {/block} + {/if} +{/block} diff --git a/Resources/views/frontend/checkout/change_payment.tpl b/Resources/views/frontend/checkout/change_payment.tpl index a33ed76c..721d3ab4 100644 --- a/Resources/views/frontend/checkout/change_payment.tpl +++ b/Resources/views/frontend/checkout/change_payment.tpl @@ -1,27 +1,25 @@ {extends file="parent:frontend/checkout/change_payment.tpl"} {block name='frontend_checkout_payment_content'} - {include file="frontend/checkout/adyen_libaries.tpl"} - {* Filter on storedPayments and default payment methods (SW 5 needs internally array for $sPayments) *} {assign var="paymentMethods" value=[]} {assign var="storedPaymentMethods" value=[]} {foreach $sPayments as $paymentMethod} - {if 'isStoredPayment'|array_key_exists:$paymentMethod && true === $paymentMethod.isStoredPayment} - {append var="paymentMethod" value=$paymentMethod.stored_method_umbrella_id index='id'} + {if $paymentMethod.isStoredPaymentMethod} + {append var="paymentMethod" value="{$paymentMethod.id}" index='originalId'} + {append var="paymentMethod" value="{$paymentMethod.id}_{$paymentMethod.storedPaymentMethodId}" index='id'} {$storedPaymentMethods[] = $paymentMethod} {else} + {append var="paymentMethod" value="{$paymentMethod.id}" index='originalId'} {$paymentMethods[] = $paymentMethod} {/if} {/foreach} - {include file="frontend/checkout/adyen_configuration.tpl"} - {block name='frontend_checkout_payment_content_adyen_stored_payment_methods'} {if !empty($storedPaymentMethods)}
{if !empty($paymentMethods)}

- {s namespace='adyen/checkout/payment' name='storedPaymentMethodTitle'}{/s} + {s namespace='frontend/adyen/checkout' name='payment/adyen/stored_payment_methods_title'}Stored payment methods{/s}

{/if} {assign var=sPayments value=$storedPaymentMethods} @@ -34,16 +32,21 @@ {if !empty($paymentMethods)} {if !empty($storedPaymentMethods)}

- {s namespace='adyen/checkout/payment' name='paymentMethodTitle'}{/s} + {s namespace='frontend/adyen/checkout' name='payment/adyen/payment_methods_title'}Payment methods{/s}

{/if} {assign var=sPayments value=$paymentMethods} {$smarty.block.parent} + + {/if} {/block} {/block} {block name='frontend_checkout_payment_fieldset_input_label'} + {if $payment_mean.surchargeAmount} + {append var="payment_mean" value="{$payment_mean.description} (+ {$payment_mean.surchargeAmount|currency})" index='description'} + {/if} {if $payment_mean.image}
{$payment_mean.description} @@ -57,6 +60,22 @@ {/if} {/block} +{block name='frontend_checkout_payment_fieldset_input_radio'} + {if $payment_mean.isAdyenPaymentMethod} +
+ +
+ {else} + {$smarty.block.parent} + {/if} +{/block} + {* Method Description *} {block name='frontend_checkout_payment_fieldset_description'} {if $payment_mean.name|strstr:"SwagPaymentPayPal"} diff --git a/Resources/views/frontend/checkout/confirm.tpl b/Resources/views/frontend/checkout/confirm.tpl index d331d95d..e2451d51 100644 --- a/Resources/views/frontend/checkout/confirm.tpl +++ b/Resources/views/frontend/checkout/confirm.tpl @@ -1,8 +1,9 @@ {extends file="parent:frontend/checkout/confirm.tpl"} -{block name='frontend_checkout_confirm_form'} - {include file="frontend/checkout/adyen_libaries.tpl"} - +{block name='frontend_checkout_confirm_error_messages'} +
+ {if $sErrorMessages}{include file="frontend/register/error_message.tpl" error_messages=$sErrorMessages}{/if} +
{$smarty.block.parent} {/block} @@ -16,42 +17,40 @@ {$smarty.block.parent} {/block} -{block name='frontend_index_body_attributes'} - {if $mAdyenSnippets}data-adyensnippets="{$mAdyenSnippets}"{/if} - {$adyenType=$sUserData.additional.payment['adyenType']|default:''} +{block name='frontend_checkout_confirm_information_wrapper'} {$smarty.block.parent} - data-adyenConfigAjaxUrl="{url module='frontend' controller='adyenconfig' action='index'}" - data-adyenAjaxDoPaymentUrl="{url module='frontend' controller='adyen' action='ajaxDoPayment'}" - data-adyenAjaxPaymentDetails="{url module='frontend' controller='adyen' action='paymentDetails'}" - data-checkoutShippingPaymentUrl="{url controller='checkout' action='shippingPayment' sTarget='checkout'}" - data-adyenAjaxThreeDsUrl="{url module='frontend' controller='adyen' action='ajaxThreeDs'}" - {if $mAdyenSnippets} - data-adyenSnippets="{$mAdyenSnippets}" - {/if} - {if $adyenType}data-adyenType="{$adyenType}"{/if} - {if $sAdyenGoogleConfig} - data-adyenGoogleConfig='{$sAdyenGoogleConfig}' - {/if} - {if $sAdyenApplePayConfig} - data-adyenApplePayConfig='{$sAdyenApplePayConfig}' - {/if} - {if $adyenPaymentState} - data-adyenPaymentState='{$adyenPaymentState}' - {/if} - {if $sUserData.additional.payment.source == $adyenSourceType} - data-adyenIsAdyenPayment='true' + + {if $sPayment.isAdyenPaymentMethod} + {/if} {/block} -{block name='frontend_checkout_confirm_payment_method_panel'} +{block name="frontend_index_after_body"} {$smarty.block.parent} - {include file="frontend/checkout/adyen_configuration.tpl"} -{/block} + {if $sPayment.isAdyenPaymentMethod} + {include file="frontend/checkout/adyen_libaries.tpl"} -{block name='frontend_checkout_confirm_error_messages'} -
- {if $sErrorMessages}{include file="frontend/register/error_message.tpl" error_messages=$sErrorMessages}{/if} -
+
+
+ {/if} + +{/block} + +{block name="frontend_index_after_body"} {$smarty.block.parent} + + {if $sPayment.adyenPaymentType == 'googlepay' || $sPayment.adyenPaymentType == 'paywithgoogle'} + + {/if} + {/block} diff --git a/Resources/views/frontend/checkout/finish.tpl b/Resources/views/frontend/checkout/finish.tpl new file mode 100644 index 00000000..24d2282a --- /dev/null +++ b/Resources/views/frontend/checkout/finish.tpl @@ -0,0 +1,50 @@ +{extends file="parent:frontend/checkout/finish.tpl"} + +{block name="frontend_index_after_body"} + {$smarty.block.parent} + + {include file="frontend/checkout/adyen_libaries.tpl"} +{/block} + +{block name='frontend_checkout_finish_teaser_actions'} +
+ + {if $sErrorMessages} +
+ {include file="frontend/register/error_message.tpl" error_messages=$sErrorMessages} +
+ {/if} + {if $sSuccessMessages} +
+ {include file="frontend/_includes/messages.tpl" type="success" content=$sSuccessMessages} +
+ {/if} + + {$smarty.block.parent} +{/block} + +{block name='frontend_checkout_finish_teaser_actions'} +
+{/block} diff --git a/Resources/views/frontend/checkout/shipping_payment.tpl b/Resources/views/frontend/checkout/shipping_payment.tpl index 078393a7..6cbf7bae 100644 --- a/Resources/views/frontend/checkout/shipping_payment.tpl +++ b/Resources/views/frontend/checkout/shipping_payment.tpl @@ -1,6 +1,20 @@ {extends file="parent:frontend/checkout/shipping_payment.tpl"} +{block name="frontend_index_after_body"} + {$smarty.block.parent} + + {include file="frontend/checkout/adyen_libaries.tpl"} +{/block} + {block name="frontend_index_content"} + {s namespace="frontend/adyen/checkout" name="payment/adyen/update_payment_info_button_text" assign="snippetUpdatePaymentInfoButtonText"}{/s} +
+
+ +
{$smarty.block.parent}
diff --git a/Resources/views/frontend/detail/buy.tpl b/Resources/views/frontend/detail/buy.tpl new file mode 100755 index 00000000..d502f486 --- /dev/null +++ b/Resources/views/frontend/detail/buy.tpl @@ -0,0 +1,31 @@ +{extends file='parent:frontend/detail/buy.tpl'} + +{* Express Checkout buttons *} +{block name='frontend_detail_buy'} + {$smarty.block.parent} + + {if $adyenShowExpressCheckout && (!$sArticle.sConfigurator || ($sArticle.sConfigurator && $activeConfiguratorSelection)) } + {block name='adyen_frontend_detail_express_buy_button'} + {assign var="adyenExpressCheckoutPaymentTypes" value=['applepay', 'amazonpay', 'paywithgoogle', 'paypal']} + {foreach $adyenExpressCheckoutPaymentTypes as $adyenPpaymentMethodType} +
+ + + + +
+
+
+ {/foreach} + {/block} + {/if} +{/block} diff --git a/Resources/views/frontend/detail/index.tpl b/Resources/views/frontend/detail/index.tpl new file mode 100644 index 00000000..782c4291 --- /dev/null +++ b/Resources/views/frontend/detail/index.tpl @@ -0,0 +1,11 @@ +{extends file='parent:frontend/detail/index.tpl'} + +{block name="frontend_index_after_body"} + {$smarty.block.parent} + + {if $adyenShowExpressCheckout } + {include file="frontend/checkout/adyen_libaries.tpl"} + + {/if} + +{/block} diff --git a/Resources/views/frontend/register/payment_fieldset.tpl b/Resources/views/frontend/register/payment_fieldset.tpl index 412bc07a..2012f58b 100644 --- a/Resources/views/frontend/register/payment_fieldset.tpl +++ b/Resources/views/frontend/register/payment_fieldset.tpl @@ -1,9 +1,8 @@ {extends file='parent:frontend/register/payment_fieldset.tpl'} {block name="frontend_register_payment_fieldset_input_radio"} - {assign var='isStoredPayment' value=('isStoredPayment'|array_key_exists:$payment_mean && true === $payment_mean.isStoredPayment)} - {if $isStoredPayment} - {append var="payment_mean" value=($payment_mean.stored_method_umbrella_id) index='id'} + {if $payment_mean.isStoredPaymentMethod} + {append var="payment_mean" value="{$payment_mean.id}_{$payment_mean.storedPaymentMethodId}" index='id'} {/if} {/block} @@ -21,14 +20,14 @@ {$smarty.block.parent} {block name="frontend_register_payment_stored_method_action_disable"} - {if $isStoredPayment } + {if $payment_mean.isStoredPaymentMethod }
{/if} @@ -39,13 +38,13 @@ {$smarty.block.parent}
-

{s name='adyenDisableTokenConfirmationMessage'}Are you sure to remove the stored payment method?{/s}

+

{s name='payment/adyen/disable_confirm_message'}Are you sure to remove the stored payment method?{/s}

diff --git a/Rule/AdyenApi/IsMainShopApiKeyRule.php b/Rule/AdyenApi/IsMainShopApiKeyRule.php deleted file mode 100755 index debc9f95..00000000 --- a/Rule/AdyenApi/IsMainShopApiKeyRule.php +++ /dev/null @@ -1,25 +0,0 @@ -configuration = $configuration; - } - - public function __invoke(Shop $shop, Shop $mainShop): bool - { - return $this->configuration->getApiKey($mainShop) - === $this->configuration->getApiKey($shop); - } -} diff --git a/Rule/AdyenApi/IsMainShopMerchantAccountRule.php b/Rule/AdyenApi/IsMainShopMerchantAccountRule.php deleted file mode 100755 index db213242..00000000 --- a/Rule/AdyenApi/IsMainShopMerchantAccountRule.php +++ /dev/null @@ -1,25 +0,0 @@ -configuration = $configuration; - } - - public function __invoke(Shop $shop, Shop $mainShop): bool - { - return $this->configuration->getMerchantAccount($mainShop) - === $this->configuration->getMerchantAccount($shop); - } -} diff --git a/Rule/AdyenApi/MainShopConfigRule.php b/Rule/AdyenApi/MainShopConfigRule.php deleted file mode 100644 index 43ec4c4c..00000000 --- a/Rule/AdyenApi/MainShopConfigRule.php +++ /dev/null @@ -1,12 +0,0 @@ -mainShopConfigRules = $mainShopConfigRules; - } - - public function __invoke(Shop $shop, Shop $mainShop): bool - { - foreach ($this->mainShopConfigRules as $rule) { - if ($rule($shop, $mainShop)) { - return true; - } - } - - return false; - } -} diff --git a/Rule/AdyenApi/MainShopRule.php b/Rule/AdyenApi/MainShopRule.php deleted file mode 100644 index 7493dda8..00000000 --- a/Rule/AdyenApi/MainShopRule.php +++ /dev/null @@ -1,10 +0,0 @@ -shopRepository = $shopRepository; - $this->mainShopConfigRuleChain = $mainShopConfigRule; - } - - public function __invoke(int $shopId): bool - { - if (1 === $shopId) { - return false; - } - - return ($this->mainShopConfigRuleChain)( - $this->shopRepository->find($shopId), - $this->shopRepository->find(1) - ); - } -} diff --git a/Rule/AdyenApi/UsedFallbackConfigRuleInterface.php b/Rule/AdyenApi/UsedFallbackConfigRuleInterface.php deleted file mode 100644 index d9810441..00000000 --- a/Rule/AdyenApi/UsedFallbackConfigRuleInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -usedFallbackConfigRule = $usedFallbackConfigRule; - } - - public function __invoke(int $shopId): bool - { - if (1 === $shopId) { - return true; - } - - return ($this->usedFallbackConfigRule)($shopId); - } -} diff --git a/Serializer/PaymentMeanCollectionSerializer.php b/Serializer/PaymentMeanCollectionSerializer.php deleted file mode 100644 index 11f971d4..00000000 --- a/Serializer/PaymentMeanCollectionSerializer.php +++ /dev/null @@ -1,15 +0,0 @@ -> - */ - public function __invoke(PaymentMeanCollection $paymentMeans): array; -} diff --git a/Serializer/PaymentMeanSerializer.php b/Serializer/PaymentMeanSerializer.php deleted file mode 100644 index ce28859b..00000000 --- a/Serializer/PaymentMeanSerializer.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - public function __invoke(PaymentMean $paymentMean): array; -} diff --git a/Session/CustomerNumberProvider.php b/Session/CustomerNumberProvider.php deleted file mode 100755 index 08a77639..00000000 --- a/Session/CustomerNumberProvider.php +++ /dev/null @@ -1,35 +0,0 @@ -session = $session; - $this->modelManager = $modelManager; - } - - public function __invoke(): string - { - $userId = $this->session->get('sUserId'); - if (!$userId) { - return ''; - } - $customer = $this->modelManager->getRepository(Customer::class)->find($userId); - - return $customer ? (string) $customer->getNumber() : ''; - } -} diff --git a/Session/CustomerNumberProviderInterface.php b/Session/CustomerNumberProviderInterface.php deleted file mode 100644 index d47396a6..00000000 --- a/Session/CustomerNumberProviderInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -session = $session; - } - - public function hasMessages(): bool - { - return (bool)$this->session->get(self::KEY_ERROR_MESSAGES); - } - - public function add(string ...$messages): void - { - $this->session->offsetSet( - self::KEY_ERROR_MESSAGES, - array_merge( - array_values($this->read()), - array_values($messages) - ) - ); - } - - public function read(): array - { - $messages = (array) ($this->session->offsetGet(self::KEY_ERROR_MESSAGES) ?? []); - $this->session->offsetUnset(self::KEY_ERROR_MESSAGES); - - return $messages; - } -} diff --git a/Setup/MigrateTransactionHistoryTask.php b/Setup/MigrateTransactionHistoryTask.php new file mode 100644 index 00000000..125d1ead --- /dev/null +++ b/Setup/MigrateTransactionHistoryTask.php @@ -0,0 +1,614 @@ +toArray()); + } + + /** + * @inheritDoc + */ + public function unserialize($serialized) + { + $unserialized = Serializer::unserialize($serialized); + + $this->handledOrders = $unserialized['handledOrders']; + $this->textNotificationsOffset = $unserialized['textNotificationsOffset']; + } + + /** + * @inheritDoc + */ + public static function fromArray(array $array) + { + $task = new self(); + $task->handledOrders = $array['handledOrders']; + $task->textNotificationsOffset = $array['textNotificationsOffset']; + + return $task; + } + + /** + * @inheritDoc + */ + public function toArray() + { + return [ + 'handledOrders' => $this->handledOrders, + 'textNotificationsOffset' => $this->textNotificationsOffset + ]; + } + + public function execute(): void + { + $orderIds = $this->getOrderIdsForMigration(); + while (!empty($orderIds)) { + $this->processOrderIdsBatch($orderIds); + + $this->handledOrders += self::BATCH_SIZE; + $orderIds = $this->getOrderIdsForMigration(); + } + + $this->reportProgress(70); + + $textNotifications = $this->getTextNotifications(); + while (!empty($textNotifications)) { + $this->processTextNotificationsBatch($textNotifications); + + $this->textNotificationsOffset += self::BATCH_SIZE; + $textNotifications = $this->getTextNotifications(); + } + + $this->dropLegacyTables(); + $this->reportProgress(100); + } + + private function processOrderIdsBatch(array $orderIds): void + { + foreach ($orderIds as $orderId) { + $handledNotifications = $this->getHandledNotificationsForOrderId($orderId); + if (!empty($handledNotifications)) { + $this->processHandledNotificationsBatch($handledNotifications); + } + + $this->reportAlive(); + + $unhandledNotifications = $this->getUnhandledNotificationsForOrderId($orderId); + if (!empty($unhandledNotifications)) { + $this->processUnhandledNotificationsBatch($unhandledNotifications); + } + } + } + + private function dropLegacyTables(): void + { + $this->getConnection()->executeQuery( + 'DROP TABLE IF EXISTS `s_plugin_adyen_order_notification`; + DROP TABLE IF EXISTS `s_plugin_adyen_text_notification`;' + ); + } + + private function processHandledNotificationsBatch(array $notifications): void + { + $ordersMap = $this->getOrderMapFor($notifications); + /** @var TransactionHistory[] $transactionHistoryMap */ + $transactionHistoryMap = $this->getTransactionHistoryMapFor($notifications, $ordersMap); + + foreach ($notifications as $notification) { + if ( + !array_key_exists($notification['order_id'], $ordersMap) || + !array_key_exists($notification['order_id'], $transactionHistoryMap) + ) { + continue; + } + + $order = $ordersMap[$notification['order_id']]; + $transactionHistory = $transactionHistoryMap[$notification['order_id']]; + + StoreContext::doWithStore( + $order->getShop()->getId(), + function () use ($notification, $order, $transactionHistory) { + $this + ->getTransactionLogRepository() + ->setTransactionLog($this->transformNotificationToLog($notification, $order)); + + $this->updateTransactionHistoryWith($transactionHistory, $notification, $order); + } + ); + } + } + + private function processUnhandledNotificationsBatch(array $notifications): void + { + $ordersMap = $this->getOrderMapFor($notifications); + /** @var TransactionHistory[] $transactionHistoryMap */ + $transactionHistoryMap = $this->getTransactionHistoryMapFor($notifications, $ordersMap); + + foreach ($notifications as $notification) { + if ( + !array_key_exists($notification['order_id'], $ordersMap) || + !array_key_exists($notification['order_id'], $transactionHistoryMap) + ) { + continue; + } + + $order = $ordersMap[$notification['order_id']]; + $transactionHistory = $transactionHistoryMap[$notification['order_id']]; + + StoreContext::doWithStore( + $order->getShop()->getId(), + function () use ($notification, $order, $transactionHistory) { + $this->getQueueService()->enqueue( + 'OrderUpdate', + new OrderUpdateTask( + $this->transformNotificationToWebhook($notification, $order, $transactionHistory) + ) + ); + } + ); + } + } + + private function processTextNotificationsBatch(array $textNotifications): void + { + $webhooks = array_map(function (array $textNotification) { + return $this->transformTextNotificationToWebhook( + (array)json_decode($textNotification['text_notification'], true) + ); + }, $textNotifications); + + + $ordersMap = $this->getOrderMapForWebhooks($webhooks); + foreach ($webhooks as $webhook) { + if (!array_key_exists($webhook->getMerchantReference(), $ordersMap)) { + continue; + } + + $order = $ordersMap[$webhook->getMerchantReference()]; + // Set webhook merchant reference to temporary id for new processing logic to work as expected + $webhookForProcessing = $this->cloneWebhookWithNewMerchantReference($webhook, $order->getTemporaryId()); + + StoreContext::doWithStore( + $order->getShop()->getId(), + function () use ($webhookForProcessing) { + $this->getWebhookHandler()->handle($webhookForProcessing); + } + ); + } + } + + /** + * @return string[] + */ + private function getOrderIdsForMigration(): array + { + $dateLimit = (new DateTime())->sub(new DateInterval('P30D')); + $query = $this->getConnection()->createQueryBuilder() + ->select('DISTINCT order_id as order_id') + ->from('s_plugin_adyen_order_notification', 'notification') + ->where('notification.created_at >= :createdAt') + ->setParameter('createdAt', $dateLimit, 'datetime') + ->setMaxResults(self::BATCH_SIZE) + ->setFirstResult($this->handledOrders); + + return array_map(static function ($notification) { + return (string)$notification['order_id']; + }, $query->execute()->fetchAll(PDO::FETCH_ASSOC)); + } + + /** + * @param string $orderId + * @return array + */ + private function getHandledNotificationsForOrderId(string $orderId): array + { + $query = $this->getConnection()->createQueryBuilder() + ->select('*') + ->from('s_plugin_adyen_order_notification', 'notification') + ->where('notification.order_id = :orderId') + ->andWhere('notification.status IN(:status)') + ->setParameter('orderId', $orderId) + ->setParameter('status', ['handled', 'error', 'fatal'], Connection::PARAM_STR_ARRAY) + ->orderBy('id'); + + return $query->execute()->fetchAll(PDO::FETCH_ASSOC); + } + + /** + * @param string $orderId + * @return array + */ + private function getUnhandledNotificationsForOrderId(string $orderId): array + { + $query = $this->getConnection()->createQueryBuilder() + ->select('*') + ->from('s_plugin_adyen_order_notification', 'notification') + ->where('notification.order_id = :orderId') + ->andWhere('notification.status NOT IN(:status)') + ->setParameter('orderId', $orderId) + ->setParameter('status', ['handled', 'error', 'fatal'], Connection::PARAM_STR_ARRAY) + ->orderBy('id'); + + return $query->execute()->fetchAll(PDO::FETCH_ASSOC); + } + + private function getTextNotifications(): array + { + $query = $this->getConnection()->createQueryBuilder() + ->select('*') + ->from('s_plugin_adyen_text_notification', 'notification') + ->orderBy('id') + ->setMaxResults(self::BATCH_SIZE) + ->setFirstResult($this->textNotificationsOffset); + + return $query->execute()->fetchAll(PDO::FETCH_ASSOC); + } + + /** + * Transforms notification in the context of the provided Shopware shop + * + * @param array $notification + * @param Order $order + * @return TransactionLog + */ + private function transformNotificationToLog(array $notification, Order $order): TransactionLog + { + $transactionLog = new TransactionLog(); + $transactionLog->setStoreId((string)$order->getShop()->getId()); + $transactionLog->setMerchantReference((string)$order->getTemporaryId()); + $transactionLog->setExecutionId(0); + $transactionLog->setEventCode((string)$notification['event_code']); + $transactionLog->setReason((string)$notification['error_details']); + $transactionLog->setIsSuccessful((bool)$notification['success']); + $transactionLog->setTimestamp( + DateTime::createFromFormat('Y-m-d H:i:s', $notification['created_at'])->getTimestamp() + ); + $transactionLog->setPaymentMethod((string)$notification['paymentMethod']); + $transactionLog->setAdyenLink($this->getAdyenLink($notification['psp_reference'], $order->getShop())); + $transactionLog->setShopLink( + $this->getOrderService()->getOrderUrlForId((int)$notification['order_id']) + ); + $transactionLog->setQueueStatus( + $notification['status'] === 'handled' ? QueueItem::COMPLETED : QueueItem::FAILED + ); + $transactionLog->setPspReference($notification['psp_reference']); + + return $transactionLog; + } + + /** + * @throws InvalidMerchantReferenceException + */ + private function updateTransactionHistoryWith( + TransactionHistory $transactionHistory, + array $notification, + Order $order + ): void { + $webhook = $this->transformNotificationToWebhook($notification, $order, $transactionHistory); + + $transactionHistory->add( + new HistoryItem( + $webhook->getPspReference(), + $webhook->getMerchantReference(), + $webhook->getEventCode(), + $this->getOrderStatusProvider()->getNewPaymentState($webhook, $transactionHistory), + $webhook->getEventDate(), + $webhook->isSuccess(), + $webhook->getAmount(), + $webhook->getPaymentMethod(), + $webhook->getRiskScore(), + $webhook->isLive() + ) + ); + + $this->getTransactionHistoryService()->setTransactionHistory($transactionHistory); + } + + private function transformNotificationToWebhook( + array $notification, + Order $order, + TransactionHistory $transactionHistory + ): Webhook { + $config = $this->getCachedConfigReader()->getByPluginName(AdyenPayment::NAME, $order->getShop()); + return new Webhook( + Amount::fromInt( + (int)$notification['amount_value'], + !empty($notification['amount_currency']) ? Currency::fromIsoCode( + $notification['amount_currency'] + ) : Currency::getDefault() + ), + (string)$notification['event_code'], + DateTime::createFromFormat('Y-m-d H:i:s', $notification['created_at'])->format(DateTimeInterface::ATOM), + '', + '', + (string)$order->getTemporaryId(), + (string)$notification['psp_reference'], + (string)$notification['paymentMethod'], + (string)$notification['error_details'], + (bool)$notification['success'], + $transactionHistory->getOriginalPspReference(), + 0, + !empty($config['environment']) && 'LIVE' === mb_strtoupper($config['environment']) + ); + } + + private function transformTextNotificationToWebhook(array $textNotification): Webhook + { + return new Webhook( + Amount::fromInt( + $textNotification['amount']['value'] ?? 0, + $textNotification['amount']['currency'] ? Currency::fromIsoCode( + $textNotification['amount']['currency'] + ) : Currency::getDefault() + ), + $textNotification['eventCode'] ?? '', + $textNotification['eventDate'] ?? '', + $textNotification['additionalData']['hmacSignature'] ?? '', + $textNotification['merchantAccountCode'] ?? '', + $textNotification['merchantReference'] ?? '', + $textNotification['pspReference'] ?? '', + $textNotification['paymentMethod'] ?? '', + $textNotification['reason'] ?? '', + $textNotification['success'] === 'true', + $textNotification['originalReference'] ?? '', + $textNotification['additionalData']['totalFraudScore'] ?? 0, + $textNotification['live'] === 'true' + ); + } + + /** + * Gets the same webhook instance as provided one but with changed merchant reference from parameter + * + * @param Webhook $webhook + * @param string $merchantReference + * @return Webhook + */ + private function cloneWebhookWithNewMerchantReference(Webhook $webhook, string $merchantReference): Webhook + { + return new Webhook( + $webhook->getAmount(), + $webhook->getEventCode(), + $webhook->getEventDate(), + $webhook->getHmacSignature(), + $webhook->getMerchantAccountCode(), + $merchantReference, + $webhook->getPspReference(), + $webhook->getPaymentMethod(), + $webhook->getReason(), + $webhook->isSuccess(), + $webhook->getOriginalReference(), + $webhook->getRiskScore(), + $webhook->isLive() + ); + } + + private function getAdyenLink(string $pspReference, Shop $shop): string + { + $domain = 'ca-test.adyen.com'; + + $config = $this->getCachedConfigReader()->getByPluginName(AdyenPayment::NAME, $shop); + if (!empty($config['environment']) && 'LIVE' === mb_strtoupper($config['environment'])) { + $domain = 'ca-live.adyen.com'; + } + + return "https://$domain/ca/ca/config/event-logs.shtml?query=$pspReference"; + } + + /** + * @param array $notifications + * @return Order[] + */ + private function getOrderMapFor(array $notifications): array + { + return $this->getOrderRepository()->getOrdersByIds( + array_map(static function (array $notification) { + return $notification['order_id']; + }, $notifications) + ); + } + + /** + * @param Webhook[] $webhooks + * @return Order[] + */ + private function getOrderMapForWebhooks(array $webhooks): array + { + return $this->getOrderRepository()->getOrdersByNumbers( + array_map(static function (Webhook $webhook) { + return $webhook->getMerchantReference(); + }, $webhooks) + ); + } + + /** + * @param array $notifications + * @param Order[] $ordersMap + * + * @return array + * + * @throws InvalidMerchantReferenceException + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + * @throws InvalidCurrencyCode + */ + private function getTransactionHistoryMapFor(array $notifications, array $ordersMap): array + { + $ordersByTempIdMap = []; + foreach ($ordersMap as $order) { + $ordersByTempIdMap[$order->getTemporaryId()] = $order; + } + + $queryFilter = new QueryFilter(); + $queryFilter + ->where( + 'merchantReference', + Operators::IN, + array_map( + static function (array $notification) use ($ordersMap) { + $merchantReference = ''; + if (array_key_exists($notification['order_id'], $ordersMap)) { + $merchantReference = $ordersMap[$notification['order_id']]->getTemporaryId(); + } + + return $merchantReference; + }, + $notifications + ) + ); + + /** @var TransactionEntity[] $entities */ + $entities = RepositoryRegistry::getRepository(TransactionEntity::class)->select($queryFilter); + $transactionHistoryMap = []; + foreach ($entities as $transactionHistoryEntity) { + $transactionHistory = $transactionHistoryEntity->getTransactionHistory(); + $order = $ordersByTempIdMap[$transactionHistory->getMerchantReference()]; + $transactionHistoryMap[$order->getId()] = $transactionHistory; + } + + // Ensure that each notification has its transaction history initialized if DB does not have it until now + foreach ($notifications as $notification) { + if (!array_key_exists($notification['order_id'], $ordersMap)) { + continue; + } + + $merchantReference = $ordersMap[$notification['order_id']]->getTemporaryId(); + if (!array_key_exists($notification['order_id'], $transactionHistoryMap)) { + $transactionHistoryMap[$notification['order_id']] = new TransactionHistory( + $merchantReference, + CaptureType::unknown(), + 0, + Currency::fromIsoCode($ordersMap[$notification['order_id']]->getCurrency()) + ); + } + } + + return $transactionHistoryMap; + } + + /** + * @return Connection + */ + private function getConnection(): Connection + { + return Shopware()->Container()->get('dbal_connection'); + } + + /** + * @return CachedConfigReader + */ + private function getCachedConfigReader(): CachedConfigReader + { + return Shopware()->Container()->get('shopware.plugin.cached_config_reader'); + } + + /** + * @return OrderRepository + */ + private function getOrderRepository(): OrderRepository + { + return Shopware()->Container()->get(OrderRepository::class); + } + + /** + * @return OrderService + */ + private function getOrderService(): OrderService + { + return Shopware()->Container()->get(OrderService::class); + } + + /** + * @return TransactionLogRepository + */ + private function getTransactionLogRepository(): TransactionLogRepository + { + return ServiceRegister::getService(TransactionLogRepository::class); + } + + /** + * @return TransactionHistoryService + */ + private function getTransactionHistoryService(): TransactionHistoryService + { + return ServiceRegister::getService(TransactionHistoryService::class); + } + + /** + * @return OrderStatusProvider + */ + private function getOrderStatusProvider(): OrderStatusProvider + { + return ServiceRegister::getService(OrderStatusProvider::class); + } + + /** + * @return QueueService + */ + private function getQueueService(): QueueService + { + return ServiceRegister::getService(QueueService::class); + } + + /** + * @return WebhookHandler + */ + private function getWebhookHandler(): WebhookHandler + { + return ServiceRegister::getService(WebhookHandler::class); + } +} diff --git a/Setup/Updater.php b/Setup/Updater.php new file mode 100644 index 00000000..ec08a174 --- /dev/null +++ b/Setup/Updater.php @@ -0,0 +1,635 @@ +context = $context; + $this->configReader = $configReader; + $this->connectionService = $connectionService; + $this->storeRepository = $storeRepository; + $this->paymentMethodConfigRepository = $paymentMethodConfigRepository; + $this->snippets = $snippets; + $this->cronManager = $cronManager; + $this->queueService = $queueService; + $this->connectionSettingsRepository = $connectionSettingsRepository; + } + + public function update(): void + { + $oldVersion = $this->context->getCurrentVersion(); + if (version_compare($oldVersion, '4.0.0', '<')) { + $this->updateTo400(); + } + } + + private function updateTo400(): void + { + $shops = $this->storeRepository->getShopwareSubShops(); + $shopsWithValidConnection = $this->migrateConnectionSettingsTo400($shops); + $this->migratePaymentMeansTo400($shopsWithValidConnection); + $this->migratePaymentMethodConfigsTo400($shopsWithValidConnection); + $this->migrateCronsTo400(); + $this->initializeTransactionDetailsMigrationTo400(); + $this->deleteObsoleteConfiguration(); + } + + /** + * Migrates connection configuration for list of shops provided. + * + * @param Shop[] $shops + * @return Shop[] Shops where connection settings are migrated + * @throws Exception + */ + private function migrateConnectionSettingsTo400(array $shops): array + { + $migratedShops = []; + foreach ($shops as $shop) { + $config = $this->configReader->getByPluginName(AdyenPayment::NAME, $shop); + if (empty($config)) { + continue; + } + + StoreContext::doWithStore( + $shop->getId(), + function () use ($shop, $config, &$migratedShops) { + try { + if ($this->migrateConnectionSettingsForShopTo400($shop, $config)) { + $migratedShops[] = $shop; + } + } catch (Exception $e) { + Logger::logWarning('Failed to migrate connection for ' . $shop->getName()); + } + } + ); + } + + return $migratedShops; + } + + /** + * @param Shop[] $shopsWithValidConnection + * @return void + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + private function migratePaymentMeansTo400(array $shopsWithValidConnection): void + { + $paymentMeans = $this->getAllAdyenPaymentMeans(); + + if (empty($shopsWithValidConnection)) { + foreach ($paymentMeans as $paymentMean) { + // Skip already imported payments + if (Plugin::isAdyenPaymentMean($paymentMean->getName())) { + continue; + } + $paymentMean->setActive(false); + Shopware()->Models()->persist($paymentMean); + } + + Shopware()->Models()->flush(); + + return; + } + + $languageStores = $this->storeRepository->getShopwareLanguageShops(array_map(static function (Shop $shop) { + return $shop->getId(); + }, $shopsWithValidConnection)); + $paymentMeanShops = new ArrayCollection(array_merge($shopsWithValidConnection, $languageStores)); + + foreach ($paymentMeans as $paymentMean) { + // Skip already imported payments + if (Plugin::isAdyenPaymentMean($paymentMean->getName())) { + continue; + } + + $enabledShops = []; + $shops = $paymentMean->getShops(); + + foreach ($shops->toArray() as $shop) { + foreach ($paymentMeanShops->toArray() as $paymentMeanShop) { + if ($shop->getId() === $paymentMeanShop->getId()) { + $enabledShops[] = $shop; + continue 2; + } + } + } + + $code = $this->getAdyenPaymentMethodCode($paymentMean); + if (!empty($code)) { + $paymentMean + ->setName(Plugin::getPaymentMeanName($code)) + ->setAction('AdyenPaymentProcess') + ->setShops(new ArrayCollection($enabledShops)); + } else { + $paymentMean->setActive(false); + } + + Shopware()->Models()->persist($paymentMean); + } + + Shopware()->Models()->flush(); + } + + /** + * @param Shop[] $shopsWithValidConnection + * @return void + * @throws Exception + */ + private function migratePaymentMethodConfigsTo400(array $shopsWithValidConnection): void + { + $paymentMeans = $this->getAllAdyenPaymentMeans(true); + if (empty($paymentMeans)) { + return; + } + + $oneyInstallmentsMap = [ + (string)PaymentMethodCode::facilyPay3x() => '3', + (string)PaymentMethodCode::facilyPay4x() => '4', + (string)PaymentMethodCode::facilyPay6x() => '6', + (string)PaymentMethodCode::facilyPay10x() => '10', + (string)PaymentMethodCode::facilyPay12x() => '12', + ]; + $oneyActiveInstallments = []; + $paymentMeansMap = []; + foreach ($paymentMeans as $paymentMean) { + $adyenPaymentCode = Plugin::getAdyenPaymentType($paymentMean->getName()); + $paymentMeansMap[$adyenPaymentCode] = $paymentMean; + if (PaymentMethodCode::isOneyMethod($adyenPaymentCode)) { + $paymentMeansMap[(string)PaymentMethodCode::oney()] = $paymentMean; + $oneyActiveInstallments[] = $oneyInstallmentsMap[$adyenPaymentCode]; + } + } + + foreach ($shopsWithValidConnection as $shop) { + $adyenPaymentMethods = AdminAPI::get()->payment($shop->getId())->getAvailablePaymentMethods(); + $config = $this->configReader->getByPluginName(AdyenPayment::NAME, $shop); + + $configMerchantId = array_key_exists('merchant_account', $config) ? (string)$config['merchant_account'] : ''; + $googleMerchantId = array_key_exists('google_merchant_id', $config) ? (string)$config['google_merchant_id'] : ''; + $oneyIsConfigured = false; + + foreach ($adyenPaymentMethods->toArray() as $availablePaymentMethod) { + if (!array_key_exists($availablePaymentMethod['code'], $paymentMeansMap)) { + continue; + } + + if ($oneyIsConfigured && PaymentMethodCode::isOneyMethod($availablePaymentMethod['code'])) { + continue; + } + + $shouldMigrate = false; + foreach ($paymentMeansMap[$availablePaymentMethod['code']]->getShops() as $paymentMeanShop) { + if ($paymentMeanShop->getId() === $shop->getId()) { + $shouldMigrate = true; + break; + } + } + + if (!$shouldMigrate) { + continue; + } + + $paymentMethod = new PaymentMethod( + $availablePaymentMethod['methodId'], + $availablePaymentMethod['code'], + $availablePaymentMethod['name'], + $availablePaymentMethod['logo'], + $availablePaymentMethod['status'], + $availablePaymentMethod['currencies'], + $availablePaymentMethod['countries'], + $availablePaymentMethod['paymentType'], + 'Adyen ' . $availablePaymentMethod['name'], + 'none' + ); + + if (PaymentMethodCode::isOneyMethod($availablePaymentMethod['code'])) { + $oneyIsConfigured = true; + $paymentMethod->setAdditionalData(new Oney($oneyActiveInstallments)); + } + + if ( + PaymentMethodCode::googlePay()->equals($availablePaymentMethod['code']) || + PaymentMethodCode::payWithGoogle()->equals($availablePaymentMethod['code']) + ) { + $paymentMethod->setAdditionalData(new GooglePay($configMerchantId, $googleMerchantId)); + } + + StoreContext::doWithStore( + $shop->getId(), + function () use ($paymentMethod) { + $this->paymentMethodConfigRepository->saveMethodConfiguration($paymentMethod); + } + ); + } + } + } + + private function migrateCronsTo400(): void + { + $obsoleteCrons = [ + 'Shopware_CronJob_AdyenPaymentProcessNotifications', + 'AdyenPayment_CronJob_ImportPaymentMethods' + ]; + + foreach ($obsoleteCrons as $obsoleteCron) { + $cronJob = $this->cronManager->getJobByAction($obsoleteCron); + if ($cronJob) { + $this->cronManager->deleteJob($cronJob); + } + } + } + + private function initializeTransactionDetailsMigrationTo400() + { + $this->queueService->enqueue('general_migration', new MigrateTransactionHistoryTask()); + + // Shopware can show only one message as a result of the update, If message is already set, do not override it. + $scheduled = $this->context->getScheduled(); + if (!empty($scheduled['message'])) { + return; + } + + /** @noinspection PhpParamsInspection */ + $this->context->scheduleMessage([ + 'title' => $this->snippets + ->getNamespace('backend/adyen/configuration') + ->get('payment/adyen/update/transaction_history_info_title', 'Migration started', true), + 'text' => $this->snippets + ->getNamespace('backend/adyen/configuration') + ->get( + 'payment/adyen/update/transaction_history_info_description', + 'The migration of existing Adyen transactions has started in the background', + true + ), + ]); + } + + /** + * @return void + * + * @throws \Doctrine\DBAL\Exception + */ + private function deleteObsoleteConfiguration() + { + $pluginId = $this->context->getPlugin()->getId(); + /** @var Connection $connection */ + $connection = Shopware()->Container()->get('dbal_connection'); + + /** @noinspection SqlDialectInspection */ + $sql = <<executeUpdate($sql, [':pluginId' => $pluginId]); + } + + private function migrateConnectionSettingsForShopTo400(Shop $shop, $config): bool + { + $configMode = array_key_exists('environment', $config) ? $config['environment'] : ''; + $configMerchantId = array_key_exists('merchant_account', $config) ? (string)$config['merchant_account'] : ''; + $configTestApiKey = array_key_exists('api_key_test', $config) ? (string)$config['api_key_test'] : ''; + $configLiveApiKey = array_key_exists('api_key_live', $config) ? (string)$config['api_key_live'] : ''; + $configApiUrlPrefix = array_key_exists('api_url_prefix', $config) ? (string)$config['api_url_prefix'] : ''; + + if (empty($configMode) || empty($configMerchantId)) { + return false; + } + + if (empty($configTestApiKey) && empty($configLiveApiKey)) { + return false; + } + + $liveConnectionData = $this->getLiveConnectionData( + $shop, $configMerchantId, $configLiveApiKey, $configApiUrlPrefix + ); + $testConnectionData = $this->getTestConnectionData($shop, $configMerchantId, $configTestApiKey); + + if (!$liveConnectionData && !$testConnectionData) { + return false; + } + + $connectionSettings = new ConnectionSettings( + $shop->getId(), + 'LIVE' === mb_strtoupper($configMode) ? Mode::MODE_LIVE : Mode::MODE_TEST, + $testConnectionData, + $liveConnectionData + ); + + return $this->initializeConnection($shop, $connectionSettings); + } + + private function getLiveConnectionData( + Shop $shop, + string $configMerchantId, + ?string $configLiveApiKey = '', + ?string $configApiUrlPrefix = '' + ): ?ConnectionData + { + if (empty($configLiveApiKey) || empty($configApiUrlPrefix)) { + return null; + } + + $liveApiCredentials = $this->getApiCredentialsFor(new ConnectionSettings( + $shop->getId(), + Mode::MODE_LIVE, + null, + new ConnectionData($configLiveApiKey, $configMerchantId, $configApiUrlPrefix) + )); + + if (!$liveApiCredentials) { + return null; + } + + return new ConnectionData( + $configLiveApiKey, + $configMerchantId, + $configApiUrlPrefix, + '', + $liveApiCredentials + ); + } + + private function getTestConnectionData( + Shop $shop, + string $configMerchantId, + ?string $configTestApiKey = '' + ): ?ConnectionData + { + if (empty($configTestApiKey)) { + return null; + } + + $testApiCredentials = $this->getApiCredentialsFor(new ConnectionSettings( + $shop->getId(), + Mode::MODE_TEST, + new ConnectionData($configTestApiKey, $configMerchantId), + null + )); + + if (!$testApiCredentials) { + return null; + } + + return new ConnectionData( + $configTestApiKey, + $configMerchantId, + '', + '', + $testApiCredentials + ); + } + + private function getApiCredentialsFor(ConnectionSettings $connectionSettings): ?ApiCredentials + { + $apiCredentials = $this->getProxy($connectionSettings)->getApiCredentialDetails(); + + if (!$apiCredentials || !$apiCredentials->isActive()) { + return null; + } + + return $apiCredentials; + } + + private function initializeConnection(Shop $shop, ConnectionSettings $connectionSettings): bool + { + try { + $this->connectionSettingsRepository->setConnectionSettings($connectionSettings); + $this->connectionService->saveConnectionData($connectionSettings); + } catch (Exception $e) { + Logger::logWarning('Migration of connection settings failed for store ' . $shop->getId() + . ' because ' . $e->getMessage()); + + + if ($connectionSettings->getMode() === Mode::MODE_LIVE) { + $settings = new ConnectionSettings( + $connectionSettings->getStoreId(), + $connectionSettings->getMode(), + null, + new ConnectionData( + $connectionSettings->getLiveData()->getApiKey(), + '', + $connectionSettings->getLiveData()->getClientPrefix() + ) + ); + } else { + $settings = new ConnectionSettings( + $connectionSettings->getStoreId(), + $connectionSettings->getMode(), + new ConnectionData($connectionSettings->getTestData()->getApiKey(), ''), + null + ); + } + + $this->connectionSettingsRepository->setConnectionSettings($settings); + $this->showInvalidSettingsWarning($shop); + + return false; + } + + return true; + } + + /** + * @return Payment[] + */ + private function getAllAdyenPaymentMeans($onlyActive = false): array + { + $query = Shopware()->Models()->getRepository(Payment::class) + ->createQueryBuilder('paymentmeans') + ->where('paymentmeans.source = :source') + ->setParameter('source', AdyenPayment::PAYMENT_METHOD_SOURCE); + + if ($onlyActive) { + $query->andWhere('paymentmeans.active = 1'); + } + + return $query->getQuery()->getResult(); + } + + /** + * Gets Adyen payment method code based on previous payment mean generated in shop + * + * @param Payment $paymentMean + * @return string + */ + private function getAdyenPaymentMethodCode(Payment $paymentMean): string + { + $paymentMeanName = $paymentMean->getName(); + + // Adjustment for gift card brands + if (0 === stripos($paymentMeanName, 'giftcard_')) { + $paymentMeanName = str_replace(['giftcard_', '_'], '', $paymentMeanName); + } + + if ('eagleeyevoucher' === $paymentMeanName) { + $paymentMeanName = 'eagleeye_voucher'; + } + + // Sort methods so that longer codes are before shorter ones (handle cases like klarna and klarna_paynow) + $supportedPaymentMethods = PaymentMethodCode::SUPPORTED_PAYMENT_METHODS; + rsort($supportedPaymentMethods, SORT_STRING); + + foreach ($supportedPaymentMethods as $code) { + // Gift cards are matched by brand, skip umbrella payment method code + if (PaymentMethodCode::giftCard()->equals($code)) { + continue; + } + + // Old payment mean name is concatenation of adyen payment method code and underscored name + // (e.g. klarna_paynow_pay_now_with_klarna or scheme_credit_card) + if (0 === stripos($paymentMeanName, $code)) { + return $code; + } + } + + return ''; + } + + private function showInvalidSettingsWarning(Shop $shop): void + { + $moduleLink = sprintf( + 'javascript:sessionStorage.setItem("adl-active-store-id", "%s"); + Shopware.ModuleManager.createSimplifiedModule("AdyenPaymentMain#connection", { + title: "Adyen", + maximized: true + });', + $shop->getId() + ); + + /** @noinspection PhpParamsInspection */ + $this->context->scheduleMessage([ + 'title' => sprintf( + $this->snippets + ->getNamespace('backend/adyen/configuration') + ->get('payment/adyen/update/api_key_warning_title', 'Insufficient scope detected (%s)', true), + $shop->getName() + ), + 'text' => $this->snippets + ->getNamespace('backend/adyen/configuration') + ->get( + 'payment/adyen/update/api_key_warning_description', + 'Please reauthenticate with a new API key in order to continue using the Adyen plugin seamlessly', + true + ), + 'btnDetail' => [ + 'text' => $this->snippets + ->getNamespace('backend/adyen/configuration') + ->get( + 'payment/adyen/update/api_key_warning_open_button_text', + 'Open Adyen', + true + ), + 'link' => $moduleLink, + 'target' => '_self' + ] + ]); + } + + private function getProxy(ConnectionSettings $connectionSettings): ConnectionProxy + { + return ProxyFactory::makeProxy(ConnectionProxy::class, $connectionSettings); + } +} diff --git a/Shopware/Crud/AttributeWriter.php b/Shopware/Crud/AttributeWriter.php deleted file mode 100755 index de9da58c..00000000 --- a/Shopware/Crud/AttributeWriter.php +++ /dev/null @@ -1,51 +0,0 @@ -crudService = $crudService; - $this->entityManager = $entityManager; - } - - public function writeReadOnlyAttributes(string $attributeTable, array $columns, callable $writer): void - { - $this->updateReadonlyOnAttributes($attributeTable, $columns, false); - $writer(); - $this->updateReadonlyOnAttributes($attributeTable, $columns, true); - } - - private function updateReadonlyOnAttributes(string $attributeTable, array $columns, bool $readOnly): void - { - foreach ($columns as $column => $columnType) { - $this->crudService->update($attributeTable, $column, $columnType, ['readonly' => $readOnly]); - } - $this->rebuildAttributeModel($attributeTable); - } - - private function rebuildAttributeModel(string $attributeTable): void - { - $metaDataCache = $this->entityManager->getConfiguration()->getMetadataCacheImpl(); - if ($metaDataCache) { - $metaDataCache->deleteAll(); - } - - $this->entityManager->generateAttributeModels([$attributeTable]); - } -} diff --git a/Shopware/Crud/AttributeWriterInterface.php b/Shopware/Crud/AttributeWriterInterface.php deleted file mode 100644 index 0bea71e6..00000000 --- a/Shopware/Crud/AttributeWriterInterface.php +++ /dev/null @@ -1,13 +0,0 @@ - $columns - */ - public function writeReadOnlyAttributes(string $attributeTable, array $columns, callable $writer): void; -} diff --git a/Shopware/Plugin/TraceablePluginIdProvider.php b/Shopware/Plugin/TraceablePluginIdProvider.php deleted file mode 100755 index 7f13ef0b..00000000 --- a/Shopware/Plugin/TraceablePluginIdProvider.php +++ /dev/null @@ -1,41 +0,0 @@ -pluginManager = $pluginManager; - $this->logger = $logger; - } - - /** - * @throws \Exception - */ - public function provideId(): int - { - try { - return $this->pluginManager->getPluginByName(AdyenPayment::NAME)->getId(); - } catch (\Exception $exception) { - $this->logger->critical( - 'Could not provide the "id" of plugin "'.AdyenPayment::NAME.'"', - ['exception' => $exception] - ); - - throw $exception; - } - } -} diff --git a/Shopware/Provider/CheckoutBasketProvider.php b/Shopware/Provider/CheckoutBasketProvider.php deleted file mode 100644 index 17618309..00000000 --- a/Shopware/Provider/CheckoutBasketProvider.php +++ /dev/null @@ -1,29 +0,0 @@ -container = $container; - $this->view = new \Enlight_View_Default($engine); - $this->init(); - - parent::__construct(); - } - - public function __invoke($mergeProportional = true): array - { - // Initialize front controller to mitigate getBasket expectations - $this->Front(); - - return $this->getBasket($mergeProportional); - } -} diff --git a/Shopware/Provider/CheckoutBasketProviderInterface.php b/Shopware/Provider/CheckoutBasketProviderInterface.php deleted file mode 100644 index 3014f088..00000000 --- a/Shopware/Provider/CheckoutBasketProviderInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -Modules()->Admin()->sGetPaymentMeans(); - } -} diff --git a/Shopware/Provider/PaymentMeansProviderInterface.php b/Shopware/Provider/PaymentMeansProviderInterface.php deleted file mode 100644 index 67848b21..00000000 --- a/Shopware/Provider/PaymentMeansProviderInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -modelManager = $modelManager; - } - - public function existsByName(string $name): bool - { - return null !== $this->paymentRepository()->findOneBy(['name' => $name]); - } - - public function existsDuplicate(Payment $newPayment): bool - { - $payments = $this->paymentRepository()->findBy(['name' => $newPayment->getName()]) ?? []; - if (!count($payments)) { - return false; - } - - /** @psalm-var list $payments */ - foreach ($payments as $payment) { - if ($payment->getId() !== $newPayment->getId()) { - return true; - } - } - - return false; - } - - public function findByCode(string $code): ?Payment - { - $query = $this->paymentRepository() - ->createQueryBuilder('payment') - ->innerJoin('payment.attribute', 'attribute') - ->where('attribute.adyenType = :adyenCode') - ->setMaxResults(1) - ->setParameter(':adyenCode', $code); - - return $query->getQuery()->execute()[0] ?? null; - } - - private function paymentRepository(): ModelRepository - { - return $this->modelManager->getRepository(Payment::class); - } -} diff --git a/Shopware/Repository/PaymentRepositoryInterface.php b/Shopware/Repository/PaymentRepositoryInterface.php deleted file mode 100644 index 5c911dc1..00000000 --- a/Shopware/Repository/PaymentRepositoryInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -paymentMeanSerializer = $paymentMeanSerializer; - } - - public function __invoke(PaymentMeanCollection $paymentMeans): array - { - return array_reduce( - iterator_to_array($paymentMeans->getIterator()), - function(array $carry, PaymentMean $paymentMean) { - return array_merge( - array_values($carry), - array_values(($this->paymentMeanSerializer)($paymentMean)) - ); - }, - [] - ); - } -} diff --git a/Shopware/Serializer/SwPaymentMeanSerializer.php b/Shopware/Serializer/SwPaymentMeanSerializer.php deleted file mode 100644 index 0f00a3c6..00000000 --- a/Shopware/Serializer/SwPaymentMeanSerializer.php +++ /dev/null @@ -1,22 +0,0 @@ -getId() => array_replace($paymentMean->getRaw(), [ - 'name' => $paymentMean->getValue('name'), - 'description' => $paymentMean->getValue('description'), - 'additionaldescription' => $paymentMean->getValue('additionaldescription'), - ]), - ]; - } -} diff --git a/Subscriber/Account/SaveStoredMethodPreferenceSubscriber.php b/Subscriber/Account/SaveStoredMethodPreference.php similarity index 62% rename from Subscriber/Account/SaveStoredMethodPreferenceSubscriber.php rename to Subscriber/Account/SaveStoredMethodPreference.php index 30d469b2..20317e9b 100755 --- a/Subscriber/Account/SaveStoredMethodPreferenceSubscriber.php +++ b/Subscriber/Account/SaveStoredMethodPreference.php @@ -4,37 +4,31 @@ namespace AdyenPayment\Subscriber\Account; -use AdyenPayment\Components\Adyen\PaymentMethod\StoredPaymentMeanProviderInterface; -use AdyenPayment\Components\Manager\UserPreferenceManagerInterface; use AdyenPayment\Models\UserPreference; +use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityRepository; use Enlight\Event\SubscriberInterface; use Enlight_Components_Session_Namespace; -final class SaveStoredMethodPreferenceSubscriber implements SubscriberInterface +final class SaveStoredMethodPreference implements SubscriberInterface { /** @var Enlight_Components_Session_Namespace */ private $session; - - /** @var UserPreferenceManagerInterface */ - private $userPreferenceManager; - /** @var EntityRepository */ private $userPreferenceRepository; - - /** @var StoredPaymentMeanProviderInterface */ - private $storedPaymentMeanProvider; + /** + * @var EntityManager + */ + private $modelManager; public function __construct( Enlight_Components_Session_Namespace $session, - UserPreferenceManagerInterface $userPreferenceManager, EntityRepository $userPreferenceRepository, - StoredPaymentMeanProviderInterface $storedPaymentMeanProvider + EntityManager $modelManager ) { $this->session = $session; - $this->userPreferenceManager = $userPreferenceManager; $this->userPreferenceRepository = $userPreferenceRepository; - $this->storedPaymentMeanProvider = $storedPaymentMeanProvider; + $this->modelManager = $modelManager; } public static function getSubscribedEvents(): array @@ -56,8 +50,14 @@ public function __invoke(\Enlight_Controller_ActionEventArgs $args): void return; } - $storedMethod = $this->storedPaymentMeanProvider->fromRequest($request); - $storedMethodId = null !== $storedMethod ? $storedMethod->getValue('stored_method_id') : null; + $selectedPaymentMeanId = $request->getParam('register', [])['payment'] ?? null; + if (null === $selectedPaymentMeanId) { + return; + } + + // Stored payment mean id is in format umbrellaPaymentId_storedPaymentMethodId + $storedMethodIdParts = explode('_', $selectedPaymentMeanId); + $storedMethodId = 2 === count($storedMethodIdParts) ? $storedMethodIdParts[1] : null; $userPreference = $this->userPreferenceRepository->findOneBy(['userId' => $userId]); if (null === $userPreference) { @@ -66,6 +66,7 @@ public function __invoke(\Enlight_Controller_ActionEventArgs $args): void } $userPreference = $userPreference->setStoredMethodId($storedMethodId); - $this->userPreferenceManager->save($userPreference); + $this->modelManager->persist($userPreference); + $this->modelManager->flush($userPreference); } } diff --git a/Subscriber/Checkout/AddErrorMessageToViewSubscriber.php b/Subscriber/AddErrorMessageToView.php similarity index 61% rename from Subscriber/Checkout/AddErrorMessageToViewSubscriber.php rename to Subscriber/AddErrorMessageToView.php index d8877c50..344a9c85 100755 --- a/Subscriber/Checkout/AddErrorMessageToViewSubscriber.php +++ b/Subscriber/AddErrorMessageToView.php @@ -2,12 +2,17 @@ declare(strict_types=1); -namespace AdyenPayment\Subscriber\Checkout; +namespace AdyenPayment\Subscriber; -use AdyenPayment\Session\ErrorMessageProvider; +use AdyenPayment\Components\ErrorMessageProvider; use Enlight\Event\SubscriberInterface; -final class AddErrorMessageToViewSubscriber implements SubscriberInterface +/** + * Class AddErrorMessageToView + * + * @package AdyenPayment\Subscriber + */ +final class AddErrorMessageToView implements SubscriberInterface { /** @var ErrorMessageProvider */ private $errorMessageProvider; @@ -24,10 +29,11 @@ public static function getSubscribedEvents(): array public function __invoke(\Enlight_Controller_ActionEventArgs $args): void { - if (!$this->errorMessageProvider->hasMessages()) { + if (!$this->errorMessageProvider->hasMessages() || !$args->getSubject()->View()) { return; } $args->getSubject()->View()->assign('sErrorMessages', $this->errorMessageProvider->read()); + $args->getSubject()->View()->assign('sSuccessMessages', $this->errorMessageProvider->readSuccessMessages()); } } diff --git a/Subscriber/AddExpressCheckoutToView.php b/Subscriber/AddExpressCheckoutToView.php new file mode 100755 index 00000000..5b537fa6 --- /dev/null +++ b/Subscriber/AddExpressCheckoutToView.php @@ -0,0 +1,74 @@ +session = $session; + } + + public static function getSubscribedEvents(): array + { + return [ + 'Enlight_Controller_Action_PostDispatchSecure_Frontend_Detail' => 'handleProductDetailsPage', + 'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => 'handleCartPage', + ]; + } + + public function handleProductDetailsPage(Enlight_Event_EventArgs $args): void + { + if (!$this->isUserLoggedIn() || $args->getRequest()->getActionName() !== 'index') { + return; + } + + $args->getSubject()->View()->assign( + 'adyenShowExpressCheckout', true + ); + } + + public function handleCartPage(Enlight_Event_EventArgs $args): void + { + if (!$this->isUserLoggedIn() || $args->getRequest()->getActionName() !== 'cart') { + return; + } + + $args->getSubject()->View()->assign( + 'adyenShowExpressCheckout', true + ); + } + + private function isUserLoggedIn(): bool + { + if (!(bool)$this->session->get('sUserId')) { + return false; + } + + $userData = Shopware()->Modules()->Admin()->sGetUserData(); + if ( + !empty($userData['additional']['user']['accountmode']) && + (int)$userData['additional']['user']['accountmode'] === Customer::ACCOUNT_MODE_FAST_LOGIN + ) { + return false; + } + + return true; + } +} diff --git a/Subscriber/AddPluginTemplatesSubscriber.php b/Subscriber/AddPluginTemplatesSubscriber.php deleted file mode 100755 index b50f1afd..00000000 --- a/Subscriber/AddPluginTemplatesSubscriber.php +++ /dev/null @@ -1,35 +0,0 @@ -templateManager = $templateManager; - $this->pluginDirectory = $pluginDirectory; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PreDispatch' => '__invoke', - ]; - } - - public function __invoke(): void - { - $this->templateManager->addTemplateDir($this->pluginDirectory.'/Resources/views'); - } -} diff --git a/Subscriber/Applepay/MerchantAssociation/AddSeoUrlSubscriber.php b/Subscriber/AddSeoUrlSubscriber.php similarity index 63% rename from Subscriber/Applepay/MerchantAssociation/AddSeoUrlSubscriber.php rename to Subscriber/AddSeoUrlSubscriber.php index 6fb07568..0a73c8e5 100755 --- a/Subscriber/Applepay/MerchantAssociation/AddSeoUrlSubscriber.php +++ b/Subscriber/AddSeoUrlSubscriber.php @@ -2,17 +2,17 @@ declare(strict_types=1); -namespace AdyenPayment\Subscriber\Applepay\MerchantAssociation; +namespace AdyenPayment\Subscriber; -use AdyenPayment\Applepay\MerchantAssociation\RewriteUrl\UrlWriter; +use AdyenPayment\Components\ApplePay\SeoUrlWriter; use Enlight\Event\SubscriberInterface; final class AddSeoUrlSubscriber implements SubscriberInterface { - /** @var UrlWriter */ + /** @var SeoUrlWriter */ private $seoUrlWriter; - public function __construct(UrlWriter $seoUrlWriter) + public function __construct(SeoUrlWriter $seoUrlWriter) { $this->seoUrlWriter = $seoUrlWriter; } @@ -21,7 +21,7 @@ public static function getSubscribedEvents(): array { return [ 'Shopware_CronJob_RefreshSeoIndex_CreateRewriteTable' => '__invoke', - 'sRewriteTable::sCreateRewriteTable::after' => '__invoke', + 'Enlight_Controller_Action_PostDispatchSecure_Backend_Seo' => '__invoke' ]; } diff --git a/Subscriber/AddStoredMethodIdOnOrderSubscriber.php b/Subscriber/AddStoredMethodIdOnOrderSubscriber.php deleted file mode 100644 index 15b6f910..00000000 --- a/Subscriber/AddStoredMethodIdOnOrderSubscriber.php +++ /dev/null @@ -1,60 +0,0 @@ -modelManager = $modelManager; - $this->paymentInfoRepository = $this->modelManager->getRepository(PaymentInfo::class); - $this->session = $session; - } - - public static function getSubscribedEvents() - { - return ['Shopware_Modules_Order_SaveOrder_ProcessDetails' => 'persistPaymentInfoStoredMethodId']; - } - - public function persistPaymentInfoStoredMethodId(Enlight_Event_EventArgs $args) - { - $paymentInfoId = $this->session->get(AdyenPayment::SESSION_ADYEN_PAYMENT_INFO_ID); - $storedMethodId = (string) $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, ''); - - if (null === $paymentInfoId) { - return $args->getReturn(); - } - - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $this->paymentInfoRepository->findOneBy([ - 'id' => $paymentInfoId, - ]); - - if ($paymentInfo) { - $paymentInfo->setStoredMethodId($storedMethodId); - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - - return $args->getReturn(); - } -} diff --git a/Subscriber/EnrichUserPreferenceSubscriber.php b/Subscriber/AddStoredMethodUserPreferenceToView.php similarity index 95% rename from Subscriber/EnrichUserPreferenceSubscriber.php rename to Subscriber/AddStoredMethodUserPreferenceToView.php index 1caa3c2e..d9ab13bd 100755 --- a/Subscriber/EnrichUserPreferenceSubscriber.php +++ b/Subscriber/AddStoredMethodUserPreferenceToView.php @@ -9,7 +9,7 @@ use Enlight\Event\SubscriberInterface; use Enlight_Components_Session_Namespace; -final class EnrichUserPreferenceSubscriber implements SubscriberInterface +final class AddStoredMethodUserPreferenceToView implements SubscriberInterface { /** @var Enlight_Components_Session_Namespace */ private $session; diff --git a/Subscriber/Applepay/MerchantAssociation/PerformanceLoaderSubscriber.php b/Subscriber/Applepay/MerchantAssociation/PerformanceLoaderSubscriber.php deleted file mode 100755 index 3e03e448..00000000 --- a/Subscriber/Applepay/MerchantAssociation/PerformanceLoaderSubscriber.php +++ /dev/null @@ -1,36 +0,0 @@ -pluginDir = $pluginDir; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Backend_Performance' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - if ('load' !== $subject->Request()->getActionName()) { - return; - } - - $subject->View()->addTemplateDir($this->pluginDir.'/Resources/views/'); - $subject->View()->extendsTemplate('backend/performance/view/applepaymerchantassociation.js'); - } -} diff --git a/Subscriber/Applepay/MerchantAssociation/RegisterUrlCountSubscriber.php b/Subscriber/Applepay/MerchantAssociation/RegisterUrlCountSubscriber.php deleted file mode 100644 index d1abdfc8..00000000 --- a/Subscriber/Applepay/MerchantAssociation/RegisterUrlCountSubscriber.php +++ /dev/null @@ -1,24 +0,0 @@ - '__invoke', - ]; - } - - public function __invoke(\Enlight_Event_EventArgs $args): array - { - return array_merge($args->getReturn(), [ - 'applepaymerchantassociation' => 1, // 1: same URL for each shop - ]); - } -} diff --git a/Subscriber/AssignPaymentMethodStateDataToSession.php b/Subscriber/AssignPaymentMethodStateDataToSession.php new file mode 100755 index 00000000..0e0d501a --- /dev/null +++ b/Subscriber/AssignPaymentMethodStateDataToSession.php @@ -0,0 +1,49 @@ +session = $session; + } + + public static function getSubscribedEvents(): array + { + return ['Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke']; + } + + public function __invoke(\Enlight_Controller_ActionEventArgs $args): void + { + if ('payment' !== $args->getRequest()->getActionName()) { + return; + } + + $this->session->offsetSet( + 'adyenPaymentMethodStateData', + $args->getRequest()->get('adyenPaymentMethodStateData') + ); + $this->session->offsetSet( + 'adyenIsXHR', + $args->getRequest()->getParam('isXHR') + ); + } +} diff --git a/Subscriber/Checkout/PersistStoredMethodIdSubscriber.php b/Subscriber/AssignStoredPaymentMethodToSession.php similarity index 58% rename from Subscriber/Checkout/PersistStoredMethodIdSubscriber.php rename to Subscriber/AssignStoredPaymentMethodToSession.php index 446aa712..d7e3a888 100755 --- a/Subscriber/Checkout/PersistStoredMethodIdSubscriber.php +++ b/Subscriber/AssignStoredPaymentMethodToSession.php @@ -2,25 +2,19 @@ declare(strict_types=1); -namespace AdyenPayment\Subscriber\Checkout; +namespace AdyenPayment\Subscriber; -use AdyenPayment\AdyenPayment; use Enlight\Event\SubscriberInterface; use Enlight_Components_Session_Namespace; -use Shopware_Components_Modules; -final class PersistStoredMethodIdSubscriber implements SubscriberInterface +final class AssignStoredPaymentMethodToSession implements SubscriberInterface { /** @var Enlight_Components_Session_Namespace */ private $session; - /** @var Shopware_Components_Modules */ - private $modules; - - public function __construct(Enlight_Components_Session_Namespace $session, Shopware_Components_Modules $modules) + public function __construct(Enlight_Components_Session_Namespace $session) { $this->session = $session; - $this->modules = $modules; } public static function getSubscribedEvents(): array @@ -38,11 +32,11 @@ public function __invoke(\Enlight_Controller_ActionEventArgs $args): void return; } - $storedMethodId = $args->getRequest()->getParam(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID); - $this->session->offsetSet(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, $storedMethodId); + $storedMethodId = $args->getRequest()->getParam('adyenStoredPaymentMethodId'); + $this->session->offsetSet('adyenStoredPaymentMethodId', $storedMethodId); if ($storedMethodId) { - $this->modules->Admin()->sUpdatePayment( - str_replace("_${storedMethodId}", '', $args->getRequest()->getPost('payment')) + Shopware()->Modules()->Admin()->sUpdatePayment( + str_replace("_$storedMethodId", '', $args->getRequest()->getPost('payment')) ); } } diff --git a/Subscriber/Backend/BackendIndex.php b/Subscriber/Backend/BackendIndex.php new file mode 100644 index 00000000..3155e691 --- /dev/null +++ b/Subscriber/Backend/BackendIndex.php @@ -0,0 +1,40 @@ + 'onPostDispatchBackendIndex' + ]; + } + + /** + * @param \Enlight_Controller_ActionEventArgs $args + */ + public function onPostDispatchBackendIndex($args) + { + $action = $args->getSubject(); + $request = $action->Request(); + $response = $action->Response(); + $view = $action->View(); + + if ($request->getActionName() === 'load') { + $view->extendsTemplate('backend/_resources/js/AdyenShopNotifications.js'); + } + + if (!$request->isDispatched() + || $response->isException() + || $request->getActionName() !== 'index' + || !$view->hasTemplate() + ) { + return; + } + + $view->extendsTemplate('backend/index/adyen_header.tpl'); + } +} diff --git a/Subscriber/Backend/BackendJavascriptSubscriber.php b/Subscriber/Backend/BackendJavascriptSubscriber.php deleted file mode 100755 index b9a29801..00000000 --- a/Subscriber/Backend/BackendJavascriptSubscriber.php +++ /dev/null @@ -1,93 +0,0 @@ -pluginDirectory = $pluginDirectory; - $this->notificationRepository = $notificationRepository; - } - - /** - * @return string[] - * - * @psalm-return array{Enlight_Controller_Action_PostDispatchSecure_Backend_Order: 'onOrderPostDispatch', - * Enlight_Controller_Action_PostDispatchSecure_Backend_Customer: 'onCustomerPostDispatch'} - */ - public static function getSubscribedEvents() - { - return [ - 'Enlight_Controller_Action_PostDispatchSecure_Backend_Order' => 'onOrderPostDispatch', - 'Enlight_Controller_Action_PostDispatchSecure_Backend_Customer' => 'onCustomerPostDispatch', - ]; - } - - public function onOrderPostDispatch(Enlight_Event_EventArgs $args): void - { - /** @var \Shopware_Controllers_Backend_Customer $controller */ - $controller = $args->getSubject(); - - $view = $controller->View(); - $request = $controller->Request(); - - $view->addTemplateDir($this->pluginDirectory.'/Resources/views'); - - if ('index' === $request->getActionName()) { - $view->extendsTemplate('backend/order/adyen_payment_method/app.js'); - } - - if ('getList' === $request->getActionName()) { - $this->onGetList($args); - } - } - - public function onCustomerPostDispatch(Enlight_Event_EventArgs $args): void - { - /** @var \Shopware_Controllers_Backend_Customer $controller */ - $controller = $args->getSubject(); - - $view = $controller->View(); - $request = $controller->Request(); - - $view->addTemplateDir($this->pluginDirectory.'/Resources/views'); - - if ('index' === $request->getActionName()) { - $view->extendsTemplate('backend/customer/adyen_payment_method/app.js'); - } - - if ('getOrders' === $request->getActionName()) { - $this->onGetList($args); - } - } - - private function onGetList(Enlight_Event_EventArgs $args): void - { - $assign = $args->getSubject()->View()->getAssign(); - - $data = $assign['data']; - foreach ($data as &$order) { - $notification = $this->notificationRepository->findOneBy(['orderId' => $order['id']]); - - if (!$notification) { - continue; - } - $order['adyen_payment_order_payment'] = $notification->getPaymentMethod(); - } - - $args->getSubject()->View()->assign('data', $data); - } -} diff --git a/Subscriber/Backend/BackendOrderSubscriber.php b/Subscriber/Backend/BackendOrderSubscriber.php deleted file mode 100755 index 6020eb66..00000000 --- a/Subscriber/Backend/BackendOrderSubscriber.php +++ /dev/null @@ -1,86 +0,0 @@ -paymentInfoRepository = $paymentInfoRepository; - $this->notificationManager = $notificationManager; - } - - /** - * @return string[] - * - * @psalm-return array{Enlight_Controller_Action_PostDispatchSecure_Backend_Order: 'onBackendOrder'} - */ - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatchSecure_Backend_Order' => '__invoke', - ]; - } - - public function __invoke(Enlight_Event_EventArgs $args): void - { - /** @var Shopware_Controllers_Backend_Order $subject */ - $subject = $args->getSubject(); - - if ('getList' !== $subject->Request()->getActionName()) { - return; - } - - $data = $subject->View()->getAssign('data'); - - $this->addTransactionData($data); - - $subject->View()->assign('data', $data); - } - - /** - * @throws \Doctrine\ORM\NonUniqueResultException - */ - private function addTransactionData(array &$data): void - { - foreach ($data as &$order) { - $order['adyenTransaction'] = null; - $order['adyenNotification'] = null; - $order['adyenRefundable'] = false; - - $source = (int) ($order['payment']['source'] ?? null); - if (!SourceType::load($source)->equals(SourceType::adyen())) { - continue; - } - - $lastNotification = $this->notificationManager->getLastNotificationForOrderId($order['id']); - if ($lastNotification) { - $transaction = $this->paymentInfoRepository->findOneBy(['orderId' => $order['id']]); - if ($transaction) { - $order['adyenTransaction'] = $transaction; - } - - $order['adyenNotification'] = $lastNotification; - $order['adyenRefundable'] = in_array($lastNotification->getEventCode(), [ - 'AUTHORISATION', - 'CAPTURE', - ], true); - } - } - } -} diff --git a/Subscriber/Backend/ExtendViewTemplateSubscriber.php b/Subscriber/Backend/ExtendViewTemplateSubscriber.php deleted file mode 100644 index 9a893bdf..00000000 --- a/Subscriber/Backend/ExtendViewTemplateSubscriber.php +++ /dev/null @@ -1,38 +0,0 @@ - '__invoke', - ]; - } - - public function __invoke(\Enlight_Event_EventArgs $args): void - { - /** @var \Shopware_Controllers_Backend_Order $controller */ - $controller = $args->getSubject(); - - $view = $controller->View(); - $request = $controller->Request(); - - if ('index' === $request->getActionName()) { - $view->extendsTemplate('backend/adyen_payment_order/app.js'); - } - - if ('load' === $request->getActionName()) { - $view->extendsTemplate('backend/adyen_payment_order/view/detail/window.js'); - $view->extendsTemplate('backend/adyen_payment_order/model/order.js'); - } - } -} diff --git a/Subscriber/Backend/HideStoredPaymentsSubscriber.php b/Subscriber/Backend/HideStoredPaymentsSubscriber.php index 9416eef0..a3bec436 100644 --- a/Subscriber/Backend/HideStoredPaymentsSubscriber.php +++ b/Subscriber/Backend/HideStoredPaymentsSubscriber.php @@ -4,7 +4,7 @@ namespace AdyenPayment\Subscriber\Backend; -use AdyenPayment\Collection\Payment\PaymentMeanCollection; +use AdyenPayment\Utilities\Plugin; use Enlight\Event\SubscriberInterface; use Symfony\Component\HttpFoundation\Response; @@ -30,11 +30,7 @@ public function __invoke(\Enlight_Controller_ActionEventArgs $args): void return; } - $data = PaymentMeanCollection::createFromShopwareArray($data) - ->filterExcludeHidden() - ->toShopwareArray(); - - $args->getSubject()->View()->assign('data', array_values($data)); + $args->getSubject()->View()->assign('data', $this->filterHiddenPaymentMeans($data)); } private function isSuccessGetPaymentAction(\Enlight_Controller_ActionEventArgs $args): bool @@ -49,4 +45,17 @@ private function isSuccessGetPaymentAction(\Enlight_Controller_ActionEventArgs $ return true; } + + private function filterHiddenPaymentMeans(array $paymentMeans): array + { + return array_values(array_filter( + array_map(static function (array $paymentMean) { + if (!Plugin::isAdyenPaymentMean($paymentMean['name'])) { + return $paymentMean; + } + + return !$paymentMean['hide'] ? $paymentMean : null; + }, $paymentMeans) + )); + } } diff --git a/Subscriber/Backend/ImportSubShopPaymentMethodsSubscriber.php b/Subscriber/Backend/ImportSubShopPaymentMethodsSubscriber.php deleted file mode 100644 index e6f32a78..00000000 --- a/Subscriber/Backend/ImportSubShopPaymentMethodsSubscriber.php +++ /dev/null @@ -1,85 +0,0 @@ -shopRepository = $shopRepository; - $this->mainShopConfigRuleChain = $mainShopConfigRule; - $this->paymentMeansSubShopsWriter = $paymentMeansSubShopsWriter; - $this->paymentMethodImporter = $paymentMethodImporter; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Backend_Config' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Event_EventArgs $args): void - { - $request = $args->get('request') ?? false; - $response = $args->get('response') ?? false; - - if (!$request || !$response) { - return; - } - - if (!$this->isNewSubShopAdded($request->getParam('id'), $response, $request->getActionName())) { - return; - } - - /** @var Shop $shop */ - $shop = $this->shopRepository->findBy([], ['id' => 'desc'], 1)[0] ?? null; - if (null === $shop) { - return; - } - - $mainShop = $this->shopRepository->find(1); - if (($this->mainShopConfigRuleChain)($shop, $mainShop)) { - $this->paymentMeansSubShopsWriter->registerAdyenPaymentMethodForSubShop($shop->getId()); - - return; - } - - $this->paymentMethodImporter->importForShop($shop); - } - - private function isNewSubShopAdded($id, $response, string $action): bool - { - return null === $id - && Response::HTTP_OK === $response->getHttpResponseCode() - && self::SAVE_VALUES_ACTION === $action; - } -} diff --git a/Subscriber/Backend/OrderUpdate.php b/Subscriber/Backend/OrderUpdate.php new file mode 100644 index 00000000..4c1c782c --- /dev/null +++ b/Subscriber/Backend/OrderUpdate.php @@ -0,0 +1,156 @@ +orderRepository = $orderRepository; + } + + /** + * @inheritDoc + */ + public static function getSubscribedEvents(): array + { + return [ + 'Shopware_Controllers_Backend_OrderState_Notify' => 'backendUpdate', + 'sOrder::setPaymentStatus::after' => 'paymentStatusUpdate' + ]; + } + + /** + * @param Enlight_Hook_HookArgs $args + * + * @return void + * + * @throws CurrencyMismatchException + * @throws InvalidCurrencyCode + * @throws InvalidMerchantReferenceException + */ + public function paymentStatusUpdate(Enlight_Hook_HookArgs $args): void + { + $orderId = $args->get('orderId') ?? 0; + $paymentStatusId = (int)$args->get('paymentStatusId') ?? 0; + + $this->process($orderId, $paymentStatusId); + } + + /** + * @throws InvalidMerchantReferenceException + * @throws InvalidCurrencyCode + * @throws Exception + */ + public function backendUpdate(Enlight_Event_EventArgs $args): void + { + $orderId = $args->get('id') ?? 0; + $paymentStatusId = $args->get('status') ?? 0; + + $this->process($orderId, $paymentStatusId); + } + + /** + * @param int $orderId + * @param int $paymentStatusId + * + * @return void + * + * @throws InvalidCurrencyCode + * @throws InvalidMerchantReferenceException + * @throws CurrencyMismatchException + * @throws Exception + */ + private function process(int $orderId, int $paymentStatusId) + { + $order = $this->tryToGetShopOrderWithAdyenPayment($orderId); + if (!$order) { + return; + } + + $storeId = (string)$order->getShop()->getId(); + $generalSettings = AdminAPI::get()->generalSettings($storeId)->getGeneralSettings(); + /** @var TransactionHistory $transactionHistory */ + $transactionHistory = StoreContext::doWithStore( + $storeId, + [$this->getService(), 'getTransactionHistory'], + [$order->getTemporaryId()] + ); + $authorisedAmount = $transactionHistory->getTotalAmountForEventCode(EventCodes::AUTHORISATION); + $cancelledAmount = $transactionHistory->getTotalAmountForEventCode(EventCodes::CANCELLATION); + $capturedAmount = $transactionHistory->getCapturedAmount(); + + if ($generalSettings->toArray()['capture'] !== CaptureType::MANUAL || $generalSettings->toArray()['shipmentStatus'] !== (string)$paymentStatusId || $authorisedAmount->getPriceInCurrencyUnits() === $capturedAmount->plus($cancelledAmount)->getPriceInCurrencyUnits()) { + return; + } + + AdminAPI::get()->capture($storeId)->handle( + $order->getTemporaryId(), + $authorisedAmount->minus($cancelledAmount->plus($capturedAmount))->getPriceInCurrencyUnits(), + $order->getCurrency() + ); + } + + private function tryToGetShopOrderWithAdyenPayment(int $orderId): ?Order + { + try { + $order = $this->orderRepository->getOrderById($orderId); + + if (!$order || !Plugin::isAdyenPaymentMean($order->getPayment()->getName())) { + return null; + } + + return $order; + } catch (\Throwable $exception) { + return null; + } + } + + /** + * @return TransactionHistoryService + */ + private function getService(): TransactionHistoryService + { + if ($this->historyService === null) { + $this->historyService = ServiceRegister::getService(TransactionHistoryService::class); + } + + return $this->historyService; + } +} diff --git a/Subscriber/Backend/RemoveSubShopPaymentMethodSubscriber.php b/Subscriber/Backend/RemoveSubShopPaymentMethodSubscriber.php deleted file mode 100755 index 53eac2c6..00000000 --- a/Subscriber/Backend/RemoveSubShopPaymentMethodSubscriber.php +++ /dev/null @@ -1,52 +0,0 @@ -paymentMeanSubShopRemover = $paymentMeanSubShopRemover; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Backend_Config' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Event_EventArgs $args): void - { - $request = $args->get('request') ?? false; - $response = $args->get('response') ?? false; - - if (!$request || !$response) { - return; - } - - if (!$this->isSubShopDeleted($request->getParam('id'), $response, $request->getActionName())) { - return; - } - - $this->paymentMeanSubShopRemover->removeBySubShopId($request->getParam('id')); - } - - private function isSubShopDeleted($id, $response, string $action): bool - { - return null !== $id - && Response::HTTP_OK === $response->getHttpResponseCode() - && self::DELETE_VALUES_ACTION === $action; - } -} diff --git a/Subscriber/BackendOrderSubscriber.php b/Subscriber/BackendOrderSubscriber.php new file mode 100644 index 00000000..93e5722d --- /dev/null +++ b/Subscriber/BackendOrderSubscriber.php @@ -0,0 +1,95 @@ + 'addTransactionData']; + } + + public function addTransactionData(Enlight_Event_EventArgs $args): void + { + /** @var Shopware_Controllers_Backend_Order $subject */ + $subject = $args->getSubject(); + + if ('getList' !== $subject->Request()->getActionName()) { + return; + } + + $data = $subject->View()->getAssign('data'); + + $this->addData($data); + + $subject->View()->assign('data', $data); + } + + private function addData(array &$data): void + { + $merchantReferences = []; + $adyenOrders = []; + + foreach ($data as &$order) { + if (!isset($order['payment']['name']) || !Plugin::isAdyenPaymentMean($order['payment']['name'])) { + continue; + } + + $merchantReferences[$order['shopId']][] = $order['temporaryId']; + $adyenOrders[$order['shopId']][] = &$order; + } + + unset($order); + + foreach ($merchantReferences as $storeId => $references) { + $historyItems = StoreContext::doWithStore( + $storeId, + [$this->getService(), 'getTransactionHistoriesByReferences'], + [$references] + ); + + foreach ($adyenOrders[$storeId] as &$order) { + $order['adyenTransaction'] = false; + + foreach ($historyItems as $item) { + if ($item->getMerchantReference() !== $order['temporaryId']) { + continue; + } + + $order['adyenTransaction'] = $item->isLive() !== null; + break; + } + } + + unset($order); + } + } + + /** + * @return TransactionHistoryService + */ + private function getService(): TransactionHistoryService + { + if ($this->historyService === null) { + $this->historyService = ServiceRegister::getService(TransactionHistoryService::class); + } + + return $this->historyService; + } +} diff --git a/Subscriber/BootstrapRegistration.php b/Subscriber/BootstrapRegistration.php new file mode 100644 index 00000000..29ca387e --- /dev/null +++ b/Subscriber/BootstrapRegistration.php @@ -0,0 +1,30 @@ + 'registerBootstrap', + 'Shopware_Console_Add_Command' => 'registerBootstrap', + ]; + } + + /** + * Initializes bootstrap. + */ + public function registerBootstrap() + { + Bootstrap::init(); + } +} diff --git a/Subscriber/Checkout/AddAdyenSourceTypeToViewSubscriber.php b/Subscriber/Checkout/AddAdyenSourceTypeToViewSubscriber.php deleted file mode 100644 index c2af4997..00000000 --- a/Subscriber/Checkout/AddAdyenSourceTypeToViewSubscriber.php +++ /dev/null @@ -1,29 +0,0 @@ - '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - - if ('confirm' !== $subject->Request()->getActionName()) { - return; - } - - $subject->View()->assign('adyenSourceType', SourceType::adyen()->getType()); - } -} diff --git a/Subscriber/Checkout/AddApplePayConfigToViewSubscriber.php b/Subscriber/Checkout/AddApplePayConfigToViewSubscriber.php deleted file mode 100644 index ea70e4f5..00000000 --- a/Subscriber/Checkout/AddApplePayConfigToViewSubscriber.php +++ /dev/null @@ -1,22 +0,0 @@ -paymentType = PaymentType::applePay(); - $this->paymentConfigViewKey = 'sAdyenApplePayConfig'; - } -} diff --git a/Subscriber/Checkout/AddGooglePayConfigToViewSubscriber.php b/Subscriber/Checkout/AddGooglePayConfigToViewSubscriber.php deleted file mode 100644 index 0961d8e5..00000000 --- a/Subscriber/Checkout/AddGooglePayConfigToViewSubscriber.php +++ /dev/null @@ -1,22 +0,0 @@ -paymentType = PaymentType::googlePay(); - $this->paymentConfigViewKey = 'sAdyenGoogleConfig'; - } -} diff --git a/Subscriber/Checkout/BaseAddPaymentMethodConfigToViewSubscriber.php b/Subscriber/Checkout/BaseAddPaymentMethodConfigToViewSubscriber.php deleted file mode 100644 index 159c38ff..00000000 --- a/Subscriber/Checkout/BaseAddPaymentMethodConfigToViewSubscriber.php +++ /dev/null @@ -1,81 +0,0 @@ -paymentMethodConfigProvider = $paymentMethodConfigProvider; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - if ('confirm' !== $subject->Request()->getActionName()) { - return; - } - - $userData = $subject->View()->getAssign('sUserData'); - $paymentMean = PaymentMean::createFromShopwareArray($userData['additional']['payment'] ?? []); - if (!$paymentMean->getSource()->equals(SourceType::adyen())) { - return; - } - - $basket = $subject->View()->getAssign('sBasket'); - if (!$basket) { - return; - } - - $paymentType = $paymentMean->adyenType(); - if (!$paymentType || !$paymentType->equals($this->getPaymentType())) { - return; - } - - $paymentConfig = ($this->paymentMethodConfigProvider)(ConfigContext::fromCheckoutEvent($args)); - $subject->View()->assign( - $this->getPaymentMethodViewKey(), - Sanitize::escape(JsonUtil::encode($paymentConfig)) - ); - } - - protected function getPaymentType(): PaymentType - { - return $this->paymentType; - } - - protected function getPaymentMethodViewKey(): string - { - return $this->paymentConfigViewKey; - } -} diff --git a/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriber.php b/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriber.php deleted file mode 100755 index 2f23dfb8..00000000 --- a/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriber.php +++ /dev/null @@ -1,83 +0,0 @@ -session = $session; - $this->paymentMeansProvider = $paymentMeansProvider; - } - - public static function getSubscribedEvents(): array - { - return ['Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke']; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - $actionName = $args->getRequest()->getActionName(); - $isShippingPaymentView = 'shippingPayment' === $actionName && !$args->getRequest()->getParam('isXHR'); - if (!$isShippingPaymentView) { - return; - } - - $enrichedPaymentMeans = PaymentMeanCollection::createFromShopwareArray(($this->paymentMeansProvider)()); - $userData = $subject->View()->getAssign('sUserData'); - - // if the stored method is not saved in session it means it was not selected in the payment step - $storedMethodId = $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID); - if (null === $storedMethodId) { - $preselectedPaymentId = $userData['additional']['payment']['id'] ?? null; - if (null === $preselectedPaymentId) { - return; - } - - $umbrellaPayment = $enrichedPaymentMeans->fetchStoredMethodUmbrellaPaymentMean(); - if (null === $umbrellaPayment) { - // guest user won't have stored method - return; - } - // but if the umbrella payment is in the user data it means a stored method was preselected by the user - if ($umbrellaPayment->getId() !== (int) $preselectedPaymentId) { - return; - } - // we use the saved user preference to get the stored method and allow the rest of the flow work normally - $storedMethodId = $args->getSubject()->View()->getAssign('adyenUserPreference')['storedMethodId'] ?? null; - } - - if (null === $storedMethodId) { - return; - } - - $paymentMean = $enrichedPaymentMeans->fetchByStoredMethodId($storedMethodId); - if (null === $paymentMean) { - return; - } - - $userData = $subject->View()->getAssign('sUserData'); - $userData['additional']['payment'] = $paymentMean->getRaw(); - $subject->View()->assign('sUserData', $userData); - $formData = $subject->View()->getAssign('sFormData'); - $formData['payment'] = $paymentMean->getValue('stored_method_umbrella_id'); - $subject->View()->assign('sFormData', $formData); - } -} diff --git a/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriber.php b/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriber.php deleted file mode 100755 index 66573598..00000000 --- a/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriber.php +++ /dev/null @@ -1,73 +0,0 @@ -enrichedPaymentMeanProvider = $enrichedPaymentMeanProvider; - $this->paymentMeansProvider = $paymentMeansProvider; - $this->session = $session; - } - - public static function getSubscribedEvents(): array - { - return [ - // run as early as possible, before any BaseAddPaymentMethodConfigToViewSubscriber implementations - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => ['__invoke', -99999], - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - if ('confirm' !== $args->getRequest()->getActionName()) { - return; - } - - $storedMethodId = $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID); - $userData = $subject->View()->getAssign('sUserData'); - $paymentMeanId = $userData['additional']['payment']['id'] ?? null; - - if (null === $storedMethodId && null === $paymentMeanId) { - return; - } - - $enrichedPaymentMeans = ($this->enrichedPaymentMeanProvider)( - PaymentMeanCollection::createFromShopwareArray(($this->paymentMeansProvider)()) - ); - - $paymentMean = null === $storedMethodId - ? $enrichedPaymentMeans->fetchById((int) $paymentMeanId) - : $enrichedPaymentMeans->fetchByStoredMethodId($storedMethodId); - - if (null === $paymentMean) { - return; - } - - $userData['additional']['payment'] = $paymentMean->getRaw(); - $subject->View()->assign('sUserData', $userData); - } -} diff --git a/Subscriber/Checkout/RegisterConfirmSnippetsSubscriber.php b/Subscriber/Checkout/RegisterConfirmSnippetsSubscriber.php deleted file mode 100644 index e64b8d49..00000000 --- a/Subscriber/Checkout/RegisterConfirmSnippetsSubscriber.php +++ /dev/null @@ -1,66 +0,0 @@ -snippets = $snippets; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - - if ('confirm' !== $subject->Request()->getActionName()) { - return; - } - - $errorSnippets = $this->snippets->getNamespace('adyen/checkout/error'); - - $snippets = []; - $snippets['errorTransactionCancelled'] = $errorSnippets->get( - 'errorTransactionCancelled', - 'Your transaction was cancelled by the Payment Service Provider.', - true - ); - $snippets['errorTransactionProcessing'] = $errorSnippets->get( - 'errorTransactionProcessing', - 'An error occured while processing your payment.', - true - ); - $snippets['errorTransactionRefused'] = $errorSnippets->get( - 'errorTransactionRefused', - 'Your transaction was refused by the Payment Service Provider.', - true - ); - $snippets['errorTransactionUnknown'] = $errorSnippets->get( - 'errorTransactionUnknown', - 'Your transaction was cancelled due to an unknown reason.', - true - ); - $snippets['errorGooglePayNotAvailable'] = $errorSnippets->get( - 'errorGooglePayNotAvailable', - 'Google Pay is currently not available.', - true - ); - - $subject->View()->assign('mAdyenSnippets', htmlentities(json_encode($snippets))); - } -} diff --git a/Subscriber/Checkout/RegisterPaymentSnippetsSubscriber.php b/Subscriber/Checkout/RegisterPaymentSnippetsSubscriber.php deleted file mode 100755 index 38e14a81..00000000 --- a/Subscriber/Checkout/RegisterPaymentSnippetsSubscriber.php +++ /dev/null @@ -1,57 +0,0 @@ -snippets = $snippets; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - - if (!in_array($subject->Request()->getActionName(), ['shippingPayment', 'saveShippingPayment'], true)) { - return; - } - - $paymentSnippets = $this->snippets->getNamespace('adyen/checkout/payment'); - - $snippets = [ - 'updatePaymentInformation' => $paymentSnippets->get( - 'updatePaymentInformation', - 'Update your payment information', - true - ), - 'storedPaymentMethodTitle' => $paymentSnippets->get( - 'storedPaymentMethodTitle', - 'Stored payment methods', - true - ), - 'paymentMethodTitle' => $paymentSnippets->get( - 'paymentMethodTitle', - 'Payment methods', - true - ), - ]; - - $subject->View()->assign('mAdyenSnippets', htmlentities(json_encode($snippets))); - } -} diff --git a/Subscriber/CheckoutSubscriber.php b/Subscriber/CheckoutSubscriber.php deleted file mode 100755 index 8ab89953..00000000 --- a/Subscriber/CheckoutSubscriber.php +++ /dev/null @@ -1,156 +0,0 @@ -configuration = $configuration; - $this->paymentMethodService = $paymentMethodService; - $this->dataConversion = $dataConversion; - $this->enrichedPaymentMeanProvider = $enrichedPaymentMeanProvider; - $this->paymentMethodOptionsBuilder = $paymentMethodOptionsBuilder; - $this->paymentMeanCollectionSerializer = $paymentMeanCollectionSerializer; - $this->checkoutBasketProvider = $checkoutBasketProvider; - } - - public static function getSubscribedEvents(): array - { - return [ - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke', - ]; - } - - public function __invoke(\Enlight_Controller_ActionEventArgs $args): void - { - $subject = $args->getSubject(); - - $this->checkBasketAmount($subject); - $this->checkFirstCheckoutStep($subject); - } - - private function checkBasketAmount(\Enlight_Controller_Action $subject): void - { - if ('finish' === $subject->Request()->getActionName()) { - return; - } - - $userData = $subject->View()->getAssign('sUserData'); - - $paymentMean = PaymentMean::createFromShopwareArray($userData['additional']['payment'] ?? []); - if (!$paymentMean->getSource()->equals(SourceType::adyen())) { - return; - } - - $basket = ($this->checkoutBasketProvider)(); - - if (!$basket) { - return; - } - $value = $basket['sAmount']; - if (empty($value)) { - $this->revertToDefaultPaymentMethod($subject); - } - } - - private function checkFirstCheckoutStep(\Enlight_Controller_Action $subject): void - { - if ('confirm' !== $subject->Request()->getActionName()) { - return; - } - - if ($this->shouldRedirectToStep2($subject)) { - $subject->forward('shippingPayment', 'checkout'); - } - } - - private function shouldRedirectToStep2(\Enlight_Controller_Action $subject): bool - { - $userData = $subject->View()->getAssign('sUserData'); - $swPaymentMean = PaymentMean::createFromShopwareArray($userData['additional']['payment'] ?? []); - if (!$swPaymentMean->isAdyenSourceType()) { - return false; - } - - $paymentMethodOptions = ($this->paymentMethodOptionsBuilder)(); - if (0 === (int) $paymentMethodOptions['value']) { - return false; - } - - $adyenPaymentMethods = $this->paymentMethodService->getPaymentMethods( - $paymentMethodOptions['countryCode'], - $paymentMethodOptions['currency'], - $paymentMethodOptions['value'] - ); - - $adyenPaymentMethod = $adyenPaymentMethods->fetchByPaymentMean($swPaymentMean); - if (!$adyenPaymentMethod) { - return true; - } - - // @TODO Adyen Checkout API 68 'details' are removed - if (!$adyenPaymentMethod->hasDetails() && !$adyenPaymentMethod->isStoredPayment()) { - $subject->View()->assign('adyenPaymentState', $adyenPaymentMethod->serializeMinimalState()); - - return false; - } - - return false; - } - - private function revertToDefaultPaymentMethod(\Enlight_Controller_Action $subject): void - { - $defaultPaymentId = Shopware()->Config()->get('defaultPayment'); - $defaultPayment = Shopware()->Modules()->Admin()->sGetPaymentMeanById($defaultPaymentId); - if (Shopware()->Modules()->Admin()->sUpdatePayment($defaultPaymentId)) { - // Replace Adyen payment method in the template with the default payment method. - $userData = $subject->View()->getAssign('sUserData'); - $userData['additional']['payment'] = $defaultPayment; - $subject->View()->assign('sUserData', $userData); - $subject->View()->assign('sPayment', $defaultPayment); - $subject->View()->clearAssign('adyenPaymentState'); - } - } -} diff --git a/Subscriber/ControllerPath.php b/Subscriber/ControllerPath.php new file mode 100644 index 00000000..99c5d913 --- /dev/null +++ b/Subscriber/ControllerPath.php @@ -0,0 +1,51 @@ +pluginDirectory = $pluginDirectory; + } + + public static function getSubscribedEvents() + { + return [ + 'Enlight_Controller_Dispatcher_ControllerPath_Backend_AdyenPaymentMain' => 'onGetControllerPromotion', + 'Enlight_Controller_Dispatcher_ControllerPath_Backend_AdyenAuthorization' => 'onGetControllerPromotion', + 'Enlight_Controller_Dispatcher_ControllerPath_Frontend_AdyenAsyncProcess' => 'onGetControllerPromotion', + 'Enlight_Controller_Dispatcher_ControllerPath_Frontend_AdyenWebhook' => 'onGetControllerPromotion', + 'Enlight_Controller_Dispatcher_ControllerPath_Frontend_AdyenPaymentProcess' => 'onGetControllerPromotion', + 'Enlight_Controller_Dispatcher_ControllerPath_Frontend_AdyenDonations' => 'onGetControllerPromotion', + 'Shopware_Controllers_Frontend_AdyenExpressCheckout' => 'onGetControllerPromotion', + ]; + } + + + /** + * Controller path handler, generates controller path based on a event name + * + * @param \Enlight_Event_EventArgs $arguments + * @return string Controller path + */ + public function onGetControllerPromotion(\Enlight_Event_EventArgs $arguments): string + { + $eventName = $arguments->getName(); + + $moduleAndController = str_replace('Enlight_Controller_Dispatcher_ControllerPath_', '', $eventName); + list($module, $controller) = explode('_', $moduleAndController); + + return "{$this->pluginDirectory}/Controllers/{$module}/{$controller}.php"; + } +} diff --git a/Subscriber/Cronjob/ImportPaymentMethodSubscriber.php b/Subscriber/Cronjob/ImportPaymentMethodSubscriber.php deleted file mode 100755 index b008009e..00000000 --- a/Subscriber/Cronjob/ImportPaymentMethodSubscriber.php +++ /dev/null @@ -1,32 +0,0 @@ -paymentMethodImporter = $paymentMethodImporter; - } - - public static function getSubscribedEvents(): array - { - return [ - Event::cronImportPaymentMethods()->getName() => '__invoke', - ]; - } - - public function __invoke(\Shopware_Components_Cron_CronJob $job): void - { - iterator_to_array($this->paymentMethodImporter->importAll()); - } -} diff --git a/Subscriber/Cronjob/ProcessNotifications.php b/Subscriber/Cronjob/ProcessNotifications.php deleted file mode 100644 index ac5e0d36..00000000 --- a/Subscriber/Cronjob/ProcessNotifications.php +++ /dev/null @@ -1,99 +0,0 @@ -fifoNotificationLoader = $fifoNotificationLoader; - $this->fifoTextNotificationLoader = $fifoTextNotificationLoader; - $this->notificationProcessor = $notificationProcessor; - $this->incomingNotificationManager = $incomingNotificationManager; - $this->logger = $logger; - } - - /** - * @return string[] - * - * @psalm-return array - */ - public static function getSubscribedEvents() - { - return [ - Event::cronProcessNotifications()->getName() => 'runCronjob', - ]; - } - - /** - * @throws \Doctrine\ORM\ORMException - * @throws \Enlight_Event_Exception - */ - public function runCronjob(Shopware_Components_Cron_CronJob $job): void - { - $textNotifications = $this->fifoTextNotificationLoader->get(); - $this->incomingNotificationManager->convertNotifications($textNotifications); - - /** @var \Generator $feedback */ - $feedback = $this->notificationProcessor->processMany( - $this->fifoNotificationLoader->load(self::NUMBER_OF_NOTIFICATIONS_TO_HANDLE) - ); - - /** @var NotificationProcessorFeedback $item */ - foreach ($feedback as $item) { - if (!$item->isSuccess()) { - $this->logger->alert($item->getNotification()->getId().': '.$item->getMessage()); - } - } - } -} diff --git a/Subscriber/EnrichPaymentSubscriber.php b/Subscriber/EnrichPaymentSubscriber.php index 9cd98397..2e08329e 100755 --- a/Subscriber/EnrichPaymentSubscriber.php +++ b/Subscriber/EnrichPaymentSubscriber.php @@ -4,26 +4,32 @@ namespace AdyenPayment\Subscriber; -use AdyenPayment\Collection\Payment\PaymentMeanCollection; -use AdyenPayment\Components\Adyen\PaymentMethod\EnrichedPaymentMeanProviderInterface; -use AdyenPayment\Serializer\PaymentMeanCollectionSerializer; +use Adyen\Core\BusinessLogic\Domain\Checkout\PaymentRequest\Models\PaymentMethodCode; +use Adyen\Core\BusinessLogic\Domain\Multistore\StoreContext; +use Adyen\Core\BusinessLogic\Domain\Payment\Repositories\PaymentMethodConfigRepository; +use Adyen\Core\Infrastructure\ServiceRegister; +use AdyenPayment\AdyenPayment; +use AdyenPayment\Components\PaymentMeansEnricher; use Enlight\Event\SubscriberInterface; use Enlight_Event_EventArgs; +use Exception; +use Shopware\Models\Customer\Customer; +/** + * Class EnrichPaymentSubscriber + * + * @package AdyenPayment\Subscriber + */ final class EnrichPaymentSubscriber implements SubscriberInterface { - /** @var EnrichedPaymentMeanProviderInterface */ - private $enrichedPaymentMeanProvider; - - /** @var PaymentMeanCollectionSerializer */ - private $serializer; - - public function __construct( - EnrichedPaymentMeanProviderInterface $enrichedPaymentMeanProvider, - PaymentMeanCollectionSerializer $serializer - ) { - $this->enrichedPaymentMeanProvider = $enrichedPaymentMeanProvider; - $this->serializer = $serializer; + /** + * @var PaymentMeansEnricher + */ + private $paymentMeansEnricher; + + public function __construct(PaymentMeansEnricher $paymentMeansEnricher) + { + $this->paymentMeansEnricher = $paymentMeansEnricher; } public static function getSubscribedEvents(): array @@ -35,18 +41,53 @@ public static function getSubscribedEvents(): array /** * @return array> + * + * @throws Exception */ public function __invoke(Enlight_Event_EventArgs $args): array { - $shopwareMethods = $args->getReturn(); + $paymentMeans = $args->getReturn(); if (!in_array(Shopware()->Front()->Request()->getActionName(), ['shippingPayment', 'payment'], true)) { - return $shopwareMethods; + return $paymentMeans; } - return ($this->serializer)( - ($this->enrichedPaymentMeanProvider)( - PaymentMeanCollection::createFromShopwareArray($shopwareMethods) - ) + $userData = Shopware()->Modules()->Admin()->sGetUserData(); + // Remove stored payments for guest checkout + if ((int)$userData['additional']['user']['accountmode'] === Customer::ACCOUNT_MODE_FAST_LOGIN + || !$this->isCreditCardEnabled()) { + $paymentMeans = $this->filterStoredPaymentMethods($paymentMeans); + } + + return $this->paymentMeansEnricher->enrich($paymentMeans); + } + + private function filterStoredPaymentMethods($paymentMeans): array + { + return array_filter(array_map(static function (array $paymentMean) { + if ($paymentMean['name'] === AdyenPayment::STORED_PAYMENT_UMBRELLA_NAME) { + return null; + } + + return $paymentMean; + }, $paymentMeans)); + } + + /** + * @return bool + * + * @throws Exception + */ + private function isCreditCardEnabled(): bool + { + /** @var PaymentMethodConfigRepository $repository */ + $repository = ServiceRegister::getService(PaymentMethodConfigRepository::class); + + $cardConfig = StoreContext::doWithStore( + '' . Shopware()->Shop()->getId(), + [$repository, 'getPaymentMethodByCode'], + [(string)PaymentMethodCode::scheme()] ); + + return $cardConfig !== null; } } diff --git a/Subscriber/EnrichUserAdditionalPaymentSubscriber.php b/Subscriber/EnrichUserAdditionalPaymentSubscriber.php new file mode 100755 index 00000000..9dd63785 --- /dev/null +++ b/Subscriber/EnrichUserAdditionalPaymentSubscriber.php @@ -0,0 +1,101 @@ +paymentMeansEnricher = $paymentMeansEnricher; + $this->session = $session; + } + + /** + * Run as early as possible but after @see AddStoredMethodUserPreferenceToView + * @return array[] + */ + public static function getSubscribedEvents(): array + { + return [ + 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => ['__invoke', -99988], + ]; + } + + public function __invoke(\Enlight_Controller_ActionEventArgs $args): void + { + $subject = $args->getSubject(); + if (!in_array($args->getRequest()->getActionName(), ['confirm', 'shippingPayment'])) { + return; + } + + $userData = $subject->View()->getAssign('sUserData'); + $paymentMeanId = $userData['additional']['payment']['id'] ?? null; + $this->session->offsetUnset('adyenEnrichedPaymentMean'); + + if (null === $paymentMeanId) { + return; + } + + $storedMethodId = (string)$this->session->get('adyenStoredPaymentMethodId'); + if (empty($storedMethodId)) { + $userPreferences = $subject->View()->getAssign('adyenUserPreference'); + $storedMethodId = $userPreferences['storedMethodId'] ?? ''; + } + + $enrichedPaymentMean = $this->paymentMeansEnricher->enrichPaymentMean( + $userData['additional']['payment'], + $storedMethodId + ); + + // Reset payment mean for guest checkout + if ( + !empty($storedMethodId) && + (int)$userData['additional']['user']['accountmode'] === Customer::ACCOUNT_MODE_FAST_LOGIN + ) { + $enrichedPaymentMean = []; + } + + // Keep enriched payment mean in session for services that do not have access to view (do not extend controllers) + $this->session->offsetSet('adyenEnrichedPaymentMean', $enrichedPaymentMean); + + + // Customer probably changed address to unsupported address for selected Adyen payment. Force payment selection. + if (empty($enrichedPaymentMean)) { + $subject->redirect(['controller' => 'checkout', 'action' => 'shippingPayment']); + + return; + } + + $userData['additional']['payment'] = $enrichedPaymentMean; + + // Make sure that redirection from Amazon with session id has all confirmations checked + if ($args->getRequest()->getParam('amazonCheckoutSessionId')) { + $args->getRequest()->setParam('sAGB', true); + $args->getRequest()->setParam('esdAgreementChecked', true); + $args->getRequest()->setParam('serviceAgreementChecked', true); + } + + $subject->View()->assign('sUserData', $userData); + $subject->View()->assign('sPayment', $userData['additional']['payment']); + } +} diff --git a/Subscriber/ExtendOrderDetailsHandler.php b/Subscriber/ExtendOrderDetailsHandler.php new file mode 100644 index 00000000..6229eec7 --- /dev/null +++ b/Subscriber/ExtendOrderDetailsHandler.php @@ -0,0 +1,45 @@ + 'onOrderPostDispatch']; + } + + /** + * Injects proper extjs files for order view extension. + * + * @param Enlight_Controller_ActionEventArgs $args + */ + public function onOrderPostDispatch(Enlight_Controller_ActionEventArgs $args) + { + /** @var Shopware_Controllers_Backend_Order $controller */ + $controller = $args->getSubject(); + + $view = $controller->View(); + $request = $controller->Request(); + + if ($view && $request->getActionName() === 'index') { + $view->extendsTemplate('backend/adyen_detail/app.js'); + } + + if ($view && $request->getActionName() === 'load') { + $view->extendsTemplate('backend/adyen_detail/store/transaction.js'); + $view->extendsTemplate('backend/adyen_detail/model/transaction.js'); + $view->extendsTemplate('backend/adyen_detail/view/window.js'); + $view->extendsTemplate('backend/adyen_list/adyen_order_list.js'); + $view->extendsTemplate('backend/adyen_list/models/adyen_order_model.js'); + $view->extendsTemplate('backend/adyen_detail/controller/adyen_order_details_controller.js'); + } + } +} diff --git a/Subscriber/FinishPageSubscriber.php b/Subscriber/FinishPageSubscriber.php new file mode 100644 index 00000000..bed03077 --- /dev/null +++ b/Subscriber/FinishPageSubscriber.php @@ -0,0 +1,35 @@ + '__invoke', + ]; + } + + public function __invoke(\Enlight_Controller_ActionEventArgs $args): void + { + $subject = $args->getSubject(); + if ($args->getRequest()->getActionName() === 'finish') { + $temporaryId = $args->getRequest()->get('sUniqueID'); + + $subject->View()->assign('merchantReference', $temporaryId); + + if (Shopware()->Session()->offsetExists('adyenAction')) { + $subject->View()->assign('adyenAction', Shopware()->Session()->offsetGet('adyenAction')); + Shopware()->Session()->offsetUnset('adyenAction'); + } + } + } +} diff --git a/Subscriber/LimitPercentageSurcharge.php b/Subscriber/LimitPercentageSurcharge.php new file mode 100755 index 00000000..97c75f67 --- /dev/null +++ b/Subscriber/LimitPercentageSurcharge.php @@ -0,0 +1,73 @@ +session = $session; + $this->connection = $connection; + } + + public static function getSubscribedEvents(): array + { + return [ + 'Shopware_Modules_Basket_BeforeAddOrderSurchargePercent' => '__invoke', + ]; + } + + /** + * @param Enlight_Event_EventArgs $args + * + * @return void + * + * @throws Exception + */ + public function __invoke(Enlight_Event_EventArgs $args): void + { + $surchargeParams = $args->get('surcharge'); + if (empty($surchargeParams['price'])) { + return; + } + + $enrichedPaymentMean = $this->session->get('adyenEnrichedPaymentMean'); + if ( + empty($enrichedPaymentMean['isAdyenPaymentMethod']) || + empty($enrichedPaymentMean['surchargeLimit']) || + (float)$enrichedPaymentMean['surchargeLimit'] > (float)$surchargeParams['price'] + ) { + return; + } + + $surchargeParams['price'] = (float)$enrichedPaymentMean['surchargeLimit'] * $surchargeParams['currencyFactor']; + $surchargeParams['netprice'] = $surchargeParams['price'] / (1 + $surchargeParams['tax_rate'] / 100); + $this->connection->insert('s_order_basket', $surchargeParams); + + $args->setProcessed(true); + } +} diff --git a/Subscriber/Notification/LogIncomingNotification.php b/Subscriber/Notification/LogIncomingNotification.php deleted file mode 100755 index 3ac6b8e8..00000000 --- a/Subscriber/Notification/LogIncomingNotification.php +++ /dev/null @@ -1,43 +0,0 @@ -logger = $logger; - } - - public static function getSubscribedEvents(): array - { - return [ - Event::NOTIFICATION_RECEIVE => 'logNotifications', - ]; - } - - public function logNotifications(Enlight_Event_EventArgs $args): void - { - $items = $args->get('items'); - - foreach ($items as $item) { - $this->logger->debug('Incoming notification', ['json' => $item]); - } - } -} diff --git a/Subscriber/Notification/LogIncomingNotificationSubscriber.php b/Subscriber/Notification/LogIncomingNotificationSubscriber.php deleted file mode 100755 index 0b2715bf..00000000 --- a/Subscriber/Notification/LogIncomingNotificationSubscriber.php +++ /dev/null @@ -1,36 +0,0 @@ -logger = $logger; - } - - public static function getSubscribedEvents(): array - { - return [ - Event::NOTIFICATION_RECEIVE => '__invoke', - ]; - } - - public function __invoke(Enlight_Event_EventArgs $args): void - { - $items = $args->get('items') ?? []; - foreach ($items as $item) { - $this->logger->debug('Incoming notification', ['json' => $item]); - } - } -} diff --git a/Subscriber/Notification/UpdateOrderPsPSubscriber.php b/Subscriber/Notification/UpdateOrderPsPSubscriber.php deleted file mode 100755 index 25b40226..00000000 --- a/Subscriber/Notification/UpdateOrderPsPSubscriber.php +++ /dev/null @@ -1,47 +0,0 @@ -orderManager = $orderManager; - } - - public static function getSubscribedEvents(): array - { - return [ - Event::NOTIFICATION_PROCESS_AUTHORISATION => '__invoke', - ]; - } - - public function __invoke(Enlight_Event_EventArgs $args): void - { - /** - * @var \Shopware\Models\Order\Order $order - * @var \AdyenPayment\Models\Notification $notification - */ - $order = $args->get('order'); - $notification = $args->get('notification'); - if (!$notification->isSuccess()) { - return; - } - - if ($order->getTransactionId() === $notification->getPspReference()) { - return; - } - - $this->orderManager->updatePspReference($order, $notification->getPspReference()); - } -} diff --git a/Subscriber/OrderEmailSubscriber.php b/Subscriber/OrderEmailSubscriber.php deleted file mode 100644 index dd890d31..00000000 --- a/Subscriber/OrderEmailSubscriber.php +++ /dev/null @@ -1,134 +0,0 @@ -modelManager = $modelManager; - $this->paymentInfoRepository = $this->modelManager->getRepository(PaymentInfo::class); - $this->orderRepository = $this->modelManager->getRepository(Order::class); - $this->orderMailService = $orderMailService; - } - - /** - * @return string[] - * - * @psalm-return array{Shopware_Modules_Order_SendMail_Send: 'shouldStopEmailSending', Shopware_Modules_Order_SaveOrder_ProcessDetails: 'setPaymentInfoOrderNumber', Enlight_Controller_Action_PostDispatch_Frontend_Checkout: 'onCheckoutDispatch'} - */ - public static function getSubscribedEvents() - { - return [ - 'Shopware_Modules_Order_SendMail_Send' => 'shouldStopEmailSending', - 'Shopware_Modules_Order_SaveOrder_ProcessDetails' => 'setPaymentInfoOrderNumber', - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => 'onCheckoutDispatch', - ]; - } - - public function setPaymentInfoOrderNumber(Enlight_Event_EventArgs $args) - { - $orderId = $args->get('orderId'); - $paymentInfoId = Shopware()->Session()->get(AdyenPayment::SESSION_ADYEN_PAYMENT_INFO_ID); - - if (!empty($orderId)) { - $orderNumber = $this->getOrderNumber($orderId); - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $this->paymentInfoRepository->findOneBy([ - 'id' => $paymentInfoId, - ]); - - if ($paymentInfo) { - $paymentInfo->setOrdernumber($orderNumber); - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - } - - return $args->getReturn(); - } - - /** - * @return false|null - */ - public function shouldStopEmailSending(Enlight_Event_EventArgs $args) - { - $variables = $args->get('variables'); - $paymentMean = PaymentMean::createFromShopwareArray($variables['additional']['payment'] ?? []); - if ( - $this->orderMailService->isOrderConfirmationEmailRestricted() - && $paymentMean->getSource()->equals(SourceType::adyen()) - ) { - /** @var PaymentInfo $paymentInfo */ - $paymentInfo = $this->paymentInfoRepository->findOneBy([ - 'ordernumber' => $variables['ordernumber'], - ]); - - if ($paymentInfo && empty($paymentInfo->getOrdermailVariables())) { - if (($context = $args->get('context')) && array_key_exists('sCurrency', $context)) { - $variables['adyen_currency'] = $context['sCurrency']; - } - - $paymentInfo->setOrdermailVariables(json_encode($variables)); - - $this->modelManager->persist($paymentInfo); - $this->modelManager->flush($paymentInfo); - } - - return false; - } - } - - public function onCheckoutDispatch(Enlight_Event_EventArgs $args): void - { - /** @var Shopware_Controllers_Frontend_Checkout $subject */ - $subject = $args->getSubject(); - - if ('finish' !== $subject->Request()->getActionName()) { - return; - } - - $data = $subject->View()->getAssign(); - - if (!$data['sOrderNumber']) { - return; - } - - $this->orderMailService->sendOrderConfirmationMail(strval($data['sOrderNumber'])); - } - - private function getOrderNumber($orderId) - { - return $this->orderRepository->findOneBy([ - 'id' => $orderId, - ])->getNumber(); - } -} diff --git a/Subscriber/OrderListHandler.php b/Subscriber/OrderListHandler.php new file mode 100644 index 00000000..1b82f763 --- /dev/null +++ b/Subscriber/OrderListHandler.php @@ -0,0 +1,53 @@ + 'extendOrderList', + ]; + } + + public function extendOrderList(Enlight_Hook_HookArgs $args): void + { + $return = $args->getReturn(); + + foreach ($return['data'] as $index => $order) { + $log = $this->getLogService()->findByMerchantReference($order['temporaryId']); + + if (!$log) { + continue; + } + + $return['data'][$index]['adyenPspReference'] = $log->getPspReference(); + $return['data'][$index]['adyenPaymentMethod'] = $log->getPaymentMethod(); + } + + $args->setReturn($return); + } + + /** + * @return TransactionLogService + */ + private function getLogService(): TransactionLogService + { + if ($this->logService === null) { + $this->logService = ServiceRegister::getService(TransactionLogService::class); + } + + return $this->logService; + } +} diff --git a/Subscriber/ShopDeletedSubscriber.php b/Subscriber/ShopDeletedSubscriber.php new file mode 100644 index 00000000..bc947df2 --- /dev/null +++ b/Subscriber/ShopDeletedSubscriber.php @@ -0,0 +1,62 @@ + 'disconnectOnShopDeletion' + ]; + } + + /** + * @return void + */ + public function disconnectOnShopDeletion() + { + $params = Shopware()->Front()->Request()->getParams(); + + if ($params['_repositoryClass'] !== 'shop' || $params['id'] === 0) { + return; + } + + if (!in_array($params['id'], $this->getStoreService()->getConnectedStores())) { + return; + } + + try { + StoreContext::doWithStore( + $params['id'], + [$this->getDisconnectService(), 'disconnect'] + ); + } catch (Exception $e) { + Logger::logError('Substore deleted. Failed to disconnect substore because ' . $e->getMessage()); + } + } + + /** + * @return DisconnectService + */ + private function getDisconnectService(): DisconnectService + { + return ServiceRegister::getService(DisconnectService::class); + } + + /** + * @return StoreService + */ + private function getStoreService(): StoreService + { + return ServiceRegister::getService(StoreService::class); + } +} \ No newline at end of file diff --git a/Subscriber/TemplateRegistration.php b/Subscriber/TemplateRegistration.php new file mode 100644 index 00000000..ba86d661 --- /dev/null +++ b/Subscriber/TemplateRegistration.php @@ -0,0 +1,56 @@ +pluginDirectory = $pluginDirectory; + $this->templateManager = $templateManager; + $this->snippetManager = $snippetManager; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() + { + return [ + 'Enlight_Controller_Action_PreDispatch' => 'onPreDispatch' + ]; + } + + public function onPreDispatch() + { + $this->templateManager->addTemplateDir($this->pluginDirectory . '/Resources/views'); + $this->snippetManager->addConfigDir($this->pluginDirectory . '/Resources/snippets'); + } +} diff --git a/Subscriber/UpdateStoredPaymentMethodViewData.php b/Subscriber/UpdateStoredPaymentMethodViewData.php new file mode 100755 index 00000000..fba364af --- /dev/null +++ b/Subscriber/UpdateStoredPaymentMethodViewData.php @@ -0,0 +1,37 @@ + '__invoke']; + } + + public function __invoke(\Enlight_Controller_ActionEventArgs $args): void + { + $subject = $args->getSubject(); + $actionName = $args->getRequest()->getActionName(); + $isShippingPaymentView = 'shippingPayment' === $actionName && !$args->getRequest()->getParam('isXHR'); + if (!$isShippingPaymentView) { + return; + } + + $userData = $subject->View()->getAssign('sUserData'); + $storedMethodId = $userData['additional']['payment']['storedPaymentMethodId'] ?? null; + if (empty($storedMethodId)) { + return; + } + + // Make sure that form data has complete id in case when stored payment method is selected + $formData = $subject->View()->getAssign('sFormData'); + $formData['payment'] .= "_$storedMethodId"; + $subject->View()->assign('sFormData', $formData); + } +} diff --git a/Utilities/Plugin.php b/Utilities/Plugin.php new file mode 100644 index 00000000..c397ce9c --- /dev/null +++ b/Utilities/Plugin.php @@ -0,0 +1,61 @@ + 'frontend', + 'controller' => $controller, + 'action' => $action + ], $params); + + $url = Shopware()->Front()->Router()->assemble($params); + + return str_replace('http:', 'https:', $url); + } + + /** + * Get backend controller url. + * + * @param $controller + * @param $action + * @param array $params + * + * @return mixed|string + */ + public static function getBackendUrl($controller, $action, array $params = []) + { + $csrfToken = Shopware()->Container()->get('backendsession')->offsetGet('X-CSRF-Token'); + + $params = array_merge( + [ + 'module' => 'backend', + 'controller' => $controller, + 'action' => $action, + ], + $params, + ['__csrf_token' => $csrfToken] + ); + + return Shopware()->Front()->Router()->assemble($params); + } +} diff --git a/Utils/JsonUtil.php b/Utils/JsonUtil.php deleted file mode 100644 index a5c37652..00000000 --- a/Utils/JsonUtil.php +++ /dev/null @@ -1,61 +0,0 @@ - null, - 'cupsecureplus.smscode' => null, - 'facilitatorAccessToken' => null, - 'oneTimePasscode' => null, - 'orderID' => null, - 'payerID' => null, - 'payload' => null, - 'paymentID' => null, - 'paymentStatus' => null, - 'redirectResult' => null, - 'threeDSResult' => null, - 'threeds2.challengeResult' => null, - 'threeds2.fingerprint' => null, - ]; - - public static function forPaymentDetails(array $data): array - { - if (!$data) { - return []; - } - - return array_intersect_key($data, self::ALLOWED_PAYMENT_DETAIL_V67_KEYS); - } -} diff --git a/Utils/Sanitize.php b/Utils/Sanitize.php deleted file mode 100644 index 41064702..00000000 --- a/Utils/Sanitize.php +++ /dev/null @@ -1,18 +0,0 @@ -> /usr/local/etc/php/php.ini - - composer install --prefer-dist - - composer install --prefer-dist -d ./tools/ - - php ./vendor/bin/grumphp run - - branches: - master: - - step: - name: Code Compatibility - caches: - - composer - script: - - echo "memory_limit=-1" >> /usr/local/etc/php/php.ini - - composer install --prefer-dist - - composer install --prefer-dist -d ./tools/ - - php ./vendor/bin/grumphp run --testsuite="code-compatibility" diff --git a/composer.json b/composer.json index 6c02164b..5c69eca7 100644 --- a/composer.json +++ b/composer.json @@ -23,23 +23,30 @@ "autoload-dev": { "psr-4": { "AdyenPayment\\": "./", - "AdyenPayment\\Tests\\": "tests/" + "AdyenPayment\\Tests\\": "tests/", + "Adyen\\Core\\Tests\\Infrastructure\\": "vendor/adyen/integration-core/tests/Infrastructure", + "Adyen\\Core\\Tests\\BusinessLogic\\": "vendor/adyen/integration-core/tests/BusinessLogic" } }, "require": { "php": "^7.2|^7.4|^8.0", "ext-json": "*", "ext-zip": "*", - "adyen/php-api-library": "^10.0" - }, - "require-dev": { - "phpro/grumphp-shim": "^1.5" + "adyen/integration-core": "1.0.0", + "ext-simplexml": "*" }, "minimum-stability": "dev", "prefer-stable": true, - "config": { - "allow-plugins": { - "phpro/grumphp-shim": true + "repositories": [ + { + "type": "vcs", + "no-api": true, + "url": "git@github.com:logeecom/adyen-php-webhook-module.git" + }, + { + "type": "vcs", + "no-api": true, + "url": "git@github.com:logeecom/adyen-integration-core.git" } - } + ] } diff --git a/composer.lock b/composer.lock index 02b77faf..bb981b73 100644 --- a/composer.lock +++ b/composer.lock @@ -4,273 +4,97 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e50ffb80a77ed45f404f60301a058b10", + "content-hash": "dc1b8ee2ff63499fb373da3ef858d9e5", "packages": [ { - "name": "adyen/php-api-library", - "version": "10.1.0", + "name": "adyen/integration-core", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/Adyen/adyen-php-api-library.git", - "reference": "91917518e17595a91a3cc5887dd95e7d76767276" + "url": "git@github.com:logeecom/adyen-integration-core.git", + "reference": "41d8f36801829d6152fe52e585c6ad1b1853f85b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Adyen/adyen-php-api-library/zipball/91917518e17595a91a3cc5887dd95e7d76767276", - "reference": "91917518e17595a91a3cc5887dd95e7d76767276", + "url": "https://api.github.com/repos/logeecom/adyen-integration-core/zipball/41d8f36801829d6152fe52e585c6ad1b1853f85b", + "reference": "41d8f36801829d6152fe52e585c6ad1b1853f85b", "shasum": "" }, "require": { + "adyen/php-webhook-module": "0.1.0", "ext-ctype": "*", - "ext-curl": "*", "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "monolog/monolog": ">=1.16", - "php": ">=5.6" + "php": ">=7.2" }, "require-dev": { - "dms/phpunit-arraysubset-asserts": "0.2.1", - "friendsofphp/php-cs-fixer": "*", - "php-coveralls/php-coveralls": "2.4.3", - "phpunit/phpunit": "9.5.4", - "squizlabs/php_codesniffer": "3.6.0" + "phpunit/phpunit": "^8.5", + "symfony/console": "^4.4" }, "type": "library", "autoload": { "psr-4": { - "Adyen\\": "src/Adyen/" + "Adyen\\Core\\Infrastructure\\": "src/Infrastructure", + "Adyen\\Core\\BusinessLogic\\": "src/BusinessLogic" } }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client library for accessing Adyen APIs", - "homepage": "https://github.com/Adyen/adyen-php-api-library", - "keywords": [ - "adyen" - ], - "support": { - "issues": "https://github.com/Adyen/adyen-php-api-library/issues", - "source": "https://github.com/Adyen/adyen-php-api-library/tree/10.1.0" - }, - "time": "2021-04-30T14:03:59+00:00" - }, - { - "name": "monolog/monolog", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { + "autoload-dev": { "psr-4": { - "Monolog\\": "src/Monolog" + "Adyen\\Core\\Tests\\Infrastructure\\": "tests/Infrastructure", + "Adyen\\Core\\Tests\\BusinessLogic\\": "tests/BusinessLogic", + "Adyen\\Core\\Console\\": "console" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } + "proprietary" ], - "time": "2023-02-06T13:44:46+00:00" + "description": "Core Adyen integration library", + "time": "2023-08-14T13:11:58+00:00" }, { - "name": "psr/log", - "version": "1.1.4", + "name": "adyen/php-webhook-module", + "version": "0.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "url": "git@github.com:logeecom/adyen-php-webhook-module.git", + "reference": "0ab11cbccbd0ee187fb6f4f643e4cf8747f938ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/logeecom/adyen-php-webhook-module/zipball/0ab11cbccbd0ee187fb6f4f643e4cf8747f938ac", + "reference": "0ab11cbccbd0ee187fb6f4f643e4cf8747f938ac", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.5.0", + "squizlabs/php_codesniffer": "^3.5" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Adyen\\Webhook\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - } - ], - "packages-dev": [ - { - "name": "phpro/grumphp-shim", - "version": "v1.13.0", - "source": { - "type": "git", - "url": "https://github.com/phpro/grumphp-shim.git", - "reference": "973a933d176be41f1196d8db7851e32f985dd798" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpro/grumphp-shim/zipball/973a933d176be41f1196d8db7851e32f985dd798", - "reference": "973a933d176be41f1196d8db7851e32f985dd798", - "shasum": "" - }, - "require": { - "composer-plugin-api": "~2.0", - "ext-json": "*", - "php": "^7.4 || ^8.0" - }, - "replace": { - "phpro/grumphp": "self.version" - }, - "require-dev": { - "humbug/box": "^3.16" - }, - "bin": [ - "grumphp", - "grumphp.phar" - ], - "type": "composer-plugin", - "extra": { - "class": "GrumPHP\\Composer\\GrumPHPPlugin" - }, - "autoload": { + "autoload-dev": { "psr-4": { - "GrumPHP\\": "src" + "Adyen\\Webhook\\Test\\": "tests/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Toon Verwerft", - "email": "toon.verwerft@phpro.be" - }, - { - "name": "Community", - "homepage": "https://github.com/phpro/grumphp/graphs/contributors" + "name": "Adyen" } ], - "description": "GrumPHP Phar distribution", - "support": { - "issues": "https://github.com/phpro/grumphp-shim/issues", - "source": "https://github.com/phpro/grumphp-shim/tree/v1.13.0" - }, - "time": "2022-06-24T08:34:50+00:00" + "description": "Webhook module for Adyen Payment Integrations", + "time": "2023-01-23T12:47:14+00:00" } ], + "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], @@ -279,7 +103,8 @@ "platform": { "php": "^7.2|^7.4|^8.0", "ext-json": "*", - "ext-zip": "*" + "ext-zip": "*", + "ext-simplexml": "*" }, "platform-dev": [], "plugin-api-version": "2.1.0" diff --git a/grumphp.yml.dist b/grumphp.yml.dist deleted file mode 100644 index 537b226c..00000000 --- a/grumphp.yml.dist +++ /dev/null @@ -1,63 +0,0 @@ -parameters: - grumphp.ignore_patterns: - - '*/vendor' - - '.idea' - - '.gitlab-ci' - - '.github/' - - 'tests/' - - 'tools/' - -grumphp: - environment: - paths: - - 'tools/vendor/bin' - tasks: - git_commit_message: - matchers: - - /^(ASW-[0-9]*)/ - multiline: false - max_subject_width: 80 - git_blacklist: - keywords: - - '__debug(' - - 'console.log(' - - 'debug_backtrace(' - - 'die(' - - 'dump(' - - 'exit;' - - "\\bdd\\b(" - triggered_by: [php,js,tpl] - file_size: - max_size: 5M - composer: ~ - phplint: - triggered_by: ['php'] - xmllint: - triggered_by: ['xml', 'xml.dist'] - yamllint: - parse_custom_tags: true - phpcsfixer: - config: '.php-cs-fixer.dist.php' - phpparser: - ignore_patterns: '%grumphp.ignore_patterns%' - visitors: - no_exit_statements: ~ - never_use_else: ~ - forbidden_function_calls: - blacklist: [ echo, print, print_r, phpinfo ] - psalm: - config: psalm.xml.dist - ignore_patterns: '%grumphp.ignore_patterns%' - phpunit: - always_execute: true - php_compatibility: - scripts: - - ["-c", "php ./tools/vendor/bin/phpcs -p . --standard=PHPCompatibility --runtime-set testVersion 7.4- --extensions=php --ignore=*/vendor/*,*/tests/*"] - metadata: - task: shell - - testsuites: - code-compatibility: - tasks: ['composer', 'php_compatibility'] - slim: - tasks: ['file_size', 'composer', 'phplint', 'xmllint', 'yamllint', 'phpcsfixer', 'phpparser', 'php_compatibility'] diff --git a/phpcs.xml b/phpcs.xml deleted file mode 100644 index dfbda88e..00000000 --- a/phpcs.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - vendor/* - . - - *.js - - diff --git a/phpunit.xml.dist b/phpunit.xml.dist index c8d5635d..de9033e1 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,18 +1,13 @@ - - - - - - - - tests/Unit - - - tests/Integration - - + + + + tests + + + + + ./tests + + + diff --git a/plugin.xml b/plugin.xml index beec4469..43b9fe02 100644 --- a/plugin.xml +++ b/plugin.xml @@ -4,7 +4,7 @@ - 3.9.9 + 4.0.0 Adyen Adyen https://adyen.com @@ -443,70 +443,30 @@ * Optimize: Handling of the invalid Webhook requests - - - * Optimize: Add compatibility with Online Banking PL payment method - * Optimize: Handling of redirect payment request from Adyen - - - * Optimize: Add compatibility with Online Banking PL payment method - * Optimize: Handling of redirect payment request from Adyen - - - - - * Optimize: Remove unnecessary third-party dependencies from plugin - - - * Optimize: Remove unnecessary third-party dependencies from plugin - - - - - * Optimize: Handling empty order lines for Klarna payment requests - - - * Optimize: Handling empty order lines for Klarna payment requests - - - - - * Fix: Fix issue with shipping method selection when stored payment method is selected. - - - * Fix: Fix issue with shipping method selection when stored payment method is selected. - - - - - * Fix: Add support for Apple Pay payment method. - - - * Fix: Add support for Apple Pay payment method. - - - - - * Fix: Fix full refund not working due to wrong PSP reference being sent in refund request. - - - * Fix: Fix full refund not working due to wrong PSP reference being sent in refund request. - - - - - * Fix: Add support for ESD items - - - * Fix: Add support for ESD items - - - - - * Fix: Fix bug when payment method is switched on payment selection page. - - - * Fix: Fix bug when payment method is switched on payment selection page. + + + * New admin user interface and experience - Navigate effortlessly through an enhanced interface designed for simplicity and seamless plugin configuration. + * Expanded payment method options - Introducing new supported payment methods, giving customers more choices and convenience during checkout. + * Payment methods as a full express option - Offer customers more options with new supported payment methods, including the checkout express lineup: Apple Pay, Google Pay, Amazon Pay, and Paypal. + * Revamped checkout - Benefit from the latest version of Adyen's Checkout API, but also with the new implementation of the checkout and payment process that meets Shopware 5 best practices. + * Partial refunds - Easily process partial refunds, providing greater flexibility in handling customer returns. + * Partial capture - Seamlessly capture funds partially, granting you flexibility in managing complex orders. + * Capture control - Choose between manual and auto-capture of funds, tailoring the payment process to your business needs. + * Advanced data sending - Send L2 and L3 data for enhanced transaction insights, facilitating smoother business operations. + * Risk score visibility - View risk scores in order payment details, assisting in informed decision-making and fraud prevention. + * Adyen Giving - Enable charitable donations through Adyen Giving, allowing your customers to contribute effortlessly during transactions. + + + * New admin user interface and experience - Navigate effortlessly through an enhanced interface designed for simplicity and seamless plugin configuration. + * Expanded payment method options - Introducing new supported payment methods, giving customers more choices and convenience during checkout. + * Payment methods as a full express option - Offer customers more options with new supported payment methods, including the checkout express lineup: Apple Pay, Google Pay, Amazon Pay, and Paypal. + * Revamped checkout - Benefit from the latest version of Adyen's Checkout API, but also with the new implementation of the checkout and payment process that meets Shopware 5 best practices. + * Partial refunds - Easily process partial refunds, providing greater flexibility in handling customer returns. + * Partial capture - Seamlessly capture funds partially, granting you flexibility in managing complex orders. + * Capture control - Choose between manual and auto-capture of funds, tailoring the payment process to your business needs. + * Advanced data sending - Send L2 and L3 data for enhanced transaction insights, facilitating smoother business operations. + * Risk score visibility - View risk scores in order payment details, assisting in informed decision-making and fraud prevention. + * Adyen Giving - Enable charitable donations through Adyen Giving, allowing your customers to contribute effortlessly during transactions. diff --git a/psalm.xml.dist b/psalm.xml.dist deleted file mode 100644 index 6691d01f..00000000 --- a/psalm.xml.dist +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - diff --git a/storage/apple-developer-merchantid-domain-association.archive b/storage/apple-developer-merchantid-domain-association.archive deleted file mode 100644 index 852d5383500e819d155118639a158447134bd939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3006 zcmbuBc{CJi8^A}CEuuuo5~*x4WlL%dvS#h7nHWn#gNddax?A*-j2{Ax%|~lwa_Cv_HdC;d8YM+EGdngPt>UErE0LY zDpl-8HpmBBTy{b*Dy-QC9-$F+2+O_=o$9=~y6`0(P5Ig$y+fIZP)-#Jp!{ghAKb8| zgx+;unmsPEG3^mPa)-xSJO5|Jt$uiML7o~SJnL~#$#p@xEqQHgwJKA9S3Gi{mXu)Q zQ*u+2*NR+v89P&*N6Et+J2YcydpNnJ6EYIQ9WPwlY)rnYB^PyVZCag~} z$GxKg2ik;$E+T6ofuKIz(r{YO%sVKj$RL5~>3#*N9(ka|3=}dk@nGq)Z1h;;x5SAR zV02xYTDN;6Sdc;KvZam%T1NzY8kX(yT-AMDels7pa@AfAt5%Zhnvt2pL#^5V`t&I? zEF`yk_MP7ZZ=b!ysPU_Q z*{FS}<8>6`dEMmD)lK@yw9vaI*+ZRih_aXit+|{@b4S8{YmE~?7Wgkd@`FNa@A;Fo zBpVcqzl&VN;>xH(`7B; zFbVJcO7Jol)f*+9o#ex_I9m(4xK@x$+7ne>^v~@}-s!;N5ACUK3=%b8;IG5HX7hW(^ zyF;O<{TQJY)S}$|8_9x8#eIbyBN*hwAX$~E_|x}pg8ZN=TxgSOVrbntBgtH8oiH9+ zj;P;0w()ASrIGg5K*&68(I9r_7#v*msAEFEjnJIIg(ngFNf0Oi!F-QpQe%B-uEiiraaP5O);S0e798K|T8zS$>ftpgW^4@uLFM~w> zAfK0=oaNC}MRM*ng_ZKhh4VIw%YCVWPKpUCl8#rQb6bg+flD&eCMkB*hc+eXS@|d% zeZJJP35Ve^^~VlSUBWF@*Uq3=*{54=BZ(N{WB7<5i!5O2g)0N$3Od`FtvWH`&LR&T0QG3v46Al&vCabtCB9??$| z?$($FOZ00oGP~bMJ~?#0`U1>QW7st|5c>FxF2?4%puwsr!BMY?)2YqP(kl8@l(HkT z%w}NXFy-A#%iHObFFr({;ydH+A2#+SU*dT9G2P#Av+Gr0@uPb&+tY(lh6I zMOqWBw&bbMrp{O^KA16pEhQGBbEYv6JPnL??@-3OW%)gU8Jd0xC?n_6Wrkdr z%E2uU9=P5A=qeKaJM>4k?fta(Lj4}!HJ+8wg}Ird1|{bHDhrq+@vAyt^|zL zzN!47->j9D+|SqsJ6Ui4u4`=x96?$E7!2&k2ZxO3T&TCyfo1^v3-|Om6o~u#Z!oaqzgZhyRFyaa= zVw5J^V(GRLmA9d!dl;PsMSJvxwJkS}1hl5xyr4&E6#m z94$}|=nJuou0LCS0h{T|NH{Tv+j+>+#A+U?8cDUDqnQ(SmYc&YjM+J?PthI}umb=& zQUHL(t`Qvi!vp&MW(1tOMqqDms(sbm@)l@s+H37j`n|n3?f26DyGW?-PgAu2zntQc zMXN`z7Jr@DLz%MJ2e&b%a*}RnQOKQ(x-zRnr}WHpvnn~W-0mca$S2OPOEzyrF%On$ zeN!H4NCZtnZcV1>#$1yq@g;ltc8n^s)4+ASs(^U)N5APg_6+qau<^d}VCjSQ+l?Vl zP7>c-Jb^)(6Zs*4jHCb=cDSfhIKr%a+EA1|4c?Pbd0I-Ei)&4}y6O5+wxeE!@kaXc z8d5iK0F|ARs_fne&y31VP-J^pD_6KQaib{v^y#*(#|`Irwp6apiAgau!-APJcNwen z-v&-LQWFMfLSeOnbqF`uDr)&$eD5(V=;amT82sc`nv{pp)sknQQ-{c4NUkhMBKD?g zRex~i=Agsi3DbBMeMc`pXMgy! zvKqa65%cVv{8F;u8J;onXnRVwU4PQfwmihtr)BDS$F(nK<89ZVU!hEdal^*gi`#98cp_@ubW%}{n#FPo5$y> z+F1aAmk0L9V>uwOi_)Jqx}Qn~0QaA6s+ITa-tixD#POG#{_C0lh4{ap+1BRc0PF{z n<1gUPWqy1O>WBB(M&C0gdHE=gXcmFHlkNSTHNkNEG diff --git a/tests/BaseRepositoryWrapperTest.php b/tests/BaseRepositoryWrapperTest.php new file mode 100644 index 00000000..f4dee59f --- /dev/null +++ b/tests/BaseRepositoryWrapperTest.php @@ -0,0 +1,259 @@ + [], + ]; + /** + * @var BaseRepositoryTestAdapter + */ + protected $baseTest; + + /** + * BaseRepositoryWrapperTest constructor. + * + * @throws \Exception + */ + public function __construct() + { + parent::__construct(...func_get_args()); + $this->baseTest = new BaseRepositoryTestAdapter(...func_get_args()); + $entityManager = Shopware()->Container()->get('models'); + $this->baseTest->setEntityManager($entityManager); + } + + /** + * Proxies method to base test. + * + * @param $name + * @param $arguments + */ + public function __call($name, $arguments) + { + if (method_exists($this->baseTest, $name) && is_callable([$this->baseTest, $name])) { + $this->baseTest->$name(...$arguments); + } + } + + /** + * @throws RepositoryNotRegisteredException + */ + public function testRegisteredRepositories(): void + { + $this->baseTest->testRegisteredRepositories(); + } + + /** + * @throws RepositoryNotRegisteredException + */ + public function testStudentMassInsert(): void + { + $this->baseTest->testStudentMassInsert(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testStudentUpdate(): void + { + $this->baseTest->testStudentUpdate(); + } + + /** + * @throws RepositoryNotRegisteredException + */ + public function testQueryAllStudents(): void + { + $this->baseTest->testQueryAllStudents(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersString(): void + { + $this->baseTest->testQueryWithFiltersString(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersInt(): void + { + $this->baseTest->testQueryWithFiltersInt(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithOr(): void + { + $this->baseTest->testQueryWithOr(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithAndAndOr(): void + { + $this->baseTest->testQueryWithAndAndOr(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithNotEquals(): void + { + $this->baseTest->testQueryWithNotEquals(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithGreaterThan(): void + { + $this->baseTest->testQueryWithGreaterThan(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithLessThan(): void + { + $this->baseTest->testQueryWithLessThan(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithGreaterEqualThan(): void + { + $this->baseTest->testQueryWithGreaterEqualThan(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithLessOrEqualThan(): void + { + $this->baseTest->testQueryWithLessOrEqualThan(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithCombinedComparisonOperators(): void + { + $this->baseTest->testQueryWithCombinedComparisonOperators(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithInOperator(): void + { + $this->baseTest->testQueryWithInOperator(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithNotInOperator(): void + { + $this->baseTest->testQueryWithNotInOperator(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithLikeOperator(): void + { + $this->baseTest->testQueryWithLikeOperator(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersAndSort(): void + { + $this->baseTest->testQueryWithFiltersAndSort(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithUnknownFieldSort(): void + { + $this->baseTest->testQueryWithUnknownFieldSort(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithUnIndexedFieldSort(): void + { + $this->baseTest->testQueryWithUnIndexedFieldSort(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithIdFieldSort(): void + { + $this->baseTest->testQueryWithIdFieldSort(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersAndLimit(): void + { + $this->baseTest->testQueryWithFiltersAndLimit(); + } + + /** + * @inheritDoc + * + * @throws RepositoryClassException + */ + public function setUp(): void + { + $this->baseTest->setUp(); + } + + /** + * @inheritDoc + */ + public function tearDown(): void + { + $this->baseTest->tearDown(); + } +} diff --git a/tests/Integration/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php b/tests/Integration/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php deleted file mode 100644 index ce2fa288..00000000 --- a/tests/Integration/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php +++ /dev/null @@ -1,15 +0,0 @@ -markTestIncomplete(); - } -} diff --git a/tests/PluginTest.php b/tests/PluginTest.php new file mode 100644 index 00000000..faf29e42 --- /dev/null +++ b/tests/PluginTest.php @@ -0,0 +1,21 @@ + [] + ]; + + public function testCanCreateInstance() + { + /** @var Plugin $plugin */ + $plugin = Shopware()->Container()->get('kernel')->getPlugins()['AdyenPayment']; + + $this->assertInstanceOf(Plugin::class, $plugin); + } +} diff --git a/tests/QueueItemRepositoryWrapperTest.php b/tests/QueueItemRepositoryWrapperTest.php new file mode 100644 index 00000000..61234261 --- /dev/null +++ b/tests/QueueItemRepositoryWrapperTest.php @@ -0,0 +1,192 @@ + [] + ]; + /** + * @var BaseQueueItemRepositoryTestAdapter + */ + protected $baseTest; + + /** + * QueueItemRepositoryWrapperTest constructor. + * + * @throws \Exception + */ + public function __construct() + { + parent::__construct(...func_get_args()); + $this->baseTest = new BaseQueueItemRepositoryTestAdapter(...func_get_args()); + $entityManager = Shopware()->Container()->get('models'); + $this->baseTest->setEntityManager($entityManager); + } + + /** + * Proxies method to base test. + * + * @param $name + * @param $arguments + */ + public function __call($name, $arguments) + { + if (is_callable([$this->baseTest, $name])) { + $this->baseTest->$name(...$arguments); + } + } + + /** + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testRegisteredRepositories(): void + { + $this->baseTest->testRegisteredRepositories(); + } + + /** + * @depends testRegisteredRepositories + * + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueueItemMassInsert(): void + { + $this->baseTest->testQueueItemMassInsert(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testUpdate(): void + { + $this->baseTest->testQueueItemMassInsert(); + + $this->baseTest->testUpdate(); + } + + /** + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueryAllQueueItems(): void + { + $this->baseTest->testQueryAllQueueItems(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersString(): void + { + $this->baseTest->testQueryWithFiltersString(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersInt(): void + { + $this->baseTest->testQueryWithFiltersInt(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersAndSort(): void + { + $this->baseTest->testQueryWithFiltersAndSort(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testQueryWithFiltersAndLimit(): void + { + $this->baseTest->testQueryWithFiltersAndLimit(); + } + + /** + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testFindOldestQueuedItems(): void + { + $this->baseTest->testFindOldestQueuedItems(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + * @throws QueueItemSaveException + */ + public function testSaveWithCondition(): void + { + $this->expectException(QueueItemSaveException::class); + $this->baseTest->testSaveWithCondition(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + * @throws QueueItemSaveException + */ + public function testSaveWithConditionWithNull(): void + { + $this->expectException(QueueItemSaveException::class); + $this->baseTest->testSaveWithConditionWithNull(); + } + + /** + * @throws QueryFilterInvalidParamException + * @throws RepositoryClassException + * @throws RepositoryNotRegisteredException + */ + public function testInvalidQueryFilter(): void + { + $this->expectException(QueryFilterInvalidParamException::class); + $this->baseTest->testInvalidQueryFilter(); + } + + /** + * @inheritDoc + * + * @throws RepositoryClassException + * @throws TaskRunnerStatusStorageUnavailableException + */ + public function setUp(): void + { + $this->baseTest->setUp(); + } + + /** + * @inheritDoc + */ + public function tearDown(): void + { + $this->baseTest->tearDown(); + } +} diff --git a/tests/TestComponents/BaseQueueItemRepositoryTestAdapter.php b/tests/TestComponents/BaseQueueItemRepositoryTestAdapter.php new file mode 100644 index 00000000..ad567fa2 --- /dev/null +++ b/tests/TestComponents/BaseQueueItemRepositoryTestAdapter.php @@ -0,0 +1,75 @@ +entityManager = $entityManager; + } + + /** + * @inheritDoc + * @throws TaskRunnerStatusStorageUnavailableException + */ + public function setUp(): void + { + $database = new TestDatabase($this->entityManager); + $database->install(); + + Bootstrap::init(); + + parent::setUp(); + } + + /** + * @inheritDoc + */ + public function tearDown(): void + { + parent::tearDown(); + } + + /** + * @return string + */ + public function getQueueItemEntityRepositoryClass(): string + { + return TestQueueItemRepository::getClassName(); + } + + /** + * Cleans up all storage services used by repositories + * @throws RepositoryNotRegisteredException + * @throws MappingException + */ + public function cleanUpStorage(): void + { + $database = new TestDatabase($this->entityManager); + $database->uninstall(); + $this->entityManager->clear(); + } +} diff --git a/tests/TestComponents/BaseRepositoryTestAdapter.php b/tests/TestComponents/BaseRepositoryTestAdapter.php new file mode 100644 index 00000000..333da851 --- /dev/null +++ b/tests/TestComponents/BaseRepositoryTestAdapter.php @@ -0,0 +1,66 @@ +entityManager = $entityManager; + } + + /** + * @inheritDoc + */ + public function setUp(): void + { + $database = new TestDatabase($this->entityManager); + $database->install(); + + Bootstrap::init(); + + parent::setUp(); + } + + /** + * @inheritDoc + */ + public function tearDown(): void + { + parent::tearDown(); + } + + /** + * @inheritDoc + */ + public function getStudentEntityRepositoryClass(): string + { + return TestBaseRepository::class; + } + + /** + * @inheritDoc + */ + public function cleanUpStorage(): void + { + $database = new TestDatabase($this->entityManager); + $database->uninstall(); + $this->entityManager->clear(); + } +} diff --git a/tests/TestComponents/Components/TestBaseRepository.php b/tests/TestComponents/Components/TestBaseRepository.php new file mode 100644 index 00000000..94052f31 --- /dev/null +++ b/tests/TestComponents/Components/TestBaseRepository.php @@ -0,0 +1,10 @@ +entityManager = $entityManager; + $this->schemaTool = new SchemaTool($this->entityManager); + } + public function install(): void + { + $this->schemaTool->updateSchema($this->getClassesMetaData(), true); + } + + public function uninstall(): void + { + $this->schemaTool->dropSchema($this->getClassesMetaData()); + } + + protected function getClassesMetaData(): array + { + return [ + $this->entityManager->getClassMetadata(TestEntity::class) + ]; + } +} diff --git a/tests/TestComponents/Components/TestEntity.php b/tests/TestComponents/Components/TestEntity.php new file mode 100644 index 00000000..eac686a4 --- /dev/null +++ b/tests/TestComponents/Components/TestEntity.php @@ -0,0 +1,20 @@ +configuration = $this->prophesize(ConfigurationInterface::class); - $this->logger = $this->prophesize(LoggerInterface::class); - $this->clientFactory = new ClientFactory($this->configuration->reveal(), $this->logger->reveal()); - } - - /** @test */ - public function it_is_a_client_factory(): void - { - $this->assertInstanceOf(ClientFactory::class, $this->clientFactory); - } - - /** @test */ - public function it_can_provide_a_client_for_test_environment(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn('shop-id'); - - $this->configuration->getMerchantAccount($shop)->willReturn($merchantAccount = 'mock-merchantAccount'); - $this->configuration->getApiKey($shop)->willReturn($apiKey = 'mock-apiKey'); - $this->configuration->getEnvironment($shop)->willReturn($environment = Environment::TEST); - $this->configuration->getApiUrlPrefix($shop)->willReturn('api-url-prefix'); - - $result = $this->clientFactory->provide($shop->reveal()); - - $this->assertInstanceOf(Client::class, $result); - $this->assertEquals($merchantAccount, $result->getConfig()->getMerchantAccount()); - $this->assertEquals($apiKey, $result->getConfig()->getXApiKey()); - $this->assertEquals($environment, $result->getConfig()->getEnvironment()); - $this->assertEquals(Client::ENDPOINT_TEST, $result->getConfig()->get('endpoint')); - $this->assertEquals($this->logger->reveal(), $result->getLogger()); - } - - /** @test */ - public function it_can_provide_a_client_for_live_environment(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn('shop-id'); - - $this->configuration->getMerchantAccount($shop)->willReturn($merchantAccount = 'mock-merchantAccount'); - $this->configuration->getApiKey($shop)->willReturn($apiKey = 'mock-apiKey'); - $this->configuration->getEnvironment($shop)->willReturn($environment = Environment::LIVE); - $this->configuration->getApiUrlPrefix($shop)->willReturn($urlPrefix = 'api-url-prefix'); - - $result = $this->clientFactory->provide($shop->reveal()); - - $this->assertInstanceOf(Client::class, $result); - $this->assertEquals($merchantAccount, $result->getConfig()->getMerchantAccount()); - $this->assertEquals($apiKey, $result->getConfig()->getXApiKey()); - $this->assertEquals($environment, $result->getConfig()->getEnvironment()); - $expectedEndpoint = Client::ENDPOINT_PROTOCOL.$urlPrefix.Client::ENDPOINT_LIVE_SUFFIX; - $this->assertEquals($expectedEndpoint, $result->getConfig()->get('endpoint')); - $this->assertEquals($this->logger->reveal(), $result->getLogger()); - } -} diff --git a/tests/Unit/AdyenApi/HttpClient/ClientMemoiseTest.php b/tests/Unit/AdyenApi/HttpClient/ClientMemoiseTest.php deleted file mode 100755 index 8864a30d..00000000 --- a/tests/Unit/AdyenApi/HttpClient/ClientMemoiseTest.php +++ /dev/null @@ -1,63 +0,0 @@ -clientFactory = $this->prophesize(ClientFactoryInterface::class); - $this->clientMemoise = new ClientMemoise($this->clientFactory->reveal()); - } - - /** @test */ - public function it_is_a_client_memoise(): void - { - $this->assertInstanceOf(ClientMemoise::class, $this->clientMemoise); - } - - /** @test */ - public function it_can_lookup_a_client(): void - { - $shop = new Shop(); - $client = $this->prophesize(Client::class); - $this->clientFactory->provide($shop)->willReturn($client); - - $result = $this->clientMemoise->lookup($shop); - - $this->assertSame($client->reveal(), $result); - } - - /** @test */ - public function it_can_return_a_memoised_client(): void - { - $shop = new Shop(); - $client = $this->prophesize(Client::class); - - $this->clientFactory->provide($shop)->shouldBeCalledOnce()->willReturn($client); - - $firstResult = $this->clientMemoise->lookup($shop); - $result = $this->clientMemoise->lookup($shop); - - $this->assertSame($client->reveal(), $firstResult); - $this->assertSame($client->reveal(), $result); - } -} diff --git a/tests/Unit/AdyenApi/HttpClient/ConfigValidatorTest.php b/tests/Unit/AdyenApi/HttpClient/ConfigValidatorTest.php deleted file mode 100644 index 5c1885e1..00000000 --- a/tests/Unit/AdyenApi/HttpClient/ConfigValidatorTest.php +++ /dev/null @@ -1,159 +0,0 @@ -adyenApiFactory = $this->prophesize(ClientFactoryInterface::class); - $this->configuration = $this->prophesize(ConfigurationInterface::class); - $this->shopRepository = $this->prophesize(EntityRepository::class); - - $this->configValidator = new ConfigValidator( - $this->adyenApiFactory->reveal(), - $this->configuration->reveal(), - $this->shopRepository->reveal() - ); - } - - /** @test */ - public function it_is_a_config_validator(): void - { - $this->assertInstanceOf(ConfigValidator::class, $this->configValidator); - } - - /** @test */ - public function it_will_return_a_violation_if_shop_is_not_found(): void - { - $this->shopRepository->find($shopId = 123456)->willReturn(null); - - $result = $this->configValidator->validate($shopId); - - $this->assertInstanceOf(ConstraintViolationList::class, $result); - $this->assertCount(1, $result); - $this->assertEquals(ConstraintViolationFactory::create('Shop not found for ID "'.$shopId.'".'), $result->get(0)); - } - - /** @test */ - public function it_will_return_a_violation_if_the_api_key_was_not_configured(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn($shopId = 123456); - $this->shopRepository->find($shopId)->willReturn($shop->reveal()); - - $this->configuration->getApiKey($shop)->willReturn(''); - $this->configuration->getMerchantAccount($shop->reveal())->willReturn('merchantAccount'); - - $result = $this->configValidator->validate($shopId); - - $this->assertInstanceOf(ConstraintViolationList::class, $result); - $this->assertCount(1, $result); - $this->assertEquals(ConstraintViolationFactory::create('Missing configuration: API key.'), $result->get(0)); - } - - /** @test */ - public function it_will_return_a_violation_if_the_merchant_account_was_not_configured(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn($shopId = 123456); - $this->shopRepository->find($shopId)->willReturn($shop->reveal()); - - $this->configuration->getApiKey($shop->reveal())->willReturn('api-key'); - $this->configuration->getMerchantAccount($shop->reveal())->willReturn(''); - - $this->assertEquals( - new ConstraintViolationList([ - ConstraintViolationFactory::create('Missing configuration: merchant account.'), - ]), - $this->configValidator->validate($shopId) - ); - } - - /** @test */ - public function it_will_return_a_violation_on_api_adyen_exception(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn($shopId = 123456); - $this->shopRepository->find($shopId)->willReturn($shop->reveal()); - - $this->configuration->getApiKey($shop)->willReturn('api-key'); - $this->configuration->getMerchantAccount($shop)->willReturn('merchantAccount'); - $this->adyenApiFactory->provide($shop)->willThrow(AdyenException::class); - - $this->assertEquals( - new ConstraintViolationList([ - ConstraintViolationFactory::create('Adyen API failed, check error logs'), - ]), - $this->configValidator->validate($shopId) - ); - } - - /** @test */ - public function it_can_validate_a_config(): void - { - $shop = $this->prophesize(Shop::class); - $shop->getId()->willReturn($shopId = 123456); - - $this->configuration->getApiKey($shop->reveal())->willReturn('api-key'); - $this->configuration->getMerchantAccount($shop->reveal())->willReturn($merchantAccount = 'merchantAccount'); - - $client = $this->createClientMock(); - $this->shopRepository->find($shopId)->willReturn($shop->reveal()); - - $this->adyenApiFactory->provide($shop->reveal())->willReturn($client->reveal()); - $this->configuration->getMerchantAccount($shop->reveal())->willReturn($merchantAccount); - - $this->assertEquals(new ConstraintViolationList(), $this->configValidator->validate($shopId)); - } - - private function createClientMock(): ObjectProphecy - { - $config = $this->prophesize(Config::class); - $config->get(Argument::any())->willReturn(Environment::TEST); - $config->getInputType(Argument::any())->willReturn(''); - $httpClient = $this->prophesize(ClientInterface::class); - $httpClient->requestJson(Argument::cetera())->willReturn([]); - - $client = $this->prophesize(Client::class); - $client->getConfig()->willReturn($config->reveal()); - $client->getHttpClient()->willReturn($httpClient->reveal()); - $client->getApiCheckoutVersion()->willReturn(''); - $client->getApiRecurringVersion()->willReturn(''); - - return $client; - } -} diff --git a/tests/Unit/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php b/tests/Unit/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php deleted file mode 100644 index d7459831..00000000 --- a/tests/Unit/AdyenApi/Recurring/DisableTokenRequestHandlerTest.php +++ /dev/null @@ -1,105 +0,0 @@ -customerNumberProvider = $this->prophesize(CustomerNumberProviderInterface::class); - $this->transportFactory = $this->prophesize(TransportFactoryInterface::class); - - $this->disableTokenRequestHandler = new DisableTokenRequestHandler( - $this->transportFactory->reveal(), - $this->customerNumberProvider->reveal() - ); - } - - /** @test */ - public function it_is_a_disable_token_request_handler(): void - { - $this->assertInstanceOf(DisableTokenRequestHandlerInterface::class, $this->disableTokenRequestHandler); - } - - /** @test */ - public function it_will_return_a_400_on_missing_customer_number(): void - { - $shop = $this->prophesize(Shop::class); - $this->customerNumberProvider->__invoke()->willReturn(''); - $this->transportFactory->recurring(Argument::any())->shouldNotBeCalled(); - - $result = $this->disableTokenRequestHandler->disableToken('recurringTokenId', $shop->reveal()); - - $this->assertEquals(ApiResponse::empty(), $result); - } - - /** @test */ - public function it_will_return_an_api_response_for_disable_token_success(): void - { - $shop = $this->prophesize(Shop::class); - $recurringTransport = $this->prophesize(Recurring::class); - $payload = [ - 'shopperReference' => $customerNumber = 'customer-number', - 'recurringDetailReference' => $recurringTokenId = 'recurringTokenId', - ]; - $this->customerNumberProvider->__invoke()->willReturn($customerNumber); - $this->transportFactory->recurring($shop)->willReturn($recurringTransport); - $recurringTransport->disable($payload)->willReturn([ - 'response' => 'successfully-disabled', - 'message' => $message = 'successfully-disabled', - ]); - - $result = $this->disableTokenRequestHandler->disableToken($recurringTokenId, $shop->reveal()); - - $this->assertInstanceOf(ApiResponse::class, $result); - $this->assertTrue($result->isSuccess()); - $this->assertEquals($message, $result->message()); - } - - /** @test */ - public function it_will_return_an_api_response_for_disable_token_error(): void - { - $shop = $this->prophesize(Shop::class); - $recurringTransport = $this->prophesize(Recurring::class); - $payload = [ - 'shopperReference' => $customerNumber = 'customer-number', - 'recurringDetailReference' => $recurringTokenId = 'recurringTokenId', - ]; - $this->customerNumberProvider->__invoke()->willReturn($customerNumber); - $this->transportFactory->recurring($shop)->willReturn($recurringTransport); - $recurringTransport->disable($payload)->willReturn([ - 'message' => $message = 'PaymentDetail not found', - ]); - - $result = $this->disableTokenRequestHandler->disableToken($recurringTokenId, $shop->reveal()); - - $this->assertInstanceOf(ApiResponse::class, $result); - $this->assertFalse($result->isSuccess()); - $this->assertEquals($message, $result->message()); - } -} diff --git a/tests/Unit/AdyenApi/TransportFactoryTest.php b/tests/Unit/AdyenApi/TransportFactoryTest.php deleted file mode 100755 index f8a5f7a3..00000000 --- a/tests/Unit/AdyenApi/TransportFactoryTest.php +++ /dev/null @@ -1,86 +0,0 @@ -clientFactory = $this->prophesize(ClientFactoryInterface::class); - $this->transportFactory = new TransportFactory($this->clientFactory->reveal()); - } - - /** @test */ - public function it_is_a_transport_factory(): void - { - $this->assertInstanceOf(TransportFactoryInterface::class, $this->transportFactory); - } - - /** @test */ - public function it_can_provide_a_recurring_transport(): void - { - $shop = new Shop(); - $adyenClient = $this->createClientMock(); - - $this->clientFactory->provide($shop)->willReturn($adyenClient); - - $result = $this->transportFactory->recurring($shop); - - $this->assertInstanceOf(Recurring::class, $result); - } - - /** @test */ - public function it_can_provide_a_checkout_transport(): void - { - $shop = new Shop(); - $adyenClient = $this->createClientMock(); - - $this->clientFactory->provide($shop)->willReturn($adyenClient); - - $result = $this->transportFactory->checkout($shop); - - $this->assertInstanceOf(Checkout::class, $result); - } - - private function createClientMock(): ObjectProphecy - { - $config = $this->prophesize(Config::class); - $config->get(Argument::any())->willReturn(Environment::TEST); - $config->getInputType(Argument::any())->willReturn(''); - $httpClient = $this->prophesize(ClientInterface::class); - $httpClient->requestJson(Argument::cetera())->willReturn([]); - - $client = $this->prophesize(Client::class); - $client->getConfig()->willReturn($config->reveal()); - $client->getHttpClient()->willReturn($httpClient->reveal()); - $client->getApiCheckoutVersion()->willReturn(''); - $client->getApiRecurringVersion()->willReturn(''); - - return $client; - } -} diff --git a/tests/Unit/Applepay/Exception/FileNotWrittenExceptionTest.php b/tests/Unit/Applepay/Exception/FileNotWrittenExceptionTest.php deleted file mode 100644 index 9a4638da..00000000 --- a/tests/Unit/Applepay/Exception/FileNotWrittenExceptionTest.php +++ /dev/null @@ -1,33 +0,0 @@ -exception = new FileNotWrittenException(); - } - - /** @test */ - public function it_is_a_runtime_exception(): void - { - $this->assertInstanceOf(\RuntimeException::class, $this->exception); - } - - /** @test */ - public function it_can_be_constructed_with_file_path(): void - { - $exception = $this->exception::withFilepath($filepath = 'path/to/file'); - - $this->assertInstanceOf(FileNotWrittenException::class, $exception); - $this->assertNotSame($this->exception, $exception); - $this->assertEquals('Could not write apple pay association file, path: "'.$filepath.'"', - $exception->getMessage()); - } -} diff --git a/tests/Unit/Collection/Payment/PaymentMeanCollectionTest.php b/tests/Unit/Collection/Payment/PaymentMeanCollectionTest.php deleted file mode 100644 index 22f9c8ce..00000000 --- a/tests/Unit/Collection/Payment/PaymentMeanCollectionTest.php +++ /dev/null @@ -1,186 +0,0 @@ -collection = new PaymentMeanCollection(); - } - - /** @test */ - public function it_implements_iterable(): void - { - self::assertInstanceOf(\IteratorAggregate::class, $this->collection); - } - - /** @test */ - public function it_can_count(): void - { - self::assertInstanceOf(\Countable::class, $this->collection); - self::assertCount(0, $this->collection); - } - - /** @test */ - public function it_can_map_with_a_callback(): void - { - $filteredSource = SourceType::adyen(); - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['source' => $filteredSource->getType()], - ]); - - $result = $collection->map(static function(PaymentMean $payment) { - return ['mapped']; - }); - - self::assertEquals([['mapped']], $result); - } - - /** @test */ - public function it_can_filter_by_source(): void - { - $filteredSource = SourceType::adyen(); - - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['id' => $expected = 123, 'source' => $filteredSource->getType()], - ['id' => 456, 'source' => '1'], - ]); - - $result = $collection->filterBySource($filteredSource); - - self::assertInstanceOf(PaymentMeanCollection::class, $result); - self::assertCount(1, $result); - self::assertEquals($expected, iterator_to_array($result)[0]->getId()); - } - - /** @test */ - public function it_can_exclude_adyen(): void - { - $filteredSource = SourceType::adyen(); - $expected = PaymentMeanCollection::createFromShopwareArray([ - ['source' => '1'], - ]); - - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['source' => $filteredSource->getType()], - ['source' => '1'], - ]); - - $result = $collection->filterExcludeAdyen(); - - self::assertEquals($expected, $result); - } - - /** @test */ - public function it_can_exclude_hidden(): void - { - $filteredSource = SourceType::adyen(); - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['id' => 123, 'source' => $filteredSource->getType(), 'hide' => true], - ['id' => $expected = 345, 'source' => $filteredSource->getType()], - ]); - - $result = $collection->filterExcludeHidden(); - - self::assertInstanceOf(PaymentMeanCollection::class, $result); - self::assertCount(1, $result); - self::assertEquals($expected, iterator_to_array($result)[0]->getId()); - } - - /** @test */ - public function it_can_fetch_umbrella_payment_if_available(): void - { - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['source' => SourceType::adyen()->getType(), 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE], - ['source' => '1'], - ]); - - $result = $collection->fetchStoredMethodUmbrellaPaymentMean(); - - self::assertInstanceOf(PaymentMean::class, $result); - self::assertEquals(AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, $result->getValue('name')); - } - - /** @test */ - public function it_will_return_null_on_fetch_umbrella_if_payment_not_available(): void - { - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['source' => SourceType::adyen()->getType()], - ['source' => '1'], - ]); - - $result = $collection->fetchStoredMethodUmbrellaPaymentMean(); - - self::assertNull($result); - } - - /** @test */ - public function it_can_fetch_a_payment_by_stored_method_id(): void - { - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['id' => 123, 'source' => SourceType::adyen()->getType()], - ['id' => $expected = 456, 'source' => '1', 'stored_method_id' => $paymentMeanId = 'test123'], - ]); - - $result = $collection->fetchByStoredMethodId($paymentMeanId); - - self::assertInstanceOf(PaymentMean::class, $result); - self::assertEquals(1, $result->getSource()->getType()); - self::assertEquals($expected, $result->getId()); - } - - /** @test */ - public function it_can_fetch_a_payment_by_stored_method_umbrella_id(): void - { - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['id' => 123, 'source' => SourceType::adyen()->getType()], - ['id' => $expected = 456, 'source' => '1', 'stored_method_umbrella_id' => $paymentMeanId = 'test123'], - ]); - - $result = $collection->fetchByUmbrellaStoredMethodId($paymentMeanId); - - self::assertInstanceOf(PaymentMean::class, $result); - self::assertEquals(1, $result->getSource()->getType()); - self::assertEquals($expected, $result->getId()); - } - - /** @test */ - public function it_can_fetch_a_payment_by_payment_id(): void - { - $filteredSource = SourceType::adyen(); - $collection = PaymentMeanCollection::createFromShopwareArray([ - ['id' => $paymentMeanId = 123, 'source' => $filteredSource->getType()], - ['id' => '456', 'source' => '1'], - ]); - - $result = $collection->fetchById($paymentMeanId); - - self::assertInstanceOf(PaymentMean::class, $result); - self::assertEquals($paymentMeanId, $result->getId()); - } - - /** @test */ - public function it_returns_collection_in_shopware_array_format(): void - { - $filteredSource = SourceType::adyen(); - $paymentData = ['id' => '123', 'source' => $filteredSource->getType()]; - $expected = [$paymentData['id'] => $paymentData]; - $collection = PaymentMeanCollection::createFromShopwareArray([$paymentData]); - - $result = $collection->toShopwareArray(); - - self::assertEquals($expected, $result); - } -} diff --git a/tests/Unit/Collection/Payment/PaymentMethodCollectionTest.php b/tests/Unit/Collection/Payment/PaymentMethodCollectionTest.php deleted file mode 100644 index eaac913a..00000000 --- a/tests/Unit/Collection/Payment/PaymentMethodCollectionTest.php +++ /dev/null @@ -1,150 +0,0 @@ - [['type' => 'someType']]]); - - self::assertInstanceOf(\Countable::class, $result); - self::assertCount(1, $result); - } - - /** @test */ - public function it_can_map_with_a_callback(): void - { - $expectedMethod = [true, false]; - $collection = PaymentMethodCollection::fromAdyenMethods(['paymentMethods' => [ - ['type' => $filteredType = 'someType'], - ['type' => 'otherType'], - ]]); - - $result = $collection->map(static function(PaymentMethod $payment) use ($filteredType) { - return $filteredType === $payment->adyenType()->type(); - }); - - self::assertEquals($expectedMethod, $result); - } - - /** @test */ - public function it_can_map_to_raw(): void - { - $expected = [ - ['type' => 'someType'], - ['type' => 'otherType'], - ]; - $collection = PaymentMethodCollection::fromAdyenMethods(['paymentMethods' => $expected]); - - $result = $collection->mapToRaw(); - - self::assertEquals($expected, $result); - } - - /** @test */ - public function it_can_map_adyen_payment_methods(): void - { - $expectedMethod = PaymentMethod::fromRaw($paymentMethodData = ['type' => 'someType']); - $result = PaymentMethodCollection::fromAdyenMethods(['paymentMethods' => [$paymentMethodData]]); - - self::assertInstanceOf(PaymentMethodCollection::class, $result); - self::assertEquals($expectedMethod, $result->getIterator()->current()); - } - - /** @test */ - public function it_can_map_adyen_stored_payment_methods(): void - { - $expectedMethod = PaymentMethod::fromRaw($storedPaymentMethodData = ['type' => 'someType', 'id' => '1234']); - $result = PaymentMethodCollection::fromAdyenMethods(['storedPaymentMethods' => [$storedPaymentMethodData]]); - - self::assertInstanceOf(PaymentMethodCollection::class, $result); - self::assertEquals($expectedMethod, $result->getIterator()->current()); - } - - /** @test */ - public function it_can_enrich_with_import_locale(): void - { - $paymentMethod = PaymentMethod::fromRaw($paymentMethodData = [ - 'type' => 'someType', - 'name' => $name = 'someName', - ]); - $expectedMethod = $paymentMethod->withCode($name); - $paymentMethodsCollection = PaymentMethodCollection::fromAdyenMethods([ - 'paymentMethods' => [$paymentMethodData], - ]); - - $result = $paymentMethodsCollection->withImportLocale($paymentMethodsCollection); - - self::assertInstanceOf(PaymentMethodCollection::class, $result); - self::assertEquals($expectedMethod, $result->getIterator()->current()); - } - - /** @test */ - public function it_will_return_null_on_missing_methods_for_fetch_by_payment_mean(): void - { - $paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => 1, - 'source' => 1425514, - ]); - $collection = new PaymentMethodCollection(); - - $result = $collection->fetchByPaymentMean($paymentMean); - - self::assertNull($result); - } - - /** @test */ - public function it_can_fetch_a_method_by_payment_mean(): void - { - $attribute = new Attribute(); - $attribute->set(AdyenPayment::ADYEN_CODE, 'my_adyen_code'); - $paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => $methodStoredId = 'test_stored_method_id', - 'source' => 1425514, - 'attribute' => $attribute, - 'stored_method_id' => $methodStoredId, - ]); - $testPayment = PaymentMethod::fromRaw(['type' => 'someType']); - $expectedPayment = PaymentMethod::fromRaw(['type' => 'someType2', 'id' => $methodStoredId]); - $collection = new PaymentMethodCollection($testPayment, $expectedPayment); - - $result = $collection->fetchByPaymentMean($paymentMean); - - self::assertSame($expectedPayment, $result); - } - - /** @test */ - public function it_can_filter_with_a_callback(): void - { - $collection = PaymentMethodCollection::fromAdyenMethods(['paymentMethods' => [ - ['type' => $filteredType = 'someType'], - ['type' => 'otherType'], - ]]); - $expected = PaymentMethodCollection::fromAdyenMethods(['paymentMethods' => [ - ['type' => $filteredType], - ]]); - - $result = $collection->filter(static function(PaymentMethod $payment) use ($filteredType) { - return $filteredType === $payment->adyenType()->type(); - }); - - self::assertEquals($expected, $result); - } -} diff --git a/tests/Unit/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderTest.php b/tests/Unit/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderTest.php deleted file mode 100755 index 8038514f..00000000 --- a/tests/Unit/Components/Adyen/PaymentMethod/EnrichedPaymentMeanProviderTest.php +++ /dev/null @@ -1,292 +0,0 @@ -paymentMethodService = $this->prophesize(PaymentMethodServiceInterface::class); - $this->paymentMethodOptionsBuilder = $this->prophesize(PaymentMethodOptionsBuilderInterface::class); - $this->paymentMethodEnricher = $this->prophesize(PaymentMethodEnricherInterface::class); - - $this->provider = new EnrichedPaymentMeanProvider( - $this->paymentMethodService->reveal(), - $this->paymentMethodOptionsBuilder->reveal(), - $this->paymentMethodEnricher->reveal() - ); - } - - /** @test */ - public function it_is_an_enriched_payment_mean_provider(): void - { - $this->assertInstanceOf(EnrichedPaymentMeanProviderInterface::class, $this->provider); - } - - /** @test */ - public function it_does_not_enrich_on_empty_cart_value_and_excludes_adyen_methods(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMeanOne = PaymentMean::createFromShopwareArray([ - 'id' => 1, - 'source' => SourceType::shopwareDefault()->getType(), - ]), - PaymentMean::createFromShopwareArray([ - 'id' => 2, - 'source' => SourceType::adyen()->getType(), - ]) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn(['value' => 0.0]); - $this->paymentMethodService->getPaymentMethods((string)Argument::cetera())->shouldNotBeCalled(); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(1, $result); - $this->assertSame($paymentMeanOne, iterator_to_array($result)[0]); - } - - /** @test */ - public function it_throws_an_exception_on_missing_umbrella_payment(): void - { - $adyenIdentifier = sprintf('%s_%s', $adyenType = 'non', $adyenName = 'adyen'); - $paymentMeans = new PaymentMeanCollection( - $paymentMeanOne = PaymentMean::createFromShopwareArray([ - 'id' => 1, - 'source' => SourceType::shopwareDefault()->getType(), - ]) - ); - - // filled with a matching identifier, to catch if the early returns fails - $adyenPaymentMethods = new PaymentMethodCollection( - PaymentMethod::fromRaw(['type' => $adyenType])->withCode($adyenName) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'BE', - 'currency' => $currency = 'EUR', - 'value' => $value = 17.7, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn($adyenPaymentMethods); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $this->expectException(UmbrellaPaymentMeanNotFoundException::class); - - $result = $this->provider->__invoke($paymentMeans); - } - - /** @test */ - public function it_does_not_enrich_non_adyen_methods(): void - { - $adyenIdentifier = sprintf('%s_%s', $adyenType = 'non', $adyenName = 'adyen'); - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => 17, - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - 'source' => SourceType::shopwareDefault()->getType(), - 'attribute' => new Attribute([ - 'adyen_type' => $adyenIdentifier, - ]), - ]) - ); - - // filled with a matching identifier, to catch if the early returns fails - $adyenPaymentMethods = new PaymentMethodCollection( - PaymentMethod::fromRaw(['type' => $adyenType])->withCode($adyenName) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'BE', - 'currency' => $currency = 'EUR', - 'value' => $value = 17.7, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn($adyenPaymentMethods); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(1, $result); - $this->assertSame($paymentMean, iterator_to_array($result)[0]); - } - - /** @test */ - public function it_does_not_enrich_and_removes_payment_means_without_attribute(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMeanOne = PaymentMean::createFromShopwareArray([ - 'id' => 19, - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - 'source' => SourceType::shopwareDefault()->getType(), - ]), - $paymentMeanTwo = PaymentMean::createFromShopwareArray([ - 'id' => 21, - 'source' => SourceType::adyen()->getType(), - ]) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'BE', - 'currency' => $currency = 'EUR', - 'value' => $value = 17.7, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn(new PaymentMethodCollection()); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(1, $result); - $this->assertEquals($paymentMeanOne, iterator_to_array($result)[0]); - } - - /** @test */ - public function it_does_not_enrich_payment_means_with_attribute_null_values(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => 9, - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - 'source' => SourceType::adyen()->getType(), - 'attribute' => new Attribute([ - 'adyen_type' => null, - ]), - ]) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'GB', - 'currency' => $currency = 'GBP', - 'value' => $value = 9.39, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn(new PaymentMethodCollection()); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(0, $result); - } - - /** @test */ - public function it_removes_adyen_payment_means_without_matching_adyen_payment_method(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => 25, - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - 'source' => SourceType::adyen()->getType(), - 'attribute' => new Attribute([ - 'adyen_type' => 'non_matching_adyen_identifier', - ]), - ]) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'BE', - 'currency' => $currency = 'EUR', - 'value' => $value = 17.7, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn(new PaymentMethodCollection()); - $this->paymentMethodEnricher->__invoke(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(0, $result); - } - - /** @test */ - public function it_enriches_adyen_payment_methods(): void - { - $adyenIdentifier = sprintf('%s_%s', $adyenType = 'bcmc', $adyenName = 'adyen_name'); - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray($raw = [ - 'id' => $id = 15, - 'source' => $source = SourceType::adyen()->getType(), - 'attribute' => new Attribute([ - 'adyen_type' => $adyenIdentifier, - ]), - ]), - $umbrellaMean = PaymentMean::createFromShopwareArray([ - 'id' => 25, - 'source' => SourceType::adyen()->getType(), - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - ]) - ); - - $adyenPaymentMethods = new PaymentMethodCollection( - $paymentMethod = PaymentMethod::fromRaw([ - 'type' => $adyenType, - ])->withCode($adyenName), - $storedPaymentMethod = PaymentMethod::fromRaw($storedRaw = [ - 'id' => $storedMethodId = 'adyen-stored-payment-method-id', - 'type' => $schemaType = 'scheme', - ]) - ); - - $this->paymentMethodOptionsBuilder->__invoke()->willReturn([ - 'countryCode' => $countryCode = 'DE', - 'currency' => $currency = 'EUR', - 'value' => $value = 15.0, - ]); - $this->paymentMethodService->getPaymentMethods($countryCode, $currency, $value) - ->willReturn($adyenPaymentMethods); - - $this->paymentMethodEnricher->__invoke($raw, $paymentMethod)->willReturn($rawEnriched = [ - 'id' => $id, - 'source' => $source, - 'enriched' => true, - 'adyenType' => $adyenType, - ]); - - $this->paymentMethodEnricher->__invoke($umbrellaMean->getRaw(), $storedPaymentMethod)->willReturn($storedRawEnriched = [ - 'id' => $storedMethodId, - 'adyenType' => $schemaType, - 'source' => $source, - ]); - - $result = $this->provider->__invoke($paymentMeans); - - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(2, $result); - $this->assertEquals($rawEnriched, iterator_to_array($result)[0]->getRaw()); - $this->assertEquals($storedRawEnriched, iterator_to_array($result)[1]->getRaw()); - } -} diff --git a/tests/Unit/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderTest.php b/tests/Unit/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderTest.php deleted file mode 100755 index 47ee2916..00000000 --- a/tests/Unit/Components/Adyen/PaymentMethod/StoredPaymentMeanProviderTest.php +++ /dev/null @@ -1,84 +0,0 @@ -enrichedPaymentMeanProvider = $this->prophesize(EnrichedPaymentMeanProviderInterface::class); - $this->connection = $this->prophesize(Connection::class); - - $this->storedPaymentMeanProvider = new StoredPaymentMeanProvider( - $this->enrichedPaymentMeanProvider->reveal(), - $this->connection->reveal() - ); - } - - /** @test */ - public function it_is_an_stored_payment_mean_provider(): void - { - $this->assertInstanceOf(StoredPaymentMeanProviderInterface::class, $this->storedPaymentMeanProvider); - } - - /** @test */ - public function it_will_return_null_on_missing_params(): void - { - $request = $this->prophesize(Enlight_Controller_Request_Request::class); - $request->getParam('register', [])->willReturn([]); - - $result = $this->storedPaymentMeanProvider->fromRequest($request->reveal()); - - self::assertNull($result); - } - - /** @test */ - public function it_will_try_to_provide_a_payment_by_umbrella_stored_method_id(): void - { - $request = $this->prophesize(Enlight_Controller_Request_Request::class); - $request->getParam('register', [])->willReturn(['payment' => $id = 'stored_method_umbrella_id']); - - $emptyCollection = PaymentMeanCollection::createFromShopwareArray([]); - $this->enrichedPaymentMeanProvider->__invoke($emptyCollection)->willReturn($emptyCollection); - $queryBuilder = $this->prophesize(QueryBuilder::class); - $queryBuilder->select('*')->willReturn($queryBuilder); - $queryBuilder->from('s_core_paymentmeans')->willReturn($queryBuilder); - $queryBuilder->where('name = :umbrellaMethodName')->willReturn($queryBuilder); - $queryBuilder->setParameter(':umbrellaMethodName', AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE)->willReturn($queryBuilder); - $driverResultStatement = $this->prophesize(DriverResultStatement::class); - $driverResultStatement->fetchAll()->willReturn([]); - - $queryBuilder->execute()->willReturn($driverResultStatement->reveal()); - $this->connection->createQueryBuilder()->willReturn($queryBuilder->reveal()); - - $result = $this->storedPaymentMeanProvider->fromRequest($request->reveal()); - - self::assertNull($result); - } -} diff --git a/tests/Unit/Components/Adyen/PaymentMethod/TraceableEnrichedPaymentMeanProviderTest.php b/tests/Unit/Components/Adyen/PaymentMethod/TraceableEnrichedPaymentMeanProviderTest.php deleted file mode 100755 index f4f7250b..00000000 --- a/tests/Unit/Components/Adyen/PaymentMethod/TraceableEnrichedPaymentMeanProviderTest.php +++ /dev/null @@ -1,78 +0,0 @@ -enrichedPaymentMeanProvider = $this->prophesize(EnrichedPaymentMeanProviderInterface::class); - $this->logger = $this->prophesize(LoggerInterface::class); - - $this->provider = new TraceableEnrichedPaymentMeanProvider( - $this->enrichedPaymentMeanProvider->reveal(), - $this->logger->reveal() - ); - } - - /** @test */ - public function it_provides_enriched_payment_means(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray([ - 'source' => SourceType::adyen()->getType(), - ]) - ); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willReturn( - $enriched = new PaymentMeanCollection($paymentMean) - ); - $this->logger->critical(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertSame($enriched, $result); - } - - /** @test */ - public function it_logs_silently_exceptions(): void - { - $paymentMeans = new PaymentMeanCollection( - $paymentMean = PaymentMean::createFromShopwareArray([ - 'source' => SourceType::adyen()->getType(), - ]) - ); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willThrow( - $exception = new \Exception($message = 'invalid type') - ); - - $this->logger->critical($message, ['exception' => $exception])->shouldBeCalled(); - - $result = $this->provider->__invoke($paymentMeans); - $this->assertNotSame($paymentMeans, $result); - $this->assertInstanceOf(PaymentMeanCollection::class, $result); - $this->assertCount(0, $result); - } -} diff --git a/tests/Unit/Components/Manager/UserPreferenceManagerTest.php b/tests/Unit/Components/Manager/UserPreferenceManagerTest.php deleted file mode 100755 index 37f2dd59..00000000 --- a/tests/Unit/Components/Manager/UserPreferenceManagerTest.php +++ /dev/null @@ -1,50 +0,0 @@ -modelManager = $this->prophesize(EntityManager::class); - - $this->userPreferenceManager = new UserPreferenceManager($this->modelManager->reveal()); - } - - /** @test */ - public function it_is_an_user_preference_manager(): void - { - $this->assertInstanceOf(UserPreferenceManagerInterface::class, $this->userPreferenceManager); - } - - /** @test */ - public function it_can_save_a_record(): void - { - $userPreference = new UserPreference(); - $userPreference->setUserId(1234); - $userPreference->setStoredMethodId('expected-method-id'); - - $this->modelManager->persist($userPreference)->shouldBeCalled(); - $this->modelManager->flush($userPreference)->shouldBeCalled(); - - $this->userPreferenceManager->save($userPreference); - } -} diff --git a/tests/Unit/Components/Payload/Providers/RecurringOneOffPaymentTokenProviderTest.php b/tests/Unit/Components/Payload/Providers/RecurringOneOffPaymentTokenProviderTest.php deleted file mode 100755 index 56ffa274..00000000 --- a/tests/Unit/Components/Payload/Providers/RecurringOneOffPaymentTokenProviderTest.php +++ /dev/null @@ -1,60 +0,0 @@ -recurringOneOffPaymentTokenProvider = new RecurringOneOffPaymentTokenProvider(); - $this->paymentContext = $this->prophesize(PaymentContext::class); - } - - /** @test */ - public function it_is_a_recurring_payment_payload_provider(): void - { - self::assertInstanceOf(PaymentPayloadProvider::class, $this->recurringOneOffPaymentTokenProvider); - } - - /** @test */ - public function it_will_return_empty_for_none_stored_payment_method(): void - { - $this->paymentContext->getPaymentInfo()->willReturn([]); - - $result = $this->recurringOneOffPaymentTokenProvider->provide($this->paymentContext->reveal()); - - self::assertEquals([], $result); - } - - /** @test */ - public function it_can_return_the_recurring_one_off_payment_token_data(): void - { - $this->paymentContext->getPaymentInfo()->willReturn(['storedPaymentMethodId' => 'stored-method-id']); - - $result = $this->recurringOneOffPaymentTokenProvider->provide($this->paymentContext->reveal()); - - self::assertEquals([ - 'shopperInteraction' => ShopperInteraction::ecommerce()->shopperInteraction(), - 'recurringProcessingModel' => RecurringProcessingModel::cardOnFile()->recurringProcessingModel(), - ], $result); - } -} diff --git a/tests/Unit/Components/Payload/Providers/RecurringPaymentProviderTest.php b/tests/Unit/Components/Payload/Providers/RecurringPaymentProviderTest.php deleted file mode 100755 index 6376eb09..00000000 --- a/tests/Unit/Components/Payload/Providers/RecurringPaymentProviderTest.php +++ /dev/null @@ -1,60 +0,0 @@ -recurringPaymentProvider = new RecurringPaymentProvider(); - $this->paymentContext = $this->prophesize(PaymentContext::class); - } - - /** @test */ - public function it_is_a_recurring_payment_payload_provider(): void - { - self::assertInstanceOf(PaymentPayloadProvider::class, $this->recurringPaymentProvider); - } - - /** @test */ - public function it_will_return_empty_for_none_stored_payment_method(): void - { - $this->paymentContext->getPaymentInfo()->willReturn([]); - - $result = $this->recurringPaymentProvider->provide($this->paymentContext->reveal()); - - self::assertEquals([], $result); - } - - /** @test */ - public function it_can_return_the_recurring_one_off_payment_token_data(): void - { - $this->paymentContext->getPaymentInfo()->willReturn(['storedPaymentMethodId' => 'stored-method-id']); - - $result = $this->recurringPaymentProvider->provide($this->paymentContext->reveal()); - - self::assertEquals([ - 'shopperInteraction' => ShopperInteraction::contAuth()->shopperInteraction(), - 'recurringProcessingModel' => RecurringProcessingModel::cardOnFile()->recurringProcessingModel(), - ], $result); - } -} diff --git a/tests/Unit/Enricher/Payment/PaymentMethodEnricherTest.php b/tests/Unit/Enricher/Payment/PaymentMethodEnricherTest.php deleted file mode 100755 index f240077c..00000000 --- a/tests/Unit/Enricher/Payment/PaymentMethodEnricherTest.php +++ /dev/null @@ -1,120 +0,0 @@ -snippets = $this->prophesize(Shopware_Components_Snippet_Manager::class); - $this->imageLogoProvider = $this->prophesize(ImageLogoProviderInterface::class); - - $this->paymentMethodEnricher = new PaymentMethodEnricher( - $this->snippets->reveal(), - $this->imageLogoProvider->reveal() - ); - } - - /** @test */ - public function it_is_a_payment_method_enricher(): void - { - $this->assertInstanceOf(PaymentMethodEnricherInterface::class, $this->paymentMethodEnricher); - } - - /** @test */ - public function it_will_enrich_a_payment_method_without_stored_method_data(): void - { - $shopwareMethod = [ - 'id' => 'shopware-method-id', - 'additionaldescription' => $description = 'Adyen Method', - 'image' => '', - ]; - $paymentMethod = PaymentMethod::fromRaw($rawData = [ - 'code' => 'test_method', - 'type' => 'test_type', - ]); - $snippetsNamespace = $this->prophesize(\Enlight_Components_Snippet_Namespace::class); - $snippetsNamespace->get($paymentMethod->adyenType()->type())->willReturn($description = 'Adyen Method'); - $this->snippets->getNamespace('adyen/method/description')->willReturn($snippetsNamespace); - $this->imageLogoProvider->provideByType($paymentMethod->adyenType()->type())->willReturn($image = 'image'); - - $result = ($this->paymentMethodEnricher)($shopwareMethod, $paymentMethod); - - $expected = [ - 'id' => 'shopware-method-id', - 'additionaldescription' => $description, - 'image' => $image, - 'enriched' => true, - 'isStoredPayment' => false, - 'isAdyenPaymentMethod' => true, - 'adyenType' => $paymentMethod->adyenType()->type(), - 'metadata' => $rawData, - ]; - - self::assertEquals($expected, $result); - } - - /** @test */ - public function it_will_enrich_a_payment_method_with_stored_method_data(): void - { - $shopwareMethod = [ - 'id' => $shopwareMethodId = 'shopware-method-id', - 'additionaldescription' => $description = 'Stored Method', - ]; - $paymentMethod = PaymentMethod::fromRaw($rawData = [ - 'id' => $storedMethodId = 'stored_method_id', - 'name' => $storedMethodName = 'stored method name', - 'code' => 'test_method', - 'type' => 'test_type', - 'lastFour' => $lastFour = '1234', - ]); - $snippetsNamespace = $this->prophesize(\Enlight_Components_Snippet_Namespace::class); - $snippetsNamespace->get($paymentMethod->adyenType()->type())->willReturn($description); - $snippetsNamespace->get('CardNumberEndingOn', $text = 'Card number ending on', true)->willReturn($text); - $this->snippets->getNamespace('adyen/method/description')->willReturn($snippetsNamespace); - $this->snippets->getNamespace('adyen/checkout/payment')->willReturn($snippetsNamespace); - $this->imageLogoProvider->provideByType($paymentMethod->adyenType()->type())->willReturn($image = 'image'); - - $result = ($this->paymentMethodEnricher)($shopwareMethod, $paymentMethod); - - $expected = [ - 'id' => 'shopware-method-id', - 'additionaldescription' => sprintf('%s%s: %s', $description.' ', $text, $lastFour), - 'image' => $image, - 'enriched' => true, - 'isStoredPayment' => true, - 'isAdyenPaymentMethod' => true, - 'adyenType' => $paymentMethod->adyenType()->type(), - 'metadata' => $rawData, - 'stored_method_umbrella_id' => sprintf('%s_%s', $shopwareMethodId, $storedMethodId), - 'stored_method_id' => $storedMethodId, - 'description' => $storedMethodName, - 'source' => SourceType::adyen()->getType(), - ]; - - self::assertEquals($expected, $result); - } -} diff --git a/tests/Unit/Exceptions/DuplicateNotificationExceptionTest.php b/tests/Unit/Exceptions/DuplicateNotificationExceptionTest.php deleted file mode 100755 index 261a1dfe..00000000 --- a/tests/Unit/Exceptions/DuplicateNotificationExceptionTest.php +++ /dev/null @@ -1,50 +0,0 @@ -exception = new DuplicateNotificationException(); - } - - /** @test */ - public function is_a_runtime_exception(): void - { - self::assertInstanceOf(\RuntimeException::class, $this->exception); - } - - /** @test */ - public function it_can_be_constructed_with_a_notification(): void - { - $notification = new Notification(); - $notification - ->setId($id = 1) - ->setOrderId($orderId = 2) - ->setPspReference($pspReference = 'PSP_REF_1') - ->setStatus('received') - ->setPaymentMethod('mc') - ->setEventCode('AUTHORISATION') - ->setSuccess(true) - ->setMerchantAccountCode('Adyen-test') - ->setAmountValue(4598.0000) - ->setAmountCurrency('EUR'); - - $exception = DuplicateNotificationException::withNotification($notification); - - self::assertInstanceOf(DuplicateNotificationException::class, $exception); - self::assertEquals('Duplicate notification is not handled. Notification with id: "1", orderId: "2", pspReference: "PSP_REF_1", status: "received", paymentMethod: "mc", eventCode: "AUTHORISATION", success: "1", merchantAccountCode: "Adyen-test", amountValue: "4598", amountCurrency: "EUR"', - $exception->getMessage() - ); - } -} diff --git a/tests/Unit/Exceptions/RecurringPaymentTokenNotFoundExceptionTest.php b/tests/Unit/Exceptions/RecurringPaymentTokenNotFoundExceptionTest.php deleted file mode 100755 index 562bb42b..00000000 --- a/tests/Unit/Exceptions/RecurringPaymentTokenNotFoundExceptionTest.php +++ /dev/null @@ -1,56 +0,0 @@ -exception = new RecurringPaymentTokenNotFoundException(); - } - - /** @test */ - public function is_a_runtime_exception(): void - { - self::assertInstanceOf(\RuntimeException::class, $this->exception); - } - - /** @test */ - public function it_can_be_constructed_with_customer_id_and_order_number(): void - { - $exception = RecurringPaymentTokenNotFoundException::withCustomerIdAndOrderNumber( - $customerId = 'customer-id', - $orderNumber = 'order-number' - ); - - self::assertInstanceOf(RecurringPaymentTokenNotFoundException::class, $exception); - self::assertEquals( - 'Recurring payment token not found with customer id: "'.$customerId.'", order number: "'.$orderNumber.'"', - $exception->getMessage() - ); - } - - /** @test */ - public function it_can_be_constructed_with_psp_reference(): void - { - $exception = RecurringPaymentTokenNotFoundException::withPendingResultCodeAndPspReference( - $pspReference = 'psp-reference' - ); - - self::assertInstanceOf(RecurringPaymentTokenNotFoundException::class, $exception); - self::assertEquals( - 'Recurring payment token not found with result code: "'.PaymentResultCode::pending()->resultCode() - .'", psp reference: "'.$pspReference.'"', - $exception->getMessage() - ); - } -} diff --git a/tests/Unit/Exceptions/RecurringPaymentTokenNotSavedExceptionTest.php b/tests/Unit/Exceptions/RecurringPaymentTokenNotSavedExceptionTest.php deleted file mode 100755 index dd951165..00000000 --- a/tests/Unit/Exceptions/RecurringPaymentTokenNotSavedExceptionTest.php +++ /dev/null @@ -1,40 +0,0 @@ -exception = new RecurringPaymentTokenNotSavedException(); - } - - /** @test */ - public function is_a_runtime_exception(): void - { - self::assertInstanceOf(\RuntimeException::class, $this->exception); - } - - /** @test */ - public function it_can_be_constructed_with_token_identifier(): void - { - $tokenIdentifier = TokenIdentifier::generate(); - - $exception = RecurringPaymentTokenNotSavedException::withId($tokenIdentifier); - - self::assertInstanceOf(RecurringPaymentTokenNotSavedException::class, $exception); - self::assertEquals( - 'Recurring payment token not saved with id: "'.$tokenIdentifier->identifier().'"', - $exception->getMessage() - ); - } -} diff --git a/tests/Unit/Http/Response/FrontendJsonResponseTest.php b/tests/Unit/Http/Response/FrontendJsonResponseTest.php deleted file mode 100755 index c7892282..00000000 --- a/tests/Unit/Http/Response/FrontendJsonResponseTest.php +++ /dev/null @@ -1,57 +0,0 @@ -apiJsonResponse = new FrontendJsonResponse(); - } - - /** @test */ - public function it_is_an_api_json_response(): void - { - self::assertInstanceOf(ApiJsonResponse::class, $this->apiJsonResponse); - } - - /** @test */ - public function it_can_send_a_json_response(): void - { - $frontController = $this->prophesize(\Enlight_Controller_Front::class); - $httpResponse = $this->prophesize(\Enlight_Controller_Response_ResponseHttp::class); - $response = new JsonResponse([], Response::HTTP_OK); - $plugins = $this->prophesize(\Enlight_Plugin_Namespace_Loader::class); - $viewRenderer = $this->prophesize(\Enlight_Controller_Plugins_ViewRenderer_Bootstrap::class); - - $viewRenderer->setNoRender()->shouldBeCalled(); - $plugins->ViewRenderer()->willReturn($viewRenderer); - $frontController->Plugins()->willReturn($plugins); - - $httpResponse->setHeader('Content-type', $response->headers->get('Content-Type'), true)->shouldBeCalled(); - $httpResponse->setHttpResponseCode(Response::HTTP_OK)->shouldBeCalled(); - $httpResponse->setBody($response->getContent())->shouldBeCalled(); - - $result = $this->apiJsonResponse->sendJsonResponse( - $frontController->reveal(), - $httpResponse->reveal(), - $response - ); - - self::assertSame($httpResponse->reveal(), $result); - } -} diff --git a/tests/Unit/Mock/ControllerActionMock.php b/tests/Unit/Mock/ControllerActionMock.php deleted file mode 100644 index d32ff66f..00000000 --- a/tests/Unit/Mock/ControllerActionMock.php +++ /dev/null @@ -1,9 +0,0 @@ -group = PaymentGroup::default(); - } - - /** @test */ - public function it_contains_a_group(): void - { - $this->assertEquals('payment', $this->group->group()); - } - - /** @test */ - public function it_knows_it_equals_default_group(): void - { - $this->assertTrue($this->group->equals(PaymentGroup::default())); - } - - /** @test */ - public function it_can_be_constructed_by_stored(): void - { - $group = PaymentGroup::stored(); - $this->assertEquals('stored', $group->group()); - $this->assertTrue($group->equals(PaymentGroup::stored())); - } -} diff --git a/tests/Unit/Models/Payment/PaymentMeanTest.php b/tests/Unit/Models/Payment/PaymentMeanTest.php deleted file mode 100755 index bb3080b3..00000000 --- a/tests/Unit/Models/Payment/PaymentMeanTest.php +++ /dev/null @@ -1,126 +0,0 @@ -paymentMean = PaymentMean::createFromShopwareArray([ - 'id' => '15', - 'source' => '1425514', - 'attribute' => new Attribute([ - 'adyen_type' => 'adyen-type', - ]), - 'enriched' => true, - 'adyenType' => 'adyen-type', - 'hide' => true, - ]); - } - - /** @test */ - public function it_contains_an_id(): void - { - $this->assertIsInt($this->paymentMean->getId()); - $this->assertEquals(15, $this->paymentMean->getId()); - } - - /** @test */ - public function it_contains_a_source(): void - { - $this->assertInstanceOf(SourceType::class, $this->paymentMean->getSource()); - $this->assertEquals(SourceType::adyen(), $this->paymentMean->getSource()); - } - - /** @test */ - public function it_knows_it_is_hidden(): void - { - $this->assertTrue($this->paymentMean->isHidden()); - } - - /** @test */ - public function it_contains_raw_data(): void - { - $this->assertIsArray($this->paymentMean->getRaw()); - $this->assertEquals([ - 'id' => '15', - 'source' => '1425514', - 'attribute' => new Attribute([ - 'adyen_type' => 'adyen-type', - ]), - 'enriched' => true, - 'adyenType' => 'adyen-type', - 'hide' => true, - ], $this->paymentMean->getRaw()); - } - - /** @test */ - public function it_knows_when_enriched(): void - { - $this->assertTrue($this->paymentMean->isEnriched()); - } - - /** @test */ - public function it_contains_adyen_type(): void - { - $this->assertTrue($this->paymentMean->adyenType()->equals(PaymentType::load('adyen-type'))); - } - - /** @test */ - public function it_can_retrieve_a_value(): void - { - $this->assertIsString($this->paymentMean->getValue('id')); - $this->assertEquals('15', $this->paymentMean->getValue('id')); - } - - /** @test */ - public function it_can_retrieve_a_value_with_default_fallback(): void - { - $this->assertNull($this->paymentMean->getValue('non-existent')); - } - - /** @test */ - public function it_can_retrieve_a_value_with_fallback(): void - { - $this->assertEquals('fallback', $this->paymentMean->getValue('non-existent', 'fallback')); - } - - /** @test */ - public function it_can_retrieve_an_attribute(): void - { - $this->assertEquals(new Attribute([ - 'adyen_type' => 'adyen-type', - ]), $this->paymentMean->getAttribute()); - } - - /** @test */ - public function it_can_retrieve_attribute_adyen_type(): void - { - $this->assertEquals('adyen-type', $this->paymentMean->getAdyenCode()); - } - - /** @test */ - public function it_can_retrieve_default_attribute_adyen_type(): void - { - $paymentMean = PaymentMean::createFromShopwareArray(['source' => null]); - $this->assertEquals('', $paymentMean->getAdyenCode()); - } - - /** @test */ - public function it_can_retrieve_default_attribute_adyen_stored_method_id(): void - { - $paymentMean = PaymentMean::createFromShopwareArray(['source' => null]); - $this->assertEquals('', $paymentMean->getAdyenStoredMethodId()); - } -} diff --git a/tests/Unit/Models/Payment/PaymentMethodTest.php b/tests/Unit/Models/Payment/PaymentMethodTest.php deleted file mode 100755 index 4b57c6d7..00000000 --- a/tests/Unit/Models/Payment/PaymentMethodTest.php +++ /dev/null @@ -1,118 +0,0 @@ -paymentMethod = PaymentMethod::fromRaw([ - 'type' => 'bcmc', - 'name' => 'Bancontact', - 'details' => [ - 'key' => 'encryptedCardNumber', - ], - ]); - } - - /** @test */ - public function it_can_be_constructed_with_code(): void - { - $paymentMethod = $this->paymentMethod->withCode('adyen-code'); - - $this->assertNotSame($this->paymentMethod, $paymentMethod); - $this->assertEquals('bcmc_adyen_code', $paymentMethod->code()); - } - - /** @test */ - public function it_contains_a_type(): void - { - $this->assertEquals('bcmc', $this->paymentMethod->adyenType()->type()); - } - - /** @test */ - public function it_contains_a_group(): void - { - $this->assertEquals('payment', $this->paymentMethod->group()->group()); - } - - /** @test */ - public function it_contains_raw_data(): void - { - $this->assertEquals([ - 'type' => 'bcmc', - 'name' => 'Bancontact', - 'details' => [ - 'key' => 'encryptedCardNumber', - ], - ], $this->paymentMethod->rawData()); - } - - /** @test */ - public function it_contains_a_adyen_name(): void - { - $this->assertEquals('Bancontact', $this->paymentMethod->name()); - } - - /** @test */ - public function it_contains_a_stored_payment_method_id(): void - { - $this->assertEquals('', $this->paymentMethod->getStoredPaymentMethodId()); - } - - /** @test */ - public function it_know_it_is_a_stored_payment(): void - { - $this->assertFalse($this->paymentMethod->isStoredPayment()); - } - - /** @test */ - public function it_contains_details(): void - { - $this->assertTrue($this->paymentMethod->hasDetails()); - } - - /** @test */ - public function it_can_serialize_minimal_state(): void - { - $this->assertTrue($this->paymentMethod->hasDetails()); - } - - /** @test */ - public function it_can_retrieve_values_with_default_fallback(): void - { - $this->assertNull($this->paymentMethod->getValue('non-exisiting-key')); - } - - /** @test */ - public function it_can_retrieve_values_with_fallback(): void - { - $this->assertEquals('fallback-value', $this->paymentMethod->getValue('non-exisiting-key', 'fallback-value')); - } - - /** - * @test - * @dataProvider valueDataProvider - * - * @param mixed $expected - */ - public function it_can_retrieve_values($expected, string $key): void - { - $this->assertEquals($expected, $this->paymentMethod->getValue($key)); - } - - public function valueDataProvider(): iterable - { - yield ['bcmc', 'type']; - yield ['Bancontact', 'name']; - yield [['key' => 'encryptedCardNumber'], 'details']; - } -} diff --git a/tests/Unit/Models/Payment/PaymentTypeTest.php b/tests/Unit/Models/Payment/PaymentTypeTest.php deleted file mode 100755 index 9dc659a5..00000000 --- a/tests/Unit/Models/Payment/PaymentTypeTest.php +++ /dev/null @@ -1,47 +0,0 @@ -type = PaymentType::googlePay(); - } - - /** @test */ - public function it_contains_a_type(): void - { - $this->assertEquals('paywithgoogle', $this->type->type()); - } - - /** @test */ - public function it_knows_it_equals_google_pay_type(): void - { - $this->assertTrue($this->type->equals(PaymentType::googlePay())); - } - - /** @test */ - public function it_can_construct_type_apple_pay(): void - { - $type = PaymentType::applePay(); - $this->assertEquals('applepay', $type->type()); - $this->assertTrue($type->equals(PaymentType::applePay())); - } - - /** @test */ - public function it_can_be_constructed_by_load(): void - { - $paymentType = PaymentType::load($type = 'any-type'); - $this->assertEquals($type, $paymentType->type()); - $this->assertTrue($paymentType->equals(PaymentType::load($type))); - } -} diff --git a/tests/Unit/Models/PaymentMethod/ImportResultTest.php b/tests/Unit/Models/PaymentMethod/ImportResultTest.php deleted file mode 100755 index d840e43f..00000000 --- a/tests/Unit/Models/PaymentMethod/ImportResultTest.php +++ /dev/null @@ -1,87 +0,0 @@ -importResult = ImportResult::success( - new Shop(), - PaymentMethod::fromRaw([]), - ImportStatus::created() - ); - } - - /** @test */ - public function it_contains_a_shop(): void - { - $this->assertEquals(new Shop(), $this->importResult->getShop()); - } - - /** @test */ - public function it_contains_success(): void - { - $this->assertTrue($this->importResult->isSuccess()); - } - - /** @test */ - public function it_contains_a_payment_method(): void - { - $this->assertEquals(PaymentMethod::fromRaw([]), $this->importResult->getPaymentMethod()); - } - - /** @test */ - public function it_contains_a_exception(): void - { - $this->assertNull($this->importResult->getException()); - } - - /** @test */ - public function it_contains_a_status(): void - { - $this->assertEquals(ImportStatus::created(), $this->importResult->getStatus()); - } - - /** @test */ - public function it_can_be_constructed_by_success_sub_shop_fallback(): void - { - $result = ImportResult::successSubShopFallback( - $shop = new Shop(), - $status = ImportStatus::updated() - ); - - $this->assertSame($shop, $result->getShop()); - $this->assertTrue($result->isSuccess()); - $this->assertNull($result->getPaymentMethod()); - $this->assertNull($result->getException()); - $this->assertSame($status, $result->getStatus()); - } - - /** @test */ - public function it_can_be_constructed_from_exception(): void - { - $result = ImportResult::fromException( - $shop = new Shop(), - $paymentMethod = PaymentMethod::fromRaw([]), - $exception = new \Exception('message') - ); - - $this->assertSame($shop, $result->getShop()); - $this->assertFalse($result->isSuccess()); - $this->assertEquals($paymentMethod, $result->getPaymentMethod()); - $this->assertEquals($exception, $result->getException()); - $this->assertEquals(ImportStatus::notHandledStatus(), $result->getStatus()); - } -} diff --git a/tests/Unit/Models/PaymentResultCodeTest.php b/tests/Unit/Models/PaymentResultCodeTest.php deleted file mode 100755 index ab092a37..00000000 --- a/tests/Unit/Models/PaymentResultCodeTest.php +++ /dev/null @@ -1,91 +0,0 @@ -paymentResultCode = PaymentResultCode::authorised(); - } - - /** @test */ - public function it_knows_when_it_equals_payment_result_codes_objects(): void - { - $this->assertTrue($this->paymentResultCode->equals(PaymentResultCode::authorised())); - $this->assertFalse($this->paymentResultCode->equals(PaymentResultCode::invalid())); - } - - /** @test */ - public function it_is_immutable_constructed(): void - { - $paymentResultCodeAuthorised = PaymentResultCode::authorised(); - $this->assertEquals($this->paymentResultCode, $paymentResultCodeAuthorised); - $this->assertNotSame($this->paymentResultCode, $paymentResultCodeAuthorised); - } - - /** @test */ - public function it_throws_an_invalid_argument_exception_when_result_code_is_unknown(): void - { - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Invalid result code: "INVALID_CODE"'); - - PaymentResultCode::load('INVALID_CODE'); - } - - /** @test */ - public function it_can_load_a_result_code(): void - { - $this->assertEquals( - PaymentResultCode::authorised(), - PaymentResultCode::load('Authorised') - ); - } - - /** @test */ - public function it_knows_when_a_result_code_exists(): void - { - $result = PaymentResultCode::exists('Authorised'); - - $this->assertTrue($result); - } - - /** @test */ - public function it_knows_when_a_result_code_doesnt_exists(): void - { - $result = PaymentResultCode::exists('invalid-code-test'); - - $this->assertFalse($result); - } - - /** - * @dataProvider resultCodeProvider - * @test - */ - public function it_can_be_constructed_with_named_constructors(PaymentResultCode $resultCode, string $code): void - { - $this->assertEquals($code, $resultCode->resultCode()); - } - - public function resultCodeProvider(): \Generator - { - yield [PaymentResultCode::authorised(), 'Authorised']; - yield [PaymentResultCode::cancelled(), 'Cancelled']; - yield [PaymentResultCode::challengeShopper(), 'ChallengeShopper']; - yield [PaymentResultCode::error(), 'Error']; - yield [PaymentResultCode::invalid(), 'Invalid']; - yield [PaymentResultCode::identifyShopper(), 'IdentifyShopper']; - yield [PaymentResultCode::pending(), 'Pending']; - yield [PaymentResultCode::received(), 'Received']; - yield [PaymentResultCode::redirectShopper(), 'RedirectShopper']; - yield [PaymentResultCode::refused(), 'Refused']; - } -} diff --git a/tests/Unit/Models/RecurringPayment/RecurringPaymentTokenTest.php b/tests/Unit/Models/RecurringPayment/RecurringPaymentTokenTest.php deleted file mode 100755 index b9c8261a..00000000 --- a/tests/Unit/Models/RecurringPayment/RecurringPaymentTokenTest.php +++ /dev/null @@ -1,145 +0,0 @@ -recurringPaymentToken = RecurringPaymentToken::create( - $tokenIdentifier = TokenIdentifier::generateFromString($knownUuid = '033a6dad-5a58-4b74-b420-6772bab3946e'), - $customerId = 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j', - $recurringDetailReference = '8415698462516992', - $pspReference = '8515815919501547', - $orderNumber = 'YOUR_ORDER_NUMBER', - $resultCode = PaymentResultCode::authorised(), - $amountValue = 10500, - $amountCurrency = 'EUR' - ); - } - - /** @test */ - public function it_is_a_model_entity(): void - { - $this->assertInstanceOf(ModelEntity::class, $this->recurringPaymentToken); - } - - /** @test */ - public function it_contains_an_id(): void - { - $this->assertEquals('033a6dad-5a58-4b74-b420-6772bab3946e', $this->recurringPaymentToken->id()); - } - - /** @test */ - public function it_contains_a_token_identifier(): void - { - $this->assertEquals( - TokenIdentifier::generateFromString('033a6dad-5a58-4b74-b420-6772bab3946e'), - $this->recurringPaymentToken->tokenIdentifier() - ); - } - - /** @test */ - public function it_contains_a_customer_id(): void - { - $this->assertEquals('YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j', $this->recurringPaymentToken->customerId()); - } - - /** @test */ - public function it_contains_a_recurring_detail_reference(): void - { - $this->assertEquals('8415698462516992', $this->recurringPaymentToken->recurringDetailReference()); - } - - /** @test */ - public function it_contains_a_psp_reference(): void - { - $this->assertEquals('8515815919501547', $this->recurringPaymentToken->pspReference()); - } - - /** @test */ - public function it_contains_an_order_number(): void - { - $this->assertEquals('YOUR_ORDER_NUMBER', $this->recurringPaymentToken->orderNumber()); - } - - /** @test */ - public function it_contains_a_result_code_string(): void - { - $this->assertEquals('Authorised', $this->recurringPaymentToken->getResultCode()); - } - - /** @test */ - public function it_contains_a_result_code(): void - { - $this->assertEquals(PaymentResultCode::load('Authorised'), $this->recurringPaymentToken->resultCode()); - } - - /** @test */ - public function it_contains_an_amount_value(): void - { - $this->assertEquals(10500, $this->recurringPaymentToken->amountValue()); - } - - /** @test */ - public function it_contains_an_amount_currency(): void - { - $this->assertEquals('EUR', $this->recurringPaymentToken->amountCurrency()); - } - - /** @test */ - public function it_contains_a_created_at_timestamp(): void - { - $createdAt = new \DateTimeImmutable(); - $this->recurringPaymentToken->setCreatedAt($createdAt); - $this->assertInstanceOf(\DateTimeImmutable::class, $this->recurringPaymentToken->createdAt()); - $this->assertStringContainsString( - $createdAt->format('d/m/y H:i'), - $this->recurringPaymentToken->createdAt()->format('d/m/y H:i') - ); - } - - /** @test */ - public function it_contains_an_updated_at_timestamp(): void - { - $updatedAt = new \DateTimeImmutable(); - $this->assertInstanceOf(\DateTimeImmutable::class, $this->recurringPaymentToken->updatedAt()); - $this->assertStringContainsString( - $updatedAt->format('d/m/y'), - $this->recurringPaymentToken->updatedAt()->format('d/m/y') - ); - } - - /** @test */ - public function it_knows_when_it_is_a_one_off_payment(): void - { - $this->assertTrue($this->recurringPaymentToken->isOneOffPayment()); - } - - /** @test */ - public function it_knows_when_it_is_a_subscription(): void - { - $recurringPaymentTokenOrderNumberEmpty = RecurringPaymentToken::create( - TokenIdentifier::generateFromString($uuid = 'f958e8a5-c707-4901-91dd-0e16b22b898c'), - 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j', - '8415698462516992', - '8515815919501547', - $orderNumber = '', - PaymentResultCode::authorised(), - 10500, - 'EUR' - ); - $this->assertTrue($recurringPaymentTokenOrderNumberEmpty->isSubscription()); - } -} diff --git a/tests/Unit/Models/RecurringPayment/RecurringProcessingModelTest.php b/tests/Unit/Models/RecurringPayment/RecurringProcessingModelTest.php deleted file mode 100755 index be7c7fef..00000000 --- a/tests/Unit/Models/RecurringPayment/RecurringProcessingModelTest.php +++ /dev/null @@ -1,74 +0,0 @@ -recurringProcessingModel = RecurringProcessingModel::cardOnFile(); - } - - /** @test */ - public function it_contains_a_recurring_processing_model(): void - { - $this->assertInstanceOf(RecurringProcessingModel::class, $this->recurringProcessingModel); - } - - /** @test */ - public function it_knows_when_it_equals_a_processing_model(): void - { - $this->assertTrue($this->recurringProcessingModel->equals(RecurringProcessingModel::cardOnFile())); - $this->assertFalse($this->recurringProcessingModel->equals(RecurringProcessingModel::subscription())); - } - - /** @test */ - public function it_knows_when_it_equals_a_recurring_processing_model(): void - { - $recurringProcessingModel = RecurringProcessingModel::cardOnFile(); - $this->assertEquals($this->recurringProcessingModel, $recurringProcessingModel); - $this->assertNotSame($this->recurringProcessingModel, $recurringProcessingModel); - } - - /** @test */ - public function it_throws_an_invalid_argument_exception_when_recurring_processing_model_is_unknown(): void - { - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Invalid recurring processing model: "test"'); - - RecurringProcessingModel::load('test'); - } - - /** @test */ - public function it_can_load_a_recurring_processing_model(): void - { - $this->assertEquals( - RecurringProcessingModel::cardOnFile(), - RecurringProcessingModel::load('CardOnFile') - ); - } - - /** - * @dataProvider recurringProcessingModelProvider - * @test - */ - public function it_contains_recurring_processing_model( - RecurringProcessingModel $recurringProcessingModel, string $expected - ): void { - $this->assertEquals($expected, $recurringProcessingModel->recurringProcessingModel()); - } - - public function recurringProcessingModelProvider(): \Generator - { - yield [RecurringProcessingModel::cardOnFile(), 'CardOnFile']; - yield [RecurringProcessingModel::subscription(), 'Subscription']; - } -} diff --git a/tests/Unit/Models/RecurringPayment/ShopperInteractionTest.php b/tests/Unit/Models/RecurringPayment/ShopperInteractionTest.php deleted file mode 100755 index c3487af6..00000000 --- a/tests/Unit/Models/RecurringPayment/ShopperInteractionTest.php +++ /dev/null @@ -1,71 +0,0 @@ -shopperInteraction = ShopperInteraction::contAuth(); - } - - /** @test */ - public function it_contains_a_shopper_interaction(): void - { - $this->assertInstanceOf(ShopperInteraction::class, $this->shopperInteraction); - } - - /** @test */ - public function it_knows_when_it_equals_a_shopper_interaction(): void - { - $this->assertTrue($this->shopperInteraction->equals(ShopperInteraction::contAuth())); - $this->assertFalse($this->shopperInteraction->equals(ShopperInteraction::ecommerce())); - } - - /** @test */ - public function it_is_immutable_constructed(): void - { - $shopperInteractionContAuth = ShopperInteraction::contAuth(); - $this->assertEquals($this->shopperInteraction, $shopperInteractionContAuth); - $this->assertNotSame($this->shopperInteraction, $shopperInteractionContAuth); - } - - /** - * @dataProvider shopperInteractionProvider - * @test - */ - public function it_can_be_constructed_with_named_constructors(ShopperInteraction $shopperInteraction, string $expected): void - { - $this->assertEquals($expected, $shopperInteraction->shopperInteraction()); - } - - public function shopperInteractionProvider(): \Generator - { - yield [ShopperInteraction::contAuth(), 'ContAuth']; - yield [ShopperInteraction::ecommerce(), 'Ecommerce']; - } - - /** @test */ - public function it_throws_an_invalid_argument_exception_when_shopper_interaction_is_unknown(): void - { - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Invalid shopper interaction: "test"'); - - ShopperInteraction::load('test'); - } - - /** @test */ - public function it_can_load_a_shopper_interaction(): void - { - $result = ShopperInteraction::ecommerce(); - $this->assertEquals(ShopperInteraction::ecommerce(), $result); - } -} diff --git a/tests/Unit/Models/TokenIdentifierTest.php b/tests/Unit/Models/TokenIdentifierTest.php deleted file mode 100755 index 1c0f6e15..00000000 --- a/tests/Unit/Models/TokenIdentifierTest.php +++ /dev/null @@ -1,56 +0,0 @@ -tokenIdentifier = TokenIdentifier::generateFromString('3a2ee0d3-adc0-4386-869d-429b6d5f1fa0'); - } - - /** @test */ - public function it_contains_a_token_identifier(): void - { - $this->assertInstanceOf(TokenIdentifier::class, $this->tokenIdentifier); - } - - /** @test */ - public function it_knows_when_it_equals_token_identifier_objects(): void - { - $this->assertTrue($this->tokenIdentifier->equals(TokenIdentifier::generateFromString('3a2ee0d3-adc0-4386-869d-429b6d5f1fa0'))); - $this->assertFalse($this->tokenIdentifier->equals(TokenIdentifier::generate())); - } - - /** @test */ - public function it_constructs_immutable(): void - { - $tokenIdentifier = TokenIdentifier::generateFromString('3a2ee0d3-adc0-4386-869d-429b6d5f1fa0'); - $this->assertEquals($this->tokenIdentifier, $tokenIdentifier); - $this->assertNotSame($this->tokenIdentifier, $tokenIdentifier); - } - - /** @test */ - public function it_can_be_constructed_from_string(): void - { - $tokenIdentifier = TokenIdentifier::generateFromString($expected = 'af55ecab-90db-4501-ba7d-9eef61ac3ee3'); - - $this->assertEquals($expected, $tokenIdentifier->identifier()); - } - - /** @test */ - public function it_can_be_constructed_with_named_constructor(): void - { - $tokenIdentifier = TokenIdentifier::generate(); - - $this->assertInstanceOf(TokenIdentifier::class, $tokenIdentifier); - } -} diff --git a/tests/Unit/Recurring/RecurringTokenFactoryTest.php b/tests/Unit/Recurring/RecurringTokenFactoryTest.php deleted file mode 100644 index 1f422b2f..00000000 --- a/tests/Unit/Recurring/RecurringTokenFactoryTest.php +++ /dev/null @@ -1,89 +0,0 @@ -recurringTokenMapper = new RecurringTokenFactory(); - } - - /** @test */ - public function it_is_a_recurring_token_mapper(): void - { - $this->assertInstanceOf(RecurringTokenFactoryInterface::class, $this->recurringTokenMapper); - } - - /** @test */ - public function it_throws_invalid_payments_response_exception(): void - { - $this->expectException(InvalidPaymentsResponseException::class); - $this->expectExceptionMessage('Empty Payment data.'); - - RecurringTokenFactory::create([]); - } - - /** @test */ - public function it_can_map_from_array(): void - { - $adyenPaymentsResponseArray = [ - 'additionalData' => [ - 'recurring.recurringDetailReference' => '8415698462516992', - 'recurring.shopperReference' => 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j', - ], - 'pspReference' => '8515815919501547', - 'resultCode' => 'Authorised', - 'amount' => [ - 'currency' => 'USD', - 'value' => 0, - ], - 'merchantReference' => 'YOUR_ORDER_NUMBER', - ]; - $recurringPaymentToken = RecurringTokenFactory::create($adyenPaymentsResponseArray); - - $this->assertEquals('YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j', $recurringPaymentToken->customerId()); - $this->assertEquals('8415698462516992', $recurringPaymentToken->recurringDetailReference()); - $this->assertEquals('8515815919501547', $recurringPaymentToken->pspReference()); - $this->assertEquals('YOUR_ORDER_NUMBER', $recurringPaymentToken->orderNumber()); - $this->assertEquals(PaymentResultCode::load('Authorised'), $recurringPaymentToken->resultCode()); - $this->assertIsInt($recurringPaymentToken->amountValue()); - $this->assertEquals(0, $recurringPaymentToken->amountValue()); - $this->assertEquals('USD', $recurringPaymentToken->amountCurrency()); - } - - /** @test */ - public function it_can_map_default_values(): void - { - $adyenPaymentsResponseArray = [ - 'additionalData' => [ - ], - 'amount' => [ - ], - ]; - $recurringPaymentToken = RecurringTokenFactory::create($adyenPaymentsResponseArray); - - $this->assertEquals('', $recurringPaymentToken->customerId()); - $this->assertEquals('', $recurringPaymentToken->recurringDetailReference()); - $this->assertEquals('', $recurringPaymentToken->pspReference()); - $this->assertEquals('', $recurringPaymentToken->orderNumber()); - $this->assertEquals(PaymentResultCode::load('Invalid'), $recurringPaymentToken->resultCode()); - $this->assertEquals(0, $recurringPaymentToken->amountValue()); - $this->assertEquals('', $recurringPaymentToken->amountCurrency()); - } -} diff --git a/tests/Unit/Repository/RecurringPayment/RecurringPaymentTokenRepositoryTest.php b/tests/Unit/Repository/RecurringPayment/RecurringPaymentTokenRepositoryTest.php deleted file mode 100755 index 97fbbb74..00000000 --- a/tests/Unit/Repository/RecurringPayment/RecurringPaymentTokenRepositoryTest.php +++ /dev/null @@ -1,113 +0,0 @@ -entityManager = $this->prophesize(EntityManager::class); - $this->recurringPaymentTokenEntityRepository = $this->prophesize(EntityRepository::class); - $this->recurringPaymentTokenRepository = new RecurringPaymentTokenRepository( - $this->entityManager->reveal(), - $this->recurringPaymentTokenEntityRepository->reveal() - ); - } - - /** @test */ - public function it_is_a_recurring_payment_token_repository(): void - { - $this->assertInstanceOf(RecurringPaymentTokenRepositoryInterface::class, $this->recurringPaymentTokenRepository); - } - - /** @test */ - public function it_can_fetch_a_recurring_payment_token_by_customer_id_and_order_number(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - - $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'customerId' => $customerId = 'customer-id', - 'orderNumber' => $orderNumber = 'order-number', - ])->willReturn($recurringPaymentToken->reveal()); - - $result = $this->recurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber($customerId, $orderNumber); - - self::assertEquals($recurringPaymentToken->reveal(), $result); - } - - /** @test */ - public function it_will_throw_an_error_on_missing_recurring_payment_token_by_customer_id_and_order_number(): void - { - $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'customerId' => $customerId = 'customer-id', - 'orderNumber' => $orderNumber = 'order-number', - ])->willReturn(null); - - self::expectException(RecurringPaymentTokenNotFoundException::class); - - $this->recurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber($customerId, $orderNumber); - } - - /** @test */ - public function it_can_fetch_a_recurring_payment_token_by_psp_reference(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - - $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'resultCode' => PaymentResultCode::pending()->resultCode(), - 'pspReference' => $pspReference = 'psp-reference', - ])->willReturn($recurringPaymentToken->reveal()); - - $result = $this->recurringPaymentTokenRepository->fetchPendingByPspReference($pspReference); - - self::assertEquals($recurringPaymentToken->reveal(), $result); - } - - /** @test */ - public function it_will_throw_an_error_on_missing_recurring_payment_token_by_psp_reference(): void - { - $this->recurringPaymentTokenEntityRepository->findOneBy([ - 'resultCode' => PaymentResultCode::pending()->resultCode(), - 'pspReference' => $pspReference = 'psp-reference', - ])->willReturn(null); - - self::expectException(RecurringPaymentTokenNotFoundException::class); - - $this->recurringPaymentTokenRepository->fetchPendingByPspReference($pspReference); - } - - /** @test */ - public function it_can_update_a_recurring_payment_token(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - $this->entityManager->persist($recurringPaymentToken->reveal())->shouldBeCalled(); - $this->entityManager->flush($recurringPaymentToken->reveal())->shouldBeCalled(); - - $this->recurringPaymentTokenRepository->update($recurringPaymentToken->reveal()); - } -} diff --git a/tests/Unit/Repository/RecurringPayment/TraceableRecurringPaymentTokenRepositoryTest.php b/tests/Unit/Repository/RecurringPayment/TraceableRecurringPaymentTokenRepositoryTest.php deleted file mode 100755 index 4f6a7804..00000000 --- a/tests/Unit/Repository/RecurringPayment/TraceableRecurringPaymentTokenRepositoryTest.php +++ /dev/null @@ -1,154 +0,0 @@ -recurringPaymentTokenRepository = $this->prophesize(RecurringPaymentTokenRepositoryInterface::class); - $this->logger = $this->prophesize(LoggerInterface::class); - $this->traceableRecurringPaymentTokenRepository = new TraceableRecurringPaymentTokenRepository( - $this->recurringPaymentTokenRepository->reveal(), - $this->logger->reveal() - ); - } - - /** @test */ - public function it_is_a_recurring_payment_token_repository(): void - { - $this->assertInstanceOf( - RecurringPaymentTokenRepositoryInterface::class, - $this->traceableRecurringPaymentTokenRepository - ); - } - - /** @test */ - public function it_can_fetch_a_recurring_payment_token_by_customer_id_and_order_number(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - - $this->recurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber( - $customerId = 'customer-id', - $orderNumber = 'order-number' - )->willReturn($recurringPaymentToken->reveal()); - - $result = $this->traceableRecurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber( - $customerId, - $orderNumber - ); - - self::assertEquals($recurringPaymentToken->reveal(), $result); - } - - /** @test */ - public function it_will_throw_an_error_on_missing_recurring_payment_token_by_customer_id_and_order_number(): void - { - $exception = new RecurringPaymentTokenNotFoundException(); - $this->recurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber( - $customerId = 'customer-id', - $orderNumber = 'order-number' - )->willThrow($exception); - - $this->logger->info($exception->getMessage(), ['exception' => $exception])->shouldBeCalled(); - - self::expectException(RecurringPaymentTokenNotFoundException::class); - - $this->traceableRecurringPaymentTokenRepository->fetchByCustomerIdAndOrderNumber($customerId, $orderNumber); - } - - /** @test */ - public function it_can_fetch_a_recurring_payment_token_by_psp_reference(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - - $this->recurringPaymentTokenRepository->fetchPendingByPspReference($pspReference = 'psp-reference') - ->willReturn($recurringPaymentToken->reveal()); - - $result = $this->traceableRecurringPaymentTokenRepository->fetchPendingByPspReference($pspReference); - - self::assertEquals($recurringPaymentToken->reveal(), $result); - } - - /** @test */ - public function it_will_throw_an_error_on_missing_recurring_payment_token_by_psp_reference(): void - { - $exception = new RecurringPaymentTokenNotFoundException(); - $this->recurringPaymentTokenRepository->fetchPendingByPspReference($pspReference = 'psp-reference') - ->willThrow($exception); - - $this->logger->info($exception->getMessage(), ['exception' => $exception])->shouldBeCalled(); - - self::expectException(RecurringPaymentTokenNotFoundException::class); - - $this->traceableRecurringPaymentTokenRepository->fetchPendingByPspReference($pspReference); - } - - /** @test */ - public function it_can_update_a_recurring_payment_token(): void - { - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - $this->recurringPaymentTokenRepository->update($recurringPaymentToken->reveal())->shouldBeCalled(); - - $this->traceableRecurringPaymentTokenRepository->update($recurringPaymentToken->reveal()); - } - - /** @test */ - public function it_can_catch_a_orm_exception_on_updating_a_recurring_payment_token(): void - { - $ormException = new ORMException(); - $token = TokenIdentifier::generate(); - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - $recurringPaymentToken->tokenIdentifier()->willReturn($token); - - $this->recurringPaymentTokenRepository->update($recurringPaymentToken->reveal())->willThrow($ormException); - $this->logger->error($ormException->getMessage(), ['exception' => $ormException]); - - self::expectException(RecurringPaymentTokenNotSavedException::class); - - $this->traceableRecurringPaymentTokenRepository->update($recurringPaymentToken->reveal()); - } - - /** @test */ - public function it_can_catch_a_orm_invalid_argument_exception_on_updating_a_recurring_payment_token(): void - { - $ormException = new ORMInvalidArgumentException(); - $token = TokenIdentifier::generate(); - $recurringPaymentToken = $this->prophesize(RecurringPaymentToken::class); - $recurringPaymentToken->tokenIdentifier()->willReturn($token); - - $this->recurringPaymentTokenRepository->update($recurringPaymentToken->reveal())->willThrow($ormException); - $this->logger->error($ormException->getMessage(), ['exception' => $ormException]); - - self::expectException(RecurringPaymentTokenNotSavedException::class); - - $this->traceableRecurringPaymentTokenRepository->update($recurringPaymentToken->reveal()); - } -} diff --git a/tests/Unit/Session/CustomerNumberProviderTest.php b/tests/Unit/Session/CustomerNumberProviderTest.php deleted file mode 100755 index 1fff4421..00000000 --- a/tests/Unit/Session/CustomerNumberProviderTest.php +++ /dev/null @@ -1,89 +0,0 @@ -session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->modelManager = $this->prophesize(ModelManager::class); - $this->customerNumberProvider = new CustomerNumberProvider( - $this->session->reveal(), - $this->modelManager->reveal() - ); - } - - /** @test */ - public function it_is_a_customer_number_provider(): void - { - $this->assertInstanceOf(CustomerNumberProviderInterface::class, $this->customerNumberProvider); - } - - /** @test */ - public function it_provides_empty_string_when_no_user_id_in_session(): void - { - $this->session->get('sUserId')->shouldBeCalledOnce()->willReturn(null); - $this->modelManager->getRepository(Customer::class)->shouldNotBeCalled(); - $customerNumber = ($this->customerNumberProvider)(); - - $this->assertEquals('', $customerNumber); - } - - /** @test */ - public function it_provides_empty_string_when_no_customer_returned_from_repository(): void - { - $customerRepository = $this->prophesize(EntityRepository::class); - - $this->session->get('sUserId')->shouldBeCalledOnce()->willReturn($userId = '123'); - $this->modelManager->getRepository(Customer::class) - ->shouldBeCalledOnce() - ->willReturn($customerRepository->reveal()); - $customerRepository->find($userId)->willReturn(null); - - $customerNumber = ($this->customerNumberProvider)(); - $this->assertEquals('', $customerNumber); - } - - /** @test */ - public function it_provides_customer_number(): void - { - $customer = new Customer(); - $customer->setNumber($customerNumber = 'abc'); - - $customerRepository = $this->prophesize(EntityRepository::class); - - $this->session->get('sUserId')->shouldBeCalledOnce()->willReturn($customerNumber); - $this->modelManager->getRepository(Customer::class) - ->shouldBeCalledOnce() - ->willReturn($customerRepository->reveal()); - $customerRepository->find($customerNumber) - ->willReturn($customer); - - $customerNumberExpected = ($this->customerNumberProvider)(); - $this->assertEquals($customerNumberExpected, $customerNumber); - } -} diff --git a/tests/Unit/Shopware/Controllers/Frontend/CheckoutTest.php b/tests/Unit/Shopware/Controllers/Frontend/CheckoutTest.php deleted file mode 100644 index ee0d6835..00000000 --- a/tests/Unit/Shopware/Controllers/Frontend/CheckoutTest.php +++ /dev/null @@ -1,151 +0,0 @@ -admin = $this->prophesize(\sAdmin::class); - $this->basket = $this->prophesize(\sBasket::class); - $this->session = $this->prophesize(\Enlight_Components_Session_Namespace::class); - $this->container = $this->prophesize(Container::class); - $this->engine = $this->prophesize(Enlight_Template_Manager::class); - $this->view = new \Enlight_View_Default($this->engine->reveal()); - $this->checkoutController = new MockCheckout(); - } - - /** @test */ - public function it_is_csrf_get_protection_aware(): void - { - $this->assertInstanceOf(CSRFGetProtectionAware::class, $this->checkoutController); - } - - /** @test */ - public function it_returns_complete_basket_data_to_view(): void - { - $this->markTestIncomplete(); -// $this->view->setScope(['test']); -// $this->view->assign('sUserData', ['additional' => ['countryShipping' => null]]); - - $this->checkoutController->setAdyenMockProperties( - $this->admin->reveal(), - $this->basket->reveal(), - $this->session->reveal(), - $this->container->reveal() -// $this->view - ); - - $countryList = [ $country = [ - "id" => 2, - "name" => "Deutschland", - "iso" => "DE", - "en" => "GERMANY", - "description" => "", - "position" => 1, - "active" => true, - "iso3" => "DEU", - "taxFree" => false, - "taxFreeForVatId" => false, - "vatIdCheck" => false, - "displayStateSelection" => false, - "requiresStateSelection" => false, - "allowShipping" => true, - "states" => [], - "areaId" => 1, - "attributes" => [], - "countryname" => "Deutschland", - "countryiso" => "DE", - "countryen" => "GERMANY", - "taxfree" => false, - "taxfree_ustid" => false, - "taxfree_ustid_checked" => false, - "display_state_in_registration" => false, - "force_state_in_registration" => false, - "areaID" => 1, - "allow_shipping" => true, - "flag" => false - ]]; - - $this->admin->sGetCountryList()->willReturn($countryList); -// $this->admin->sGetCountryList()->shouldBeCalledOnce(); - - $shop = new Shop(); - $currency = new Currency(); - $currency->setCurrency('EUR'); - $currency->setFactor(2); - $shop->setCurrency($currency); - $shop = $this->container->get('shop')->willReturn($shop); - - $positions = [ - new Price( - (float) $price = ($endPrice = 121.00) * ($quantity = 2), - (float) $netPrice = ($netPrice = 100.00 * $quantity), - (float) $taxRate = 21.0, - null - ) - ]; - $basketHelper = $this->prophesize(BasketHelperInterface::class); - $basketHelper->getPositionPrices(Argument::cetera())->willReturn($positions); - $positions = $this->container->get(BasketHelperInterface::class)->willReturn($basketHelper); - - $proportionalTaxCalculator = $this->prophesize(ProportionalTaxCalculatorInterface::class); - $taxCalculator = $this->container->get('shopware.cart.proportional_tax_calculator') - ->willReturn($proportionalTaxCalculator); - $proportionalTaxCalculator->hasDifferentTaxes(Argument::cetera()) - ->willReturn(true); - - $configComponent = $this->prophesize(\Shopware_Components_Config::class); - $config = $this->container->get(\Shopware_Components_Config::class) - ->willReturn($configComponent); - - $basketResult = $this->checkoutController->getBasket(); - } -} - -class MockCheckout extends \Shopware_Controllers_Frontend_Checkout -{ - - public function setAdyenMockProperties($admin, $basket, $session, $container, $view): void - { - $this->admin = $admin; - $this->basket = $basket; - $this->session = $session; - $this->container = $container; - $this->view = $view; - } -} diff --git a/tests/Unit/Shopware/Plugin/PluginIdProviderTest.php b/tests/Unit/Shopware/Plugin/PluginIdProviderTest.php deleted file mode 100644 index c51dfef2..00000000 --- a/tests/Unit/Shopware/Plugin/PluginIdProviderTest.php +++ /dev/null @@ -1,61 +0,0 @@ -pluginManager = $this->prophesize(InstallerService::class); - $this->logger = $this->prophesize(LoggerInterface::class); - $this->provider = new TraceablePluginIdProvider( - $this->pluginManager->reveal(), - $this->logger->reveal() - ); - } - - /** @test */ - public function it_can_provide_plugin_id(): void - { - $plugin = new Plugin(); - $plugin->setId($id = 3633); - $this->pluginManager->getPluginByName('AdyenPayment')->willReturn($plugin); - $this->logger->critical(Argument::cetera())->shouldNotBeCalled(); - - $result = $this->provider->provideId(); - $this->assertEquals($id, $result); - } - - /** @test */ - public function it_logs_and_throws_exception(): void - { - $this->pluginManager->getPluginByName(Argument::cetera()) - ->willThrow($exception = new \Exception($message = 'Some Unknown plugin')); - $this->logger->critical( - 'Could not provide the "id" of plugin "'.AdyenPayment::NAME.'"', - ['exception' => $exception] - )->shouldBeCalled(); - - $this->expectExceptionObject($exception); - $this->provider->provideId(); - } -} diff --git a/tests/Unit/Shopware/Serializer/SwPaymentMeanSerializerTest.php b/tests/Unit/Shopware/Serializer/SwPaymentMeanSerializerTest.php deleted file mode 100755 index e2bfca20..00000000 --- a/tests/Unit/Shopware/Serializer/SwPaymentMeanSerializerTest.php +++ /dev/null @@ -1,65 +0,0 @@ -serializer = new SwPaymentMeanSerializer(); - } - - /** @test */ - public function it_is_a_payment_mean_collection_serializer(): void - { - $this->assertInstanceOf(PaymentMeanSerializer::class, $this->serializer); - } - - /** @test */ - public function it_can_serialize(): void - { - $paymentMean = PaymentMean::createFromShopwareArray($raw = [ - 'id' => $id = 15, - 'source' => null, - 'name' => 'invoice', - 'description' => 'Rechnung', - 'additionaldescription' => 'additional', - ]); - - $result = ($this->serializer)($paymentMean); - $this->assertEquals([$id => $raw], $result); - } - - /** @test */ - public function it_can_serialize_html(): void - { - $paymentMean = PaymentMean::createFromShopwareArray($raw = [ - 'id' => $id = 7845, - 'source' => $source = 1, - 'name' => ' a name "quoted"', - 'description' => "description anda link", - 'additionaldescription' => "additional
a div
and link", - ]); - - $result = ($this->serializer)($paymentMean); - $this->assertEquals([ - $id => [ - 'id' => $id, - 'source' => $source, - 'name' => ' a name "quoted"', - 'description' => "description anda link", - 'additionaldescription' => "additional
a div
and link", - ], - ], $result); - } -} diff --git a/tests/Unit/Subscriber/Account/SaveStoredMethodPreferenceSubscriberTest.php b/tests/Unit/Subscriber/Account/SaveStoredMethodPreferenceSubscriberTest.php deleted file mode 100755 index fdfe58c5..00000000 --- a/tests/Unit/Subscriber/Account/SaveStoredMethodPreferenceSubscriberTest.php +++ /dev/null @@ -1,205 +0,0 @@ -args = $this->prophesize(Enlight_Controller_ActionEventArgs::class); - $this->request = $this->prophesize(Enlight_Controller_Request_Request::class); - $this->session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->userPreferenceManager = $this->prophesize(UserPreferenceManagerInterface::class); - $this->userPreferenceRepository = $this->prophesize(EntityRepository::class); - $this->storedPaymentMeanProvider = $this->prophesize(StoredPaymentMeanProviderInterface::class); - - $this->subscriber = new SaveStoredMethodPreferenceSubscriber( - $this->session->reveal(), - $this->userPreferenceManager->reveal(), - $this->userPreferenceRepository->reveal(), - $this->storedPaymentMeanProvider->reveal() - ); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - ['Enlight_Controller_Action_PostDispatch_Frontend_Account' => '__invoke'], - SaveStoredMethodPreferenceSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_missing_user_id(): void - { - $this->session->get('sUserId')->willReturn(null); - $this->request->getActionName()->shouldNotBeCalled(); - $this->request->isPost()->shouldNotBeCalled(); - $this->args->getRequest()->shouldNotBeCalled(); - $this->storedPaymentMeanProvider->fromRequest(Argument::cetera())->shouldNotBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_action_name(): void - { - $this->session->get('sUserId')->willReturn(123456); - $this->request->getActionName()->willReturn('wrong-action-name'); - $this->request->isPost()->willReturn(true); - $this->args->getRequest()->willReturn($this->request); - $this->storedPaymentMeanProvider->fromRequest(Argument::cetera())->shouldNotBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_method(): void - { - $this->session->get('sUserId')->willReturn(123456); - $this->request->getActionName()->willReturn('savePayment'); - $this->request->isPost()->willReturn(false); - $this->args->getRequest()->willReturn($this->request); - $this->storedPaymentMeanProvider->fromRequest(Argument::cetera())->shouldNotBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_will_save_the_user_preferences_with_empty_params(): void - { - $this->session->get('sUserId')->willReturn($userId = 123456); - $this->request->getActionName()->willReturn('savePayment'); - $this->request->isPost()->willReturn(true); - $this->request->getParam('register', [])->willReturn([]); - $this->args->getRequest()->willReturn($this->request->reveal()); - $this->storedPaymentMeanProvider->fromRequest($this->request->reveal())->willReturn(null); - - $userPreference = new UserPreference(); - $userPreference->setUserId($userId); - $userPreference->setStoredMethodId(null); - - $this->userPreferenceManager->save($userPreference)->shouldBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_will_save_the_user_preferences_with_null_for_none_stored_method_param(): void - { - $this->session->get('sUserId')->willReturn($userId = 123456); - $this->request->getActionName()->willReturn('savePayment'); - $this->request->isPost()->willReturn(true); - $this->request->getParam('register', [])->willReturn(['payment' => 'noneStoredPaymentId']); - $this->args->getRequest()->willReturn($this->request->reveal()); - $this->storedPaymentMeanProvider->fromRequest($this->request->reveal())->willReturn(null); - - $userPreference = new UserPreference(); - $userPreference->setUserId($userId); - $userPreference->setStoredMethodId(null); - - $this->userPreferenceManager->save($userPreference)->shouldBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_will_save_the_user_preferences_with_param_value(): void - { - $this->session->get('sUserId')->willReturn($userId = 123456); - $this->request->getActionName()->willReturn('savePayment'); - $this->request->isPost()->willReturn(true); - $this->request->getParam('register', [])->willReturn([ - 'payment' => 'proper_'.($storedMethodId = 'storedMethodId'), - ]); - $this->args->getRequest()->willReturn($this->request->reveal()); - $storedPaymentMean = PaymentMean::createFromShopwareArray([ - 'source' => 'any', - 'stored_method_id' => $storedMethodId, - ]); - $this->storedPaymentMeanProvider->fromRequest($this->request->reveal())->willReturn($storedPaymentMean); - - $userPreference = new UserPreference(); - $userPreference->setUserId($userId); - $userPreference->setStoredMethodId($storedMethodId); - - $this->userPreferenceManager->save($userPreference)->shouldBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } - - /** @test */ - public function it_will_update_the_user_preferences_with_param_value(): void - { - $this->session->get('sUserId')->willReturn($userId = 123456); - $this->request->getActionName()->willReturn('savePayment'); - $this->request->isPost()->willReturn(true); - $this->request->getParam('register', [])->willReturn([ - 'payment' => 'proper_'.($storedMethodId = 'storedMethodId'), - ]); - $this->args->getRequest()->willReturn($this->request->reveal()); - $storedPaymentMean = PaymentMean::createFromShopwareArray([ - 'source' => 'any', - 'stored_method_id' => $storedMethodId, - ]); - $this->storedPaymentMeanProvider->fromRequest($this->request->reveal())->willReturn($storedPaymentMean); - - $userPreference = new UserPreference(); - $userPreference->setId(123); - $userPreference->setUserId($userId); - $userPreference->setStoredMethodId($storedMethodId); - - $this->userPreferenceRepository->findOneBy(['userId' => $userId])->willReturn($userPreference); - - $this->userPreferenceManager->save($userPreference)->shouldBeCalled(); - - $this->subscriber->__invoke($this->args->reveal()); - } -} diff --git a/tests/Unit/Subscriber/Backend/HideStoredPaymentsSubscriberTest.php b/tests/Unit/Subscriber/Backend/HideStoredPaymentsSubscriberTest.php deleted file mode 100755 index 1c7182b7..00000000 --- a/tests/Unit/Subscriber/Backend/HideStoredPaymentsSubscriberTest.php +++ /dev/null @@ -1,119 +0,0 @@ -subscriber = new HideStoredPaymentsSubscriber(); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - [ - 'Enlight_Controller_Action_PostDispatchSecure_Backend_Payment' => '__invoke', - ], - HideStoredPaymentsSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_missing_request(): void - { - $eventArgs = new \Enlight_Controller_ActionEventArgs([ - 'subject' => $this->buildSubject($viewData = ['data' => 'view-data']), - 'request' => null, - 'response' => new \Enlight_Controller_Response_ResponseTestCase(), - ]); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_response(): void - { - $eventArgs = new \Enlight_Controller_ActionEventArgs([ - 'subject' => $this->buildSubject($viewData = ['data' => 'view-data']), - 'request' => new \Enlight_Controller_Request_RequestTestCase(), - 'response' => null, - ]); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_non_success_response_code(): void - { - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data'], Response::HTTP_BAD_REQUEST); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_action_name(): void - { - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_empty_view_data(): void - { - $eventArgs = $this->buildEventArgs('getPayments', $viewData = []); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_filters_hidden_payment_means(): void - { - $viewData = [ - 'data' => [ - $nonHiddenPaymentMean = [ - 'name' => 'A payment mean not hidden', - 'source' => SourceType::shopwareDefault()->getType(), - 'hide' => false, - ], - [ - 'name' => 'A hidden payment mean', - 'source' => SourceType::shopwareDefault()->getType(), - 'hide' => true, - ], - ], - ]; - $eventArgs = $this->buildEventArgs('getPayments', $viewData); - - $this->subscriber->__invoke($eventArgs); - $this->assertEquals([ - 'data' => [ - $nonHiddenPaymentMean, - ], - ], $eventArgs->getSubject()->View()->getAssign()); - } -} diff --git a/tests/Unit/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriberTest.php b/tests/Unit/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriberTest.php deleted file mode 100755 index 99b477d1..00000000 --- a/tests/Unit/Subscriber/Checkout/EnrichUmbrellaPaymentMeanSubscriberTest.php +++ /dev/null @@ -1,176 +0,0 @@ -session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->paymentMeansProvider = $this->prophesize(PaymentMeansProviderInterface::class); - $this->subscriber = new EnrichUmbrellaPaymentMeanSubscriber( - $this->session->reveal(), - $this->paymentMeansProvider->reveal() - ); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - ['Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke'], - EnrichUmbrellaPaymentMeanSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_action_name(): void - { - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_xhr_request(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = ['data' => 'view-data']); - $eventArgs->getRequest()->setParam('isXHR', true); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_session_and_none_preselected_stored_method_id(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = ['data' => 'view-data']); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - $this->paymentMeansProvider->__invoke()->willReturn([]); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_umbrella_method_for_preselected_payment(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = [ - 'sUserData' => ['additional' => ['payment' => ['id' => 'preselectedPaymentId']]], - ]); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - $this->paymentMeansProvider->__invoke()->willReturn([]); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_payment_mean_for_stored_method(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = ['data' => 'view-data']); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->paymentMeansProvider->__invoke()->willReturn([]); - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn($storedMethodId = 'method-id'); - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_use_the_preselected_stored_method_id_on_preselected_umbrella_payment(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = [ - 'adyenUserPreference' => ['storedMethodId' => $preselectedStoredMethod = 'any-stored-method-id'], - 'sUserData' => ['additional' => ['payment' => ['id' => $preselectedUmbrellaId = 'umbrellaPaymentId']]], - 'sFormData' => [], - ]); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - $this->paymentMeansProvider->__invoke()->willReturn([ - $umbrellaPaymentMeanRaw = [ - 'id' => $preselectedUmbrellaId, - 'name' => AdyenPayment::ADYEN_STORED_PAYMENT_UMBRELLA_CODE, - 'source' => 123, - 'adyenType' => 'test', - ], - $paymentMeanRaw = [ - 'source' => 1234, - 'adyenType' => 'test', - 'stored_method_id' => $preselectedStoredMethod, - 'stored_method_umbrella_id' => $umbrellaId = 'umbrella-id', - ], - ]); - - $this->subscriber->__invoke($eventArgs); - - $expected = [ - 'adyenUserPreference' => ['storedMethodId' => $preselectedStoredMethod], - 'sUserData' => ['additional' => ['payment' => $paymentMeanRaw]], - 'sFormData' => ['payment' => $umbrellaId], - ]; - - self::assertEquals($expected, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_will_enrich_the_payment_mean_for_stored_method(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = [ - 'sUserData' => ['additional' => ['payment' => ['not-enriched-payment-data']]], - 'sFormData' => [], - ]); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn($storedMethodId = 'method-id'); - $this->paymentMeansProvider->__invoke()->willReturn([$paymentMeanRaw = [ - 'source' => 123, - 'adyenType' => 'test', - 'stored_method_id' => $storedMethodId, - 'stored_method_umbrella_id' => $umbrellaId = 'umbrella-id', - ]]); - - $this->subscriber->__invoke($eventArgs); - - $expected = [ - 'sUserData' => ['additional' => ['payment' => $paymentMeanRaw]], - 'sFormData' => ['payment' => $umbrellaId], - ]; - - self::assertEquals($expected, $eventArgs->getSubject()->View()->getAssign()); - } -} diff --git a/tests/Unit/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriberTest.php b/tests/Unit/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriberTest.php deleted file mode 100755 index 6f7725f5..00000000 --- a/tests/Unit/Subscriber/Checkout/EnrichUserAdditionalPaymentSubscriberTest.php +++ /dev/null @@ -1,170 +0,0 @@ -enrichedPaymentMeanProvider = $this->prophesize(EnrichedPaymentMeanProviderInterface::class); - $this->paymentMeansProvider = $this->prophesize(PaymentMeansProviderInterface::class); - $this->session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->subscriber = new EnrichUserAdditionalPaymentSubscriber( - $this->enrichedPaymentMeanProvider->reveal(), - $this->paymentMeansProvider->reveal(), - $this->session->reveal() - ); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - ['Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => ['__invoke', -99999]], - EnrichUserAdditionalPaymentSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_action_name(): void - { - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_stored_method_id_and_payment_mean_id(): void - { - $eventArgs = $this->buildEventArgs('confirm', $viewData = ['sUserData' => []]); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - - $this->subscriber->__invoke($eventArgs); - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_payment_mean_for_stored_method_id(): void - { - $eventArgs = $this->buildEventArgs('confirm', $viewData = ['sUserData' => []]); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn('method-id'); - $this->paymentMeansProvider->__invoke()->willReturn($paymentMeansRaw = [[ - 'source' => 123, - 'adyenType' => 'test', - ]]); - - $paymentMeans = PaymentMeanCollection::createFromShopwareArray($paymentMeansRaw); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willReturn($paymentMeans); - - $this->subscriber->__invoke($eventArgs); - - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_payment_mean_for_payment_id(): void - { - $eventArgs = $this->buildEventArgs('confirm', $viewData = ['sUserData' => [ - 'additional' => ['payment' => ['id' => $paymentId = '123123']], - ]]); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - $this->paymentMeansProvider->__invoke()->willReturn($paymentMeansRaw = [[ - 'source' => 123, - 'adyenType' => 'test', - ]]); - - $paymentMeans = PaymentMeanCollection::createFromShopwareArray($paymentMeansRaw); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willReturn($paymentMeans); - - $this->subscriber->__invoke($eventArgs); - - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_will_update_the_view_with_payment_mean_for_stored_method_id(): void - { - $eventArgs = $this->buildEventArgs('confirm', $viewData = ['sUserData' => []]); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn($storedMethodId = 'method-id'); - $this->paymentMeansProvider->__invoke()->willReturn($paymentMeansRaw = [$paymentMeanRaw = [ - 'source' => 123, - 'adyenType' => 'test', - 'stored_method_id' => $storedMethodId, - ]]); - - $paymentMeans = PaymentMeanCollection::createFromShopwareArray($paymentMeansRaw); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willReturn($paymentMeans); - - $this->subscriber->__invoke($eventArgs); - - $expected = [ - 'sUserData' => ['additional' => ['payment' => $paymentMeanRaw]], - ]; - - self::assertEquals($expected, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_will_update_the_view_with_payment_mean_for_payment_id(): void - { - $eventArgs = $this->buildEventArgs('confirm', $viewData = ['sUserData' => [ - 'additional' => ['payment' => ['id' => $paymentId = '123123']], - ]]); - - $this->session->get(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID)->willReturn(null); - $this->paymentMeansProvider->__invoke()->willReturn($paymentMeansRaw = [$paymentMeanRaw = [ - 'id' => $paymentId, - 'source' => 123, - 'adyenType' => 'test', - ]]); - - $paymentMeans = PaymentMeanCollection::createFromShopwareArray($paymentMeansRaw); - $this->enrichedPaymentMeanProvider->__invoke($paymentMeans)->willReturn($paymentMeans); - - $this->subscriber->__invoke($eventArgs); - - $expected = [ - 'sUserData' => ['additional' => ['payment' => $paymentMeanRaw]], - ]; - - self::assertEquals($expected, $eventArgs->getSubject()->View()->getAssign()); - } -} diff --git a/tests/Unit/Subscriber/Checkout/PersistStoredMehtodIdSubscriberTest.php b/tests/Unit/Subscriber/Checkout/PersistStoredMehtodIdSubscriberTest.php deleted file mode 100755 index b6431020..00000000 --- a/tests/Unit/Subscriber/Checkout/PersistStoredMehtodIdSubscriberTest.php +++ /dev/null @@ -1,99 +0,0 @@ -session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->modules = $this->prophesize(Shopware_Components_Modules::class); - $this->modules->Admin()->willReturn($this->prophesize(sAdmin::class)); - $this->subscriber = new PersistStoredMethodIdSubscriber($this->session->reveal(), $this->modules->reveal()); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - ['Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => '__invoke'], - PersistStoredMethodIdSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_wrong_request_action_name(): void - { - $eventArgs = $this->buildEventArgs('', $viewData = []); - $eventArgs->getRequest()->setParam('isXHR', true); - - $this->session->set(Argument::cetera())->shouldNotBeCalled(); - - $this->subscriber->__invoke($eventArgs); - } - - /** @test */ - public function it_does_nothing_on_shipping_payment_non_xhr_request(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = []); - $eventArgs->getRequest()->setParam('isXHR', false); - - $this->session->set(Argument::cetera())->shouldNotBeCalled(); - - $this->subscriber->__invoke($eventArgs); - } - - /** @test */ - public function it_saves_in_session_the_stored_method_id_on_shipping_payment_xhr_request(): void - { - $eventArgs = $this->buildEventArgs('shippingPayment', $viewData = []); - $eventArgs->getRequest()->setParam('isXHR', true); - $eventArgs->getRequest()->setParam(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, $storedMethodId = '123123'); - - $this->session->offsetSet(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, $storedMethodId)->shouldBeCalled(); - - $this->subscriber->__invoke($eventArgs); - } - - /** @test */ - public function it_saves_in_session_the_stored_method_id_on_save_shipping_payment(): void - { - $eventArgs = $this->buildEventArgs('saveShippingPayment', $viewData = []); - $eventArgs->getRequest()->setParam('isXHR', false); - $eventArgs->getRequest()->setParam(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, $storedMethodId = '123123'); - - $this->session->offsetSet(AdyenPayment::SESSION_ADYEN_STORED_METHOD_ID, $storedMethodId)->shouldBeCalled(); - - $this->subscriber->__invoke($eventArgs); - } -} diff --git a/tests/Unit/Subscriber/EnrichUserPreferenceSubscriberTest.php b/tests/Unit/Subscriber/EnrichUserPreferenceSubscriberTest.php deleted file mode 100755 index 9f9d53b0..00000000 --- a/tests/Unit/Subscriber/EnrichUserPreferenceSubscriberTest.php +++ /dev/null @@ -1,107 +0,0 @@ -session = $this->prophesize(Enlight_Components_Session_Namespace::class); - $this->userPreferenceRepository = $this->prophesize(EntityRepository::class); - $this->subscriber = new EnrichUserPreferenceSubscriber( - $this->session->reveal(), - $this->userPreferenceRepository->reveal() - ); - } - - /** @test */ - public function it_is_a_subscriber(): void - { - self::assertInstanceOf(SubscriberInterface::class, $this->subscriber); - } - - /** @test */ - public function it_subscribe_to_the_proper_events(): void - { - self::assertEquals( - [ - // inject in the view as early as possible to get the info in the other subscribers - 'Enlight_Controller_Action_PostDispatch_Frontend_Account' => ['__invoke', -99999], - 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => ['__invoke', -99999], - ], - EnrichUserPreferenceSubscriber::getSubscribedEvents() - ); - } - - /** @test */ - public function it_does_nothing_on_missing_user_id(): void - { - $this->session->get('sUserId')->willReturn(null); - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_does_nothing_on_missing_user_preference(): void - { - $this->session->get('sUserId')->willReturn($userId = 1234); - $this->userPreferenceRepository->findOneBy(['userId' => $userId])->willReturn(null); - - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - - self::assertEquals($viewData, $eventArgs->getSubject()->View()->getAssign()); - } - - /** @test */ - public function it_will_enrich_the_view_with_the_user_preference(): void - { - $this->session->get('sUserId')->willReturn($userId = 1234); - - $userPreference = new UserPreference(); - $userPreference->setId($id = 123123123); - $userPreference->setUserId($userId); - $userPreference->setStoredMethodId($storedMethodId = 'storedMethodId'); - $this->userPreferenceRepository->findOneBy(['userId' => $userId])->willReturn($userPreference); - - $eventArgs = $this->buildEventArgs('', $viewData = ['data' => 'view-data']); - - $this->subscriber->__invoke($eventArgs); - - $expected = [ - 'data' => 'view-data', - 'adyenUserPreference' => [ - 'id' => $id, - 'userId' => $userId, - 'storedMethodId' => $storedMethodId, - ], - ]; - self::assertEquals($expected, $eventArgs->getSubject()->View()->getAssign()); - } -} diff --git a/tests/Unit/Subscriber/SubscriberTestCase.php b/tests/Unit/Subscriber/SubscriberTestCase.php deleted file mode 100644 index 4a650e36..00000000 --- a/tests/Unit/Subscriber/SubscriberTestCase.php +++ /dev/null @@ -1,42 +0,0 @@ -setActionName($actionName); - $request->setMethod($requestMethod); - - return new \Enlight_Controller_ActionEventArgs([ - 'subject' => $this->buildSubject($viewData), - 'request' => $request, - 'response' => new \Enlight_Controller_Response_ResponseTestCase('', $status), - ]); - } - - protected function buildSubject(array $viewData): \Enlight_Controller_Action - { - Assert::allString(array_keys($viewData)); - - $subject = new ControllerActionMock(); - $subject->setView(new \Enlight_View_Default(new \Enlight_Template_Manager())); - $subject->View()->assign($viewData); - - return $subject; - } -} diff --git a/tests/Unit/Utils/SanitizeTest.php b/tests/Unit/Utils/SanitizeTest.php deleted file mode 100644 index 30c529e5..00000000 --- a/tests/Unit/Utils/SanitizeTest.php +++ /dev/null @@ -1,27 +0,0 @@ -assertEquals('This_is_a_1st_test', $result); - } - - /** @test */ - public function it_can_escape_without_quotes(): void - { - $result = Sanitize::escape("Test"); - - $this->assertEquals("<a href='test'>Test</a>", $result); - } -} diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index 09e3ac45..00000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,10 +0,0 @@ -LJO64^D^y*&xirAj1%qS>RexQk0lnl3x@W!pXq=hUrEk2$xoH zGcdBeU}j(d6IGc7x~VXQy2<%@C8>EOTmjyUOmfV)OqT#z%D@Q3OBz8eRJ&LqcA?o5 T;LXYgQp*U0K|neN#9;scAdD>m diff --git a/tools/composer.json b/tools/composer.json deleted file mode 100644 index 9db00864..00000000 --- a/tools/composer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "adyen-payment/dev-tools", - "description": "Adyen Payment Plugin Dev Tools", - "license": "MIT", - "require-dev": { - "shopware/shopware": "^5.7.6", - "friendsofphp/php-cs-fixer": "^3.3", - "phpcompatibility/php-compatibility": "^9.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", - "squizlabs/php_codesniffer": "^3.6", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpunit/phpunit": "^9.5", - "phpspec/prophecy-phpunit": "^2.0", - "psalm/phar": "^4.15" - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/tools/composer.lock b/tools/composer.lock deleted file mode 100644 index 0352f964..00000000 --- a/tools/composer.lock +++ /dev/null @@ -1,10184 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "8e3835492e6e6a6d3f697932806419a5", - "packages": [], - "packages-dev": [ - { - "name": "aws/aws-crt-php", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "3942776a8c99209908ee0b287746263725685732" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", - "reference": "3942776a8c99209908ee0b287746263725685732", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.4.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" - }, - "time": "2021-09-03T22:57:30+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.258.1", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7d7c4f89d2d0bd77c36cb8f3c8cd20b5aa8c0e6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7d7c4f89d2d0bd77c36cb8f3c8cd20b5aa8c0e6d", - "reference": "7d7c4f89d2d0bd77c36cb8f3c8cd20b5aa8c0e6d", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.0.2", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.8.5 || ^2.3", - "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^1.10.22", - "dms/phpunit-arraysubset-asserts": "^0.4.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.258.1" - }, - "time": "2023-02-01T19:22:26+00:00" - }, - { - "name": "bcremer/line-reader", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/bcremer/LineReader.git", - "reference": "568aae7a35a73e9ae6a6e2063e6f6760208006f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bcremer/LineReader/zipball/568aae7a35a73e9ae6a6e2063e6f6760208006f2", - "reference": "568aae7a35a73e9ae6a6e2063e6f6760208006f2", - "shasum": "" - }, - "require": { - "php": "^7.3|^7.4|^8.0|^8.1" - }, - "require-dev": { - "infection/infection": "^0.18", - "phpunit/phpunit": "^9.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Bcremer\\LineReader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Cremer", - "email": "bc@benjamin-cremer.de" - } - ], - "description": "Read large files line by line in a memory efficient (constant) way.", - "support": { - "issues": "https://github.com/bcremer/LineReader/issues", - "source": "https://github.com/bcremer/LineReader/tree/1.2.0" - }, - "time": "2021-10-13T16:06:27+00:00" - }, - { - "name": "beberlei/assert", - "version": "v3.3.2", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "php": "^7.0 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": ">=6.0.0", - "yoast/phpunit-polyfills": "^0.1.0" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" - }, - "type": "library", - "autoload": { - "files": [ - "lib/Assert/functions.php" - ], - "psr-4": { - "Assert\\": "lib/Assert" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "support": { - "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3.3.2" - }, - "time": "2021-12-16T21:41:27+00:00" - }, - { - "name": "beberlei/doctrineextensions", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/beberlei/DoctrineExtensions.git", - "reference": "008f162f191584a6c37c03a803f718802ba9dd9a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/DoctrineExtensions/zipball/008f162f191584a6c37c03a803f718802ba9dd9a", - "reference": "008f162f191584a6c37c03a803f718802ba9dd9a", - "shasum": "" - }, - "require": { - "doctrine/orm": "^2.7", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "nesbot/carbon": "*", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "symfony/yaml": "^4.2 || ^5.0", - "zf1/zend-date": "^1.12", - "zf1/zend-registry": "^1.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "DoctrineExtensions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Steve Lacey", - "email": "steve@steve.ly" - } - ], - "description": "A set of extensions to Doctrine 2 that add support for additional query functions available in MySQL, Oracle, PostgreSQL and SQLite.", - "keywords": [ - "database", - "doctrine", - "orm" - ], - "support": { - "source": "https://github.com/beberlei/DoctrineExtensions/tree/v1.3.0" - }, - "time": "2020-11-29T07:37:23+00:00" - }, - { - "name": "brick/math", - "version": "0.9.3", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" - } - ], - "time": "2021-08-15T20:50:18+00:00" - }, - { - "name": "cocur/slugify", - "version": "v4.2.0", - "source": { - "type": "git", - "url": "https://github.com/cocur/slugify.git", - "reference": "7e7d03067d1075b1147090b3e1df672dfffb9dc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cocur/slugify/zipball/7e7d03067d1075b1147090b3e1df672dfffb9dc3", - "reference": "7e7d03067d1075b1147090b3e1df672dfffb9dc3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^7.1 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "symfony/config": "<3.4 || >=4,<4.3", - "symfony/dependency-injection": "<3.4 || >=4,<4.3", - "symfony/http-kernel": "<3.4 || >=4,<4.3", - "twig/twig": "<2.12.1" - }, - "require-dev": { - "laravel/framework": "^5.0|^6.0|^7.0|^8.0", - "latte/latte": "~2.2", - "league/container": "^2.2.0", - "mikey179/vfsstream": "~1.6.8", - "mockery/mockery": "^1.3", - "nette/di": "~2.4", - "pimple/pimple": "~1.1", - "plumphp/plum": "~0.1", - "symfony/config": "^3.4 || ^4.3 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^3.4 || ^4.3 || ^5.0 || ^6.0", - "symfony/http-kernel": "^3.4 || ^4.3 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4 || ^6.0", - "twig/twig": "^2.12.1 || ~3.0", - "zendframework/zend-modulemanager": "~2.2", - "zendframework/zend-servicemanager": "~2.2", - "zendframework/zend-view": "~2.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cocur\\Slugify\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Florian Eckerstorfer", - "email": "florian@eckerstorfer.co", - "homepage": "https://florian.ec" - }, - { - "name": "Ivo Bathke", - "email": "ivo.bathke@gmail.com" - } - ], - "description": "Converts a string into a slug.", - "keywords": [ - "slug", - "slugify" - ], - "support": { - "issues": "https://github.com/cocur/slugify/issues", - "source": "https://github.com/cocur/slugify/tree/v4.2.0" - }, - "time": "2022-08-13T15:23:32+00:00" - }, - { - "name": "composer/pcre", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/3d322d715c43a1ac36c7fe215fa59336265500f2", - "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-12-06T15:17:27+00:00" - }, - { - "name": "composer/semver", - "version": "3.2.6", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "83e511e247de329283478496f7a1e114c9517506" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", - "reference": "83e511e247de329283478496f7a1e114c9517506", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.54", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.6" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-10-25T11:34:17+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6555461e76962fd0379c444c46fd558a0fcfb65e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6555461e76962fd0379c444c46fd558a0fcfb65e", - "reference": "6555461e76962fd0379c444c46fd558a0fcfb65e", - "shasum": "" - }, - "require": { - "composer/pcre": "^1", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-12-08T13:07:32+00:00" - }, - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.1", - "source": { - "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "phpcompatibility/php-compatibility": "^9.0", - "sensiolabs/security-checker": "^4.1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" - }, - "time": "2020-12-07T18:04:37+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.13.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2", - "vimeo/psalm": "^4.10" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.3" - }, - "time": "2022-07-02T10:48:51+00:00" - }, - { - "name": "doctrine/cache", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "56cd022adb5514472cb144c087393c1821911d09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09", - "reference": "56cd022adb5514472cb144c087393c1821911d09", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.13.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:06:54+00:00" - }, - { - "name": "doctrine/collections", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "09dde3eb237756190f2de738d3c97cff10a8407b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/09dde3eb237756190f2de738d3c97cff10a8407b", - "reference": "09dde3eb237756190f2de738d3c97cff10a8407b", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1.3 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "phpstan/phpstan": "^1.4.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", - "homepage": "https://www.doctrine-project.org/projects/collections.html", - "keywords": [ - "array", - "collections", - "iterators", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.7.3" - }, - "time": "2022-09-01T19:34:23+00:00" - }, - { - "name": "doctrine/common", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "e09556bbdf95b8420e649162b19ae9da2d1a80f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/e09556bbdf95b8420e649162b19ae9da2d1a80f3", - "reference": "e09556bbdf95b8420e649162b19ae9da2d1a80f3", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0 || ^3.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", - "type": "tidelift" - } - ], - "time": "2022-08-23T19:46:56+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.13.8", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/dc9b3c3c8592c935a6e590441f9abc0f9eba335b", - "reference": "dc9b3c3c8592c935a6e590441f9abc0f9eba335b", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0|^2.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1 || ^8" - }, - "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.6", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.16", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^4.4", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.22.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.8" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2022-03-09T15:25:46+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v0.5.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" - }, - "time": "2021-03-21T12:59:47+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "~1.4.10 || ^1.5.4", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.2" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-07-27T22:18:11+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2021-10-22T20:16:43+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-02-28T11:07:21+00:00" - }, - { - "name": "doctrine/orm", - "version": "2.13.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/orm.git", - "reference": "35c44a56677adb3ce796138b6e4934ce93ec6811" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/35c44a56677adb3ce796138b6e4934ce93ec6811", - "reference": "35c44a56677adb3ce796138b6e4934ce93ec6811", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", - "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.2", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.1", - "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.2.3", - "doctrine/persistence": "^2.4 || ^3", - "ext-ctype": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" - }, - "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0", - "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.8.2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.1", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.26.0" - }, - "suggest": { - "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" - }, - "bin": [ - "bin/doctrine" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\ORM\\": "lib/Doctrine/ORM" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "https://www.doctrine-project.org/projects/orm.html", - "keywords": [ - "database", - "orm" - ], - "support": { - "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.13.1" - }, - "time": "2022-08-08T09:00:16+00:00" - }, - { - "name": "doctrine/persistence", - "version": "2.5.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/persistence.git", - "reference": "830c2ba42093e0e428eca37568ab36bd8008bc17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/830c2ba42093e0e428eca37568ab36bd8008bc17", - "reference": "830c2ba42093e0e428eca37568ab36bd8008bc17", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/collections": "^1.0", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.0", - "php": "^7.1 || ^8.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0" - }, - "conflict": { - "doctrine/annotations": "<1.0 || >=2.0", - "doctrine/common": "<2.10" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.0", - "doctrine/coding-standard": "^9.0", - "doctrine/common": "^3.0", - "phpstan/phpstan": "~1.4.10 || 1.5.0", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.22.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src/Common", - "Doctrine\\Persistence\\": "src/Persistence" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", - "keywords": [ - "mapper", - "object", - "odm", - "orm", - "persistence" - ], - "support": { - "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/2.5.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", - "type": "tidelift" - } - ], - "time": "2022-08-06T22:06:57+00:00" - }, - { - "name": "elasticsearch/elasticsearch", - "version": "v7.17.1", - "source": { - "type": "git", - "url": "git@github.com:elastic/elasticsearch-php.git", - "reference": "f1b8918f411b837ce5f6325e829a73518fd50367" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/f1b8918f411b837ce5f6325e829a73518fd50367", - "reference": "f1b8918f411b837ce5f6325e829a73518fd50367", - "shasum": "" - }, - "require": { - "ext-json": ">=1.3.7", - "ezimuel/ringphp": "^1.1.2", - "php": "^7.3 || ^8.0", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "ext-yaml": "*", - "ext-zip": "*", - "mockery/mockery": "^1.2", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "^3.4", - "symfony/finder": "~4.0" - }, - "suggest": { - "ext-curl": "*", - "monolog/monolog": "Allows for client-level logging and tracing" - }, - "type": "library", - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Elasticsearch\\": "src/Elasticsearch/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0", - "LGPL-2.1-only" - ], - "authors": [ - { - "name": "Zachary Tong" - }, - { - "name": "Enrico Zimuel" - } - ], - "description": "PHP Client for Elasticsearch", - "keywords": [ - "client", - "elasticsearch", - "search" - ], - "time": "2022-09-30T12:28:55+00:00" - }, - { - "name": "ezimuel/guzzlestreams", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/ezimuel/guzzlestreams.git", - "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/b4b5a025dfee70d6cd34c780e07330eb93d5b997", - "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "~9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Stream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Fork of guzzle/streams (abandoned) to be used with elasticsearch-php", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "stream" - ], - "support": { - "source": "https://github.com/ezimuel/guzzlestreams/tree/3.1.0" - }, - "time": "2022-10-24T12:58:50+00:00" - }, - { - "name": "ezimuel/ringphp", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/ezimuel/ringphp.git", - "reference": "7887fc8488013065f72f977dcb281994f5fde9f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/7887fc8488013065f72f977dcb281994f5fde9f4", - "reference": "7887fc8488013065f72f977dcb281994f5fde9f4", - "shasum": "" - }, - "require": { - "ezimuel/guzzlestreams": "^3.0.1", - "php": ">=5.4.0", - "react/promise": "~2.0" - }, - "replace": { - "guzzlehttp/ringphp": "self.version" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~9.0" - }, - "suggest": { - "ext-curl": "Guzzle will use specific adapters if cURL is present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Ring\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", - "support": { - "source": "https://github.com/ezimuel/ringphp/tree/1.2.2" - }, - "time": "2022-12-07T11:28:53+00:00" - }, - { - "name": "fig/link-util", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link-util.git", - "reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8", - "reference": "5d7b8d04ed3393b4b59968ca1e906fb7186d81e8", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "psr/link": "~1.0@dev" - }, - "provide": { - "psr/link-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.1", - "squizlabs/php_codesniffer": "^2.3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common utility implementations for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "support": { - "issues": "https://github.com/php-fig/link-util/issues", - "source": "https://github.com/php-fig/link-util/tree/1.1.2" - }, - "time": "2021-02-03T23:36:04+00:00" - }, - { - "name": "firebase/php-jwt", - "version": "v6.3.2", - "source": { - "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "ea7dda77098b96e666c5ef382452f94841e439cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/ea7dda77098b96e666c5ef382452f94841e439cd", - "reference": "ea7dda77098b96e666c5ef382452f94841e439cd", - "shasum": "" - }, - "require": { - "php": "^7.1||^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", - "phpspec/prophecy-phpunit": "^1.1", - "phpunit/phpunit": "^7.5||^9.5", - "psr/cache": "^1.0||^2.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0" - }, - "suggest": { - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.3.2" - }, - "time": "2022-12-19T17:10:46+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", - "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", - "shasum": "" - }, - "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^2.0", - "doctrine/annotations": "^1.12", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.2.5 || ^8.0", - "php-cs-fixer/diff": "^2.0", - "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0", - "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0", - "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0", - "symfony/finder": "^4.4.20 || ^5.0 || ^6.0", - "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.23", - "symfony/process": "^4.4.20 || ^5.0 || ^6.0", - "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.8", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^8.5.21 || ^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^5.2.4 || ^6.0", - "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2021-12-11T16:25:08+00:00" - }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.12", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/8419f0158715b30d4b99a5bd37c6a39671994ad7", - "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0" - }, - "conflict": { - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "replace": { - "ocramius/proxy-manager": "^2.1" - }, - "require-dev": { - "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0" - }, - "type": "library", - "extra": { - "thanks": { - "name": "ocramius/proxy-manager", - "url": "https://github.com/Ocramius/ProxyManager" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", - "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.12" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2022-05-05T09:31:05+00:00" - }, - { - "name": "google/auth", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "0865c44ab50378f7b145827dfcbd1e7a238f7759" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/0865c44ab50378f7b145827dfcbd1e7a238f7759", - "reference": "0865c44ab50378f7b145827dfcbd1e7a238f7759", - "shasum": "" - }, - "require": { - "firebase/php-jwt": "^5.5||^6.0", - "guzzlehttp/guzzle": "^6.2.1|^7.0", - "guzzlehttp/psr7": "^1.7|^2.0", - "php": "^7.1||^8.0", - "psr/cache": "^1.0|^2.0|^3.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "guzzlehttp/promises": "0.1.1|^1.3", - "kelvinmo/simplejwt": "^0.2.5|^0.5.1", - "phpseclib/phpseclib": "^2.0.31", - "phpspec/prophecy-phpunit": "^1.1||^2.0", - "phpunit/phpunit": "^7.5||^9.0.0", - "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." - }, - "type": "library", - "autoload": { - "psr-4": { - "Google\\Auth\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Google Auth Library for PHP", - "homepage": "http://github.com/google/google-auth-library-php", - "keywords": [ - "Authentication", - "google", - "oauth2" - ], - "support": { - "docs": "https://googleapis.github.io/google-auth-library-php/main/", - "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.25.0" - }, - "time": "2023-01-26T22:04:14+00:00" - }, - { - "name": "google/cloud-core", - "version": "v1.49.0", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-cloud-php-core.git", - "reference": "5db0d164b61440312e99e4af9b43a59823098a8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/5db0d164b61440312e99e4af9b43a59823098a8d", - "reference": "5db0d164b61440312e99e4af9b43a59823098a8d", - "shasum": "" - }, - "require": { - "google/auth": "^1.18", - "guzzlehttp/guzzle": "^5.3|^6.5.7|^7.4.4", - "guzzlehttp/promises": "^1.3", - "guzzlehttp/psr7": "^1.7|^2.0", - "monolog/monolog": "^1.1|^2.0|^3.0", - "php": ">=5.6", - "psr/http-message": "1.0.*", - "rize/uri-template": "~0.3" - }, - "require-dev": { - "erusev/parsedown": "^1.6", - "google/cloud-common-protos": "^0.3", - "google/gax": "^1.9", - "opis/closure": "^3", - "phpdocumentor/reflection": "^3.0||^4.0||^5.3", - "phpspec/prophecy": "^1.10.3", - "phpunit/phpunit": "^4.8|^5.0|^8.0", - "squizlabs/php_codesniffer": "2.*", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "opis/closure": "May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.", - "symfony/lock": "Required for the Spanner cached based session pool. Please require the following commit: 3.3.x-dev#1ba6ac9" - }, - "bin": [ - "bin/google-cloud-batch" - ], - "type": "library", - "extra": { - "component": { - "id": "cloud-core", - "target": "googleapis/google-cloud-php-core.git", - "path": "Core", - "entry": "src/ServiceBuilder.php" - } - }, - "autoload": { - "psr-4": { - "Google\\Cloud\\Core\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Google Cloud PHP shared dependency, providing functionality useful to all components.", - "support": { - "source": "https://github.com/googleapis/google-cloud-php-core/tree/v1.49.0" - }, - "time": "2023-01-27T18:26:22+00:00" - }, - { - "name": "google/cloud-storage", - "version": "v1.28.1", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-cloud-php-storage.git", - "reference": "83e8beac404f38d2e869da4c3fbb7bdf96193f77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/83e8beac404f38d2e869da4c3fbb7bdf96193f77", - "reference": "83e8beac404f38d2e869da4c3fbb7bdf96193f77", - "shasum": "" - }, - "require": { - "google/cloud-core": "^1.43", - "google/crc32": "^0.1.0" - }, - "require-dev": { - "erusev/parsedown": "^1.6", - "google/cloud-pubsub": "^1.0", - "phpdocumentor/reflection": "^3.0||^4.0", - "phpseclib/phpseclib": "^2.0||^3.0", - "phpspec/prophecy": "^1.10.3", - "phpunit/phpunit": "^4.8|^5.0|^8.0", - "squizlabs/php_codesniffer": "2.*", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "google/cloud-pubsub": "May be used to register a topic to receive bucket notifications.", - "phpseclib/phpseclib": "May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2." - }, - "type": "library", - "extra": { - "component": { - "id": "cloud-storage", - "target": "googleapis/google-cloud-php-storage.git", - "path": "Storage", - "entry": "src/StorageClient.php" - } - }, - "autoload": { - "psr-4": { - "Google\\Cloud\\Storage\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Cloud Storage Client for PHP", - "support": { - "source": "https://github.com/googleapis/google-cloud-php-storage/tree/v1.28.1" - }, - "time": "2022-08-23T20:22:22+00:00" - }, - { - "name": "google/crc32", - "version": "v0.1.0", - "source": { - "type": "git", - "url": "https://github.com/google/php-crc32.git", - "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/google/php-crc32/zipball/a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", - "reference": "a8525f0dea6fca1893e1bae2f6e804c5f7d007fb", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.13 || v2.14.2", - "paragonie/random_compat": ">=2", - "phpunit/phpunit": "^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Google\\CRC32\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Andrew Brampton", - "email": "bramp@google.com" - } - ], - "description": "Various CRC32 implementations", - "homepage": "https://github.com/google/php-crc32", - "support": { - "issues": "https://github.com/google/php-crc32/issues", - "source": "https://github.com/google/php-crc32/tree/v0.1.0" - }, - "time": "2019-05-09T06:24:58+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.5.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2022-08-28T15:39:27+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2022-08-28T14:55:35+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", - "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2022-08-28T14:45:39+00:00" - }, - { - "name": "laminas/laminas-code", - "version": "4.6.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "16ec7577ff315d53ac2e1b1f03a344d8fe680a6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/16ec7577ff315d53ac2e1b1f03a344d8fe680a6e", - "reference": "16ec7577ff315d53ac2e1b1f03a344d8fe680a6e", - "shasum": "" - }, - "require": { - "php": ">=7.4, <8.2" - }, - "require-dev": { - "doctrine/annotations": "^1.13.2", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^2.3.0", - "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^9.5.10", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.13.1" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" - }, - "type": "library", - "autoload": { - "files": [ - "polyfill/ReflectionEnumPolyfill.php" - ], - "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas", - "laminasframework" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-code/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-code/issues", - "rss": "https://github.com/laminas/laminas-code/releases.atom", - "source": "https://github.com/laminas/laminas-code" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2022-07-28T22:46:52+00:00" - }, - { - "name": "laminas/laminas-escaper", - "version": "2.10.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.3.0", - "maglnet/composer-require-checker": "^3.8.0", - "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.22.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2022-03-08T20:15:36+00:00" - }, - { - "name": "league/flysystem", - "version": "1.1.10", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2022-10-04T09:16:37+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "1.0.30", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/af286f291ebab6877bac0c359c6c2cb017eb061d", - "reference": "af286f291ebab6877bac0c359c6c2cb017eb061d", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.20.0", - "league/flysystem": "^1.0.40", - "php": ">=5.5.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "~1.0.1", - "phpspec/phpspec": "^2.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3v3\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "support": { - "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.30" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-07-02T13:51:38+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-04-17T13:12:02+00:00" - }, - { - "name": "monolog/monolog", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", - "guzzlehttp/guzzle": "^7.4", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.8.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2022-07-24T11:55:47+00:00" - }, - { - "name": "mpdf/mpdf", - "version": "v8.1.1", - "source": { - "type": "git", - "url": "https://github.com/mpdf/mpdf.git", - "reference": "e511e89a66bdb066e3fbf352f00f4734d5064cbf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/e511e89a66bdb066e3fbf352f00f4734d5064cbf", - "reference": "e511e89a66bdb066e3fbf352f00f4734d5064cbf", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "ext-mbstring": "*", - "myclabs/deep-copy": "^1.7", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0", - "php-http/message-factory": "^1.0", - "psr/http-message": "^1.0", - "psr/log": "^1.0 || ^2.0", - "setasign/fpdi": "^2.1" - }, - "require-dev": { - "mockery/mockery": "^1.3.0", - "mpdf/qrcode": "^1.1.0", - "squizlabs/php_codesniffer": "^3.5.0", - "tracy/tracy": "^2.4", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-bcmath": "Needed for generation of some types of barcodes", - "ext-xml": "Needed mainly for SVG manipulation", - "ext-zlib": "Needed for compression of embedded resources, such as fonts" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mpdf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-only" - ], - "authors": [ - { - "name": "Matěj Humpál", - "role": "Developer, maintainer" - }, - { - "name": "Ian Back", - "role": "Developer (retired)" - } - ], - "description": "PHP library generating PDF files from UTF-8 encoded HTML", - "homepage": "https://mpdf.github.io", - "keywords": [ - "pdf", - "php", - "utf-8" - ], - "support": { - "docs": "http://mpdf.github.io", - "issues": "https://github.com/mpdf/mpdf/issues", - "source": "https://github.com/mpdf/mpdf" - }, - "funding": [ - { - "url": "https://www.paypal.me/mpdf", - "type": "custom" - } - ], - "time": "2022-04-18T11:50:28+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.6.1", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" - }, - "time": "2021-06-14T00:11:39+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.13.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" - }, - "time": "2021-11-30T19:35:32+00:00" - }, - { - "name": "ongr/elasticsearch-dsl", - "version": "v7.2.2", - "source": { - "type": "git", - "url": "https://github.com/ongr-io/ElasticsearchDSL.git", - "reference": "c0789c35e8738c2b1138c8d33ec9fbcd740c909d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ongr-io/ElasticsearchDSL/zipball/c0789c35e8738c2b1138c8d33ec9fbcd740c909d", - "reference": "c0789c35e8738c2b1138c8d33ec9fbcd740c909d", - "shasum": "" - }, - "require": { - "elasticsearch/elasticsearch": "^7.0", - "php": "^7.4 || ^8.0", - "symfony/serializer": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.2-dev" - } - }, - "autoload": { - "psr-4": { - "ONGR\\ElasticsearchDSL\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "ONGR team", - "homepage": "http://www.ongr.io" - } - ], - "description": "Elasticsearch DSL library", - "homepage": "http://ongr.io", - "support": { - "issues": "https://github.com/ongr-io/ElasticsearchDSL/issues", - "source": "https://github.com/ongr-io/ElasticsearchDSL/tree/v7.2.2" - }, - "time": "2021-04-27T10:58:40+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "time": "2020-10-14T08:32:19+00:00" - }, - { - "name": "php-http/message-factory", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" - }, - "time": "2015-12-19T14:08:53+00:00" - }, - { - "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "761f3806e30239b5fcd90a0a45d41dc2138de192" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/761f3806e30239b5fcd90a0a45d41dc2138de192", - "reference": "761f3806e30239b5fcd90a0a45d41dc2138de192", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.3.0" - }, - "replace": { - "grogy/php-parallel-lint": "*", - "jakub-onderka/php-parallel-lint": "*" - }, - "require-dev": { - "nette/tester": "^1.3 || ^2.0", - "php-parallel-lint/php-console-highlighter": "~0.3", - "squizlabs/php_codesniffer": "^3.6" - }, - "suggest": { - "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" - }, - "bin": [ - "parallel-lint" - ], - "type": "library", - "autoload": { - "classmap": [ - "./" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "ahoj@jakubonderka.cz" - } - ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", - "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.1" - }, - "time": "2021-08-13T05:35:13+00:00" - }, - { - "name": "phpcompatibility/php-compatibility", - "version": "9.3.5", - "source": { - "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" - }, - "conflict": { - "squizlabs/php_codesniffer": "2.6.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Wim Godden", - "homepage": "https://github.com/wimg", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "homepage": "https://github.com/jrfnl", - "role": "lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" - } - ], - "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", - "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", - "keywords": [ - "compatibility", - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibility" - }, - "time": "2019-12-27T09:44:58+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" - }, - "time": "2022-10-14T12:47:21+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, - { - "name": "phpspec/prophecy-phpunit", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy-phpunit.git", - "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", - "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8", - "phpspec/prophecy": "^1.3", - "phpunit/phpunit": "^9.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\PhpUnit\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - } - ], - "description": "Integrating the Prophecy mocking library in PHPUnit test cases", - "homepage": "http://phpspec.net", - "keywords": [ - "phpunit", - "prophecy" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy-phpunit/issues", - "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" - }, - "time": "2020-07-09T08:33:42+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-05T09:12:13+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.11", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2406855036db1102126125537adb1406f7242fdd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd", - "reference": "2406855036db1102126125537adb1406f7242fdd", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-25T07:07:57+00:00" - }, - { - "name": "psalm/phar", - "version": "4.17.0", - "source": { - "type": "git", - "url": "https://github.com/psalm/phar.git", - "reference": "8e968d791ffbb253901afc4b3512445d96cb1c51" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/psalm/phar/zipball/8e968d791ffbb253901afc4b3512445d96cb1c51", - "reference": "8e968d791ffbb253901afc4b3512445d96cb1c51", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "vimeo/psalm": "*" - }, - "bin": [ - "psalm.phar" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Composer-based Psalm Phar", - "support": { - "issues": "https://github.com/psalm/phar/issues", - "source": "https://github.com/psalm/phar/tree/4.17.0" - }, - "time": "2022-01-01T19:35:43+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client/tree/master" - }, - "time": "2020-06-29T06:28:15+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" - }, - "time": "2019-04-30T12:38:16+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/link", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "support": { - "source": "https://github.com/php-fig/link/tree/master" - }, - "time": "2016-10-28T16:06:13+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", - "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "symfony/polyfill-php81": "^1.23" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.3.0" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-27T19:12:24+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.2.3", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "shasum": "" - }, - "require": { - "brick/math": "^0.8 || ^0.9", - "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2021-09-25T23:10:38+00:00" - }, - { - "name": "react/promise", - "version": "v2.9.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" - }, - "funding": [ - { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-02-11T10:27:51+00:00" - }, - { - "name": "rize/uri-template", - "version": "0.3.5", - "source": { - "type": "git", - "url": "https://github.com/rize/UriTemplate.git", - "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rize/UriTemplate/zipball/5ed4ba8ea34af84485dea815d4b6b620794d1168", - "reference": "5ed4ba8ea34af84485dea815d4b6b620794d1168", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36" - }, - "type": "library", - "autoload": { - "psr-4": { - "Rize\\": "src/Rize" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marut K", - "homepage": "http://twitter.com/rezigned" - } - ], - "description": "PHP URI Template (RFC 6570) supports both expansion & extraction", - "keywords": [ - "RFC 6570", - "template", - "uri" - ], - "support": { - "issues": "https://github.com/rize/UriTemplate/issues", - "source": "https://github.com/rize/UriTemplate/tree/0.3.5" - }, - "funding": [ - { - "url": "https://www.paypal.me/rezigned", - "type": "custom" - }, - { - "url": "https://github.com/rezigned", - "type": "github" - }, - { - "url": "https://opencollective.com/rize-uri-template", - "type": "open_collective" - } - ], - "time": "2022-10-12T17:22:51+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-11-11T14:18:36+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-11T13:31:12+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-15T12:49:02+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "setasign/fpdf", - "version": "1.8.4", - "source": { - "type": "git", - "url": "https://github.com/Setasign/FPDF.git", - "reference": "b0ddd9c5b98ced8230ef38534f6f3c17308a7974" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDF/zipball/b0ddd9c5b98ced8230ef38534f6f3c17308a7974", - "reference": "b0ddd9c5b98ced8230ef38534f6f3c17308a7974", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "ext-zlib": "*" - }, - "type": "library", - "autoload": { - "classmap": [ - "fpdf.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Olivier Plathey", - "email": "oliver@fpdf.org", - "homepage": "http://fpdf.org/" - } - ], - "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.", - "homepage": "http://www.fpdf.org", - "keywords": [ - "fpdf", - "pdf" - ], - "support": { - "source": "https://github.com/Setasign/FPDF/tree/1.8.4" - }, - "time": "2021-08-30T07:50:06+00:00" - }, - { - "name": "setasign/fpdi", - "version": "v2.3.6", - "source": { - "type": "git", - "url": "https://github.com/Setasign/FPDI.git", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31", - "shasum": "" - }, - "require": { - "ext-zlib": "*", - "php": "^5.6 || ^7.0 || ^8.0" - }, - "conflict": { - "setasign/tfpdf": "<1.31" - }, - "require-dev": { - "phpunit/phpunit": "~5.7", - "setasign/fpdf": "~1.8", - "setasign/tfpdf": "1.31", - "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "~6.2" - }, - "suggest": { - "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." - }, - "type": "library", - "autoload": { - "psr-4": { - "setasign\\Fpdi\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Slabon", - "email": "jan.slabon@setasign.com", - "homepage": "https://www.setasign.com" - }, - { - "name": "Maximilian Kresse", - "email": "maximilian.kresse@setasign.com", - "homepage": "https://www.setasign.com" - } - ], - "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", - "homepage": "https://www.setasign.com/fpdi", - "keywords": [ - "fpdf", - "fpdi", - "pdf" - ], - "support": { - "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.3.6" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", - "type": "tidelift" - } - ], - "time": "2021-02-11T11:37:01+00:00" - }, - { - "name": "shopware/shopware", - "version": "v5.7.16", - "source": { - "type": "git", - "url": "https://github.com/shopware/shopware.git", - "reference": "a7de7fc4d3ffb3f1da82a17ac5f63aa398195dee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/shopware/shopware/zipball/a7de7fc4d3ffb3f1da82a17ac5f63aa398195dee", - "reference": "a7de7fc4d3ffb3f1da82a17ac5f63aa398195dee", - "shasum": "" - }, - "require": { - "bcremer/line-reader": "1.2.0", - "beberlei/assert": "3.3.2", - "beberlei/doctrineextensions": "1.3.0", - "cocur/slugify": "4.2.0", - "composer-runtime-api": "^2.0", - "doctrine/annotations": "1.13.3", - "doctrine/cache": "1.13.0", - "doctrine/collections": "1.7.3", - "doctrine/common": "3.4.0", - "doctrine/dbal": "2.13.8", - "doctrine/event-manager": "1.1.2", - "doctrine/inflector": "2.0.4", - "doctrine/orm": "2.13.1", - "doctrine/persistence": "2.5.4", - "elasticsearch/elasticsearch": "^7", - "ext-ctype": "*", - "ext-curl": "*", - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-gd": "*", - "ext-hash": "*", - "ext-iconv": "*", - "ext-intl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pdo": "*", - "ext-pdo_mysql": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "ext-zip": "*", - "ext-zlib": "*", - "fig/link-util": "1.1.2", - "friendsofphp/proxy-manager-lts": "1.0.12", - "google/cloud-storage": "1.28.1", - "guzzlehttp/guzzle": "~7.5.0", - "guzzlehttp/psr7": "2.4.1", - "laminas/laminas-code": "4.6.0", - "laminas/laminas-escaper": "2.10.0", - "league/flysystem": "~1.1.4", - "league/flysystem-aws-s3-v3": "1.0.30", - "lib-libxml": "*", - "monolog/monolog": "2.8.0", - "mpdf/mpdf": "8.1.1", - "ongr/elasticsearch-dsl": "7.2.2", - "php": "~7.4.0 || ~8.0.0 || ~8.1.0", - "psr/link": "1.0.0", - "psr/log": "1.1.4", - "ramsey/uuid": "4.2.3", - "setasign/fpdf": "1.8.4", - "setasign/fpdi": "2.3.6", - "stecman/symfony-console-completion": "0.11.0", - "superbalist/flysystem-google-storage": "7.2.2", - "symfony/config": "~4.4.34", - "symfony/console": "~4.4.34", - "symfony/dependency-injection": "~4.4.34", - "symfony/expression-language": "~4.4.34", - "symfony/filesystem": "~4.4.27", - "symfony/finder": "~4.4.30", - "symfony/form": "~4.4.34", - "symfony/http-foundation": "~4.4.34", - "symfony/http-kernel": "~4.4.34", - "symfony/options-resolver": "~4.4.30", - "symfony/polyfill-php80": "^1.23", - "symfony/polyfill-php81": "^1.23", - "symfony/process": "~4.4.34", - "symfony/serializer": "~5.4.0", - "symfony/validator": "~4.4.34", - "symfony/web-link": "~4.4.27", - "voku/anti-xss": "~4.1.39", - "wikimedia/less.php": "3.1.0" - }, - "replace": { - "paragonie/random_compat": "*", - "symfony/polyfill-ctype": "*", - "symfony/polyfill-iconv": "*", - "symfony/polyfill-mbstring": "*", - "symfony/polyfill-php72": "*", - "symfony/polyfill-php73": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "1.8.1", - "behat/behat": "3.11.0", - "behat/gherkin": "4.9.0", - "behat/mink": "1.10.0", - "behat/mink-selenium2-driver": "1.6.0", - "friends-of-behat/mink-extension": "2.7.1", - "php-parallel-lint/php-var-dump-check": "^0.5", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "1.1.0", - "phpstan/phpstan": "1.8.5", - "phpstan/phpstan-doctrine": "1.3.13", - "phpstan/phpstan-phpunit": "1.1.1", - "phpstan/phpstan-symfony": "1.2.13", - "phpunit/phpunit": "^9.4", - "sensiolabs/behat-page-object-extension": "2.3.5", - "staabm/phpstan-dba": "0.2.42", - "symfony/browser-kit": "~4.4.27", - "symfony/dom-crawler": "~4.4.30" - }, - "suggest": { - "ext-apcu": "*", - "ext-zend-opcache": "*" - }, - "type": "project", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "engine/Shopware/Shopware.php" - ], - "psr-0": { - "Zend": "engine/Library/", - "JSMin": "engine/Library/minify/", - "Enlight": "engine/Library/", - "Shopware": "engine/", - "Doctrine\\Common\\Proxy\\AbstractProxyFactory": "engine/Library/", - "Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister": "engine/Library/" - }, - "classmap": [ - "engine/Shopware/", - "engine/Library/Smarty/" - ], - "exclude-from-classmap": [ - "engine/Shopware/Plugins/Community/", - "engine/Shopware/Plugins/Local/", - "custom/plugins/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "engine/Library/" - ], - "license": [ - "AGPL-3.0", - "proprietary" - ], - "description": "Shopware is the next generation of open source e-commerce software made in Germany", - "homepage": "http://www.shopware.com", - "keywords": [ - "shop", - "shopware" - ], - "support": { - "chat": "https://slack.shopware.com", - "forum": "https://forum.shopware.com", - "issues": "https://issues.shopware.com", - "source": "https://github.com/shopware/shopware", - "wiki": "https://developers.shopware.com/" - }, - "time": "2022-11-02T09:29:39+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-12-12T21:44:58+00:00" - }, - { - "name": "stecman/symfony-console-completion", - "version": "0.11.0", - "source": { - "type": "git", - "url": "https://github.com/stecman/symfony-console-completion.git", - "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518", - "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518", - "shasum": "" - }, - "require": { - "php": ">=5.3.2", - "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Holdaway", - "email": "stephen@stecman.co.nz" - } - ], - "description": "Automatic BASH completion for Symfony Console Component based applications.", - "support": { - "issues": "https://github.com/stecman/symfony-console-completion/issues", - "source": "https://github.com/stecman/symfony-console-completion/tree/0.11.0" - }, - "time": "2019-11-24T17:03:06+00:00" - }, - { - "name": "superbalist/flysystem-google-storage", - "version": "7.2.2", - "source": { - "type": "git", - "url": "https://github.com/Superbalist/flysystem-google-cloud-storage.git", - "reference": "87e2f450c0e4b5200fef9ffe6863068cc873d734" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Superbalist/flysystem-google-cloud-storage/zipball/87e2f450c0e4b5200fef9ffe6863068cc873d734", - "reference": "87e2f450c0e4b5200fef9ffe6863068cc873d734", - "shasum": "" - }, - "require": { - "google/cloud-storage": "~1.0", - "league/flysystem": "~1.0", - "php": ">=5.5.0" - }, - "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Superbalist\\Flysystem\\GoogleStorage\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Superbalist.com a division of Takealot Online (Pty) Ltd", - "email": "info@superbalist.com" - } - ], - "description": "Flysystem adapter for Google Cloud Storage", - "support": { - "issues": "https://github.com/Superbalist/flysystem-google-cloud-storage/issues", - "source": "https://github.com/Superbalist/flysystem-google-cloud-storage/tree/7.2.2" - }, - "time": "2019-10-10T12:22:54+00:00" - }, - { - "name": "symfony/cache", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "e9147c89fdfdc5d5ef798bb7193f23726ad609f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e9147c89fdfdc5d5ef798bb7193f23726ad609f5", - "reference": "e9147c89fdfdc5d5ef798bb7193f23726ad609f5", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" - }, - "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", - "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-19T09:49:58+00:00" - }, - { - "name": "symfony/cache-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", - "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" - }, - "suggest": { - "symfony/cache-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to caching", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/config", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", - "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/filesystem": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" - }, - "conflict": { - "symfony/finder": "<3.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/messenger": "^4.1|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-07-20T09:59:04+00:00" - }, - { - "name": "symfony/console", - "version": "v4.4.49", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", - "symfony/lock": "<4.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/console/tree/v4.4.49" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-05T17:10:16+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "1a692492190773c5310bc7877cb590c04c2f05be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/1a692492190773c5310bc7877cb590c04c2f05be", - "reference": "1a692492190773c5310bc7877cb590c04c2f05be", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "^1|^2|^3" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "abandoned": "symfony/error-handler", - "time": "2022-07-28T16:29:46+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v4.4.49", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9065fe97dbd38a897e95ea254eb5ddfe1310f734", - "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/container": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<4.3|>=5.0", - "symfony/finder": "<3.4", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<4.4.26" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" - }, - "require-dev": { - "symfony/config": "^4.3", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/yaml": "^4.4.26|^5.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v4.4.49" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-16T16:18:09+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "be731658121ef2d8be88f3a1ec938148a9237291" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/be731658121ef2d8be88f3a1ec938148a9237291", - "reference": "be731658121ef2d8be88f3a1ec938148a9237291", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "^1|^2|^3", - "symfony/debug": "^4.4.5", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-07-28T16:29:46+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a", - "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-07-20T09:59:04+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.13", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e", - "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:41:36+00:00" - }, - { - "name": "symfony/expression-language", - "version": "v4.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/expression-language.git", - "reference": "e4964c7636e19f6008660f450c09121c80c2a7b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/e4964c7636e19f6008660f450c09121c80c2a7b9", - "reference": "e4964c7636e19f6008660f450c09121c80c2a7b9", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/cache": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ExpressionLanguage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an engine that can compile and evaluate expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/expression-language/tree/v4.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-10-03T15:15:11+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v4.4.42", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5", - "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v4.4.42" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-20T08:49:14+00:00" - }, - { - "name": "symfony/finder", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "66bd787edb5e42ff59d3523f623895af05043e4f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f", - "reference": "66bd787edb5e42ff59d3523f623895af05043e4f", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-07-29T07:35:46+00:00" - }, - { - "name": "symfony/form", - "version": "v4.4.48", - "source": { - "type": "git", - "url": "https://github.com/symfony/form.git", - "reference": "e1d137b13e0ec2cb5c5e38debca7a510c6f858c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/e1d137b13e0ec2cb5c5e38debca7a510c6f858c6", - "reference": "e1d137b13e0ec2cb5c5e38debca7a510c6f858c6", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher": "^4.3", - "symfony/intl": "^4.4|^5.0", - "symfony/options-resolver": "~4.3|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/property-access": "^3.4.40|^4.4.8|^5.0.8", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<4.3", - "symfony/dependency-injection": "<3.4", - "symfony/doctrine-bridge": "<3.4", - "symfony/framework-bundle": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/intl": "<4.3", - "symfony/translation": "<4.2", - "symfony/twig-bridge": "<3.4.5|<4.0.5,>=4.0" - }, - "require-dev": { - "doctrine/collections": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^4.3|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/security-csrf": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", - "symfony/validator": "^4.4.17|^5.1.9", - "symfony/var-dumper": "^4.3|^5.0" - }, - "suggest": { - "symfony/security-csrf": "For protecting forms against CSRF attacks.", - "symfony/twig-bridge": "For templating with Twig.", - "symfony/validator": "For form validation." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Form\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows to easily create, process and reuse HTML forms", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/form/tree/v4.4.48" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-10-22T05:50:33+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-12T15:48:08+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v4.4.49", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "191413c7b832c015bb38eae963f2e57498c3c173" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/191413c7b832c015bb38eae963f2e57498c3c173", - "reference": "191413c7b832c015bb38eae963f2e57498c3c173", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.49" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-04T16:17:57+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v4.4.50", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa6df6c045f034aa13ac752fc234bb300b9488ef", - "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "^1|^2", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4.30|^5.3.7", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/console": ">=5", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "twig/twig": "<1.43|<2.13,>=2" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.3|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/routing": "^3.4|^4.0|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^1.43|^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v4.4.50" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-01T08:01:31+00:00" - }, - { - "name": "symfony/intl", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/intl.git", - "reference": "f378eb62448dfea67071f9f43529d3a6ad7e0bc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/f378eb62448dfea67071f9f43529d3a6ad7e0bc8", - "reference": "f378eb62448dfea67071f9f43529d3a6ad7e0bc8", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "symfony/filesystem": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Intl\\": "" - }, - "classmap": [ - "Resources/stubs" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Eriksen Costa", - "email": "eriksen.costa@infranology.com.br" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", - "homepage": "https://symfony.com", - "keywords": [ - "i18n", - "icu", - "internationalization", - "intl", - "l10n", - "localization" - ], - "support": { - "source": "https://github.com/symfony/intl/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-11T13:51:47+00:00" - }, - { - "name": "symfony/mime", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "a858429a9c704edc53fe057228cf9ca282ba48eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/a858429a9c704edc53fe057228cf9ca282ba48eb", - "reference": "a858429a9c704edc53fe057228cf9ca282ba48eb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4", - "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-09T05:43:46+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "583f56160f716dd435f1cd721fd14b548f4bb510" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510", - "reference": "583f56160f716dd435f1cd721fd14b548f4bb510", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-07-20T09:59:04+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v4.4.44", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", - "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v4.4.44" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-06-27T13:16:42+00:00" - }, - { - "name": "symfony/property-access", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "20fcf370aed6b2b4a2d8170fa23d2d07250e94ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/20fcf370aed6b2b4a2d8170fa23d2d07250e94ab", - "reference": "20fcf370aed6b2b4a2d8170fa23d2d07250e94ab", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/property-info": "^5.2|^6.0" - }, - "require-dev": { - "symfony/cache": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/property-info", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "8ccf54bce2e2edbface1e99cb5a2560a290c9e2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/8ccf54bce2e2edbface1e99cb5a2560a290c9e2d", - "reference": "8ccf54bce2e2edbface1e99cb5a2560a290c9e2d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4|^2", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "suggest": { - "phpdocumentor/reflection-docblock": "To use the PHPDoc", - "psr/cache-implementation": "To cache results", - "symfony/doctrine-bridge": "To use Doctrine metadata", - "symfony/serializer": "To use Serializer metadata" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-14T11:26:56+00:00" - }, - { - "name": "symfony/serializer", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "2139fa01c19a764af81191d635b2b9302f4bafd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/2139fa01c19a764af81191d635b2b9302f4bafd8", - "reference": "2139fa01c19a764af81191d635b2b9302f4bafd8", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0|>=1.7.0", - "symfony/dependency-injection": "<4.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.3.13", - "symfony/uid": "<5.3", - "symfony/yaml": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.3.13|^6.0", - "symfony/uid": "^5.3|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0", - "symfony/var-exporter": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "For using the metadata cache.", - "symfony/config": "For using the XML mapping loader.", - "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", - "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", - "symfony/var-exporter": "For using the metadata compiler.", - "symfony/yaml": "For using the default YAML mapping loader." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/serializer/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-14T08:18:46+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-30T19:17:29+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-11-23T10:19:22+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-06-27T16:58:25+00:00" - }, - { - "name": "symfony/validator", - "version": "v4.4.48", - "source": { - "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "54781a4c41efbd283b779110bf8ae7f263737775" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/54781a4c41efbd283b779110bf8ae7f263737775", - "reference": "54781a4c41efbd283b779110bf8ae7f263737775", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^1.1|^2" - }, - "conflict": { - "doctrine/lexer": "<1.1", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/intl": "<4.3", - "symfony/translation": ">=5.0", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", - "egulias/email-validator": "^2.1.10|^3", - "symfony/cache": "^3.4|^4.0|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-client": "^4.3|^5.0", - "symfony/http-foundation": "^4.1|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/intl": "^4.3|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/property-access": "^3.4|^4.0|^5.0", - "symfony/property-info": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader.", - "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the mapping cache.", - "symfony/config": "", - "symfony/expression-language": "For using the Expression validator", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For accessing properties within comparison constraints", - "symfony/property-info": "To automatically add NotNull and Type constraints", - "symfony/translation": "For translating validation errors.", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Validator\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to validate values", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/validator/tree/v4.4.48" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-10-25T13:54:11+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b", - "reference": "2944bbc23f5f8da2b962fbcbf7c4a6109b2f4b7b", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-16T10:52:33+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6", - "reference": "2a1d06fcf2b30829d6c01dae8e6e188424d1f8f6", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-12T16:39:29+00:00" - }, - { - "name": "symfony/web-link", - "version": "v4.4.37", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-link.git", - "reference": "ab13621fd0c0119ad9ebc7179be7c5a1fc6a542d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/ab13621fd0c0119ad9ebc7179be7c5a1fc6a542d", - "reference": "ab13621fd0c0119ad9ebc7179be7c5a1fc6a542d", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/link": "^1.0", - "symfony/polyfill-php72": "^1.5", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/http-kernel": "<4.3" - }, - "provide": { - "psr/link-implementation": "1.0" - }, - "require-dev": { - "symfony/http-foundation": "^4.4|^5.0", - "symfony/http-kernel": "^4.3|^5.0" - }, - "suggest": { - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\WebLink\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Manages links between resources", - "homepage": "https://symfony.com", - "keywords": [ - "dns-prefetch", - "http", - "http2", - "link", - "performance", - "prefetch", - "preload", - "prerender", - "psr13", - "push" - ], - "support": { - "source": "https://github.com/symfony/web-link/tree/v4.4.37" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:41:36+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "voku/anti-xss", - "version": "4.1.39", - "source": { - "type": "git", - "url": "https://github.com/voku/anti-xss.git", - "reference": "64a59ba4744e6722866ff3440d93561da9e85cd0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/anti-xss/zipball/64a59ba4744e6722866ff3440d93561da9e85cd0", - "reference": "64a59ba4744e6722866ff3440d93561da9e85cd0", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "voku/portable-utf8": "~6.0.2" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "voku\\helper\\": "src/voku/helper/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "EllisLab Dev Team", - "homepage": "http://ellislab.com/" - }, - { - "name": "Lars Moelleken", - "email": "lars@moelleken.org", - "homepage": "https://www.moelleken.org/" - } - ], - "description": "anti xss-library", - "homepage": "https://github.com/voku/anti-xss", - "keywords": [ - "anti-xss", - "clean", - "security", - "xss" - ], - "support": { - "issues": "https://github.com/voku/anti-xss/issues", - "source": "https://github.com/voku/anti-xss/tree/4.1.39" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/anti-xss", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/anti-xss", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:58+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:00+00:00" - }, - { - "name": "voku/portable-utf8", - "version": "6.0.12", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-utf8.git", - "reference": "db0583727bb17666bbd2ba238c85babb973fd165" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-utf8/zipball/db0583727bb17666bbd2ba238c85babb973fd165", - "reference": "db0583727bb17666bbd2ba238c85babb973fd165", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "symfony/polyfill-iconv": "~1.0", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.0", - "voku/portable-ascii": "~2.0.0" - }, - "require-dev": { - "phpstan/phpstan": "1.9.*@dev", - "phpstan/phpstan-strict-rules": "1.4.*@dev", - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0", - "thecodingmachine/phpstan-strict-rules": "1.0.*@dev", - "voku/phpstan-rules": "3.1.*@dev" - }, - "suggest": { - "ext-ctype": "Use Ctype for e.g. hexadecimal digit detection", - "ext-fileinfo": "Use Fileinfo for better binary file detection", - "ext-iconv": "Use iconv for best performance", - "ext-intl": "Use Intl for best performance", - "ext-json": "Use JSON for string detection", - "ext-mbstring": "Use Mbstring for best performance" - }, - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "(Apache-2.0 or GPL-2.0)" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Hamid Sarfraz", - "homepage": "http://pageconfig.com/" - }, - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable UTF-8 library - performance optimized (unicode) string functions for php.", - "homepage": "https://github.com/voku/portable-utf8", - "keywords": [ - "UTF", - "clean", - "php", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "issues": "https://github.com/voku/portable-utf8/issues", - "source": "https://github.com/voku/portable-utf8/tree/6.0.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-utf8", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-utf8", - "type": "tidelift" - } - ], - "time": "2023-01-11T12:26:16+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "wikimedia/less.php", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/less.php.git", - "reference": "a486d78b9bd16b72f237fc6093aa56d69ce8bd13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/less.php/zipball/a486d78b9bd16b72f237fc6093aa56d69ce8bd13", - "reference": "a486d78b9bd16b72f237fc6093aa56d69ce8bd13", - "shasum": "" - }, - "require": { - "php": ">=7.2.9" - }, - "require-dev": { - "mediawiki/mediawiki-codesniffer": "34.0.0", - "mediawiki/minus-x": "1.0.0", - "php-parallel-lint/php-console-highlighter": "0.5.0", - "php-parallel-lint/php-parallel-lint": "1.2.0", - "phpunit/phpunit": "^8.5" - }, - "bin": [ - "bin/lessc" - ], - "type": "library", - "autoload": { - "psr-0": { - "Less": "lib/" - }, - "classmap": [ - "lessc.inc.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Josh Schmidt", - "homepage": "https://github.com/oyejorge" - }, - { - "name": "Matt Agar", - "homepage": "https://github.com/agar" - }, - { - "name": "Martin Jantošovič", - "homepage": "https://github.com/Mordred" - } - ], - "description": "PHP port of the Javascript version of LESS http://lesscss.org (Originally maintained by Josh Schmidt)", - "keywords": [ - "css", - "less", - "less.js", - "lesscss", - "php", - "stylesheet" - ], - "support": { - "issues": "https://github.com/wikimedia/less.php/issues", - "source": "https://github.com/wikimedia/less.php/tree/v3.1.0" - }, - "time": "2020-12-11T19:33:31+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": [], - "prefer-stable": true, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.3.0" -} diff --git a/tools/deploy.sh b/tools/deploy.sh index 986bb725..e74d6784 100755 --- a/tools/deploy.sh +++ b/tools/deploy.sh @@ -19,8 +19,6 @@ echo "Removing unnecessary files from final release archive..." rm -fR /tmp/Adyen/deploy/AdyenPayment/tests rm -fR /tmp/Adyen/deploy/AdyenPayment/tools rm -fR /tmp/Adyen/deploy/AdyenPayment/PluginInstallation -rm -fR /tmp/Adyen/deploy/AdyenPayment/vendor/monolog -rm -fR /tmp/Adyen/deploy/AdyenPayment/vendor/psr rm -fR /tmp/Adyen/deploy/AdyenPayment/.git rm -fR /tmp/Adyen/deploy/AdyenPayment/.idea rm -fR /tmp/Adyen/deploy/AdyenPayment/.github @@ -45,4 +43,4 @@ php tools/sw.phar plugin:zip:dir -q /tmp/Adyen/deploy/AdyenPayment/ rm -fR /tmp/Adyen mv AdyenPayment.zip ./tools/AdyenPayment.zip -echo "New plugin archive for version $version created: $PWD/tools/AdyenPayment.zip" +echo "New plugin archive for version $version created: $PWD/tools/AdyenPayment.zip" \ No newline at end of file diff --git a/tools/prerelease/CS-3947/AdyenPayment.zip b/tools/prerelease/CS-3947/AdyenPayment.zip deleted file mode 100644 index 9c205aca5a50093b5a77b3e8943830ea1a956afa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546053 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

Ph_Onz@W#oSo{@%IYLaM+VaE4pT#sP z4C+4;K7Na9ZC7&kCYkc$_9Jn~O)|j`8P(Vo@9j))Zz0VHA=Z#8{Mf`U!Z8c<`9rf; z<576}MCbQM7QAdNU0tyCcBd&zpj9X@J)gYjRH?n$&UrS4H3T&a%|nCwy==lN6($-E zm>E!@*ubJFMro$&@AVM7b(-~w$opRNVg>A1blq#` zT^UXkiPiV1)s4Q2ZIm7EjvgA}c)fjW$Ii))jvXt;@8c+I>#rhxTY8!kDUt*OG#1wh2m0C*i>Y3U37aij+Ahp^>4}JD$Pwg#FXM9;H?%1N}#L`pvrP#~pB_}MC zqF_C%xk03T#-7WSJo(ic3Tz z7+0|`A}l0@kFOzGEIs8DrM}c*K|_^l{z@z{+G;#XTZa;jCV;}tP2v|?YgE_aprn~# z!jcK7wGN~y!7oCaXv!v6ueKFmG>nn&dJT8WL})E*6V1$Sk}mj5re>uGk1Bx)D zavtJk9J0<8NQ4nyqLo)#uq%&%tlH&(MrEmw1UO1~nybRe&A2qNd5x=VHC3XJS+ewN z{#;8#R3H#*`U@}_ps)-mR*qecxmv0$;HvB^q*l*IOp(;(b|Iqzp?D!Ui^B!Ku?^NpFdJumWVv^Q&whm7JLe_uTvQARg|1F!pWb4`|M8pf= z_Rl-f8-hb<>W8U#sec(FOPL|5V_gPs4u5NpOc0tzs~5E(UB1g6|GCOVh;XHT#>p&( zt$1Kw;AT{8l2&krf3H2DZWdJF7QPihzfU!?7GAiA_i&uK~7Muh7D5Vxe ze)g$sP`_TjHA+bb2OsLe5ZdSlT8) zx>8{}fC6CZn-fED823epX35*h8wrl3_`}hqx0UF(#*F~WQBjY-#7W$@z^$Q?!peAfZ$MR@i<3LXkvP2@oHl{l~a&sx;%0 z>uc1=Gx^?WKuvlS&iUlTl5QMj>|Ugc54XVh>luSrt0~OdEvU<#wOi#qFDq1qSIe^V z82ma8S=xI)sv={-Pvk?Ws=yOOH!T}1`G(GAV|v+n(cyXbaPGl0LEdDKJP936AgdDVj{sB6Sx(Zuc{iiKnR15H`KThY==W(b8G zemElWh9n|xs2%cWOI=*h(&y@pHge4`y5w2L*@)7@Qh7Q?{p&xzyWQRnX}3h9XHPJY z$3fkcNDp2$d{cTKj+d#V{KB_Hkz87tBdc3LU0FQq%@)V(Q6`9$9X+5rZL9lo#vYFw zgP6U3s30=!6mUET^-^cZk354`$He6x#ndpn z)Ggy_aXN8W006kt*TUNiHpyFi_~5p4T)IT(XAA}F5SE_XGus!6UlXHI`&+~jj#|7z zisQ7{a4MxLx{3)4eb>k9M884xo-awr=VoH1W1AKY?QFd_>nm#aKb}X|Lajb}qTEOP z*W#}-Su#K7J>O5i15)^}5G{bQsk!6()Zza!t$$)z$_`e)%KcdY8Oz_Kb2KS40`+Ql4m0e976UtFEcHcEi5G<_ckbXXL5YJGP(Z?K+K9q6)yJ z@dPMjRp`65j(*#Whwf;zPzD+&ohyT@FmUw6W6B#lHukVONmCPOlQi^_nl-6i{gwea z?HVIpm$xlkk5_Lghh`!xr1_~SbJmTE&r>*;^`)JLuiB-iOrm^&MPg!*?mlG&L!UtE zdrRclD(jsBCvzmuKjI?vHPl^e_YbM}U@)0R&KLVtU}b|>UwP0&_W~^o9Xu+gX==`( zZ$Ku^zP`5gGJkG2ZLts5cu_Ma&$cK?hr@#9XZt8wDm^7#Ucmrj^OK#aky}{(7GkmV zgQY-G|Kv`NC^O#*HG-lAs1KVu2syK%Q($=7Tg;jV_oy{6?@Z-z!t>d+u{u_!%3&Qp zmM>PO9na@c$e#s+{_|c|Q*);008l`Dh|XDI3N1n)@VscI3miFb%v5`|ulWL-#fcE3 zj02%z1sYMm0T1$yr5k6uXY?PXli|q{%c9w2+@yv|j!q0Ko|x{pz|zne^P_q1p@pF$WizZA{jZ zEI0f6IgbVCv9^GBI)3<0?_0Btu^I z#PFKmf^aDMR^%0rx(MOhU68=q2$JQTa*Ty&h*GY~R4-B$D+E>V93?oFWeLVp=cJ7= z*&wwiz&;xJsD3Am-h|zybG9uf>sK*sy<(+ZOv)UGv&tcuNB6r65aQxDqv$0olcD z5Og;)coVIlwMEa|or*to5>cdeW}n(#Fj|mR|594nyh<|ED8|kSG%F3;wnDw6DbL&>)-S zDzG$M+RFB|QB+i|=$o>kPbu2!i4cwL#m*^`gV;W|b55{A&dRU{B>}aW6I7Y;oV2UB zS&o7rtGxaUJ~>PYu&>~zkB7FXZDb?0tAH8qVP`9V1u>QfgYG1dhBMuF%%!~%MBAap zGrv^e4vxT1{JwG2?pp`xwh%ASq@!kDW|I%ljjC?Lpj~Z+Gpku*Y!>O)m2mT7*aEY2wiy$l;ac};B5ydKKM<8XmKm(&cR)P7 z1LEI~Is6$>QF`z0{|yv^cILm#gv$SO-f>@5twb?CqWdx3#VN6#CgT8Wf{$3##=);n z?@PV#aPjM%HXaI|kmgr+Nvm~l*E{e1;Rn(0(m2sdz=xu^8>G$Z!1Js%2jo^RWzJKv z>h<%OUSk-DY$nLFLfNxz{pN7o^Pb?7@X_1iIIn}=HCJ-Y@Qn~$UpD7_zoQMZCizKL zpmZUNjy|$!b;mh0`&m0Aj9M_G9!qLn;*gX>EdU05Qf0iqbs4q$o;d?Tf^0k;iKObVkU ztmf;`s{^hpU&1Yd7G2bR{LIa%x3CIf7(O#?C@_H+!LmcQnyox_Za<2?$w&Lb2gvQ; zr+VosO5W~J4B$IvOVk(R{6Lmbs~|0fBBW9mmR>hYZEK}VvqaJ_g1oG`W;P*C`@%D_ zAge}Tx(LL0?XOPi&DpbsaFm&hD zCv0!Snf#xo4%x%y@Vi;GaN$l`EOuZxY{vDx$ zf64a$(w6@RfvDo|0#UZ^rlf=m2mnT^<})}@n9Wmj^YoB*QYVb z9vlrSvl_HM#&OmE8WosZ_g79)}5RNSYg zX+cq#(^5=>0kq5FGvOO5W*=5lb6}wNVdzs(MwV4CPZpji+rwu=#=GqG{4tWbq4+e3 z?H{4*9BN>g#8}%V9PdWEGHGE=`cX>|DEl0Wm6@ZjS*C{+GSxG(j)ue?!TbLxAKZ1|5THG9|-poTtM01x^ueev#Etr-eG%rZs}-T1tU`m1(C z(5Qp*qa+m;)YLjfB+<$DBn8;>&#W>X=2OWns5}VMuT_sLLS8QepNUd!4gMNaD;GE zpKumRv@8WnU$om;fI3E^9u1#=s!2L+Dw#NSwpsIAvzz*h2L+&?gT_s4zWyaT)OJPH zwXkl>v@>hXM~NL`xw*LgCn0mrH2yW7`22$){6(e%`x!8~N0nN0oEx9P-FLnBdA+hf9ac+Fvhu^SMpv0F`(dfP~=o(mj z&8W8BG`Vfk@7xnR9SNNOYVozfg=J7wc-*wrhNma^LopyaAp#??4VrT=Swr<+;7We% zZjJC?OM%PSS8<{DiR2m-ARv~%1g3u`eZSi8DpYlCw>Xh}_Z9C8ll)3M*JxK=Vhiks zzn+o^v_T5|kb%2TTu@)mGroIVwY8!owijw{@cfMQ&D3Z6;(0tYc9PG6%|LRZlOKh> zZy=7T4(F0-3vO-4qML^RQ17`BVe>TQSJBGm#=Iy!fnzN46**N9fTdi$OPyoQ38$pj9?OvWN`Y<&_mSj{M`Ini%R zilQJiNnPZv19roU7rhoX+5SeMn0IaS>(nPI^J>a7b&{1W9wa3f^qIK~{P+|_QK zyW7QLUE9uQV6k%3T+d}Ox;|n%`!Dob*Q{DR$J`**d34L;Z zQdzcB^F7$lT2fqWVt%!%|7CERRJMv$SR(Tpq(!&p~oW6-E zQJJ=3A6{{mwKsYe0I%Sj@EAjmt~-!1GIphxO4(H|jZ->p|5$WPvy}_b@HnyLqH140 z)GEEw2~|9oG(I&y)tC1M`d~Hy^NKFXJN=B)U{%cBP;F5;IS?DxCukQiL2vQm&@ISA zJ;Kx7K&4B#%oV&6XrUq7(Sgn*T?Y7MMXoC8p;hK>o;0exGkaqcQrGnou7|%gnn!J2 zS`dS5u9H1;v~mJ3ezcuvoA-z`R2W3wE-E8m&k|MFi}_l&RqeJ;|tdIKCZh zpk}eyarqVJ>__q)?H06}UT%n&MFJy^cv6ogayH8{6si(iUh?Hop$vJUwWs-IWdwSI zCt!@3Q6|;Bmw1W2kl+2pQuvpGTlCYX$wqOl5{jEfNIzr5gdu5_XN<{Q8=h*e@CP5z zUOMgNtK76gMl*ZU7b(=)1ZTFD%T=cqu~YaQJH=m2@qR|Jpc6^8RJ#*eL|1tewAKvD z%Q9=p;(bD)m%6p00bZ>Sue6N=)imoC7)$bV0p4JFSCITK)l~AnK#zh~u0FjXhWK_L z#_3qzYLw+99^D|Nt`ve_f?eb>$>ViahXtB?B|@XYhxAN3F*iGxjgD)9d1|1LO1YTol^qqiEptLAJnLyF%P2{cL4n#ta=Sb>Z-i zkdKjKd(f^r)yrpLM673W$6l#i9{oc+&a6xlE%i}igH_V|FMeDapD$*HZCtU}Qg5>P za-{fDh|=J?&*q)-d2I36CG3wV#W(9qf!?QkF2i4SZJV)Xuh5It$Ye7yF4Yeq%!WYt zLi4U#@euT=-QnxXt#i-3H!=$DzRv65zWrg)0n+mHfa+bek%9Y@v&R2iocx1UiI_Y7 zHlXycv)#W++ovjjE6u(4RaZVqNYcO@_2}qb8`dgwha;lb@S4RY%yU~YRq7KL$%p}^nUdX@3us${??Oi&5boWuek zA~8_f_$u^Fhb6PV9@Viat*_XT$)-bZ5>;8uTQA>cz6T%qHI_`@=`kj8{#>IB95Z2a zwi^C(x=s=zU>0^<1cK@H5m;>dDM3--n-Q_Fhn6u_G|wc3;}GW@@Rw1Yu%J$ZD_`Ro zR@M(sB2YSRp4pP&1_2XmROIIxqcZXKE!-?SGUSVP~UtU4EezxV?1I`Io~lBI_v(LcqpXq)YmJK z`IQ=mQ_CvJtM9szSHcSEgX1gE8<~4`5k}!8!xYJjBX>Aw zVio(6H^bh*Nq_>*@~|McJb#(+my_=WMnc{!(T3xSJIVyIzEg&fY9~ygFW`aJhiX<< zMkz_bFio^Gd?F{p600)1nmhyo2AdXpYThIZYzRFNtuE`b6r`?9PM$qoJ047fm^l|S zI6Nc#j*+itj#tmA4jkwqPN(;ZI^{so#mv{UbP6C54g$-obhGK05ec zm4knP^KY`jJ8VtNO@9T+3YFF0S{uIOx|@)NWKbmwg}jNt$1qPJ#LcJ1qDlLB6%8|E zR$nG$o_}(4Lq}(@trqT*kL{kh5_YsmW#^dG&_SW-Q7a>v7jUwo){F=c684J=P8{cf zOndX81Av=wve9wosm}`sWZPNTSkt1$ z!A-aV3n5&Kb^<7KUuhRK^#xW9@S7Dv0V|j0Iy2RpH&HkdN3inE+OA*`hM#@?Eg0vH zyfZGOO;Je3Bt!^8C8U|e-jt$Nq$gzDE6I(h8H+nj&-GJfpdDca@V(X}ln<^|&;e2Bz;UiC={*LF7o?`R zbwNfv0wDukk^a}W30VwG=oQ43rVKg`SA|wzhon74hFV^qO*_}<8Yq}V?>RjNW8$!M zeVuJpK^XX=J=|OsM!aTs_NSclGSsuraVFSe2Vpcr;WxeS5nM> z=D?Nnl;U#VKy121FE5EMbCbmI(0SH5gh*3&N_M4>mNnr}iKZwZ)9=0ENROhGVS7$Q zSKmmL`ubgPGKh?#eP|Zx8>*>j;GL(o_W)b0ON6zW(0ubiD)0mk?c@@ z?Ws1G<$nA{q6I+fRZHxzW|s*jrNuG#@aY?DMFlp#-L)$>Sq!_AQwF#An)vV|rMcPB zGgVq7S?S}kWeKEXV(Pg`EYD$oNqS*P4@_?Sa!%`cNM?4Wb9$(I&6-|C%T|$e^5|lj z5A&mUP!hDr&6(ARqO%v#h)=qNlg~Jjqm&(FsbOoo_A4=7OF4xx*=UztUl}4K6}j@T z8K||4ab7y$IB3zNadkxoq?lT0>-%knrKC2R3sRR%8EYH|1R+!tJ z_?(199ICb@7gbfAh<#x-xJ5Z4xmep}^?0}({|N;^{B*c%vgCMsE}viwr^+z3z6@o8 zGAx4Eps~t8G=<6gh{P;Av1|4CG)dGegp}tS+Kb3MK+O}|kEVshD}5djhL!K^XW~nK z{WEhDCzMT|gL-f>Xb|{01QahaIfrkoE)7wQjO+j7>>Hyi-Lkb~+qRR6ZQHhO+pgHQ zZJQO_wq2=8QsI}=w{iQN?t8kwAMYMxzdzOnrq^DpoIp8Uy;MGkwBep%i*_0 z4#hlQh?-s53M$!2&XW0E=vsVR5WG8HUQQ3NoRmdb*KaCP8A`2aAlC=cE^S2Bw%b8r zQilADzg9`seXslGX=heGr3vaAow>v~h?YmFWCRVHkX5;szSdNSOTx(3b8?QA( z7D+}X0bfQWb43A{gzHR{@5>aTWMMMbltibEY-Zxg?yyws+ZwXeqovF|G6Ol{vnY&3dQX}GE!5>OfR+UVZXzQPmHdQ3oxt{_xJN3v);FH>mwDk_171j9< z6N9F?8KX|f^gACcm34K(af)nEA|!#;7KLld1q?#P01dC1YNO89T&P0%9K&MRL0Mch zeF!RKVKqY`!%dE7NAPaZVjYMD9wy{@*%K2*f*v4AgsyfEF$<<6As7^fkP`f?aZuCI z`SI?vmY!F+k-SvKENYsGvcWdfxjrTVkpms)zZ{ZOYw6mEwpr|rUt3qTgV#xWkNf`!Agxpj};2mmPvcn{sUf)Z_ zt_||a$Gx;f0ym*;M<@HJSu)2XI3l|H-$5l$LB+ zMS&MmZqr78D1jbqCSXanK>@WdyDnJ8#rRA*6!X+E#0ChChm#+`%APRa4(uiC0KRiM zdqVZQ)v8o;ubrgc&u5^)%Q-K;C;$i~)MfH)l%ZskRC=WmyNXYKa5DMmC}WMfjmAe% zTB6KP^(_^jA5ind)=F^M5wuvpRCok-;WF}VDa3C?p0U4G#w5uk@izuuA^n_5|9Fxt zK?+}(Loh^Tmaa1ePLHjNL92Lhr?4w3g_6_YbAf9w=E!HYN@+zSd)wF!KC=M+qK*W5 zI~DKdf4=)2MWv{&YT_pcFg4dvUb;tbd+dRWjFco1$_U@HuWm+41| zTwhhXbaou(Vd)E`c^quBI#VWY5|UIow*}RuFlU|(fi7oLXU?-CqGs`>}az4 z$TNFpTv#hZ9FObKyKJvr*|!_m?i;_|y|ZC`=1f#PydUI2bH9FN`fRRFyEQMdR`v&< zojy;TZg?|FMxV;{_Es5Dx@4re*%gvoz4|ZrK4~z?&(BGOXKMY~D%`p1vTHyi<7oqdYwOc@f7OJ`?E|brKq^pDf}^0~#fR!DJud#HX;c+W6E>R> z194yG!xJ1#U&$P0%apd<{Lyk-vkxY?t0lR}h&<0 zQQR4DPp~{xeN!t|RT6h*QU+v{(4%PHtVuXfm-dcu{m>ei4qXqB@-xN0d)k?oljYxy z54jw}Ec9Sg{0#C`^Y%Ushe|&OZr+l}EYn+TwWQXiASUfe3&w%VfT6a` z8;CnEZEIoAP)6p#%ZEVHG!;GBMxaJY%@NJ|xW(Q%Od0#}3uJ8r-I8I3Dw~o-Z(X0W zWB=l$g2M;*nDB{1xcT!rhLAzt>bsy}C7*8N9|0t?OOsByrb-pzqD~onM4>KwdZ*Sd zJxlkJ{>=5yy^;FLc?E~~p51S)c3%A(yX+!awdUmeQBft7rrzJvzXF?$37!3% z@Y_#<8>c9Q22IQ@z3@;1I{kDCKR{t1+3j)@WhY;|#Q8!$14zWxf4Y+JYBqd}EGa?M z3z5+6q=_>)^8@3k3*D|l6#y@Q?!uh<{vpQ;(0li?A09p&l+$|X*U(^AJh<|%J~n0= zBc@KkF`7O1$Q{oYXsy8SCXwXT+SW)?buH#j@ZY3$i3hY8uP2|_G_LAw92Qiyxj@s( z2grvRn_eLy-U9Xtj5TigB^0YwUXOGn_w_YR>-(@r2ZeydsrNk=Q&Gk@_8WC3A$NFY zb+Ejv)Xdt#ok?K8kbK|ZWgph_$$Fs?bUDVyO8n)aa+P_vlt>IRSFW5(8PTHEaDjnK zNPxL@0a;&d?i+zmYRWt`T^~UH9t-e=J@3t9*e%2z%j({3jU?lJo&q+rrXUG${WORs$f2M(!IEP_*d3R8l^-Gv+opRNG!08DTN z?sU0k_%rH{;V|hS^U7)SKm$hd9%8zNL&OBrOYtUs$$zMau_~ZKvHdHEH zrsTgVge+vUR+ntaq_G(eI^3QqA%ud3`7jsjrIYWnU@ETLmP!;sKW5p)G?1{wGy*1u z3=n6~5F;`pXAJ{|R4Z*asSc4JHn>3s#e&~@VUDET*VzzBU{$&&H+6*KIi4{NVni%l zV73F1IkkzGKO2b>#Ad;5I2P?uL#|+Wa)qwWf3dXoRB}3zLWtx<7e0nSv_2r0qml%B!&rgzEwBwy6tO9opT))D9$|NxM3EaDI|udac*I8lBX{1HGqdMz3L2X z+F7y6%~%9SVJtVjf-;W|A}NL@V;`k#pjbjlKW^yvhCKLN+>W)I$L*_bXeg}kWCB@A z6vjJLP^K&cFp(^p?y7YA?V+ z=ES25+*g(Jb&OU9Meuq($C4OHL_rgAlKwQ^OH;Ofp<<-nJ$1I^>`&eSOzJ9VCFHaYT<;3QAp%r?0oAQ+rcI?aYCFSzDD*d#%NG zNeT1NJT`!hs!|NAt(>vbVZw(83`#&I$;CI-)gZ+OA={Reanjy z%L&`YRCyWsY6Q2~!cS?VRm6X*l;WtZx8cKb5ULo{w@F{WW%^w}(qmBj-dM+_(71K1 z!>WorV@fL%YCPr+RsC=?Qu%i4Hh&vX723iz{`R2?(N9i&i(r9^6=Hu(ewS6p(E!H zu^*B`JdV+(GucQXjfCWQ3n5*br{G%jjwU7<>sQkO{zTi#nrsmD+QQwGry7GkV4I(u1;KoXwi*Dn_@J`i3Br0AHu znxej37~WF%@4ktiqlL{17npH&AV3em=Vx2NSf#Lf)WO5JOqPmT!G z^_b{U(Jk@Bzm6)m>pqTHB{Xi^u8zDZ#cZ~SEyH}d z-pkA%IgTZt)S^Dv0@OnEpe}`yjLV7%qUqjpNor<|Yy%t&yKx*sDS-xt@*X~&fbafY6ELjFRr-HuK zuAe`mf2-DT@vt12eq$X=B0YXF^|X<#eD^zhL;tNR{jb|c{(!;o8x*FS!GD0K@~_wX z!_d;-*ZT(;>wht{gqvobt@+tYOaBSBB>MYA(7#$*$?fk=?f)AU`yW64XF+Rpyqp~n z;U|usHxwLRpSg5xvt?$EC%wgfJuCKjjN~{FpzBo2+RgS`p^9o%HZr=awRuU3!QV6qR2I(ePj{tkF4*x$GZmD`DsHx@j1fOUa*PlMx%m7 z_ikY+pGDh#!)C#UHg$03#go-ct}oEXyY17?w-)&ohJs_~xD+!WG0d zUgF{|1N$o5cE?>Y+*m0c-P|Ecrku|gApAig?)(Ff$x34_sA1QsvP0F7aEc>t=hN{7 zndoi|T@*g49bUMwTLA^$(_NTTCy4s|yG}rkUSuHX&z(*G>^0*4uXpyp*-rtv zK?0PK8}A4=dQ6$){z?}nJRTYb);q)0V@NyfctxPak_;cWiHe$*=sTU=xt$O2q)aWZ zx+n=GEL;ctETnvhYSP{gNyTq4DTiO60=d=_Jo;KlkiTEbua!t0VseCNb|+r!uE*BN zkV?F~cD`Y;1(RhDm@Of^HuuY7F3x5zd5vahKq*_W47R>~Osk-*1%+-%w zy*1`Y7}gweQx_g2xex9j+XfzU%t$&6QDW8oF4rHId7qa=1Z!QM8Z zyuPt@BO42s+O#?9S@Wy907H_o@0haPV}9C8u>ag86zS-V!})0jDqsKrwEy=`{7z_p z=FGB{e?#T{gqfi}_HTj&YT;=Lv&}EQG=Wd5h+G_O5F|_YCmo5g4zp3dyU7kFxd@(B zo$3dPJ?Un%`}T=?!BdojZa|SHx}!cN)Y03dHs}W!5!)`22(ToEUzFa_L2f%OO8OSz>@Kvp7ONYlSq? zIyOVykTxA4!4ih~l#jW!EP%YcPjExzRA3%S338hb{eKyIN!SKHdVoDW*6BKV1YPxCZr#x%EdR zH&x=s>rxtH+7$>q;k2=NdqUk-sHCD$E&AEKISSg+d+CF+=47* zcHx({eS0xChaZcz@5Sa@ZpL$x5nUE#l;q0S27Tw%EE|v&K^9YviiN@{;!J^YkP5>3 z@g#ZUR3f5t$6=?IU=Ze)WgIe}u_ZSMFIQR=l&(z5zbz zMXytm>gQ3HzSu;d4i5r9xnR*N3H3Rv_ST#=BC=b&2`OzjH2;W?WD6|C)>(2>a$Hi( z#m$w|8DY6*q%HUs>p0mN<;T#9U%0bEeUO}I@;KQ5+OD>plHOdKMh!~f!h?|ox3(D)d zHZra{{;IPs6l&^@4j;(h@FgRP6e3p@JW1}dPQ>DbkCkdeVdxc;$)ru?nSZ)npo|9I zGLuqb+LTv?8s+FFNuouR$351L=P}*OfaRVT<3kQW@l*Hr4Pl-(l#q5er1Lth7*fvS=a#$lle32K+8*I)5&P+@HY97S~=P3l>N&AZx;nA))Di%wp3g@ zf;|fk-h|l{t%!r2FpsWJB0Gn0qwmO$EdUsU9?X_{i2;OxOX;s!Q;I2o@aP`y59aG@4G- z(A`4P0z~aGLFlTo9$)Knj6DR_q>!XGD5Wgw_*Ndz2QT*U+(>ojsj4-N*4;u{=)AXH zr%o9aVyrGz{xtNpm%rLMdE|=@vrY03LW<05&-%Zhfc)z)pObg} zqk=4zu3TL4xf6$o6VN6sm67oY_@>2hZBDBx+fAm;ftmyWs{ z*W`Slb|9~05!VaNY$I?FgvuQ~NVh4)q$Qhd9zd@&>?b?CGjD-n1Q{T=!<=p>Jar$a z>P^NTRdYpRSf9}YVwVg7cV;FB(!kLwvGl9hnFP}^Gj_jH9+SRM23^O;OEgwp*rZbG z74O>9ppxgK;=pOYoV6S#NgKnQY)g|hFIr4(xo|<;^NT?B@z_K9K`YB6DqiC^IN|v&Ltmu>uztrfL zDDmM@y)yGC7i$3vb-;_G>(8_gN`jwZ5VNx5Orl>Gdz7Lj5Xh7c!%w)6-;u;YA)}Vc z4>}-y$TTZvUNlJ4lU>mjZFV;meCxLPHNv3r%Hox&ujI<;JO#tHDD0ZUj_wZW?f*dT z!2kE!@mDSQFHSQob$F4)Pbbjv`3U~`!b0XIMpkw%&i@09`ZulnkNp5kWIbHqZ-7ZJ zpQy0(9T7uiiP&GMAvq=pVP{!as7n~$J56@0Z@TY?WAXCHd5Dz|gQHVq6H4XrC!qTF z1^WxhT&|GUz!n5m*H2Dg$?}&&EXB4bsFP4(q+10>_`8GNM(5 znlz&tD=wmRwuFZb2z`~dyAGyyt1L-z%DE|xzbW^_zyEV&D}@P;=>KVjzdjH6Kg^~7 z!?^z@=YK7ZKQlrXMXBEgV0&KFCJDj8H6?4$N=#nVM-2$;OymIbsf@Iuxsm4C%Ugf+ zx>*}GZ-l{pTYgL%Il))UhZLz7IdC3gbZ81ieFR+i?(M69QlupfoDB7vGpu%OfI!L-F%3jDxI3D_1`xG>RPC+)8Us*I|4+WuLyJnU9^ z=jNC2NsKwh*x7rIBrxP`uuM$dImXUTV$;j8m0n5b847R9MHd0l%Fu4c(|a7$rkktI zp6T8Czowt|iEZre2w)P-Xn(3*FMd(&aMH$`nB=4UqCp!*U;09TO`=P)E$5Ncjk0q& zIKO>Um(`46mBa#u4=$Xb70ABp4ah0F75lvvb7oqf^r+hP0bh`X1eDAS{4yW4DaAz~ zdL)kIn&9Ir-s{4M!MD1POfn+3crxxz?>WnyyJC0Hf8O%*t--e62z%iF&l}+1RQ+#< zpp1!ut<&FL{@I4x#Qq%&Im#_4s4|!R>tKICrTrpn*s!kV{KFx_M`tzuu6{}Cp~pR0 zWp%GR;U~=lW+lQ}+3N6^k^0O zhLK_5jfD!&2D2=AWd3M29tfDU#;EVuO6XHmwhGk7RLRt-S*Nffnd-39Zr9lR0 zZ)~PqVW?=g5Z55jje8E}?~qSnKBoPd8>gomD({sO&^?-S!(zP=hyIx*K7#*NiA^|y ztNjRNM{m-=Yic*u)*!=MhY2>L<*ulL4_jeqy9=!M?{5>xzju-<&KA~xj+pe1gWhHP zW@`6ShVGyG_6Jw~KZ_|D*jhM$@^Sr{UWNRx%mPdTf8J$Bbri0r4A=U+6rp*{I)?S| z>bNND^Ug^T>4wFE$SI`H&Dq&nt8RH{(=fkBl77=7qkF`}%f14osMuT~nY#tpJ}g{} zdW;tXYst?sdQI^Wh5@v-@Lwc9iwTl%cBAMwt%_vjq0?YpZRA4O4;d)^TjwTkwMyrCu* zh|2ZezabZ)niZ1U%$}nOP1f>NSLopfm+<8E!&2nABHKp~jOd%Bh4 z*jTHe&TZ$*!MEatJ^DaGZ3jb`O$oN95EsCO0e7KbSJVr4B zB0Iyl7;%BY+QwAV6OTc%SJyqmlc_9Tz%dG?3dJ+J) zC%Fi7ML|0m_mHhD9gB7b`;!S7JPN8A_qZ$52Y~37d0D_cu-sSWVIOou1Ot<5#uJN< zHEX2SaN#@|DI%%?C6u$8_#w7CPUgMGCHbPCYARCG6c`tw(tba;^A1Yd5$O%`)$ASZ z^kM7-v$(FP(R=y4xY)x|#!Z{v>wxxgpvmZCU)c1_7A`k_8oFk-PZ-yyeR&QNfWDGD z?P7WC4ky@!j6sMF#5rllU2tmZec;YkdNx}ozUhAGP}CvFoGw9jXMrP`mSPpEE{=iM zENg`ZVygxnd85|2!wGIOXn_ljLze0r&tN*kN5>~qe4GUk{7!Pi%J(h6P48PSsaM~t zUNk03j`<`QE}N}YC}ZG6aT1Q_^+!q)$1B!WgUIl&e5FoZysk2%pbmn{FXm=-y&F#; zFFCsVe0SfSejxwzQ6R3}m*xCvmMot!_#dcK{>L;GO&nZ4C%lCXoDD?n9BmAoKVdNb zOxvOrWu$-^e#1@{Mz9tD;h|8jq_GCAx2#t|OeQro+t6qI%9J=r^mbEnK|WvM1eyML zJVkO37c)Qup%B;tl`j+}>eMd-aBk=J7-C-m1|=CZIS#fd&cedp(`#r%*`Mq%KCUcH zLbt~Os5uyl;@7fC=wpKY+l|?oU&%`?!Yt}so?6x%ASkzOFtnSCh}sdd*9if zE5*lS1?`LB!JN9)rt^MopUvodzVqDr6rJ`6e;%=5U3^O!*_D*KXjKyHa-Csp`Z9l$ z;yhPc8kXppOyv-Fia+@;MvAgy^ifZh8h^Bpjs{!6n1$Q;6hs8cpuAs56q>rhf-6NV+a>L+ms}^6!SrZWou}m$xJE&8jwtCjyZT+TVf5l&WkbfwY|e ze6KTkl<}rL-belS4*U-w|E{0&#&&;BefS^V0ROt0k=-X?k<)+0Iwg*vbqfyr3A@Gn zFBoBdzpRk8fs>Q8oxy)_=exqTlG_-4;OaGW4PlkA6IcH#S3GNKQPE(i1=3VW%|ADk zL(;?Ea#W8zYxD8KV}|#znllDGf0c?28PD#N-AA#S{ zf(3tJTGuZ*yQ=Np1DYRRM)fFae&I?9QyA%o2I5`p9+E+4G{nr`B{1A+_WRVBzXtH5 z4Jo9O5EkBABi0rBce3+g`*z?FQ4tEW7Gi2B%D(!WSYM#Ep2IGY}jy zB~|yfqR(+0K!${Ao^}f43>!$l87;=|ey1tQ(i@_nggovW%o4#QPtw-a!^LqO?j`PT z3Zp(@j<*x1&~L)JYo^1GM@9;OaDy#y1FLpDS@pkslo&4|K;wtLjFK9ILUfNF?Wg?t z=6dmL!TYt4T!I>CT1$r!tDCPEE84TVM~xeGaq|{HrAP8f0_rf;;d!>gNvfMheKzWA zbb%yq3TwD|Io7@@g8?G$V2h)uk{#M7u?}^37yTn<8nyV2=>i@gG-2vsKPvZkywjvR z*&ryhHT3Ce(o<6YmPTeX(6M`QO$e`|wtgKX=~1PuL>eDKUPpS)3RaeI5OmmPqKx@0 ze`5EDZ501h4(@|nO;aSEQumQoD(s^;~0Pk zqNIaBZN+oU@6qyw%OPa&FFC!5jBeHNl?~3LyuSv5N^!u#TCJFG2MjUAT>|5R_wAcx z)sI5+H?bk#9pa{ndlDR%L)K|565a;nn@l#)?A5-!9XYNA`Mc9YmUOdcKOpDq@AMn^ zWiE;NAj%azg(`b}Y#}edLdkzIm)tf~2Wsxu^v)@o7kNOZ`F`-jCr)rt;h3%on{OV(X!yQTwkp)>r?B3|IcJMH+P2gW255CP<7~h?qn3C*Ql>=Kg9dN>6Z@Z8b z0WoeJR0CBpmIr#HjP?xu1R}O#lwesA`iVyK^3>~CV2BG~SBFjDOiut$>W-z4tjH&7 z>iCiAdQn*S<|(1cK_gZ4V;DV+^-k1|C*q7v3Q-aS;V7Oc4-}Jyc|*U$RJ4o^cEF4S z!Y5#mDAQS`5~v^Y>#QIWFv9Iy;Ui!5m$y&C__ZB+CDtaHcwjBrj80D{nWT=#ue+Sb zO|AFVc_i>OqY{_QxNv?`^rmdUYa4@z;=v`1k5|@{dc~g7;57MibXEuo>qKBR?4zBh z3WSA1Rdb!PbN%BuHFHF_b(tQAmAN!rnPj2fDa=|cyLapyoY=nFpc(JLm$ni6v?V8< z)dh-?|G4fLWezSY%&@dTZq|Nz()?n6-F&hd(1_@##jZB}CW-eEm z3GfTV$Veo?G>0>gxI_yLpc;nPPZ`Fk0R+_=vROlV&@=iXJ5Ia&DJLSrB5MmAvl4$6 zm;!SGl?)1mUtZtj&66bg1kW(sH`nFbgKQLVB5%8do-!_Ex3AoxP5Qy zh?U1}m{g_Slw5t$0`=UXkY)u0npatiS-G=yJZUI`rL5g7bUAKe0{CC5qeMTQ1fFZ`2LeRTuSzO znz-x=*e_1jiTeYW*OR87{XOuO&aywd#NW4Y&JebEz!u*4~K3iX9Wdhm6jT3l`a7I18n z9z+eOH|BIHI=>1brD|haJ`sB>t>EEiG($iVOj-DjOc`sP<<%B5yj8pd_E3#P2f;1w z+tO8;|B;{7-O@dOtB+6klm2E7qQgU4jmx&E<+^a3bv)j!b=sF`SA}VZ)nj@KyXs*| zW?ay#$bNsz=jee($lW%&ZEk7|xH>l%zE7})@1 z`YYfM3=g?Tv8c^G+Jb9Nu%K1EyxY>!&1;DgHm%9g2Tei@yYlcIl0?yx zldw~#fqP}Zr*H%H3W;TaL_8J@rDKwX^|~xQeXi5iPwTFXa8iz2zU%RAD84+A_p@}S znfqbffUw~CScnSugqFPDCKgZ%6v`W0XPR^TH(2V{P=`blU}q}7K@i7xde^fH3`4QeUe+dhJ}Fi^xb!3M)oQ=sq81r9J8#_FGR zZ4KCoA*XmWs)oHjV2g^;f6N7zToFKt?hbykoPJ$BcODD-MA+P0I=$H4e|_6EWq&@n zKZ)GiRSN53878hB=BZnV76>bO@Au{Z(BUpYiU4AXtaV_U9j;&g%2ZlH?Pe&rbRn3S zKe$9@vi)ttgffy>A@R(CRBk(YK1Df{}>50z#}Y$BcJ)cdG-KJSUh~#zmQb z4BIL{gVtitZ9ry@*1oBRd*mErWLo_qT!*J$vy>H5zt_7pr@HpM-hpiY=LM=0{1jxc z(wJ1(>jY$X$?^p8rMY%rt4qRT^S-4Mf5DHI9*k$C;u)3^85xS$@v|uvQKKrSjOZn4 z-?ctz-8|3Ka|G38(FV3e327K}pzE)l6O8LL=~^Q0$d9XcMOB375u#!77JFdZ`A>#M zuQf0M1wXaGvZ^vYv38O{Vt6A8Za^&!K~wJ9X2q-h7{;a;F7?D{P^PgFd8 z0J_I@EdMOU5E0=`C17QuqN_8&AFyj8>$ffN6zf5_lY1B%g(;IJd8>hm!nPIGsciN+ zeVix|PgY3gsmKDmU_4gcx5NY9sKo2u^k{FbpnZLaR(3Cwt*<^1mRVdoTh3lD(>R}M zY*=idv0&5pOh6T9X(VWLUfQoO_E_c=LYhAKH7-&!W$_-`qF)x-+hSTAa^L@DK~BH7 zRwRgsGd6ZLCVU!MLtBs@3|a1;0!hsY@z>Mcg&u0M#02s$#aqDQbjLtfX!O_~xZ0W- zK0iyAoAA~HFIKBHvBj1R_Id-umi}%Xsw8&vC6X3h@5wc9n&Yi}hl%kqCqB~(?xBih z&rs`DQ~8As0@Jj}>hBZ6T$W9|21oi_$|4ZfKwiN!2jtq&!(r%ymN`S;IaNz28}(dN z+fwG_FvAxQOEnI3mlg^t7j<;r*~!~0Mj~I9NX&GAY!)gow3DTxn^=jewvrHANl(X- z>oohe;14Wz=Mdnr7BTVb;){#*Hn*BP4&Qz)-CiEwFZGJ83{Lbf0c^X9%gJ-rfIzX_ z5&B~TC2o13DmZEHs%U5q**QZBSCeAqour}!4oWjEHLO6b{t|L_scYq-83n-d zb?1xVF0|h&kPex~AkOm4i*F-BHFU(CVC#wq4H!E!4r!>8?3-gL)&0+{XPJA8pI=$l zP-6^pvXkBPT~Jx3M{zqe3gKULm)Yhjs=p+*zpI2*e`nODDDQ|xgt11y8~)YKi#rIe zf?pHiXzs2ts5rNQWKss};6=sTex)4*)JZIMs_ADD$ydq+5d_{6&A-%lMx;9=GjYwn zFXXabQ4j3eTMYy`s4OPEdQ+&fF$u}Rjxr1$Zgkz<)8*h{JqA*+EfBRjN}j=|QP%6L z3c}&73&Qalk2q9QeIkl*za9KY#cJK#A26@u1p96H)EgvO4~KSDJRgg6-_;ytv*3Hr+I?EqF#7zDdS;SD<{T@C-Zp{6 z-p#6IkHF4Purs8Z#G|aIVPlW+9d=9k-t0w9)p_5Ym){jXU&iI0Y(A4o7N0|#e`sO( z{bkF*#o5mK^RA`mXkzfExuxcRRPV*hBoL^}0#WArIh(Wj3$QJVc?mVh+WDCijawF~ zb$;!bkrM_d&3%{WI}G#L*?P>rxxPcz`<(X?fIvS~H5@l6kSF~Z}v z3@0c~8H{$32^?M2HEl9|eRAfN#MuNPB+sVC`BcKvdPxb-6>6;O9Q8>*9ox1Mwp|0# zd_bSxA4f;GB~FESQ0*>^~7NT=Y1X+@7fcv8IF z7A+tyg6b%X*M@Gd4TvFAU)6TKDU-k>aBX4RaVH)Gc-1%L=_UG7i-~TRP-pKUD9-L+ z43@A(Cq^M9Ef}9-o|d#F2ck>P%Ag^h8CPa(aBA!AX~d1OCv*>>!=`jAG!ePX;}o3G zGlc_-XVbPyS}RwhS%v}ewXh6&!u#7SF{Z{oI1FT{?O}c?03DtD%TB$DY$RFZteE&pC+=hCCYg#a{fQq{KW{9AuSwS*>|h zf}eZ@Egqs0x`+wyX>kU4d8hK)d`_9arvY3L;i3^$>e5hg08?OYC{S_pFtgK;ZCtYh z^O^eXH27RL)ry#s?8x2KMwb%TunqiU6B(N?TtboVvgdeBa2e93Q1h+)WPmqGa;Q0{ zjob0%x;pm9U%1Ntky>`%AY5_zOfCP$EdK`*uz#!6wgxsPPWGSFMSnVstP&{&^-0+b z`sfp(YaDMq38;+n>c5Md5pzH5pN{8ACTM%phT!mXS7pgG74K`=jmC+g+ya3D`C$>; zp^8aYFY!P#!EN1be~B@s>|z%}&@Tt)ZAXl^#O57T4!s)k_!=!GCi8E-4_4IVV(B~$ z9T)S8KHLACqAQYobsPNrds?4qy8qm6?VTK%|13-A6F2c2nTyEduLuo@<~-AbX*OPd z`CDKp1ItiN^F;b`!H?~`YV1bL(JUwO#5xI?sKP!2=uQNitj z`IUY#!(vW!$L0G9<23&-YX&k~YAmLWTh-AL3-RZN7-#4&ZS!iGsAZEhD{pMMc=>HHl!jI<2{Qst+ZvOlw#bic1!{9YUEtqq(_KNFgIM!!{f z|4dfJiZ;LH&p!v{9H@aQ5l~v`!7dumRfT|!AYC;vj38Ee*bQSYvy+nR9(r$**lVQN zzNPhHHc`O>9j30XAEeWeyhljrd?L|R?-f2L)9$WG=gN~dYZLf|3)Y>=X9`% zhAT}-KJMn|j3;6W`aNA+oA!rGf@$L~a-L3qHYIn=+~GTO5I*AF1sUI8Ps<3L81RD&?_|v!o>MX9{QtMq{>fI9WD+B^O$u}PD zg4za>rL1G_Ep)NH^WWq9LS`D0j(+L{*e9n3)t~8v#sBbWnEWZ4e{<4AOy(zc@8dnn zrFoHHT|I+Xw@t@c3!Q&VeL4Z6J*>p=#tLDc05T_XC?;)7FyH0iBe0%dTF_n9wQS47 ztmY*jkGt)?&4P2!C&)I{5>KE^L+Bi?>;@1>jqbb36|M=qgR0ZeBE| zGYfPUI=L?X8knPP{cE@rSio+)c`i^E(m0K`6J<@GMVCkJXbmE!yX#7b*(3oK$;cKx z(i~wz$U^jNy?CutiKnJp$+?LoI~914@LiIn8qgSi`e~<}5<$vcO^W!o>xg}sHi7COd>9bL4 zI{J)U8j(%4D{H>l6-=N-b8Norxw18P*ghWZ{Vqgm%jLhw{&cmcpU)q#0Dtd4{vIM3 z{g#-vF|hwL7h)3o4|j_)AIOZKr_v9OqTNXqY{6tsC^JBU`uwO`SLV*v*k;DQIYqk} zgdhnRGo}?Q>V{^7L!aaX{DRG4C~cgVy}KK>OI(kz7L;}8eThj$&%=d7p;xnf^6WU@ zL9t9^#V}9z@GIM^KS|Wpf0F$O=y+6Qfw?&nvYOP1G^X24L9jW5&I3}>#ZLQet`^df z)O6~1WufT=PiTS9q9YdGzbFg+UJ(B<8q42`k;;$&z%N6^M!!8S?$7{$Ag7=1_%9z* z8a7UuqQ5!O{!^umL-)kE;F7DMuN%zS?%%4J7T{eHIClBX0L8BR8ooblbh;5}i2BQ0 za1%qH+0VMJ}tz9@dd%WK;s}Xq*;7aP=7yJIF=qOVkfls^AAFmh_=ol%u+y6 ziZ$xN;_m+9Ez*`pll(oUT&rV^=$6-nyPx4rJP>(31$pHyTR?%d0*luXC zU?PSwBJtv1w&wN^g#QG;JtaZY)Kv|k`g$WJJ9S_REh1_hmi+Z%_OuR_|M*|MwHwsOCxEv^Ifu~HNNa@6R&3#iHQu7#O?Puw2%QpDeTaKyk zP%JUcjeOJ0e4)V;%~Z3Rqivx+xe$O$rIcaK2aRe4wzFBJpR>wbU3V)iUq&s*+zB## zl&CtkkVH}#w&(ZC5ki2rfUB7+LS%;P##(_@j21W=Tv@COsqSo7l!UNVMtF0v^DxfRnai`ORYWe3 zKuZMC#GYpJu(@97LSMgA#JCk8QqLQ&bVD-Gxw<#I(us5eyg#BBg2_dF=e}Lm zRLfkOa^mOEDGD6^?VACHpxyoV=DP z_LGezUuzXY9M){&M35r@mQ&%Ip~N6}KQr0p=OR`F`Fy<_T<_sTK*uZd0$7UY>@jPK zzzaZ-194EAK>jpqg(*x|Pq|KQBenV@2>u(;1=&@36OD-{K8dwje9OAxbBQOG==Mz} zuPMLgg|H{#OZ~D{I-2kaqI1nvvO)P;rax$+)$x_&iuFs&qnDcGJ}a_6u+UsiRmi|{ z6ma3$R67gQqxH$NS}x}l3cy9WT6DCpln3qL;?@R|hxCVqRF@ zbs!%qe{|JPvX}fR|UHi=vD1=Bk1;^pmo)Z5o5Ei>bN~UT|KL0+X@C9pf~GE zzindg&Ds9|DG_cyp^2c7)ewTBwje^3jL<>2^iw^?&T!zp%|h4mI8%a4b-TC_H8W_FD? zlON#wIpAF-&T$;xMjA{TS!;|k}+%-xzyPV&56Q1;d1GO5d+Z|D*%3W$C_oKDR7{qxO;U)u2#*=k8fC7Gdv|d0!=Wx6b8%CIq_JbZ$6E8;qrQ!9&|~|KSRwp=vZZ zaykgXD|kcJ>KAliJaX891DEK805|*K%GrUV2*B0Tzb1o-KESKN_k0I|rb#ko&-fDp zd5}=&>d?Lo7~9CaTZH>m(2Jv;VNKW@oUaWcw%qM@c9RV+$24JjjqsjW{-zsLE%(`8 zg1$YCYzIjc&eu9jN(^gzBZ%)87jX5A#1M=C9U^YrG>&ZkJ@|9y+VZakeD6!AQ*MD9 zI>^ZQh-z#LXdiEAWMMWKOd|J19N;0jG1-x?2tH!T=wx z@i6d!51Kz#)5CemxVu_`vj&;(-|X%&f2rYMH8X3KaD;&!3`MeIKZQHhOd&hRtySvX@jXGa{r}}DDt&26Uo~mcg`5R-5M;*4y zWxKC;kEQqr$b0YyyjA3&3uA$nS1SK08j}^HmZxwh?6FHT%}}ih^o4wIu9O~R6;85E zR|;*gXUJ}Tm;vKVc-=9KY3I<_$=Ez&*^28 zf*)kYe$NxS(oJ)IW~}QkI(;bhPt%QCWgG`eh7IRi=wfWi8(sPf?S%YdTDJLrlfK?lcJv`o5v5Z<{#R|$oJEdH;R??9!hCjs_q#`cFcjC4Q`@DTT;STO{ zzz;m>`1#asHp^w~KtLP58bppW$Xa_y0oA@;~w-%}mw*WnTV^sQGW_UspOh9;jR>|FFTiDQC+}H(M+MbBct} z1XGX3h{2=KNq$Z(5|7Ci$<9s*<;^?n``uRQ)Sgx*Mx+zjPr*z3a#gkWN3~?q90JmZ zqD5@}vjoVarz{!f<6k7V9QneDp3-p#Vkk1?5OW~7ZeIjm<04WBpyU|;V4B6qjM~|) zRH44-dOH7a)aXFK>7DI}6&j%Q1`_q-E8WzHG3~5m?LD`i$a-ds6<*|EbX@y(T^AV# zob-r4n)D1^&IC*Fj`J^o)D$g;j!WmQOyZ!aqob#NVz9+euv_iymrkP zI$($Sm(U~&bxhiR$ks5wyEtJ;BA)93veBGHHgph$@;qax$M48pmR-*vdMdx zt`>ivVXV(2rgWO*vF&}wkv}))bQq0BNFRd{0ymMY%D(*&(R&W*pV`IpD%x7LCd6wF zRG51<;6zBW4PzF54RI<5i> zw94|%TDc(^Opt8oh*8|;7zAk5^1^}+iq=p-+V^?)b(Ska>ou3B)8EsOCjD|w`r+>m z#IH%z5OPLL???I&l!4xhV1?6!sUScfm?{ohXhXs+k_*(a^qY#xPT%s_sw5Ig+%}DZSLr~^ROvBXzP4|d}U1q7l$x|RzWpyvI-ZN<;=N-ks&c*;YY%cP_ zksO@nu*qR$ALtAJqg!RKgqO0euQ9;geZUHIuQ&CD%%!f+7NiIa>YFc5^u%*Oi#)Wj z9!mgz$0`ecqR-FIV_}4##~v)@-G4n-B;M)}8F0lm+`+@9R;|VW*J1I7A#>CtXT$YQ zkrvvtX=zNg3NYN7)eiiKVrl4##Hc3^R8zRY8Fl@(f?Wv;VCXirFsNhkXTh3jd4T%a zR>=8>CmXERN(qNyfR(C_wEm>&XYEPqWOd)`^3QQk9ufJ{*~p-CruGqi4@es0=7W|B`98zUwS8X+QNAL z%u(oY6$+KePhJ|av0JeH8*Dr6AsZ3jSk=>9%a{2Uccp&toHc3;*O?r_n-NZ(Nel0+ zNK%zBzK#Q^F}+J5y2MQ@JQyItzAX3yHc$shm&92@tef8EQ5{SydV-K2sYP4TKwZf<&!9j(ljbyarsIRarA!SL}`&a6|gZ z>iOwGs?9OM8W({&HW#(VK{iY+KNv`~e4`FQ;w7b4N$l>y(%p%y8c=Lpsldxa00xCf zoiwUnYli&ieP4Sn;Au2YN;jS5Pe+Xi;M5fwJoSc!(s8eJLWY}m0dMXXu*$`XWxhZr zMy^%4in(q2EcCAkc$ToJSI+e|`u9l3NBdyuVdO=Drj0pUp<2Tom454%AbgCl49Pr| zWHElP=F^9zvkU%mML~Ndx-|5dZI>^P=cnDmOY|dFaO5}Yj@0_&k{;}2O|x06P%mwz zQGF&)^Zb68-E{*+@Wr{J;gX>uBmSUyIsRx*A)~os-|8gx$~-hh zu2c)n3atR1iAPJs$1C48a%U|4)kqHTEV;vPqye1{*PmMqGq>?AIMfHUQCUHHnC)K&?BSe z^F^4Y$L}BzY#-!unPjF()TJ16+E_KwqBXvz4@o z&$=h}#Y-B}?#}gORkL~@y#z%p8h$dYm=N8d_vA#I>|luV5JPqcCQeoHco?$tmq=q- z=NHrDBy~$(lgWn2eh_-!k2d|qd%1NuQ4uMgIgWK?d6Qpb_GaB%2u;zaW?Vbb6wQ<48Xte1t^_>X z-HormjnD6201k;U4K){xP-mmz9hye#_UF>=Yg+dO&4?Lah)c}}xAc-&zll_WrhxuJ zo)ZV{8eL}cL@hII$$PBy>kGT$XT`4PG<_T-CGl$x+(-NCPA`rF;lSJQg(H!xkVo`> z-oKt|x22qe^)2DY$1BW^9`dihN#yeWO(g77*-2bQ%d12Hqi?au9g^;MWT$QD1jKqX|y>hjXKtljbT;5c*T)uMBDaA zN_@T@2t-CXA3TMQbObT|lFfEf;^n5Ln-&_zj^M1^D*bhLC*0Pq0wi>PxohD-T*Ii# z0c!s8ZeJ~?>J>cxR*mpcZ zTQDLrQN9;`{z3N5a&|y6un?D6rWDJ#KM#odOp71WES7NkFjFSyY=lr8r)^}gElRwb zRWz0bD)AWv?l&{HS4=~yUC}lmPbZaab~bi@CarhIX)?`q z9)ea;c)A3XDJ)aOZt22nGUvi4@W5Yg4p9P?tDJyDSBJsBc|r?hVdr8SJLm#7&Ds4k z(%4?YyQd8(V?D+S!{6pylyi&YH7q^CUNz{4vTN;&kvw+!8+zF77COrO7T*N^Ya}1< zzi9959PIyb7Z(4mob`W>=KohikpH~;pY#7~2=f1INkL3)jWh{?fZ+80>z4FCum0y0 zkra}b5R+Aqptm#q|EiR&`{A-Fp7hNZ0B&8VTcpQFIo@Ehysft0fN!&km`z$syR*)#>C zLb1roFxS>R-oP~ep>Si*0H|n5E{}F=$jD?aUnt2pr}F>K=tQs#Es>l2E#*GFe~ART zQ-!Ibqg>gQO(FJfm(5z@KW4@4(|_x5AAE8+;&9>1&carbKwfNjZinqQ!_XzWInJw9 zEXRCo{;97tCrr^YgTuj*;kN@}vPFOK(UmW?CZ(NbYLo#%m#VffBgb5S98#XSm9o}2 zz?())rQ!|!H3#bzt5Mg%?j;#rY~}yDFX4ekaZMSA7^hHJNLjxs_DyHke7ea!%z56H zP_qb`xu|=rvGdrjMcTx!%~2b*F{aR*k6v@nEV5}BInwkk8gJfDc$On-l)REoPfR7Z zs0?VgXU$ekmA|ZUBd7=3-E8xlJ9)T4F9=RJbLjWgUvU?+@D=JbgFQ5> z07&sqkTJN|({6MXELv``*^QatTJ*@v4hP8ElKXJ5H;Gib!nfPNpJdOqCu7mHdq3SZ zJJe^Kk}|n$9NPP&!X{-w!^6FKxgOzWsyirWSQ(G@W=d@eqHM4-)CVu5KyE;Ge5sh9 zN!^v^_3la?qo^!YX(>{yY4dCGfg^)zLC)AIHPcRzBH6&jBlB#sCpS+OVH0?( zWs8Ve_I^nQc@k85#+~Js`pE#_ai*<_iCvKOA5>SBo)0-V-Nq!pcGKAzSu8zicn=al zfW|^Vc$-mc%fZxlQZ0;st+nV^8S1@`&YJVKKJP%oW)uE=u1r!fwC(P);ag(6t)w+n zuS(q49)+4iX`w%L?-TyyFaC^ry!&TrU_LZu{w2;`egyIvP&thINq*}cYq+uJRp^j+ zL19}qKkIsSKi}CT^z@8Y{}@-ZE6+7=TRsu7cT3Zi2Q=&5S6~#GxTWiMcOQ)ZbBVD$ zkAB>#`?gDk@&5^Z&f4lHCCjvn`pfth`>uCP`-s@}yZP;unF5f~Vrsis0zdTkC`Nnp z*w!D*RJe!<6vs0IE#ED0tkd?>k6XGUYhrC32>IKbwEB@g;XQW~g+u_5B!1;aybbV9vL0sn6BrPNy^ z32EjZ1!(Y6(XMG`f2}pfx8=npm=(TBu(#jzMiJ(sn+5iYf@qu0@;339p8zRO@t0t{ za;VlK8C!a|lEi=3DxdM6Bf#X{+ecs}?tf4h>fbH3X*0b}-H9%;Z%4Wf+IK@{R9K~K z$%LgIv`x~8@ljQ!0aA(Vmms6!ftfel>w0S?WJi+WW*xMeVT)!q8eAeA8^jxa&N?=y z8dlCe^R8QpMLS&@VYp#vQ%8v8DxCYaK1I4l3Wsl8?`lJq+A{rUw#CfcRr~PMu zCS#|f+;RHE#*3=WSOi9xNRYIF9s1M7(G|hL8%ePjUw-9y@DU`Ua6mo#iN}n zl1FX@ExVzxpRG2C=@JPwlQZwB$#Sttj?lG9_Gl48D^HVuMxk8Z{M*rQ4PCuKwu&-) zb=_XXcE&!J}qSu^nOu_7}q@R#`b%S=^6eAWjh|K-L~aVhQ#Q^8AaGy(YP{^3nA# zc($>e7Y-~CoNtlR?Qua?UB&fQ9}D!*MArIl;&t=_3ijLfp8+TWBwrn5H=WYp$>fAn ze>ac{)`t|=oH-P5@~Y)JZYSigJEt*ad5~a;W#BOtapA)FEVH+G?XML8F4X zWi+dt&$v7NwVUy*#Dok9M(?zCRK+Gw*k>unxHaiXn>)clrRI+jrL{>essJ6MVm3qO6vM9Za4bZ7NWqNR z1xs&gM)mnb-QE*FlHb7ZV_+E}vaWMmFgm=4+764%gyMzc1DZ3Zc%%_>SmA2f3x_as z9bShB172U1Iv#USz?kQmc~k#6ks;fw)s%7hw8Xw-RX5rtm-F>sY(?iM?k zFkgTV)~F|Hz+s?R2$Qr?&@68MFIubKMBB0Y4 zL+fhDxCeJIiNCT?P;~2!ZxGL5JtHzzB_^G=pe;*epq^KHP%NSS9!00|X7xSlp|{%T z%5a!ps03?oT-mBSiWKuq*WAAH1QVCgwJ;lfZ(eOH0~g-V{4$Iex`TZT!3wwZHhHNX zN|bJefH7$V=abV@sxSw{qQXv}fvjYivJ4sf&=2VP!nv@o%#rX7ESXwbeA&<;k*r}N zJfvI_e^G$2GYMEx>)2aBhd&1`6@MR*SbIw)$@?muRTnmd`T`!Gj~<9K>;WwWWPGJ& zN4Y6(*EQiHDs6sfU&TZ=w;oSK%cnchyYLVH*f&s3^ebJTp>}Zao?J9pPF6x~tIX&u z544xFqc6&4F%}LBGEC;gin>CDMbhwiLi2bPGN`Raaj9kE!2zQ%E=6Y+eZlVL+k8Vf zg_RRbo%)^OzfIs@QAsVurl768f3o|?t2T$EU0>;wT~l(?Is@!c7kAc3sQq9t8vq!( zNR;i4DlQv6_CdL7!T{Jx##aJ0v*`$oB4|pA>WjCab@4107%>9%$2A3bfxvdXpd<&A zF>y0Rr6un_VHRm(HAfzAe7Fi6F)5)X0wRPX7c77d&LVncY(Z~&-sZaI-ME}Vmn%s@Xd5`V zms-uIb$9xK#hDg+CekgnAQNz7FXpm>gc;jnCZ-VTOg2f=02pH!gA>{0XidVrM#MP6 z5{i!~S8Q;FO~xspqA9lW1NkkN&DNDEl5aEcZ)b-~n5Onu#N;h=15YaC$(G#Pf7Snv zolP;PZ33?NWA)ZOIPRYp;c;0ZS%>Wf+t}&jAbTtgiAU2w@h^{D6G8*EeCS z?KOXLjYiva9RRjF6(=NRbsSl=-RbEnpap$QF8y_zoAue}lhZZavRHP7Y zU_GcZ^CCn=?Z`Zn89d>2vYT~Y~rh?9hkPsrRn>7A% z2V?aiThABg`ryo~DLVCE%kKc%INatcH&bP|DZ*{F>T#A93|G)%>mI_WMsia)qa4vg z1(!-;Q0tccvDzfX7c|Or1~e zC5YChiZ@I$^+bY?eZS2w3^ni&8FN@ais7E)(v&c_7e)k_ZgvuelJqy*Z+ywugBCY9 zQvSw-KNCi0=hXAUpcRm9q=^(J8V-;Y?p6@9Za3nFJ;JGXXQUP+lS+%$P!%J5=##O0Rp5cEa%PFyxSf8v7;44 zLPr4(QY{;Xn@2I8aMK+OhL{7ojm4BfyP1dCS^Qb{(u7~t#Mbu?1T>Fp9VkmB*@|gp zS#jxWjKjF=qq3L=j%_>DFPKC1nIWHfg&y1Ir+7>GlYb{j!hv>dzTCupdjpWnrD)vz zHXoYf`(V?JLBk8xln#&use-rwsmlB%h^~JUS+IwRM;hQ%9vm z*ijKpae%xS%RD6U@*s{4w!Y7$gLxtcateY_$VVn3enoq!e8cq{X*t|f2@R2%+=&)AcD=7eG*uVn+ z$r#6x9oY_cjM{TPC-eGPsWUr^4ku;zJfRlJCL6a>eT1$B8A5C?&Pz`rfqZA=9DT30 z=2MJQH_Zi*MseX%c8{@gT+fS^)15;|3VTlw<}WiBbBI#z?z+8VF5zDy{cTQ(FD!}o zLcNAko80sVkH-!Vmvo7ryA~S*QlD+#sRM^P!Y+_q=A0g`aNtu|cVl+SQ?87;`U*u1 z)c?2cW*)ZOjxhA7fMZ_d{6J_eoyGI=WMrkQ_IWVm0HJP1{?m}>u7&$pvWwgDnx&W0 zO0lY;%vsf7M*p`Ru$nK7Yb9BuF{RWciY~GwVsXNe6o%)bxLC9H!4f>`^7yf?_5x|A zX*CY?S9=Tk4!El`=OVuMsk!{-Z9y^pNsTZoGn%fDCUKW!XKLF!oWve&qbK?@Q1ilt@%<|@$Ek*D8IVF`kZWorzUkKkR}Q^Q~> zgZurlvJH6nXi)5a#F+jWQI0ZbYK%dYsmx`NP~U4)ixGG;Nwp+TFaz1iT+iy}k6o~7 z%M)85BabVTozcnS>^sXoi3XW4VS~Kr`rjx$U&T7ul6~z~2!L7NdT6PoNR;d)uVrFR zsjxx|{@;yMvf7LGMR1prsFFyN1laGAJ(Kz1EsXgiw4v(D$f5pI2Lndg?|4+^m|MSX z9Otuk9u7+PLm}kT?f}kIeL}hc)wT0$c=C(fAIVhti+_z7cQn0%a7zHt>(%VW&ave? zBTqEA__s0NpB za!*WhjP~=;Tcf=$+Qch6!Nb$8aZeMs;phnpz0y}E2Wu^3Y0ft5)G1;)K$q}kt^e!p zo}Q2g75B)fCzs^3!!<|Qb#RK$QSH*%CVFcK=84^;>~~`WrIl97<#0gjpMs^ zoL9d-mSRd_Ch!FN)2Dm^6=8fp{L8I0XZdhq7Sb=_-Vn8f{Z+8__@ z8BuB>;ig!tOWo5J5KX<{H|_cO$KXF+3b0IIJ?}y8Bu6J`Dm?F4;-h2eK+q7%@vT&* zFgqfr*Sa}2f-hiH`v8h~Fjo<4gbavZAgDY}#rcR?eAc7P2bHPjRhcAdBD z(*q^$nYwh@x31($9lI(*O}zLGPCxIc>$^#Y3+FLj$CQa`l%8*865M}7oE>7eSirf1 z6<7Qf%|O*tM#KZ8Y&ARGu^VS~MREjzCI^!3{S8WUgs!H1ybP3$Ag&6eiU?<%&P@=vH6mAPK z@CRBfM%>=oxeOM8*1oI0~ckJTq3&HSux19G${FDXI}_T|yv8bJPy#J<>NECdCZKHUG0!3N z*A;am;NuEnxSPpPo*g#C$L=XCs6@#q$3coQhZT<>fj}&fl_csnU0WnNe=J_kmgK?2 zNX?|dgS$$nQdC`)&8rDjH$Sm!{g_U7o@!~F`1x>Zd2i_HS#QmlP#jS69_yl((Wq4r zI*ymL4QJkB?nxtA5~q>7M_-fGc~`FpYo$^IBM(Sr~ zSmC=}7lJfN+7!)H*O3F2rGmG{`fenaVa>l8%2$d63N4gn@xBsGy_*tEapYqNnkI4lSgOB(VSu zhQT)Hyrk~ZOiD*mB#PFzhG{Ob`F+N@KtZ@bIN-9!g%n%25QdC0wn@d7Z6#%Ay?lf3 z#zTH9;`G)MxlAuSxdw6i?Fb3YVuHA@&c7+%`aZB1sEs>SBLtG%ySQo&*4tJtqD0*B z4YEAZj~8KdDbe>XInB1Qkfi)$?#9=%;@Xmh2=rNqmQjKH7WcJAEA>v8HsSUoV#QL# zAJTU$vU`V?(CKXR%ghQ{Wnq78o%u6GEGoEL-F)+V18y8V@yeG*Mg3l(`t}+~`%l4_ z9y2jbwPD*EQM!^Q!dTmBS^`PzG0vK^A3PLQy>h*e;T^O@+mo+Qu9Fy0XUMg14?=>< zD6QqjeygfP-Emb{VIMI{Et(v>>$RP>y^`apPKh*nMAm0ny)VOT*C8!Aq}~XsWTMw1`4O(QLWsx z0v`bug6pI)p$T`6xtBP!SY|=^Cy;Ue<8`#qvq$-7EOnZTn6ywlKTY-awIKU&-cpo& zh_*->!b~**ptkF1dk7brLD{}>2>VyPQI}sUcnKrKC3amzWvTZPYh4*{&$GRZ)ZY+c z^Vk_MzrVguX*#nukDwaSc&DAekmcY3=yOk+$OIg(SqGL;7YJv+7j%6E3)?Unbd+W7ZRz=mViSZyxPcYzSI^6w=_-Ok{jWMT^OTIT z(YTH-1SBFx6X)&|8>sC{4+?N4L_{4HRLej2+RDLYEp2RF%`#wCEX|{VKX5$ z?CSerZYC`f{=~yxDL&0X_^EK*$ou-{q(UphR`!kPMojFLi&irW$ z$D`mIOonq3=hDq_a~-^p4;)dLTREuAwzyr-{v$xo){r6}+94gcls-c~y4b{Os!$Nk zRZtHM&mu(=QK;vo@q_UP5V9yAMD-nw?#YOSZNgsuQ;@b}iyL?xqLGG1JC7#-C~U4Q z$s8@q96d{2TW|pfyC)ZmJ4WZn5pSRI(r&k zY}Q(18oN0Y){hLia%R4v<|N9ly#)Ksf+_%WC2~U#6@O?`dQ|C;;usK*b?}}DTR-FN zYgSuEdiJYr2W>YTM)zTMTd(@8VIHAWfIo%MN?iq}^rna%uA0M{LYa|QACgPffLL=) z{J!cpW42hhr_!QGe7>+o1Xbv6hVDY>$CTxZA6OozUvs*gS|vu z^cxrb!@_H5KasnHtQKc~o#EUm))xW0GoeTcbDh% z#MArN#f5=EK-=rI%epTgE|iq}&HJ=iutG1G#4$Y#STdqacO=BYqCx3Paea21e@FLP zicZP|CkYju6#RQFq|RHJsiyl+nr&unTN3i_v!ypI)=a+bSgor3tITAE>5JR(!0FqO z2SqOKz7Qe32YLjtN>5B}<)1+^+ZEflAd0fL2w-9V+evmM?Cq0~+YjFQh0ltq*Mx(i zonQ78xXy~=2DGra0{UxwL_5G*t?36(g!*`J(IIgk+#>U~mc4#YdX|M|=ihOtwkFf5 z!X!Y|<7DVTiTdh1BWBI|IeN7nx;^f@&Ei1U6Z2ia*1=5mc1JfjVw`l@tJe(xI{{Jq zART~+T=q)Y7I9}on-EU<2kNm7=u*;E-LEcjd;QrCh1b7frF0r)MJC^K1T4AEZ#s07 zvbA!OLE|lB;07+<9@w%6d+!IFX_27usml2YXLQYk--!P;bwK&wPzV3n;JY}R{Qo2n z{wr+#KQI61{NF3c{V%c(|Cido$g;%x00{_4Oyhsz82>+HiT|napY#7-N!G!_;=ebq zyu!0_!EL?k^anps5@9Z;I^`=Al{ZayUz%u;8GkC03ja4nAieAyMDI&9U-&Hjj{L5> zK5)7zB$b%ZY~gyA90je5-X8ABcj%Q#J)fD`q2M_}b?!Nen(`Wg`jjnS5}o?3&wMXR zN{j;gO7AI#X$uzO2#i56#m*@OEfDcQKj8%>N7 z=}PiuTn;TKjB*!92Gd9G^2?;6T{4_B7Ax#VJ*#@U3vgI?cfO95%FOwfY}r%}9lCuX zX_k3fxZ%Vb+5sqlj2W8|2o1;g#oZkRhXq_`?B!v4M!w{}G&cZ9m6-f%_E40CD`J1Q zDUN$FX?~4w{nzZD&o{8}z8^7@o&c|`D$Aikk@hj;l(V~wz~VL|o{C2(Sti$qq0yiI zBy#9zJh6B-TZZ{R6j6!=td5XeCyvVDO~p64Qpk+Op{gQTu@1mR!UrRwuvnC&BuU_X z%4Xv-`>;6Sf|{PQ%@&_8tcx;+r^ji%t*D}^RL0}No^V;i)gKPd!tmpvR3&WLVzfWb zr>*!Pgd%XCzQP2|YtCStVYVrB6T*k$m+85JIK|_GcOj?oAcx}mkb-`gi7dq6Cg$K z4`>dX3-d=I8pGc=YOymn<=vpHGFFgQXw$#oE{W8$WyGMnsfp3FH} zhjANVx9z$_%~RHPfKi1J!06#(A)!%F?S|w*Gj=4VR!|bPyqy{5tpX{LTqCW#QZ++* zq9ikD@rN{aKWvbbxq$nq|GTbeVjTua34>4(KAOWMF+V_cMe64(D%f1w6_*c)_ALHH zUC}51Byx{Y!jQ8#^7jU%31#sdF%oiC1DAp!DDN+Tgv8M#1OG<>JaclA{aB4od50r7 zneG}4d6`?ntM5#ZUZI1;ASBwYZ@_Maz$e}o1>eIG?#c*OSaN)S=?GG3@)pv^64nu7 z8~#xaPT?ifvrKyFNZO}vI@5PK)0A|D!2~Z`KRU?oy-xrxho$rK?cr&JBmb-r{ugZM zB?v^`$~$_v8*NyRRKuC338r7t$&gFJVsZ1qif`+8+e7_@;z6=!nD;U zZJB%FZ3jns?Ph~q5H>VUR9l#wb+|6~5YE*3Qki}_c!z@}(<2V^ZtAK>$fp{# zuu3&CXt@ z+XGeJUdn|By-w+GKdujQ+hD1{#ylLkz{$LJhGhwkTz%gP31xOgB-YU&uh5F}= z-#bK!WcD;xka~Z3Ogf6t$Ye-x@_NKz$MjuriGqPDJ4Epdhoh~mQOTv57+q`E#Q$kO z=>-f(kyIm6lZP7q_H;0&uxZE{xKj?4aMMY`DzO#zC#@BiB;}J#OH(H*s*PF4uIfvr z#7Rh1b+)&v^>v1}T%)lrTgj(fQ8zpO*+Axm6X7*d!#qKO8Qqj>i0++^I`kBi19aMa z`R1>Lj4dyP(8g{#6Lcmif9a2lJQ`JDXWU37_CyFK5I3go0cqii%qKmVk`e91r0Yi^ zRk=BU?JS}l*!*$}+L~+A4pEAyeT^bpCbY77uK1f(r&(o7T{W}41R1yD zHxRg3Q)Vk%HQ@+ZwasN)u^61ciDq3te4$c4OuwsGo|4dU*5%H1Gwq@+xd~43WE^lI zNvbUj7FXq>Rh^WII7x+U22n%L>wgOTA`JC&dy!*6XMP8VAJhJ;1=jQLR=^Yrc{vjX zW=Mt|oF0t9+)O{Rp9@C#&l!A=%S6?T{e?m=4q+xrS6Ed-9p->_8GK2nvc4bR`8gbAK&F9V2&h`Vzu) zG*fQ$^%xftdZMrqr6eDtCywx+wnjC1qaX^qJL6rDzl_a#zsw1p@Hj~s70Co`?=cgWCXGd|;12A-nwKCHt$Vxc5DC%^l+=o;no;Msd3T@|XnCjl_#>Vrc=K5* z6if~M3Y|W=G$LvVLKl|LKH+eDQ>$E2tm>8r2=Xr&x?iKF@s$RtoT0g3V3w1@#q({j zMOa*%oRlOgqsvUj@+8CD|DXj}(HyydCi7T=I1=c;N^OG z^bL_C0&9`KrBzo?XfDjfOl2j16Ktgy5U5d9nw8oG%p%G+Z2IJtA7&_??qAH_E!)fQ zDB_herMTeaA4b)|lT>iO>Zml`xWrr*8A{;4^7_?_?@lU^1U!`$1!ipMqP!8s~XAE!$0ss(c^Bia+FoUOv;hlz zYRoyUX(`ITwOyYYTspdoiup$R$8Me5xzS(mc(l3Z04m37oyx0#FvkX8$g0g6rSLAy zbzO9t=BsAdH_27dZ6c4Xlx8cX-U#vp0U2$Gbi(HNaqUf^C-XtTJgjSUpGb1DNsz~D zJ);TJ;nue^+}Xf~G%IMgut#wwaf0h5p=@DD5JpvCh<2m!d*3ijX-wTC55=nk(Io?Z zy=W|EV(=KZL{m3NEE3br4#H$u|CDsENkMl_E zB4@;#gl}*5pOB-)P^=_d{;Wj|Qp?m628Jzbt2I_>)JOnCB4I&ZI;}W0&6(t`h09Pf zVxp^q(rpCNbeiHlf0gm6y1;iIdpA+dxULk~sreGzHH}?pceUPd{>w(9J3r<#P+Z@v z#<-)mrM}!yZ9h=m%(nT}Z&=wXC$1cO>s%ii!PnZ3qG6qFE#5Z+YT=qQDPe6IXVZtrWoh737TdKTkz>0%*Zu(9#nb!l@KGM_C_8xYnr zDVBB_PH&!s+~0mXINc*!GEAf0m?)1uTu>+Fb*$d6S0hrX*c6!2}+?nd%5BoH=+o>H}ig@(_^A-)d&t|3^6*P0P zn656vMaQROEPiO-+-S25bbvnLep}Ccocn-4ZRVVm{8tV{OTmX*&6=2J@pZ2lEJurv z-ZU=Rl_jq!vW_CWdPM^LZFC=*NX~2cGClAVgI~tQMxWM2E!yGSBeVdYf(Q*-ZH7*= zLHIa_9s_zxWpq2sUwM;EL3hOhJz|f|54yk0JI`bhMOq_WrniB^U|fedwb(5muBR;) zkY-r$vN#P4xyT0RH-T5A5i`g4?KB7ZzVV*8?TP`ldht%MtPVfJue+%*#HHnAZ03gJFXBJV#_&^z@1Ndnma!c^t|hza@c{0Ejbr|n5bk$WDfHeih+ zbX};x$3UV?H)w3AB%}4Leo6OKVTihva9u9Ta?Ed&NK3hnlaMkPf(j*w#BseEei-&K z98gH9xy>eId>FH5H*0UsYF}b^rb$ndGo!-ou-M}*qMnol zcP~p@aECeEu_=flMke;)d#u^mp^Wz|Sy8tyTsFpcJH37_MA4qd4xa|SOX3={Q#Hg4 zd%Ihha=XP;hMF;BOayDP&6A(XTQ8e6$~wNflMH9gbaQdxWg$S0MY+1FT(4#6q)1-G z;9<&>+R|^MxeEqV!lJ?={YmKAtWG&-uQL=joAs|mx7gBlKQ}ek39w@FY{}&-6zl5V}YzH&is&&tCUBfJ!ffA-v zC5zV2)^8$;UDHRZQ@Fp;aYM}Vv77s(E@FFdl%)C#< zYS&Rd?-I^^uu7k!vM(wO9gk2QC(mh02&OD##M{5{z!kX8n|z1X8yIhPFdYtKB&l^S zKS0~b&F}}%j~fC%;iD2M#NctG}ulsZp44 zw~4z95l%;c!U2xml)P36NQXE5iDkq9i!;tPF>c+(@5S|F<0Q<<%68X!EO;5+kp~mt zzmdqEL75e2fBM;_U9a{0-&lL6C|kHJOZbM(8@6rRwr$(CdBeV8+qP}T4coS(BlGY2 zb5wTs$ge8v<&1I8%YHa>&9xWyoEyz5O4_xh_z8K7rnEQQh;SYy_1zB8FY&e=aMyO3 zj6B3rIn8;>u#yrq@`%Na$%zp>I@6-ZY7D_Rbbr>;1$K>hnN1*H%cS#uxUPrQ)oz@4 zXdPE5*O>GFEQuBe%$bcxPP`B1eK0@*=r?JsPqp_l34<*RW!2`IQ-K(^ac6A*-dIMz&nwVfF84*KT%{_)iu<% zpZ#GSupZtWyeD8mSQ**bnK3l9(Jp6;7v;a-cXPYRoxI8Ok<3LmQE`kh^e)m!`}`lk zDA)(yyPOg>Tmor-`tkb{vxaPO_ryJlIA&?b^b~?L#HB;-zPFM|1*tMY7+{)@g*GXq zd|0*}xXwM{Y*DKyj^m!CM19$3y*<1Q1XmmT-9W;j#~5}D@Yw^3*(D3O0Jr3?0h`+E zXHFet=SuB>>hFNwd-~6W=2#*t{Oa%ro$pDU4A<(1gX#)UUz}g)$J`UPfl$V}zN3O6>zj7nA9=@`-@g}lC+#qJ@oN>7DBJKgY1$Q)K%dQ@vM6cq9M*xuiQpM~?##X|XsLbl*s}0wCmyMi z+T1rz!C+Hr$ED#o`v69i$dl?6|4V1VFt8?g%cce0KeExDSc6?L3~@G{?IvQo`!{%} zuK<*8OSlLxI2s?5@;0Kq_t>jNcue;8A>t2Q3znZhhao}INJtfkv{^!=X~z^;dc;~= zA{UkV+$NZ|qbr}$<)@H-z-Eo@q2XmV3U~Q|SsPIxPh}SV1jvvHF`agG)qOvC!PU8c z=M~uGJLji5a_!j?P~(pY7Qq)xrNPo5`FMunp-4_6RNK*OC+fwd)E+Hs=#^d7dFesY zmR=hH6xro$(-mAKvpQ2Mou?=c8$CL z^4s=<&d#*ozbXNIGMH*s{2(-mmKY zX=-I^+@v0H=^0!Y*DSy^1U z3@e)$j_RnLOzKu1v7c6=7|=(_ohDVu?)mMK>Rc9@c76k$7jll5{36lVSzREn%#`}J z4={l|kzi*oM?H<4+f;?D6-ap$oktV=^LR>ICnM9hi-%NsN>q~$DrSO@;@6^qie^?{ zeho+$|5sF*bKk7o>H9{y6j8ckAb!IQmJ|uIMoTP|O2oa=(YGRv=V#(|gcci~R>qn1 z`+c#y%wv|IQn7I<4vZQId-L@JV&Ks$rHBDl0t9P|(ZZ9kd8rV$$5OFJdtGv4!9?beJE5&Yq)(^^$jqzx-siXWJlSSEs{%|8hXZ zxon-5hy{Vx3!>vR-8=W*7Hhjd}T; zUW=HH)+jF<0}u?hlpHQU9s2@9yUKBK%61Ida{*jXo1};6^4cZUiHRdLeMQ4Kf9>7@ zS56MTo*yhG+^4685FKsh+l_yU>iSL-5`(Ls&xr8^J?n7IK34@qw+aamOn)PxqID4Z zFxSdi+2f7PF(Nluj!v6u z&e6=vEk#sl;+TUrK7ortVleMqQq;MQIpw4vL>-+j75AM6z;d3w>gd9qs~?jnx;4)Ifnp2-J2Iq&rhPU$b8pD^P;Itf=RE8_RVN*Ni=GI2Go@fMuX5@QjyDyqKR_F3N+mV^=J^LiY!t`abV7XmaMCH>g zm6?k(eG!`NDu5+W@kLc%IX%T-l4vFvI zeOLeQPul+vWAMLFkbIleeoMPM{so7-f3WJ$d?TZjZ|yaOZ>?I1{|2l6<4h%e)Bpd= zzv9?T`AM1ezbOuqANn<@3#EYhDVPZpmnkSyv+~VWaEn8SV@Hv;3nO1`)+T78`5g0#Z! zfRo;v0b}!4t30}MFPN%Ya$?En1)VZ_SaH_tyB?@A2bs}4&cMf2URw6|L_&Q>fX2?9 zVu@~g**GePOVRDpB`G_X*Fah^06xpB(Tov5X_C?Cl>egtWhEAD_2{XEgyR{3p`U$p zNeL!M56UBsY?Ok!B*F)8qZGX`tThFmXzz5oj zB_wG56g-c#GF3+ZxLRj7Uv|m-0ij>&aJt_4ZD7w%YMWjr9)BYbD0w9OI&zV6L|v zhb0gS-E!_OYsHr0nS)Ut!6`OrxH2erN=?<#nW!kchwNpe8ocsmEI%C@1%;PrZblB8 zAc`6`nTqX9tR`Q*#FKZpY1x4gST+sKQf2JxH+c!Xs;@$GvWSp4Dm8vAmK+YfMwLk|S%v&6Fe;sSSi#$q@^&SjS;a}_R;Vzkbmt>4T4R8Jn@-zyWv1L-8>nj(Qu4< z>&%Lb`sY|g)hP()GF;X)EGE;X%81xac0(YoiC5ROz|G{=3bQz$**A_lT)jf@CyUQvVbvgs?h>)h z8hE(>9=<4{9|ni-(}X+k+3_6b-UI5M|Gnvj9IKDQE{!Td_dmytzOAfK;WwoMeN(E! z|3KU*JL;Pn|K;GZmY0^@r-SZ1QhlbIbAsn|JaQb2NaFKTfy(%yY<_AEWUfU_UQamS zJ1j1t4%}7H_>r|$4;TH`glf=8s0U`FaiL!c1K8c^1Yib}E8IdP8GobAWn?LkKBr`hW1|6}pt9F2c|`jtbo3Op-04{q!CU=Rj>zxg`+`B|GP(891FH6ekB1; z$$4+3f9v=)94Bx!dNGVllw|sdpnN@}FKVO7f;QG$Z@L5;AIzzAz7mtQvd3!mlmfx^ zadnYYNH9(Th8zJ>Bc8+4b{{STn|rXJTei)0*-O$nCU%9dxFG`Z6L-7YujyM9(fx+N zkB~jQcfm{e4}jRwK8lI@yOI+csHvm9RMp%X9CCILt?{>xi*e}%Be(udxM`fn-2_^_ z1?EiuPRa&yy;~fvC~Tp)49XjBj@OM_yCB+|!zoc6a#|t)ZWz~x&6K8{!>1i9?opxo zUFZm7+-E4}M)Y;XwsJ?rKiOS3cU16Iegg*O8!#&W1Avh;*0=mGf+kMdc8v}?2H=Fs~8;lqaNm#&F3D_As3uz90K8;Xsg9-w5-`x-JdPd zCEvI~(~H5e*b8J_L@NpDgsAKY^O??{CyF{PaLrE~%<51}{owL(tQhrlF|`L4KZx=s z!RESOsOLA%;G8p9Gc`20huPoLCYbmt{;qibL@daM8i4E~xrM2C z2W+EhKzJWP+U(I;Ay#tU<1k1#t&5^F{ybL2)0~Fz-8*dtWFJ-F3P^D_fb*N$0YFLc zf0>m>%gn@av`e_uuP|b*V<^v8Ad@uIbrT)*%}^f8^cboyf%WIo>fjzQKzO?QoI`LK zojN^NW53|Fxdn9CL~4r|F(8oatu=_hu1S<<)8gT#a-28pKTr&s-1m+67Nt%#>L^ov z_@}b?DbE8m6xQ&y8t)rc>q0_fQ>R;xYD3vY6H8yykY2DgP{UL~; z)ckp#0zN47oO?Dszjn_YDUsSFwZS;9_>5Tdmn~b>x=dU)J0EJo&NpnhG6GNmYcY7ZmBO@6~VTM_E#DkrLKp{U^iaS$+G z&i>se)c*Mv#(mM?htfG%tHfe*A&PWMdKoG@bU_LN8kn{u!a~vsNaD5F!i=3&rRy|K zSNqK~-OWdcu|cz+Ci+9r1AS`LA*~1W6G75;V0)|-%Lt;PwUMk=OhoB+f#gar?=4Fd zyF+9jrL!ZG1|NWm+YM+o?K9H{vN-C2_7XVpcQ%O(hJErhgpepE5XNc7D zDklE1Jrqd8aIfgMLU_Z_GPA79Ma9Sl!&@C``9EWBNm=-Z)-1yq{ZkGIuoZaBBd{pZ zU$o+!cOevb4#->QGK3*w)_^6RA|8>+(Rd{W-3EfBxr6MH@bh!`n&$me)eprS-{L~` zlJTH?(EzO%ixeg9pvJ8OZoYWkLttF9-KJ4y87^rW5y8L>O!|l^ax{b#t3=6)hN?lg zQ_Sg&llzkifeP#E%y5L42vOIy47DMWe{&>gMuNDMi5GJxNotxpYM4#+;L}z9={T`E zh6<|$fK-PQOXK&PpX$M;dekgT@d|SWPbvZn1n*SK6m2@G7l`R%Xxpg%Na&tkgN+71yb1MBItqn-Wo z0qn>$MV0lV_h#}Bb;(4taRw|^wEMa`Xq;oJ!5&^9l4aUz`_}80u%}w;AtA zXZ5N<;)EZy{uaO1z%3^FKvSJK3>|rS^0X|iwAm7C@P`)Vbx}wV2rFz*=i`qNnytDb zi*`I~@$B+5wtjW{H*fRHwbD{gAY$xH3TXAM&qAmMtG+G?rbJcw^-CaEIs?R;fT-A< z-1$gyt%Fsifx*#Mob;=U3YIx&FEhz8Yu>+?a_V{v4yBSS9yMv>__(@(6AtX9+i@{+ za%Qt!=1o+@lGS{8q#vP{ms3vn%yt`!zZP{P+N-EKrtfF{A$ldYS2ckpaFvsT^B`t#pc(Em|eXR_q*hkO@M8Q=8$@730# z=1zZ|kd>qzzpJOtH`Q}|#-=qA8fesbA9*rjDe?&<8F4dXW9#xp;uxZ0Cy7r^%Rg+m z4N}gvovYq&oAYB}!^SEeIt_chuwK(a{zCiU_f%<3IfymreW=9BRSFR|oXNX>@n`RT zq1Wmst$vD0MSr8>=D-$jUi#E&FnXNEKe$OQdg4h(J<2aR!oSt^9AI0w$zU3j!skHh z1xC5a9F34P!8=@?QTLv{L&KCganFp=WG4$f70R$Nj55-(1(hWqd)HQ}kX<3abq~`$ z%LoJ`e&!_2XFejIULuC8nxXs|M7)Os?Sk#p&^>Y;gAEnMV3KGW>*6(`JTGT>vDkG0 z2Tgo_Wc25J8IOL_q}WU0w(Iqx#=_ZbN-L^6m+4UB6}i0Z_%j6gJq~w{ zvPG>PN^Z&?;N7gqgxYPIU<_jxzPPievXm%4DUrK3sGav@5|JaNO&}-`Y%aYi+q<31 z>mHYrvvjk^gT>XG=vu2v9mk1q<`4#CNk8 zMr67M)gkwiZl&js36}5-L4?T)<|Pxqg8GP=2tZ-kTt#_KM-E8(GtF9dZ*R!GT_u0# zDy;Ql$(m&&=g}v@E^T=lZ~Aj-4X_tD6U3-pYF^74Oi7U1_wUGu zvbi&_y|LD|zNCj&HzW3wZoJ^;UMf&^{#^p{ACd4uetf0<9SPIl{ri6}5|qu2{&FM) zCv3gxN z;%vjg&5iqY$5~v@YQ4z7vSCmIVw&V2SAyZ6Mcs@e1<)nHM!&jHM3mlgNGvnL{#r~B z2sb1FVk@mqQ3W&6C4Kwpvt5&%fc4~g^)%!%8X>ogC*^6WtnR+8Ay5fyA!_WbZ`I$) z-~nwNm0{%=97%JzchjCPTP#YiTs*6~-XFjjJLX<~yDi@*@DkA#>th;#EEa53>^hcu z2*Y8ae|)rC&kUH!=#o;qt@22FJmZ{h|O8erf;SWp!sNRDj>uHg+wq@MR!CTAwz z$*Lz0kFfmY)e~4~VS67`0!0#b9`--CumD`zQ{3d57!kQ?H zx&2=xQU=qN~wi$dY~O`MP)(E0-!JN5=6Nu*R3@n3wr%pGR->e>QImg`$%E z;5Tw3LyzCOXXQO?s^|}vZZ*-ke>wk@vE`Ay9@5Ox$|6-_Zq-`U-iaB`gHxf+|18d_?#_^(!3`d{vwO#*iEfkuY<|?0If3j<_aiw zZjV)bY}l=mND%3g7}}T?v4_w$H>4jQx;B7LPv|i1{(I~89{`7PPS-X426*5%)yw@` zw{U4=2SaBEbA7A74D(DyZP_(CB=70!7PzE%JiOJ%rMYPDn#!M22`gD>fXl5>FwxjA z`5@BoPa8xeGl26<-9oLnM_G@s z)FI%cQgVnyFT#R!FuvVfqc*=Mq4_HkyKQHjS-xzqE*=X4&cDomhcY|LNgP#b0ml$m z6rv{LGfx4J$AKnczY&NtmCwfI@NZOKE!jCut%%11Kf&{|C@(N<(p`NpPO)z?vq7K7P zecVQWVU3-L`c=<4`&aKS$fH8_1hWYy+uE;4K!Ut;*X|=3%7Q2`eo4p@>5_pNerI)H zPRaJudn{O%Z)GpghHv2%?F4+(M%Sqg!riE5DsEm$Vc`}r)~mTF%PZVcpB71Qhc|0GLL9=$P=2GgvxqJd4DQ>Sz4Mq zuR8kQ={epg>5i$=JCnS0IpiD0rkKGO;%_PGeNHa2C+CYVm-B6Jtex^N9_0+aDyLiE zFylTc@BajNw4&uqo9~{5);H+?J;48OoQwZ;URRcvlXuhKuYg}Q2-1S~lU2xoC3@3qlT@@=dXbEIO|=GYIw?|)Ee6jvpB(@> zmLkX#a=#R5qQWU$5&iOT*aWb7V5t`*sc_zZ``EkfynC9!gHwA~oYz}ABL=zhNw4Hj z9c4K%$G4HMUYGzT%07e(BBjbX^^8E^X)Hx*??#U`*`Zw$v5swICE0 z8s#~Jk2nn$G9i|;OmbwWD0wPqA06B@=piw$72#OrEKN-PO7FkMS$aKG8G zwUsyadF!%)dG{JBiJilv^gu?+39F$qv|Q5EHGc>#>LCkg^JBzmK>-?}v{xm(q(&!V zs#{zqn4Gi+lt&lD5E4TR_VeG|Y~!}`G{j1y9H}(YYE)Wk^N_<|mr}Rq(e>pxKIl85 z2HYN==**nqP^O}`c3k`PSz-phnw?=jFLZmlr;;E4WHtMR-UO!c{h!l)6WzbpZjf_y z_I7o?LK8vFDx+~9U(;q*^@om>}yK~{icNbpoz zTV7w+2wIi1qD!d$5){&k++2rCHlKV%CIZV1u%@bXu}k0gLPi;KFC0r*VQh)j)vXJ+ zi2{_({zli7rk2y~2Wb9Evs_B1UP0WBoLm}GtMfR3%w$_fGnNxtl^=cVwITeX?Y>TE z7N%{(Xjsjz%Curqb1Nev!eWZXm*|MQ8UKS&Z{g)pn;h)(HlDWZaA-{>*TZGXKtbDV%gkDX^d13>-F?oVInP476psgc1 zXDREdS0>De#RF+~FabHO>1A9jSo|7R!|vFFd~K&pwYjegK18FVA)!s9F503YvhSKh zzJ~F#|J8I|_q^F0UjKQe8 zeZ4@+N%Q`CFPR5>-q^FK>e1!3ui z;yF3aL%NnP_Dr5?PYOYYjGO~xM9H+I&Tm=t0Wu|3bb@#l#zBqc=&z@eAYc9DRa(yP z9;S@wM0SO3d->dP{eI){dG?Br7;nXbH#{x)FSC1G2{=FOS0GF`RXC?tP_;XTbX;>Y zE+HmQa-gpvET`r6Tj;gPwB%S#lRxD1P4z6|BA7@~gUw955_Jb3?bNa5$7P2Zo_K{x zr$^QsxY2!x)NHle6=0Bl0kRrSJLUQ;;{NBMj9b5~h52{&Q3n0*Rv@az27mc#_T3zH zT>Wm29(^O$2=>^{ZrWNrfpRJ_okSYqgq!G>=n7N`eY|Wuej3TwTjf6P2zP495I9tgSU!TD?^VEG(?P?86+i&LS@>H z!abgJ?CfU9-qOY!$0wH77U)t^znRKJPqKMfD@(*QV<5d%tNJX&&N71{fIPwU0csv(aGAE0 z$a%bxQbi+}Nqe6N+0@AFFy3Aa5xv*Y5!SSu6+3od?`SGV=X3u4`ZlYh*5-|+CKtD% zQ7c)%TUP;V=5DO$&7Pc`S(g)#?d7)fcpYd_BwZV0sZ0~XGgU9`kVU#(QC{<0rH@kw z)^sljQhjHUcPudV=Y|JmZq>5R0h+3dY_|eWC zV0)UKu?4Mc+5A2`lsp-EpX*Ei;z_mO&e0Q12rBbQYb)2OUEak{g zvHS<=hrH2f`9>hsq1X8`pr-pgZ9QwjxGwxvV{!I3J>(QLmZeyVa|P-}gj{~}p@}H$ zb6h;Lh3L(n9+0y<7{|0tZB&;9cmZG!57@EYGoE^|MB{M=`S6wpzg7~x2pYdarkXX# zw8A=aFK2XhESM3J!2Cp*gTGb2PTp?hsSdSWXQ3o+#xpzTS%>hF(7yW66A$TC3@SaS zpMR9EWW?}k%E;TcFYd8$vah{wT(NcKMymAokfrL>VgF5jm}p+$;Gy#5JJBXB*?z3f zk5ZYlcO6V5u|Y0YHkfncd}^}69R3oU&u|ZcYTQckrh|Q5d*))?hrcCg*L}xw2Y$PJ zwrS&iq$hr{8UyMaadxAl`OvKs15;S%dh4!>O;Lc#kA-pMSvfi=!edZ;Sp3H|5a3ue zYZYJr!SF!HIj3z-u)Aq5#GJe=#f^2~w)|e~;3sIKcLQg3cXXv#vjP`S|Ha^>nyV!u z7kRl)BFxENbocU@pZGWxYu%*$LAi>zJ zgQhz+a*jEKn)E)Ng6phNX>l)R0E=h^aluO|FCs%A&=ZEj;TmJ{ltCE+X zY)ZK5dI|Am6F-ZG$!PZ6MRq1cbbU|%P&C&&^VY79 zHrUcU5miPoFq2&PCG-M?MRxi=yCG_w9`86h;fK4#|CTg+T_I6NjDm)o*u-O`Rk{Da^fawLJH)ng7zu@ zI8W2u9&{gi--_gy-keO||-TJ5v`&ypyU^u|@s7{j@YS+2n;p3C=|4WLO{-FY7r}M~cH!=PmH6O$-{s4|nS^09YHk zBhr>1O>m2;AQaL6u0cH;FRk3T(4;}Z3*8bWDMq=GiS`AGypqLH;yr0n=z!iMi6ntQ zF@qzvK2#`+C`q=#2i<+XfYU{(KD-fodto&yr4k)Y?Vyu!l!mH^VuYNJh3KgOjDlpZcxzFU$4S}`pa+~*7;8Mfyqage0ylyre{_e=?zvgZ=s!vc632Vw7X+j_rxptZ z9Y>BVlpBL0pa|l*R|_wCFontuAVP`9`rG4?;*ZT^CpwbQ0Vs3mwmZHO=igf%d$V>< z5kgN)QT~FcizhGcxZ)_{h;4^&feD+7e~9DXqdo#Z20oJ%$%%IpC>hk|*h~;^)PEJB z#p~lH1vjlsk@IfOCg#8lM-HQP^#8glzj7YCDlyt`LR`3MI>A4x6ieIrI+wvAO=#ObleY9M^{i zgfLDNDZpSD6hhY5_ul&=DTx2ck;g?6?;Y3^jQ6Cq5X2=JKN)|FEVuTjk9QmU34nei z@$gqf<$JGZ1U~FNFxaYluq|3o9Vq_eSn^9sg$PvY*#iby{NwgJOtYOq_ zWIq4_lllp14Q(K0kbzt@9$&uy6#F_j;9!53xyhk<9RUUKKErt|!0K9~>GOGsFmKKQ zxy{2DuLmn~wE6EjFxGLC@}G^a35ty!=rJ2=cMLV0_E@TZm}D*+$iIowd#%A!jIg$u z#flV>-R7ubeQ*HrE^{QWl0G%j$*qAy^oiFfv8x2s>d8{m=f&_^HK&RF<6Whj=*mMr zz8B|nlCPoRRvDeqhL4za)@)8jfQCY+!@HB3n+l1bR`mNz)JK-EY_>H4eJxI8 zi#uskm1^tZ_(xeyiV|`|I`!61$s_u1E9TRoPiM$kc!!p*^y=2^!?HuJ^*|P`poK-i{e>M0wvuKGx_ny_6Hz7`XP~p;-CPQC4v??r(4n zzqpW;UYKiaAp?4Gg~`rBPYe_8Uzco~REvj!UYSu*!I7lA zgRencms%8{OrKix4l7JHlD7W(rKm*2usG!)r+(3pOC7sOJCqFDR83dc*4ngg+G`N< zBIb^Q4CQqtMQ$}cY1=+zXPIB&0+sdbCrPj8|145ZQQHeWyw9bB$vC{+eBRs0v6Wo8 zbel`ZSP&B>z+|tbUe|^Vtr4bIg;I75gioEg3~wZL{ZBzd4h>G|dvqvz)Gfc%Lu7xal$?7|dX-w6-t@=-$n~$-rZT>TU#Ei# zR=;=_y-WIjIiIO7Dv$$jaeNDm$AA=RiK}OXUvjSVQV3S8F~?811269&)xC2t8@2b> zkN3L0T3%VLTxr7=sqQfrldewan{!Xjm1OZ8m$eX7MbX#64y%l+R{iKc`&94uI`vVF zG5X#ykuov2!pB`{{jGfY3mJdGWg)TcrPFp}?(`6N8D6}{d^2MlV96YCGhh%ObS)a4 zri`2lTNTgUuQ!1r&tT5(#Db2gesqYtvgUNO;KwE%fnlqXsh~PvC5^?fp~9s0A1oq5ww56j-&^gzHCk>+|Aw_aJ6*2(|W;(ro^Ip z;YG>M5%a!3+d?_OvZN0H2YmvYv6pq3ZF z85mTW^sv@c@?)0Rl?Qbtfa9qLGrCOzlKcWnCbC*-8j5;w2wn&GgtfuN#l}D3jspMF-&~OHi9F1DCAV>Wf9A=)oJB{{$SKU6)B(i?9d20CewLtC#)tNitUU{c3 zQl2-ocAz1*;y$T5)`I?f(WPBUzD#aRKO>ht#@(^p`dA@B2~wkc?a%$fLQKWsaZx2` zxSpTmp{RuFv~~F<)2;5ZPGfs>qpjMqRAY98gq)})_?OBS+xZ$t-^{u53?Z{QvwlDh zc3x;VJ@kSJA;rF_5~F^tN@58>B32o9^F83Tj_)7{u!-))s}!alXiM|=n+)}u(!3JA z`)fN(MuNz*xAwEXOjlYEHG{4kx7xzb1rLjle_F_J+AvP1{@!L+{eJQN-x)*y$K_1K z+`(8*OztmMCzER0j`M7Po6o^RFTfUzx;#}DT1kqTr_Pzgqon43FUT2dE+hvKu}(6) zKXt|v54)_R;JBD@Lt7iXY&uSJKlOV*JTa)da0H@a-versDCLC}0ryT5qd?w(mj>m) zW!xkVUu)Y18qS6Gzjoj{&3e)ZL~LHO6{XtWpKAK*`|`#U!Ms7;u4eJ<^r1!GG6@6d zR)IwQ45ovUmjLP`YB5GYMOR6z$I&PP?ssiYte9{#-P<|#Vwo#~7D>_zR#D4~l^{MQ zP$d$gEJJJodM2J0=IfC+yN2b!4q+s~4`RqVQ?$!Mw4XWIceuL<@68Eo`4pO`%L_={ z!ZIt9Vq*Laz~=<$N?QEWh#H?)-lCNktwN=|%Lj4g!Vv+kjk`g@EEdm>NSbYmMFXSfeJD-n6TyGl|6@hC`hGb7od)SXxyGlbewkzpZ%~0l4Hmgo zF(?=jo7RsUt0a6IATGXcCF}V87_UXj>eWMk+nn^ULUSIKA;2Rk(z zAVYoZBa{;4mhG%g46z)S&ib_K-G z$vGhS(1Sq;{?3>y{2G8}(x(KAg(867d=}oo$LPjN@)-ia_H&j?=&Hbp z!TYdSOyN^_#@W~b9P~T zMbz6{+YFRseiZY@0Nkk{hp1+v_!?%F^2!WthPM=bA`IhXc=K$6;7|Y*i+0FMu47Wt z6+PPFfxUGhvEdOTMf4kexxcl~kAI~UYU3aSQ_&r{jyQv<7~3rY2BB3&$vLOMD3k^N zP}~ivn5?je-7eS6INZwgZDB!plBm$WGn?gqc$fg>5ORQsRoeHQKDcx| zdEiSjZ|K%755jpJBERd@u2x06bg@Q!P=@(K3)8*%%tI&YYg6cLrZ>)@^=3xoW>UX4 zQASjNWA)S(w46mduW3fyBx3(cWcM)CT=qHboXH~JnB`BS)^GAyq zwW%(*IBhwBD@*rn9rJg#JZKCmWn1^_yIQY7p-y51(13B`5!=HNkr6%lwbj&jPkpPo zQxCh@bS>0?cf=6qqRfzskuR8?Q_XY|^;Y@Ha@`y~Xn5=VjR+hfCK`eterJh$GtgXW z5``!+$ykef{e#Mxxs}d5(_vxa+E~`7PMv$c6&W-1d@?jUC~lbs*i_P&yuED8uZ)W+Y=Z#lr%QLnq=TxaE^~4$ zSg+5WpD(D{W$~zpYetw;62?;_1G8mE72%4`({7#|92oh4WFHP+i5#VDs?JYtYtv=* zJHa7tz1er#T_rB>jGuLV+TJKWRf7F$ST3scPj*^+Q2Fw z(rugEfqtr9WktGxq#6k&riqxlG}xBnS0ar$v0df8Q|6dKtGBZT&y_ulky$@CRIO@% zgg$8<%}OR8zD-##uN{NlQ9N_4HsB75fwpl19U!{Z9#BY^2R)}{@brqA0B5fbtYixZ zH$(CzxN4Nd0w3*8`PMzRJd|!D2--k+ZF;2ppQkp9QA}v^-wAsW{l^daf1`^dVs7&- zfa@suz2EL=Z1flNcBPti%)AKvXO=E~hRn9oPV}_vU#p ziRF_rkq2Xl2_VV@M{_+DR7pCFl!+O$MZ3^fHo#l2&a}E*-jA;rjKyPbW~vi&$>BSo8 z{gH6f4Jxn1-8+kW>k*h&2b$$+2jd$D&17gap7_+u#9XJnu)T=A7|ZI7m5wV}wF|(3E3SeP}xx z!dR;UwyD`zy0s8)p9%ml4`@G=_jglI^ax`&@S`AjqkCrs0IaMAa4ymvhXHw-h-`2){`S0NFMqnw6-!RWMWo7<>B7DOYw{M4M>(ID^9Cw1*_kZZi* z0Vx;-E&*Yk#csZ)6v|C5jVcta2$6lotiSMzSDipREsq)s`!Z|=K9512YF;0DO86oP z0yERdYFFaWX8se`VM=%}D}<6|LMQ8}r*;PfXgk;)%A=1z|NElugs(@f(R~gL&1*yN zh_CGN*N>YGQ(2!Uy!aAJE0~qCG2;27mNynsKp{0{6Dqz=!$e)iq_w1aO%Fs3-uB!$j&nE` z0TPE!ODOV=ubEpM2662+91RRq@0C)gG9b=l~ z{UM?80hqNDRZxC9w=?s}r*eO#`DZN_a?N5q%7SnIfEr$EFzUP3pYIC z=0=+6VIcr)nPNPPR4qj`(5GOY6IX#hz(R|%MgETW(&O?xt6*al_{wyZdClTR+~PjvX2XcbA4_(X2nIy^Us7eJy;Aj zoK)YrNC8rm%&yNZLVS6vU}~k$12b*Jp>%+Zv}`)E$IAviGaE~4&b{%OV@i_#3=H-$ z!LLfLI=LDnjJIAQlxg|?Ry)^)MG&CV(DT3;mfG$WgPrj{?$k6u>a7r($Zo+U{ovj!<%nncZ%})ouwV}ZbC9$+{WAs7~qbft@ z|G?M7O4L$4GeOo1H8-wjt@>PJ5P31}k~YR(h+`C5G_=z`i!fi9{z^{0przT}ZPGU&Evu4q% zzE=vnUBPk8OsSjCvFsP5JY#1#He`@#o9jx*}}Eins9Qbxzo07 z+qP}n*tyfTZQHhO+qT_V^`0;4tBQ_3@9C%i=ARWAvF5tRyvLZ==svN)@s_d}cTzKj zOPB`}l~|6xsP)Bq*WH$`zim&W?+SDWpNM4}yAF*%Qiu-v3PSn3`MJ}009ZTQxidg1 z#&;)M(tL1WT&1cR$N0c*FuCFiL(lKtnwhx3pTHo9!bWe?+u@dYz7xuE&^>fD3-(h{ zVeM{Ed)ZH`f_)(69c>W=rNLBWctH`S8=b%Yd5;QZSkZAe?H{-0piXxMqp1Dk{{@#JAi{k~YlZd7@cRGY&vZ$8_|PSMuT(%9*L=hH+gt}Fa_mEO;)R_G>sbR;uS-T)Hm0xb;?mrVLaa1(Au z?$+gGaiVeQMc7}Rl$`Y9IjEg#TkGuY9G)LdRAYE6>kxWiB!M+C5TShAap+(iz^Zr= z4RZ>|M*FT*!#JStFEOsW{w$?`pE;&M6)~c^AL9l;Glf&15V_QavMm)+$0^8t&mC-p zblCJLK>x$Atf81U8OxZV@KYclTzB=Y=dg8i=4ioz^D0ftr%drjuaAK|j}W5>CZ7nP z91;Aetb!H=lCbRZ*$>E>PYy+>^P)-q=nyurANqGa8#WU-HfZXH=aQH_Z4 zYf{Xf7c^uaV^wJ*P>J5c0{*1;UUicrfA@I0>Du#IDB-|nRuwCJ0vUyJDhRYSU2+13 zAz1&LtE&x1iU7@r;}b3W_2|&am$)&j+@pRe&+`05|Ccm*~@{}C$ zS#aPJWBO@SvrKxrqhw)I(JT9tS6>y48(6s9fpejC#~&9cb9m|I!>n_@aq z+1hrG4gPDYIwgLFrBq?%PhlYCdSTnvlQf?*N2$UATaepwtz(m7*wfp#?L`Nlp6c2- zsvZOFG~@k*-K%FTa_81f16Xm*M2jynD)db~-kP6=?!d-+djh{<B?GhXyE5wmmIrIG6=1W5XI8{gl5>@ThnW5^}Sa#>M?(2Jt2q!0E@ zO<`(Yd&1q2H`GP6={&?%_1bG=t%>(`*H9z=#I@(RL*PxLRD)I z5xZ(H`Eeuy@Iv*zyQo;ajQ8ImWx}C~5Zz<2z+fUFj^WY}X3?ZTB*H4M&GY7{VbRWs zp)(f5BkI^*O-69S)^QIcV5uoYI@j%qNBQg^y`FvQPL zK=)E8LK!JbVa^bQt)ugUUePGjqebdpKkRWD0fxmYjdEqR$wyH6?dGCHG7oqZG0~TR z9N={MZ!|eoqY#7?f|mF79&mYf%tJBtL8OJyt`eU%Efpd=!wj_8u{np@W5QW>KEM0e zDohwFS@3SBIyNL|FH3cj*;(|SMAUcNurfX>B}OC-HwilLkWjPUTMt zH{8~&fDe|AqP(TabKM-t;k@4?NYnw}`~)*ifA?RIYV9-$z5Fho9;oZN%K+W&>U(QR zQL9)W7`kli{o=G8lvBS-kmy!PiN)A^}=G& zWOt%wn>S*72}^eK5#y!4d1z4+vHPN|x?jC>|EkH5#YJJQf2IA^`oY><-##4}siz`1Pe+Qwn`x{NRO(L|7XN0bb-E%vK<7M~C%;__9RpN|WRVbyiS>IG( zS#0lc)qx(PmR02Tdc__B)4uEZCyXQs4Dw%LpYryy!Iz)Osq*uue= zf3imZ=Fdo@s`O9F0lxEG)r!$V%$SIsyOB^cN@1~dzBWE8oh7(!-&ah`2nZ1iAmKv% zW4j%IACZW7NJc}4$S?fU>m7y7Jyv*C&+fqrV0uRzNm6Y%0_e*`h-}AF4k1u7%VCJM z1;vX9lS5da`WlSzB{G~YDErmqcYH$sXz=OSm#)}Y-)UHu#;K|nn(=uCJ-C|->7I1K z-vay^wwzL-`qQ-VfRdDA!x1#%mZr$lsf%{EPA<>;;Zzl4FC_%|8bZWAH421k2VudL zL5e=wlkS67a54Q17Q)EWywWU+k@zws|{LRnyJOfuLwgN--LMcl&4S-%5{J}zoPU;bO@ zZd&$Dhq4`z?d9-<@@PdGmg1@hVg%e>RRR!YvgDn0g5DZoj5%s!u6(~*J&c=!1tJ1H zp|MWbdCfo@@tJZL>l<@`mlU$ce0hV+Ux-0|62FOpwUNN&5vZ&1C2COAPLLOK%N*_v zBtdeD52mWHQn#h-gn_kta`#dexJit=-u@C06Gei-RAPXf9>r+1cb30f7fA}B2_@)F z)c{h-Sfjx`cPP=(4t&T*(_hdC<-d`5Mn&PobGUL^&1K@D)1}$e@V`k7Dc5rR`t8tu zKqWi(Y+sW1S(L;j3|$)9Hf~m(`Q-o_nC7Z6j>Q!?!Zn5#s%YD-o@S7r-(^duUdrd$ zsv-Ml&Co*M!3Nozg?%{$^m+CQ97FDcMn10*P(?L(Q?YM;aTe$URk;FGR>Q_D?$jA5 zT>Bc0K^j#WMm%FkJPTmHAgT!xLAs-9GuE7N9LKmjUp0--e1)NDuVaZv>#!WT&h51$ zn(S?*B$J9P3*16F06qrkVu*{ePGMIHh>C;3(AG}+2BkMv^S74X((LyPG+e{!9GYNX zvalV(>KuvJ9r9FF+KR0We2ZEVmmJTYffllh)`F=Pi976ILh9sHRn?YGWVzP_y*E3y z>qlmP^t9-Z3IE6tM-ho~y?TGytnR6xKnX)mI5WF&!<2p3Hd27EOw>-`Pxke!aHIa9_9JqXz_|9&&c);D*t z{&2}S%8+?BK0@WKER#*vG1dUJ*4cLPd_=PIQUae+-tTkoedw#i1z?)?>3bx0S+?UB zZst@A)ne4{sPmf<$oAxM4GDBKX*RE*s!$7ob>*9U><*{ct(NmA$0j05Fzq0TEWD&? zGaxhJ*z;7Sf7@YAGan_ukOR zaafhZ(UPmh!Wjg|Llg(SpT4zffqAB(x>JYrD;c{v{q@4EIF!Nq38rwS*IP@jrMW!f z^c8Y@!{S3XeCLEswSYs^FA;i>hsk@c*;V9G&d+uXz;Ms%(wJpQkD>j`7@dZ|_Tq~j zKaDTb5Pz(jS&Gx2Vy4{PV?vesxZK_rSZ=X+ncC6D&$YX{xY9oYzv*8YZ5OWgMYLel zU-aKL*7wuqWd(z$Fh8~+3o2~Zn-Z(4_)A3V#rG`^Secto^j5IR7NOT~<~x76D);T`Fg}B&)$S$i z$sK3?^&~HXsaGLw>yC)So9TYsM16y84Z;DelW>XiQq!T6 z@SA_XD}Ehp!duFbk22$x9+iV6FjTwfi=Cy=)HQbpuGPYK&7xaCPhCQR`W;0iv0r(D=wm> zr1Wo2o=D|&n;*`J_p&N9G;kx7a$l3JM8=SGhICu0;Rxj0j5ZpQu%;D}0(@zKNUYB` zzVNt1Cd#fq?Sj@+20J6ir`loSaiA@?80OLMHn;rTV(wc@f#)F$>Lm=_=n4Xh@k< zxfGQOV{OFA!kb(QwBB~nsjQ0a%gI5ju8dSUl>DjCAksX%eTii*Yo_s?&~vP8yg$V0 zX$(>c>K(bq5DE-|#7>VNo{^(aD%oy2`A^NwYJXcVwl^(xN`4C_R308th$9}um=*us z8g9-Z#zWlS)aXII``Zn{j7&Z(IKcwGqUCSUV1j|OvNX5jCHOQF@Cz8VWycg7z35G66$3v(vJasE~21l5}L=3;D=mOWej1g*@Fpctu7YA*M?DMeCZ0fg$qIk z&o_I7JGu8l^R#=;l(jwa{e%xbl(`%%NQ)#kNp=Ppk3SEYxW|_jFLJ!{#Xc?$2$e_w zQA+1Cb!lpB<2NTk{9wkPz)_I$IU{8RSwwCi%7NNgkm4I2S%34#<8N`NN5--F&cHKG%ZjRsO6~L{EV&jIt8V0;&{;r6{a<=`cwK0 zHh2mKf%}ob)!|Jz;V_n4khS3ieToE)+iF74OJwLe53^vb<5>}&D~LbU|P22gy+sa(_dyxdB!`M?0C<`^Uk=qnKcSaIEu1(iF2V(Ht_1>%`!*4Y`wR*Yv zCjd2|OMvLj^4ZZskM|i+MzQBobH}`Mw*ewnLT71K`YThj^4f_?Z*gXRVwJlko<>tS zo1nlc8J7fJm@US1FVjA~PoKG!mFC6;Uv;m+f{w*uU6(Hh@E3K;A0QWB5qZ}VVX1VS z?hD9_SMuCKn=*e{oNEQ_&*f>eI+dixAymZnhG`}d;h3jxtsy` z8ES*jflp!*4#b{oI#IYue+_Oj+-hQX^>JhoKi_hN7T+H(QvK=79(8bLZ12>1^S034 z_sAp)KVN;AEASL&K~>msS-g(39wfk14s2_<-kE8zoH@7YRz^*k>O#p6`P4(&?jo^d z1)tvf{_jE+iWMP4_(!OM{vd<@iBSE|81B!zA2VB9%YXCdqEdBRcK_$)&$TW+oS3v~ z;o_#@s>6dB0=GStMfj7xYhcEJHFPQVDy(+H`1c>fVet&6o^jzkh^Yxy#_f-q``2o! zQIF2sVjM3&={_VYbqT<0^jM4m6eodQ-Ckh|mlhQ6SZwUvnpn6zzz;&Bi5=V8b^1O~ zuRmCUSFZxIOgMoL8{)bU=DkhsX#zxbsG}~SzxoWterk{f>b)orvdl@`}ovxoduY%Li|$5snt^~G5UQ^LAG#mASU7 zXWb+Y)vJ@sJs!v2a!M<*ldyc6N<5ZgI(p?I+qzw<)yvW(rzW1A!#qyxt|Hp`{(dbiZL5b& z#EWfE~6m^)*>R`M6LB*z|j=|Q+H;X#H(k+MJ!%cK~2 zpxhbjzj7gCFu-*4X+on}4%)z8(qtz2W^NZ8fr`LN1b0k9F+ib_(Hd;mwZY<%2u9@k zSWGDB;J^-gXZ~brL@x%kIO>dHFc`%yt3e@8QmVg#(3Cj+tcDwhzUC@-K3aa@yDU*r zx3X~z3Xe8_U#KQa1RWA<|K@fSJZPKN@Xm7;B?s1`N24xfTt|rJ?5~n1(yZ}owwP<= zSVz0Ba*Chc+ZQ5x?WO3wd%=~a-l^>dmZT0qgm0WkZ=|r%Nx>FjDjFXVMQ+0|O!U)P zqZ*hJml`}_Vn8X<3$X!V^JS^4V?m8{j6T|f{w5!lG*A9&;L@hw_^GmXrHK(|WC~eT zRoF0;610LMpQupuuSD{!Va#>11qq-14+}HuHCFj8pEscEu>0kE`YZa#YgBOKm%Zyj zEc*A&&EGS%L-zt;TR-S?ak@rhu7|W0-CIc4F!Yhrnd{%Wb=t>@D{)HduUBp5pkWuX zxhvqL@#BjQ^&J_T(B)1^O;BT+MzZ0DdU6j2wdQIJbj@0_Bru2-wUF*RLDiGFAOLYT>5T?yd?#dLHV95TGZ^kI#sDwo#iXMOXh_+l`E-1Npk+HOYHBuISCn?q$bc!<1P_iL z$m<)gWOA15U_M61J44FT%!6TdbKKktsbrvx>sT0lA<81_Ua`Qr`JcYhSNF@Dw$q+R zA~a{Nlh!2gdUmdEXw#b93sl+F*;=NaD}Kh!Lc~x>Zq~Y5wVc3h zxm;MZwxm{DGchM#hOwZo3&77)?=y*b!s>IkYjACBZ+fLpzWe(ot7MPcV$bnz5S8ER zo`0-Nkd?`Q=YqpCvQ*rBDCy*te2Szl)%XD}}^Vr}4J2_^{1Vp_O#i_5A)H$bp2$G11VUFaQb)0D#m# zP@+S_z>TT_T8*e6q4EqidNz80$N_KNJu1|uQpH1M^|5k!W1~dMv!Zq*g@z~ zsh%MDfz*Zw`j8j0=lxzmXdx52*8Ta9iURT>61nStcW~ifyz0r_EUqt0fbp+fC=ZxP z@ML(E=y2O!cm)?VZEJ_I?M@RHj9EB>+Qos|Hvw$)@yi*@6XT4K`U2#v>WK;*>|b6U zImMJybVE@Cw&Xpx~ zY#Mw`sxWY^so{NDP-&>z!c9Zp^6 ziQoBQuM?pwlGCNyrRh&cSN9w2_mtnex?MA)m)(TC>3pg?Twx-6{v6~&)(?gUmt~I% zr8a%QXSbajoIXShH5ST=Drk{`;Dq*<48K5fYF@4YX%f&_-T`YF zs$vqpA=%3Yb%&)h3VwEayenTl;pk%6nEXv7bwvOxqJto!zZZOX!o0=86s;z?Y@*cS zO%Vp$GloVC9_WOao+CvgLn$OgW)R6Ze_^U`xC%D5rKH5*2$LNuK(+2`#zPR$|6ZHu z!6LP;g^Rr68Ykh6GHt56jeM#hGU&$fOdL~atL;Lqt2Kae_zv&ykIo*Z>la3d2$QaB zgECn}-ZJC35-XD;JUF;w`F$32c+2qMGdrxu*)x!)Qeh|UF9eK>>Q&I<_vbOCqojr? zGQ1wdYeCjf7mTG2@`J90%_G=|d{NPb0;j@1TIf5AFO{7>)6Mv-XLWOiFggiQ0iE%3 zg_XFB#S&3#2I5%J?HSG0R?)fdgozbeq|#Q0^gPGV z=?Q}FsPul!^A_Scp+hibm^rt_#ptFWuC9`oCZu0hHY>BCvbD)sabgp9w6|2vF5>%+pH^`>@efvRGK$M;?mgBg>}9Ixb=uaRWkaC|{eH4lP3r z`nD>rm-8%CFGE<(W^@V7i7{blu)eg9fNfzY6Et+w(_W4%7#7y%n?i<;Lot@D+AhiDASqt0#5S0C1RPkWpKFmDSH)J3E+ z5AfEE7qvRAFE&Vwa#V*TUBv-kUT#6I{4w>VWG`=gSbT1 zi$+zBI#h=#f8Xau$T3X)+&ybN6)HYW+U^RjRJ?+7U=iO~7k*FPV6MWasaoIqD zozx#-)WmVw!*iim;(dRyzR6r=>7>G)#W*^1Su!@vAXW5+bB@F;Xzm)kxB7qqQ%Cb4$;$n_j^orawcpJ9ZwAj>k=`wRXHqRaa{WepJy&trl zxbRv67s}d%rcptA^BtP+BGd|FL1a;QM^Av}M!K5VjM8yg^Zhl<@lf$X;f*2^So3D` z@mNAjmR-5)8+EpP>iZttMjoD}!W?}}_Q@`zj>Fh%a41N$(Wa5zz6ANz&w)a{9a6ai zbKQb*@LfCt+cdq`S(|~A6@zM9M~ObO5o7;P6srrGd;ggg?jtY#1$#1Z@@3C_F}K$G z5ETR8VM!Xe^*JR^P&Jzj(p>ZIIj>Zm0?looj*99_9fW}$;k zqxWZw(+^(m6%KYaPi(fdQU8}W9+J6Y-MivZ(i&+)wX{e2CsoxQOXM zzHmLF@H6+Q<_Rtw`Ni07kgTyYHSqLcAK47Xd^9~mSX<*lLk^*qy{t_Kf=DEJD#X_LLU4^KF2m({m>`XFf+2J%?~Kq!619K+bHsd6u^z*B z=WB0%JjM-oDJ1EZxmYpQa>7eLrZ76A;jiREK0U|X{;Rs^D)g)XjH#m$LX;FrV&E#~ zp>1)eKTZI=EV&QvkjY}iK5Q)P6os?3ig=6kVp{}{b>E7_FeCuve*#QKcoeL_C>}Hr=x6eU7}JOQsS{b6H9L|hISfL3(Kym}aKKab z-C<@i9z#G@g>tx_Z)P+Q%>_Ki_ae^mGbGgJv}0ptw&bSkJ@^HnQ?um#DwgWY z!@mHCh#4YJ^;RxN#LJ+~BeWV{chc`!Iz6H-jx^A|@~9~s$@i`4?M0@jemt!|9Z2E> zvG&IdE!F2DeRYZ9?yrr&S!V+46) zJ4s267uZ*P!4_S6rx*8PId~pR?xtIulq~$56CNv;2GVoVMg0e^pYsGW6@9;=)OVE)a3Y*}ROJz?;&FLT57~63P?Hq0FG=3WIJE5C`?5nWcrV=j zyI#~5j-CFUEmcR?t0hA_qyH4`&pR@2!6SSj ztB?qRMK^+mY_~cA%#$BuRe}=cz)G{Z6+)ZtFF15Bt$}sq4dCImN3jCW;tK3|>C_oU zO=ujXs^H&)Y)}MlW`vuyqT4Un5wg1@I@DO6-EB=Uc5uZ+5?E%XrPdr}BaqlA0iTae z5eI~gpz8}W#qLN;2cDBb0OA&y$Vf6t9@yx0QAGv(c38ug|pYZ?Puj&}YpuMXF66n%Xx9Z3Pw4rmyVyO>HcWA>1+fptA zoG{l&ZYFqe39Ee_0-_V6}d%Xd-RIc%>#isVP|Uoa>KY zpY!2KIXueZp6fh@cAku^Qpq0*M{)i8S&rgU(~MR41n6Zc=L&<{Xos?if0fF9v`m^< zGHH5zSi!&_9~%QYzqg=xb8*VQ6G2HL|=012E(ai-bhM$i#^*H>n-Z^mo}Yp zeluQ$AM^FpuGfvrg@EZ=&p!_sg>fUpcAcZLhAsm%mBoQsa-I5$Q~F}YNS8Z1!)uYP zf%Ji6y%*!4TIV7?^^fs}8Qc?pH9<{G#<6jo8*#^_Oi?owwQY>2@X|HsH^6^iaWW945tY!EA6^<7cV*xkF^vDLv-QYJfYxM&!R#YxC zGnCz^qX_^QNu?J%Tp&S)%|ES<13-qz4$k_%MLt_LY4j)BgorS zDg$1zo-W? zFGyD9hZ@$n02=1Fi8FE`j`gDV8LfbYRF$VZ6E$}JBhqZ&@nS5T*6xfQ`MyC^9~&oX z1Tsk>pf`MIfG2rmkfMaBpqI)+dH7(er9lRLrFR3qFa;*~i-p!FAv$j^dA3WJ%ipS$ z7_^o)bm*(0{`Fbl2mF$qUkg3b>Fc_~+1J&T+D5w~iHVkto#59{ih9FcOWK6la(pF@ z5w8jPE)}^Wv?UFcNGRkK4}u0x`K7>M#seeX#}XJ3)Ui+64U+??D5VqzKP-Lg+O(CL ztSH8c3+i+CQv*{V5W++#&J{I$Mzx__dHzuZHAH939%tlB-iVIC{fwv7$=tKmq;XZ~ zNtdQgQUwzq#XjmQ^e(+$LoU_;EZ<{QmSg)3y(VjFdEWtKG7fy0ful_c z>o*Ex;`FI8h+g8cBA1JSDq8VE=Cp7wV?6Re^uOgekXq{(gC3yG_yp28%Ec44%w7f> zwKsiJ#y-IcJwBfbYPnd=VT7_^-LWl5k&GaTQIlyv9}?+ z`i}h+zg5%xF~f1NG8WXgIUX;&GEZ((N#(j*Ij^{#g>x)tNA9Ct(#P;nz-EY5Oy_lM zrSaR~AGW%`>D7n{X=du4JR*NJ=c{y9d1~f)udnQRG6f>);3H<#5irtK26S2UoKcat zu4$BNuF3MEp6A-p=)&7&r59@J2u?Z&V|r7HNGVx~7njF5CMO=$acEzTYRolN;vA0w z1`hEz2-aF4PR(e&rCB7`NLMpd9ZC|qkexX30DYUgpYpo0%-#DPEGXyF6?FrzCk`_M zJYkZoC!6KA^w#Ka2kFlCrmKjMS_=%NE}Tpk*qK7;PPgJc?vTXZuEQ=q=xLmspSnqZ zKG%X1B@RiNpxq*`a&5?OcICr`T6I$xDcn%C-pDSGSw}l=dV~x}A*yaJWsfkN?E;iK@SJq>q?xF>o$;Gtm zuz0vOgsb-b9_|vUkOVRxFEi`$|jpD!aqrwUFe3ULCcI=Bvi`>HIM%@ z%KTq`bogOH%HN+j@yCzXr2G#yll%rh1(o`S|3B9I&!eS(^HP%e|KFIEB%}EZ+?H5p z@mugOJl-wf%mG{Sz{I0)(>#Op=XC})t96q&-UspMPk+@``>|GsO*+f?lq>_AZ*`=D z9C>8Vw2B&>lCLd1PYk{^^YB4uiT&6pK5z1GH_;{~J7MR_0Q{C0X6m{3zFeAO&?&_y znAMevvxZ;dm;TDm`}`@04RK~zxRw-kl)K2Oie}7^QI*Ix2Al8ehmXUw%el$}Cz!kX zgjfkbkn6B1LkP@6%q{(oC=SY4I10k8dn!hQz$kKPuRk4!{mg6XNzOL7pAoQ~sDVS8 z`?D%q^iYVxD5`*pWx%C@hJ{p>%B51+`d3eAilpAA^s~A_T26nvxzkcAxmtoav<0f5 zD@NR7Ha4aIM*IP2GyqjGODRysxhD*d8_X*B12y{^MEuzd2z@#}RHwDTFh{(bHq#I4 zqY5SX^+%#9OSD#~_a*QlbT9qkbu>=s80|C4MAkGrc5l`2S4Wi7JenpaimFlY>h@+JR zxNwbYJEg-^m%`KFGh2HWWgEJkaC)lTezr7IrC+}scXf#P#P6|WXH32qpuRtV?xW*g z;0gqfkM9QLQLf~2rwSeLUE1bmh6hPaNUWjVAPMf$6qj?iP_fmC_n)UEn;;8`S z`$DHfY^N!)r=9KKsm$d=Cp)It$+~dutTMumT1g2KAX>8wCk8XkHymnnY@HO?%T}p1ra1?}P8aDllz4Twl z!7$>QQ12(6k^8f(|0mDv|IZ*`h06bm2HvY)@Z%`p2%qIuu9t<5n4a!r_0a8(5Q;jUlv@ zX*DV!p`=XYAfx7DG*c-%O;pI({mO(y>PUSteXi$+%MXv+3mFd$8$j!8^nWqvSD=_% z)B8u(fSQy2$+wt{#WLpE5{DOS5)mYKdgb!MJ0?D>$19msdD|M+ljqgKByOKy#X0$H zd}=Erqaflj+5CBdfa*~?}P%J@t$RQmGVH#{b3 zGLb&XBGF?S&cJAws?Zg&POD+hBr>8L4*my(PquLIcRe_;a;pRei8?KPb^pEd_o%?Xx(4I>sURDG6GP%YKT&=9=xVm(S%a9!c%^{;3G4R$KqJ z5=SUM@U{10hE$J zZL+U5NK$LeMByv3%|Q9H*$u+G}TxWVgYI?a!m3v2XLR27wbqeNJ?-qG((T$DJ&`dBz6 zT`ILtZX0d5a^+Og36fJ5M&|{{L>V$qq*R3f+|*HI+$BDRTUA&TE3x4Q#EC;7jVfy|W*Z1)dJI(L)r4lt<)bQtrM8^GOZ`e$eVM`Ivi^fg8|d>YO*Gh zU8ZmSX8BUVjYslM9lb|2K8qEn^|h4+%|+)0GeJ7v^`-Zp{)US-7GK2IUwT#`>oOAZ zhC}{|+SlSINeNbJoB@lPhG4sev#v}OC~E8CTf>gsJ|53s)796&N(U#NyXLf5jdSjl z=cA62o~NE%fIg-q>vTYkvDe`aRv@N&2AYEuPE8U##$T?&bGtsgavln3SGHb zqoba<1#5|1NnI;O9sKQLz?dwHcnE%At#N9n?VCm!K&UXj-MwtpunQQGcfM~SFZ>uV z3Mk49Yn!pGL@pvt3w%(eyC{|zE>nCVc4C+TbDQoF>Qu|=;*AGhJ1YS~1m6={w^51V zkBJ=j+LhNgE3zuVcAB|)fqZNR2G)%<@-ZMxS0wtN3**d`Wa20{P;($p8(YGxOTJUN*Ie0>`BIq4bms0}GdVSc7}3Wg1+3`d4cM5yHU9tZvG24fi( zhDti^(b@Y-`PnljZ4i-883W=k%pG1P*-B8sCCT+}z^QY;-GId44UndK#mN3J%>nGE zR_K)Iu&9vJXfz_YEWvncR|P)QpthG><1j;poZcuZI#h972BfjUl+v|I4DkzD?j-f( zWSzaOL>U)NPH+Wjg!21XB0ptdL36`vOvxCc(Ni)_?s3?X2EpwA6?g}#k&hu#KZ|u2 z!iI7)kGM24^n4n8qq7DGQJMp%w9%-zjmWPnG-Fw8E;KcPpmir<5bX?bDFqt#*TaFA z1WQUYIId;L)j9vLJwjaCle2l3>0{H8DcB`g)q4_NyMT$nXUP8 zIOK}8?J;-=ZbNsdGdFc5=Fw~>OPPB=gwE>idX6gRL+Lf2edmgb=r;eWZhVBhcENE8 z;tvut*;YV12Iq97AL{HA#i+f*XELG_^S+ke3o4w+aOoA4G@lz|QkE19yjRj*KI6yl zyHpK)pUf+$q2_R6d;q@48E8QJk)$&-J}%V$u8(d>f9m%DeSuN;L3VFdR;BPUTd4I+wX^l-Szwz z2ejGvUmQ?Y4f9gUu-op6J_zFA4}9ESRBK4U9}uW`lqvapK1;3I zX(33}Iw@h<8lWPmSg*XgpK>7!jH5s~eFGx;APxx4e%JYb6boO|2$qh_E>85usgngb ziyUm}14`~%XyAXTc=pHs4I6o88%MI7QGh!C^T&t8F7$|Kykk?Sy3`jQx>nP&k87|h zK~Pa4Fdk3+;%w>@VMGkpm%bU|fQYuX)j*jL)p;l**{l1FC z+6JT=T_SI{6gq=t(`#r_pCZtoqqD z`bjFE#P7jO^oma#T(G(;XJOrAyzt_6+W8#o;4NLsA6^ewK&l~`?##Qz_{WT;C9DRt zA@5|Pd;!UIFLEH(+PHrq;)*SVEP)eaY!A!<)@ef0gn`epILFnC;+ulvRNFaJ9ztbo z9J9CHnMN8dO`T%$f|N7(mwEtZT*R`xupDWKx$2g>Ex9LKjGBDR%M-awWx9|&EDv%5jhGvf=P-ZDBBW~G>6j43-h>6h$sq~G zypD!XRi(4K>rR72PPh?xRQ}zxQp#jBR6~k}cJMHC;ebpGy-oD1Po#c67WVyOR>cDC zS0*c@1POIkg{q2YTIe=D`OXQyTHfjS7e|N%RiC7T9WO>dM^@C^&L2t<0*WIPu+@1iDQkba!RqPIzdWO9y6Pt- zA9^5PH>O>APA6@hs-Jx|x-OMyTmQV|WW<3MXzOyz|+y@@f*J zSHrwwDE1Eoj@XL@;#hUz=6`Z$awfs#75)#Lr5Ux>ib(;ZZ{oKdbOB)z2^qdKCn{Ej zWhJ``L%pHFAg>6Df~O^uKiBT*J{_SQ(Un84_(_KG{G5xV0d^n9YJ z;m>BZ@C`tbKO%YKGipjwjx=02|9#$-<`;0;wl>s9z3^f@cbqEmVi4n6W&|j&f%ICv z%EOiQD1XZ6?joW88cNPKOom~;7PUWHD`1%#KV-Hj*+bk60!FOX^R&nVaMrjm4(vP%jl)YCgk;y6LXLePGeMhLSxQ9`ZL`ix z&Rrt{(Z|VY0U<4(BuVlpi7PvTnq1EfurVkoDaJBw%*1$62b>aBq4!rp9L3#GQ^P{c z1B2N`QK=>9XNV%!dC!=Kkz-=Sm-bkwRLSeTRZCa4z3be#8Rk_nRh#Z7TagvYJjg1Bl%>2_SpcbNCE zIU@8;FMYd&Dll_9Qi@0@>}fvQFIZ1_URO>T^%K(kO`3j6f%?{IBK}_LS}p8?H)|8v3lIY#??g4+zb* z1b>3-Tb`Dd(;UM5lr9jS7TJ*pf6VLmYygSr71V_q11?Gr7Ak6SH4~`Y13|V**d-jf zEe%ssk(kYnN0Mg~hxP8~2A^(qYlpAXG_+8{L!5y%?k-Nlc*=@SRWM8TWM{MGgR5&1 zG#!4hTii!4DIDPO`8V`Orqs#VK!=(lb(d9&Y03RDe^kn(q=EZm8udP>2Wra?2Em1x zvFl=rpX%p};>HkNZFO!{m-m_zTmXlS0#%4t=34yBh>7QoJFKW_92{>LBdWN!7pWdbOz+pO{Z2NOW5P^mX0pt!3bR~izN z7`Zo=-aE{Q+9aY`z2oYNgGl1#IcoU`QJ|~}eu&d_Dx=l@t8)Z$`n-wTOfUfgxHRUc zv9YBoN8zWjv2rX?$+1lm=LJg^LTgtu6plAB3*sgB$g$TE^tfBLc=8&`-@%1r&=%%R z!dx^dNkJel%#`{l6*Oy_FAT&{Q2$=(6tr335Sxt1q0JMi#pzFfIuB-~y6_>>T7;&W z12E&y+G2ig4?3yO#0dXWB$0z3lF8AdJuCSh6hlHke)^LcG`ZyZy)a3an>Ka>EkzB# z6BX_RNrTHFT#w3JVn>V+bWbr<%ChiX$T|m1%kpc(0e10Jwhur2z1N5hP1t^9sP_gn zyxQM>;T2#WPK0pD$FwUduiXtv=vJ8y9pJt$qjg;)o+NG7(?@!A6c2S6-2ceQmAvN z7-W-shV)P%2?Mi<`4n^#M;D-#S$ZQQpU6KT4OD%zH8OazK?9=&ZhRvQw9Yx^*G%QQ zx{UeU(x%inmpw<#RIczrX3=m}weAUZ?AVU6g*=>6l#{u0XqTbqDw1`o^8JcNdsfB^ z=g?V5f=i&$uyP4S6kMlHbY1eV=UV49kRtT_z%%|!wNAF_BCz*|sPWn`t}0T8@j1Y? z!H0{B835O_gq=rZo=Qfx0&`VV>pPX?IowkX%k}a-(Thd<0@$q>9H2_rU+kVe~zttmrQ1l;< ztjl6~tpFSC4=X#m|GSz84g(jP{5cUkKV~aV!phRNSB7+q;2^(`C*Gd+pSKp8ywklynr; zcDy4ZZ$2M9YDbiYs^ACh-)uDGE7N-jp4~X7VA?QrtsbPvP<1)%1%%rm4x)8R^;^ok z<%K)4-^)gxWFF15_e}&7E=ffJX!&p~gvzx?2}r?CDXFhaDc$df?N6V8h+atzLesfj zyzaWJ+oiiKmz6)B>Q7uB1AZP6LKzG}6*z7l{GzFi9)(19>m{2nRtrR3ICFS^&JCJu zHkDsem%eCgHp`A8*`W+8ErD|k?2joM*ThnvMU3pIDE)(k1WpP{B*xf@Q-{hR4?zHD z04xT?#Zo}H3xameQRtunjPI*l)6nIu!8nDc@l{fLV}@DEJtY& zZdGP)WfOw|d|_aYI3qa$#UMn4=Glj6JjCf-RJQ{oD^E#Vl((`@rMChl^v^h;Gnc|m zkH#ekv|kAXnw8gLih>aSln*V*y)fF5hx4yufK(u%UUaT+zMAx(EGhaS%A7XEvm6n* zRSV)csg?Rjr=}*g?yl zkmVtny9F-zmr$jw-om68e`#V|#w_pQ9A@e?%QczF%b$uVZJf5<vIQj`?7L>NuxH`yJdunWQQJ|`+EgEQi*+V&SA=}J96P7)_o6@0G?>+PL)?!eJz?rEm<()*pnDb*^cQSW=uS_2Kv`z z4pZJN9FlA?O0qn-vxBv9wH+IGywCKISucO7bO9<%Uv?+bo`ZRryaw?A!>->Hb*Z`9 zePS|pIDl-bOW7A}r;yU@i%-7-)WTnO)N6y;oS*y;677%*^?uM#crEB>YcBo|MvS79 zgR#E#zbXGa)z%$;c4t3N81c|q3%JS>f~B|#MMHlNo6mD3i|-XNI-mQB$q7gSVf?Jf zLqD%KL4PIzxvtJw^2mWfwdpj?-N&ItD+V-4J8+$37fmY(`ZT()kE#+n0i!`uL`Sl~ zkptj$oMW4wA-u>d8+zP!p#-}-H7b-$AklPp^zqlTuZcTHRz0fDTcwhUy2{c2McO+y zXTokxpqbd3*mg3pF|lpuj&0l4#I|kQ$;7s88z=izowsW5PtU36)AbLo)vLQ#H;4HC zsl?6TEFzUc++83PoUt&OGCy3hzK{w>{`IAQeIt*{`{ngkr%V1`AC|1oV^uF zc5-l`;lu=Tm+zNG5*0v?qVZD(9EAT{)(_;&n%nAeot*#FlRKSQGl1;r$~e~;?#3uh zArtYhRt2?W&_HxGfP3DCFC}mg`7Ispj}`Nq{rcxESEf{hc&Y+1yNX!9)-+>oE1Yl) zB$IgJ0*FQ$>HevAY9?%4hB=%}o+d9rA06D!QnKp9Z93_1B>uCA1s&!W!!rZHbp?uR zyxy*}me$+OnZm&Wmp6a!18%5b*;5W&>@?D_EiZ$zEj^jAYP#_-BL@T@a3Q5?h#r0* z!PWENAs)UMnPZPwk(u5>O4C-jLI52jHbST&m5+hG{eY7;{E!!-bC=sALRwruZh^6 zwntXXj8mQ3dilCajBU^{Raq6%%lCo9cu_sO9+rzRks|2AK-r?Ytw}FQqKbusr%fv5 zAq#Y>JyK484~Pc{ttTGTLylqup&f5Vpmjy=Xg>76Ym0LDS-UwJl3SEo2R}TT`FTxLB3f?X;U8>7UR; zbX_X_{mYG|-z=#}(1;Cp^VO~gjD19!Dn4B^H(_6)o}GsIu(*iDFIn1+vk~YkGBs-Ndu?93L0oo3FANVdrx2A1_u@8309F_6daz*0dq=mxMAc#=Q41p>?XD5}|dH|7Hyi%@yi= z*w|HQ3EnsYunteSg+WrRK^aOX5m!%njnn;)o0*T=kX>iq3FCS)R4v_j3TT~RlN&R+ zA2k%RSfJONvOv0|a`fgZaKj~;5aW3fg$B)YXo%Pyk|i5chd|;ZpaH@^C7^A3l`*us zpfoFHE)zvWNt$psZBZd+KRq18PaRQt(^8qJ9S_;yRDqLMk;0Jm*wt}z19eyO0Ntf+ zPE3)ly%;$`!M)7vq}$!1Oh?AL!tilMgmX!!I;73U@Y4aBc8E?fJ_x=Vx>#+kL&ZPJ ze)iI-Ho<%rxQ()2&(=gk#}Cdd!4>FbEejvs$i6aM|4uEo3X~RSzASwy3A?E@GlMN8 zTUm-Hg>_*h^dv0M_Nio9Rs@hY^5m%Pqow8r;yO=QGJX3PQvc58{GP!>Y$|uifyilsTmh<7OKcl} zc^vwjLs~hDRnjBku4nr`u!`RJ5jKGVjSQ-EBcj1ef2ngQGy~JUOarLR<=A|(WoPtL z)k;b6s%&5RdNnvZf?-ykdbI|yy)RcKYvbBtse{!#>~i~NGkkVll-+cXYqrFvBLhs< z246u)x7OCMS2VQ=ysz9$>`oquY<8-0ZrqN4D~@kCLbdO&HdN2dx4Z;n)3Wtuy1xb1 zS6O9S@rP+7LyoJ0U8MK={5P`vS|STK`PPX+(f{3vu7Zu@cbbf~iO6@D%s(E7nl@|S zY}iw^UIb7a^zfu0gP!;&Q=m)H;KA0}FpOEn# z_~7T{Rz#y&rw|)%zbYrC zDfB4pKV?LT2Y&*P1aPOSf9Y|f9U3x^U3^|pgKq1{TyYF<8LdM8tua(D%Cyr|I})MK zXOc-8ETmVZ*;S<@icUcmzf#Vk2_htkh-x?zC{PE>1KFVDp9k$wxj~H`2@J2n1yA$IdJ_?c-G|UEEjQ0WlQc83H>XuqXo)(WuPTC_$Vii27|ojM6^K0nQe}(Ny zDAn7A0ki(mhQv*|6=lXG%{`5;C z6%ZD4M}8y&^w*jP%$TTP09UT7#8{>c2I@~p$M z$^I)YEixhuxcim@0m8Ih4$&z77aaqhsJ7^hXA_aO6owsEqs?0~`H!i9!U?y~`Hc{T5u4iUA_+}Jw9IOh7`cjlZ4uwo-Wu)aDn&X2L+g*a(*Am!dE%2skMEy~iOX>h_ZRKW56E0v zT!70loDBM1irw8Pgnw1owqF~GQK~oCF$iA{(HC^AO3iQ8lYak%;CQjOr=s|H)mCqd zF8txNlgGz()83oIP;r2FKtdt&UrJ$GjTT<;u1LUe(~~tKl=7kpCnYBR|Z`3f=u$G>Nm`# zYK&@}+;-XXv1Yu^PiwXt=lnbNyc>!=1$l>}8!m%xbY~y@d@2DMro1B7_QWQvUw+uH z%~A?*X~1?LlCkST;{p8&27(a@n)!;N^lbCH)+GB`o)e)#*3}8P(SqNxn0fOMTK6D)%23Gswb}nZX@y>4Y?A+oj1Y!=%<76%S}(f$h@O*SV2b zioU6AMr*JrL~C#0VE#D}fy?s-5?r`$ihihL0OI+s`@tEsOu%REvrLfWdEv>ZjYFsQ z>TC+ZNZj1gj1;>sY^h9NewV=>HgXzTxeezit7vRx$q`+0QiX2fW(J_5>dx6 z_U>V`BX$2!F>Ak4<*N;BsYWKyuTl)@IGxFg->R1k@{6KWp)sH9bHsU>*uZ4#K=rzL zw$`_M-kLl`$@Wh7SDAMVY?0lszO}Je88duK%>qi>#II@nWHmj;U?tmx;MuXtS;lJ#hVRnpGaa5FAhg)hYKOf|^E58t&Ekp(0ra z3&+pC`|_C@S6sr^q!GliF$v|{eXje~r%GV}qM%-jx{hu_5u`Fm=cg=@;3)MHl~7p| ztp@nncQ$EKq&`L>rCeZ#z&2`d?i1yV`O_?>{Cu$;L#RYX-^v>NqsvY{Q#kve^(4lp z`|W!8RCQ^QXyr*pE&x)4p@UCx^_zD<~xw@EgiZ!Lf_l z4T|e;kUHtHP?U8<0rRxD67pSbgRziV9dsI0LvZXv6DWTa=oRwRM)1_t>tA{QFmHB;Hz;PRJGR?D7syi6|aZJ zgyrw@%=NuF;XTue;2xMvYtu)|Cn@01*&Jn##w_w5Qg}&szak!jd3(VSZ0s~V)hh!O zW^8J7g3m$@KHNFFbT@+jHovvfxYXP7YJ)j}bUT&FU%h+4dkPSC@u~fR2Y(LC_}sAl zQ)OPr)BO2AQaf@5+)&rI)Nc7Lwafe)lFh};*zx~YOl6d+qzyJ3V%M3f)DMtVIK!3W zTnG+@4+Ug&8HEvR4+a9ccH%I~WE8O~9O4I`tLs|o%7Um4h;%&oqnimf!Pk$g@`JKD z4v!^2m+O{&@Ix(v=_}MZw0WF!vq@#+1b*0)q{QH+C&YM4HTK7J7-9ErHXQYh7g0YFg*etU zGh%Rn%tHAb5k|RVsTUJq4yO7F9h8XmRj^&-g?o~xA3#^>Q6#>fK(7S0gUv1ZnQ!R= zYe*NB+Ve#v*=vXULrYvDKpw-8JUo;+=TDe~o_kJ#>rLo{(x*TL!PrD>0>vxr9d5Rk z2K#*`q*lH!26OT^)rJ_oY5xN-C2u=gKhkP6(0VJ{;Hb3fz^*8PGFtLvc-RJ0G$$o)p3Yb=UT<8h z(1~@U6V#6=U;+!iH@bgTpc=weAS5Z(ng5&oDo!BLnSR+Bm1co_ZiG0yUGUlwrIo?* z_S;)GDpZXr#Q)$Flg3BaNlQNUR)K1B& z&x;#W&(BKTIzsH$e7=x0+hod@#{!U1$?v~g6HmhhjIFRici|&k%E7Knk)*L6qe{7R z4jbWI&!|`l=F>I?eyF>^c7d&i=#}%P3pKZI3**NPc^D`xzFI+U$W?2eLdaC;#|?3i z&IAUN!8qY3_IJT$l<~40x}`J#+|Sj^CqSJo#|L)Xc>T;T+80*_>HG4_wM)|XE-}Vw z&pG=R&2`}UXK_1DXm~>k3frk7p>~Y}Pm*?U_fqAMHCG>Yw{z!afJx0)yZ^>J=HEe6 zz_wktq^ht9N|u~V5#{A8wprZI6E5rLKtQZIQYXoPRO_1G*#wW!HM&1~`n1Jckhyvn zq8stU4{tGPwf2#1U@M2ON7)d?%IkNw9xP8`$o}+Sa51r@9k#V@zu=fxza%no)>wvH z@m=Zt+$_^?OfN9gES(TBo0>VHaMY`_dkWJDGd&*&X@lb6$x!K^U~#h9z%`4%vX~DB zDsC^eMOWV4!GZn6lf}F2@;>2zYW{Tl>X3|>saYGNy*f-9iGQwZTOj^*T}2^r)|z%% z`%*$G2_BbpzgxrZ{JomA@LO)s;sqxU2~?W-+Cp_dPQ`S<9-G?l;{9z08E_b~>ak@H zw1&-VAHKUjP0d@BAm8|KG2L*#{EEa;RZ^7TzG^)pIM>Q7CFiMIHxf9pkogsQ;ewQC z%KdQ$;7;9){>q57slpp>Ub_mnT87t}utpy0T>*bhe`URF0dxvj>E^5xxbAHhUE#WQF&&|25s4~ zuV5H5Ayaz1DnSxf39h>nvw9MLv-CyPPqu^`oT{s&*x6_EDHycacTL;wmPtsSZEsWl zo%6z*Mp2IzrFc}Z&eaZ6$v;|)9`#qv#mlX& zrBn01l1Q|Sv{wO~!tocy6(o$BdD%C4EgG|5QI%0QSA*Z*bwj>(Ea6=oD^W-CDr48@>Y#50x^mu?Kq?vW1fU39S>O3uz+cj za+4K{Eq09_xTIP1ibAuM3@vQw@(0Ajy8N`tk1c{CeUOa#(RDpW{b`a-(CaXTHzq%> zf@_Yh#xxq9N~XgOhPofitZ>d)|e+5fCb<~4P3$_&Y@wTp9Og@Td} zp!5Rgpla`ZdE4;I5t*$XZHCN|5MzQmZ*^^Wsqwzi=^k`$?u*A{O|K=^C6p*3cR2uX zP6F2@W~nnzlz!EsX-5>|7%*Mo3kkl4u-4`sxwk42&E22(yCQk}*cf5Opx=_5fAVA7 z&`{1M5M|m#X;k5a(G)2OGuGRtlde_-DRN@VXG!=qVw19cuCJU#th^jVO1ni`lj2wf z7OJV6%;(uM7Dd@pbN}!zhxsYa9?r8VUY#7)*Z>JYpL)yQ=1x2`t5#k9IK>3Mj)*76 zdoI)ffvFsuXkZ|kDx~}vW~8(4L6_0c508xO2_;3sw4$wyn5X2m+P?~Fm;`5(L2@-` zA&QVgZ#?uT2;{878f#%7x9T6K086yD0XTcL-Ah} z2X9L{;zSA(Fz58QUpvClC(ViDh(*0f{hL72)veHwanBUab?)mz$ z`Ga#QbsUHEweW=Uuk zAQI0Pc>!}RPECeYP1OOk_kxtN@me{Mgv27R3YL}+v?i);VuU(zRYsQ@UBBU2c(pnE zyX3CTwJTP3<7Ns!p{iPkto-o&vXv~vkR$N38S;sqDZeFk?(i(UXYEwu^JX1?wS zuS^9k*MW&}b?w7BZ3M^@b>uy0Zr0O9uyl6oMGZ=9j4%?zom01FjBsND@{TV57$RTETQN3d?tM7WL*GfBEOI24l6fxh=z_Zx_D}dHbMCB zB_1T#A9cUC)U#5(nP6a*jI)z`UKjjyH~BrsNb(wezBrjYJCUh%bf<>7UTAPCyLdq0 zc#MGmSZf>sMi0MuqYH8Of>3Ny|KfQp@9h;x{K4S-bkd@kh1a)IG;=~9_yQ3CKN;cz z3qBS=aucwoV}cZDmzxNgI8C5NC0Z`|a1}=q*t9i-Ppl27Abaq7FjZ`GSg&fc`B|=2ZMWS^&Gm!? zFX8e9GEN&TWTqd>{E*K(a1;Cac%d5|eTuBq3GzPHIQq+6arJ>NSYZ_VRaLCO(Wbm} zQ$f1Z{BeJHT~@8SPmWs{`M}=VF#3lU{Hsrghs~ym>K=LX2hzih&k@af`bRlH(L+uG z+L$PcZ6F-BN>rDN%pqf?Zh8&2g0?Fu`9v z=1-`$e90EYRMdJ|UR9|9>+K^w#O7Gn-2zvca+MJ>+2_}_fZTc)EGv%Pfp#?Yl49qd zK7M3P&bu63CEv9zQ4C^>!O6Ulm3MC~L~c=D4rN?#^X!*%|H45Sbq(?^Srm<#)sAc) z=AL$jk$bqGvY>dqFsa#ha`|nmWJLx768#roQqW2N zpUQmS6IJm)NxW0l$Au+vf?y_(0NwGPzCik#zl|Km77@7$;k3wb(dV^>(P_KgHqHAa z&UAW12(crTyxpG~W5axNb{gd@F6K2Lowf6}muCARn2eAGO7=ZT`xm_yrT4+0?5jdJ-`Q(?=YgQDVgiH>s8%xOcfn|CrWytF$q!c%qPJMMIg3#)*@IQq%3a@N$?g+=%y{;F zgiWZ`qYY_USmfIN9EeAvnzdyf@O3k-swY9wkYu4EG3PV)l}#Ikum-g}l3$fbKqfSD ztbUEg(SB11FvKm#hEop8 z0FJ<&ghczIs9nt`dZ$f4+Q?5s8Kvf+{Rax*AtdPAOHKwAj{zeq4oyL8)9g^Vd(=0t z^amVN7qs6b87?pmEXfLOTsOD;dJBjE*FQdp|FNeh#y7d`bM)-FeiK3OQ+fGhpR}$p&pP$zCfW zlc-a)5lA-UKEejMZPyH;a<9ng8ojh;dq6jS;ikTe2KN*S+-{&K(QQh7&Il<+=558nKo8}*ojxikb?PsuomP-s0HB<+WXD0x8rU+3x{ z8|8~z0ee%K`4Qlr6qF5i)e4QdvgHRNk16P`oQ@gj=`9AQ#Z1SQ_PO%baU!ihS!+kY zuT**wuICL}^XFs4;Q7raG-yO`FUjoZL?X@stN}~TF~S`FTm>92I;Poqna%p?u$I7& z3S>}|%GH+m&`1-1EI~fRDO6+RLX8+%Vg29;bRW?Cg{bL+w}ISNx!rI#_VBnLc&#P({ytIs@;I5iE_hEewmhK45|6&C9qx4+CmqLfTa}K0!o5 z;yahs-J*ZBF2IgLrR3#1S$(SU*>=9dYmtl^{#?sE7t!@7_JeK6)~&r&noQ&oq)k^J z5VBiNgVxuE>r3C*q`%7uM}?p|TfevBNGPoINc4iiqs68IfC@!+-mA2`wx|-(t$C=A z6iNf>?p;z&$)hRvAvAMfNyiqp_N^m^R}`D z1DM{-andf|ODcYAbM6*jT0qr%x6b=iBhb2?YA4PK5?IESHm$UiKQ zx)N6|0R5mnb0{`WkHxWMy@4z$lG!jUjC(zC?tk9Ps_(oW7!w<&?cT~o5JSn44#fg3 z-oNsHxZn`-P#;KM{ExdN794zQ?wbL|Li%@V)BhLD@eeoAMpdhCXUTsOgY7_o)#w!7 zJm!qeRvZ4t!VRthFp>y!D8}@u{{V}xuyB4oZOA9kjMk<1r1O%Xxp8muJgrCQe5x5A z7}mM6`k7o)#-k~u!t{KRGQm4S)BU`TP~lvX)Y{WsRv4F0*(c@=$ZixT(KZ#Qey64de&Vv~YGjsp)Z^63V4upNN9CtwpG%`tu3!aySfFwwcj&*fDiPku z=i>5qc(@e9Rxq}9%y_6bK|?ajNxU}}2D&(F)DrOc?O>+6&Kp>3Pmw~Q4irY$@VWHq z`|ALpBa0uqRM~RF&Y*ACZHE3TaJ}F4-Op6Y^E!jsAjIo$+zLdUtYt^XoxlJ?m}hCl zl>*6Pis+?xC;eHPgcoLvuu;`g9tjDlTRUbHdb_7zmr{elLVwvuTHSAvuY-o+FF;|E zj;(1h1sDhzZHC$oXyWXp#4u@93&YXjhwF_%x3Q`6@$q3u2rtK2$iZk6q@QjI@yEOW z_D-FP5?THVUY*rO0q1&-hp}j^bwy_iw#r)>aT4=XAwb1thS$@Fq$r3JR{kv`r%!N7 zo2N(SwylL0t0`IF8i^ttp1((gNfFaHsoDKC0t((Z2}e>g2wKn5nu^441e`$$2~jrt zS0iKv62rPs8$Xh2D6o%PF@q5b53faqMK$jxHUq(*{?7f>cGf{;lc#$ibZh1&$HIIXf23t4L66JfU8H}jcN|7Zph7Ju zmW>Eno-A2}#JW_e8_S6>?S(!XD=#>wa!D^_zRaycIv05iFrTR^;ueF%KOF&&*=>1w zp*W6dRsQqG{C#=(_6%lJ42y@eWSXCf;6EY#df3??~^FF}m%~&8#joM{VYv+GPZAMs!|CNFOo=j+>b1U77h$I3c925Yxrm2vH_@_TM}3pP0`TyuvNAihGt1?SP* zvTSq`1|Fy<0xoj(SSLkKp2TL({PzCfJF6G>@3S3e%j);Nec_ea(h5BA7%v3lo43c9 z*78oz8^4?WE*d5>pe}vVQ2E)jnILrVGlE7DzU14j#_tIZVx!t>7tk zHaMs`czLPw!o~Uxr`H@o8AGdL=coHjoNeFVkJtWqefL*yRan-P>v9ppCcZ8C_ZlAj z&Ew3Lm$vzZOPO8VOz7;JZOm#Zfa?YQzg7If;^yT1?|*e3_TT-hiU6x`mhT_O92Khk zU;7((n$j4Bz1QCXeC1hA#b$AMyXdSL-|g@~IA9tei5Zg5Z}+-*Y5_`N<~G3%$eZ)i z#TwWzZ|XaHW=<~#fAnh(RXi05;%OgBEueP)SYpqbA@lSZrWXRnj5*^?zCVi3f7_IL zHPekGFksN1?h0CUT<1@?d&`ZVxXy@{%Vx0(Xq#n>+<*WI(-L_%`->G7)IxHL<2myb z$155;WUHOsFCVXa7c7E<7=m=bmVqHkFWX8AU{Zj50T~+#ZyRdzKRAU9n{zWGp};(a zHGhvTW$mkGGGjy%ecWH^h7hNDv^Owb)&HDuIH1n8q6(KLjuKS!r_pTr9-*T^SIvOt zOv|AV1o?sbt;@asR`)kfTh37PP3-rfVz$@Rbkq0m1x=VNN;DJzn$X~|fEL-0wq+VpE`sSY8UvN5v(gRRMf=#r_;qqr5pZOrg1R8Hfej9aG~j zyGY_tM@3?=l!Ib|%KTD`=7cobKEF389}lKm1P);FD<07GlzxeC!s7oUKtL#7sCU+U zH5hD1F&}AK8V;J7?MLLExCo0rEi|meQA#TwSe4&`Be=L8mc_GIs~^tz+$4>b2hA~a zzi3q|;uFg9LyP33TvwNt^^_kqg^Hn>uKm>dvz<|(A7VVf7bYsz3v!T%`ny}fETX)` zv^406i;z_x{Jjt0;Tj+N7zjIYH?xE^9e#QsT(zh~Oxb`IHe@r=lsOCN`02dvjrAoS z^MlmoJJgzU7qKdDECz~v`3iX624OiqQ2*~c1*54VS(kau#iTi-Gldze7ZbC!G5w=g zQqi3sTlCYl`EFpEX`rCEGSp}!S$e6aQ!7a+^4olCJnOPL409Bj6H6WgOCeOXu1i$W zQTvhs+WOye)`P$BHvzQL8Ob2VZl$PFS#Yr^96#sR3YK|-v-v_y#(rgwoTthZXI{Gn zt*^jI=fbUfl}QnZ>-zjrV?>XSpPDyI&EvHqCzX;peA-MSg~Ldj6uf>JZLspGr6%9t zY{P}UZ13!`vX?#OJh^^iFY`e_lX&^=VM>8K8bHHZfVJ3duO z+<9SGa%vmiuwTK-hS+YE5LUYt%FLK}rAp~LI3Ue{gIV}dAd+z0>EzuKhMp-$Vd$;L zHXX*bxq(*~6<1+E!e9@U?0DHqTFmRln8}}AeCdw!aOK`S{Jj^p#jN+5hPNW8k#Ww= z1Cc2UNSvWoG9~gZsCZgq+;jK5-qminDB??1F1~;SDd^12WH37E+bB$&5(iD;-GK|-Z#uXO`o9=>gY%ZL0fN%^n^%rAV(tVn z*^xm@2*V3CLfa0SCk@Kc%XjvSkheFXm#?)xvevrjW7DEp(4~nnq829%=Us~AZ@LwZ zSPfIbMjJLHr#X09!;kN_M11%@i%!qk5Le8bPOxjg@kGCX|NEZ=3Br$5`=&dLzYB=| z&E1@WjiseN;GZU86#gfh^Sf(zQE558H6JyV7ldQvl-pxm#rX4aPEVM|)o-Yo0@O@w@i5&&# z(F5eCU5~ngcF3k@0Jp!a0x2x-*g+f;;m-D(^}Y|j*;xEWD4zR$sglfc-ZqYYDj#Lj zce=KNm;VFvoO>HOJ+)j8X_#@q9}cNfGIGw zu>v>$TO*B-E*(U}p^gMHXhNzHqAppkM<>GLkp{SLm zL`#M3*R;5coy{7Di?nc_9~EgLI5D;Q=EEIhWGzZCFP2y+p*4TX^zUs=nXDF)QMQ(1 zS-=T~yYDOV@2^mxJQTOOIC?@n*xA&Dc@=d$Q#t13vGEx|6x7dC(>9e4JH;NpR7EcQT z!;DuX)?8Kk;%?vj*<+N=;&nHKVY~fSA=A6`^Iic8&KW7w3So6mq@aBMS_U$C3jDEJZw?9falH<1J@y%c%MFO!i3ad9P_7S35T7X1+d?bwPW{DG`CdK* z_Zebe_C@PgYh3V9lUkEf@{P7H%pU0|Kuf_^O`@-w#`oi+n+(4@qc!t}5ELpZ+z8P+ zXR^3hRW6^V+5PuiIX2CW%WvHnlexQ-REWw@WQ=mWbwk$nv;{0}z+;Y#@lna$bDq#( zI40W9O%U#`lyPfwI~ySKSdlZ%*^y-kXr#eg zLUDgee)EBb3f4S08rR&pGU@VcJrNSpt7$(T0ssKUBA?M17N(D7V;|(_F~ZI{1l?** zu%swEr`Y1bHuxGV5aVmKxn)eR2E}e$CSQ(#CE;yWcr-K_EOU2UbyO5~q{KJ!6*kUq z6RLVv0hox6>GRPj=tfuV2xI7GNT9LqwLU>byxF7vEp{Um~UO8JeVVg z))u~{3t!eOGw*uD(z#sRqaewM;-nEdM|tp8?=gA)>I0z0+O^a4tzI&?Yb^cUdAHzJx--Vljn9>gt>*I{~SL<_j)G zP2-6!SAAIi=-2J|2{#mtg=o@?C&H9lSgQah8Y@;NtfwdbCpd6TDR)Q_XK8)vF$qXG z`T0J_ylM{EN;k~S$jEGKdIeD*ds|^nZy#hD%Avi;l6SEt*~z!LY=x_8y$kML#kRSt zR+$H(EP6xEe6O#eCv}Hi@`9sf#;p~8i8XLqFVdxGlr4unt4*f6a;W*7b!NSjDgbY0qPgEO z;EA)~Xn<>)6XU_fe>P;XL#G)I;d~PANe<)DX$;N|TgZ*nSjW&t@ytW2LfdTl#lawF zFY>Gyd(w4*w*E5)O_pQRD-<)tt*_fDE zy8T0DAyMW3YSb&)Nh^Fey$WeHR~1%&ipq-@ayd~O#u46pBa5|_B(8_FO1BXG}Pf*q{y2Hl*kNJ)=F7Ye-h~vA4X{Va`@-+YWky*=NTVhdZW&m5B>pi$l(gCKLM3YB z78I)y1w+HP-kZ^vsOqVZ_?78kdzQ37Ojms@qN=Ffh;=#fpz|$p0RYHZlkp+)s zQ^+O(XH>VK(0Tp^9qVXs{0}+>Eb-N|FgHu$; z0{SF#I1{NLC`BZk;h+OYd5tz;>8)C%BB`^wp*Zj!lRb9~InwYT<1)ig4F{y;&>Y$z7L3^9B2<~$<35xSvT!WCe*6+=*={#;+20~%ui~rM zygFT^gJnJFppyrk+U>ULHd>JG4(V)>pEb+PN>{h?vtLlEsp{yE&kAZDYq{qtr=BfY z=)P>788^kswG{5vW%?3pan2BP?}N~r6m_~zE_Li-Ke@>_7g-Cu8 zFp$l4_V;f&zVIy1161v3<=z$;OX6pwVpS5$hIT!U6sAuZGW9YE&3ONcAzp%cK1)mP zTrjF<7Du%_$ttJre)d}5baU;c&zQc;l4C@=Z#%tENuETVdstO#bBSG5G|=Z_IP*`o zZVy$X?^QI!8H!lYNUhp>yKr@-f;+sLah;koY=Oz*+F1|!AbPp+;OLH11mJFpW>op> zxwGJC!P=~$vf`BUpl{2 z75%5IF*}*ws_1?lUhz#l$PbA&5<*{w1}2D;E|)1V2XPg#w)lTa>VyU6<<38QaHpae zN|FX6?!Me|VNI2?&wyg!edst>Vt`Bg~dryd5t7PgG$pILxJ`~ZZU*LZYV$@ zbO6VZC`rg^y>+r2Z7B3E(lF${)K7{RvbL~h_1)19;!;+yPXPq?Jtc)jBK8ThG-Qpn zOV}{-u!OWAi>6yW5t-5bBlrilgiyp*2@ZKgB^?p%!<6YEpA)Off)n|zc~@};Kh|N1 zxY+^-`X>nb?3hAp*I@;i*#dz2rEwWXCQLd6(L3YpEo+_fY02DX~ zE}qd_dZV~8OHwhS*sC5pTjRZ4d2w*K>HhM^?%*O;kWd&wRX2Rl-NimA>-BulI3rgA zKJjk|LSr-YF+Y}4@dFSBzF${-kgYjh@C$YP0Js7d-xzZ7XxSYm8F@AXzfEe5?Gn%W zJ~L_L2Yy=~QU3f>&*AsVWA;??ADH(S}8~mzc+KIK_&XOoWr5%6+ zQL0jbfwcX&-2paV^PpJ}RPjH@y|9>-Q^4qS{8B-C<9j4526W6L9#qod5LY5_>qEg(#_|W!?DFd1Ktd#2$eErRnMonP02aZTwg? zGY;G_T_S5=H)dufd8Sexwe2Fe{q~gn7uW+@ax1iAbyi^F>Zkdt=DVY}?kYg4C);e( z75mbw>^d=}=+?~Tr>%@vd(e}dryBlS{LD{@I5^mB7@@v|7oCL#B}Y@q@kTZC&vfoR zwD(bs$pswCO~o^Vkmd{9)w$C%4r*HxhQ!N2yv1VW)s(DR?X=suPJT%Vl9*5_XJzw?OQGSLnLBk$!y_4(h0KK}uHsM^5s|Bo z=S|GfE*J@)A{TtoqI&jx%{Aol3kx{r^*|ExtBPYDxZ|^IG+R)+eI;>2k9OU6qaW41 zmBQD^d8Wa~tM>Jf>ll1+@m$gG-9_()F}8fH;)CUN1w`Us($N8C!<`>1R+A}y$mrO#g`Cv)lptg_x5%F8=VR(PrR~y*Q4)Z{yTC;XB%_gt?`p`g1lF_%ntlfe(3#*hEk|PSw zEI5-Q9#BSV4n|Wzv6PBhL7_~>Dnz6uR{%C9Y`IU(*c)~`);&}>*#iWFY*5(CeO$cdy`Vw5 z!XtlN2)#Y35ewwqiKagx7EPH>Ld4hXh(ZX-o4Od3CSAOC;f(w&%RZwR+iRXqUxCtg zBdQ}Wgx8>KOc>{p$K!bYw;Ck z<+3&n3%o0$Kv=q|9S;ZC(B$}I(HFldxc$Beju6=Ek%uxsnU;@gOm$s*$((I+3>QcM z$_^R`-l;`Fx}A_hAl$;L16u^6T5%At@+5uvhZUpmw?xNXteNIW_z}d<2!iavC>%!5 z;KfHlWD^jI-h= z_&;Q3Wv^3Mj1=ddnI~jgcMohDXN_epj(85uV15(vOjzOIN%MY~5ZgeEJ7bUAUw&sH zCuwoa9?DYw7;%->$9DIe9y$^Mmb!~qE(#|wgMK!otM}E0u{z036&vOYLIy+z<)2?D zCa69E5Xi=VCa?-I1cgY08w1SB|4hi41kQ_?EL8pl(rxLh;ki)T2 zDIoE?*KfZvMF+e8yj+0;XW|@5Nb7wQf0S!2qOYuq}^~rS{bN=G;GV^nzIY}@wn(g2ge1D=i+L&6KQ(SajajiljSOJt!`hEEqrKt%2qk)A+F0JgTfq z7Z@E?lzB0!X8U;GTY{){E-AwF02f*Zw@b;3oyYIX-P@j6&h_JJgjs#fh8VG@K*4yQ zNjH+#u`a*B*UO4&M9gm-$d~!Wm-+GZtn-V}M85ulsN9rj^Cs(3UDxT( z>yrDNZ?2B<#M`&ybyNdVV_wodw`#C;MAb25a>8kFZVw6nL}3I>H$yJ=y*y9yUv)9m zaU2O09qgV-ES;c!=-X4C-P>*`he2HD*g^ejymQntb%GxB21`TThSILGXhf!FDt)wWyk$cS$08HV z(t|5!MqZvS2-?oLPQ`2L14E8CVqG0TnTn>@wiI`r@oM%#@i(`HY#D@wPrj zh*e$ftJ&*T@=q5q-32P8G4=DJx>*sPq>sCvm9S#x4__+;>>$nd?ekA5-j*zS`}HexFtDZW`}L6wp}ijS+-Y`JRC{kBnJmbycBs(+NCLa3T+Tf=5ULUK z6}9{9Jm43?k@vb={774!279Ucbt#g#d-0)m-zSoy{Yi!CT13q?Q&Ns?X4i{OEtd zhx*ZjkbckM^x{wgT!ow}eUF`l|4>e4FueOR(Vzm9oDOMeAIwX=%15|S-o08|5RG8A zlN9HRsNE7B=Wg#h7W0EElAMH?9acU(@Ym}nmf&Lb4vvoH6{*XNe_#c9wtF~(V>Ov1 zXOuh%c$@}3n^U*-g=a=XUa>vioSJtX6y-R%sO1xx75gtysk(FoMI{$hL_KZXHcLRs zJ{Ar3J*f7xiQ1E{$N<;FXFPT*F_uSJC3~}QWP8h&0d-aK2Nwn1LfuNGT= z*;kR?Xx&%>6GZQo?~YR|0)q_y!>n=edqFqpu;U8y*Y!dFf6rZ7CLyM|0NX~FfXz`d7X1r)& zZ!OQT&*L7qejM<2#ZRIFH@5q(^V}XTZyd5ML|B9nPEZ}xoJmfDK)(jEhEm94%haHdVT?YNArPj(8tn6((+Jp`ed?K>H)PyZAt;fL4o7E3ay4a7beT5M za?Uw|I^v{RPctswIL3zzCX=;j4C~JCLCn-+;)f2|Ve8c-2sQ8a?*8E=?Q~^E`UjSE zMh69Y4MvEi#z#|Z9D=Q6YPT-LoPln9h=`sgCnX1a(mv*6he`VW?cB3_20j<&g{Ndk zAR+VI8Ba+#F8D>~R6CkrBh(yaT`(~TQpA3fkPkeFetC-JsuNpH8o31bH<$kKMT{%+BMfC+1RkD)8BrBmU z9S>|0P?cSliC*D6DI27ZgvvQg=6qF(mW6`-hOn>NaV7{vW07GY(I9&(1}R&3V-@18 zYA>8_a{X_xA|M#Q7%@Ll$dBLaJ#!^25Qp zZCE|rad~Df`wn>bMJNoCi1*U83P{oT`8b4#RCuoILhouqNQX$gf>l1b?Y#@I)!ZL9 z7{J%`u>7-~VwYX<==%MY#GC|z8L=`$CXsxMT99{wW;J68^Ez48c>XTd7OwQY)?cAN zS$K$tZi3@LuBXNR7Q-Moah6O;STEC;PHUiEzE&H)Ls2~xPozOHkCQ6Q;}11vd8mcH zBgPn%=#}V5PkQuOiUnP|bziRePr3-x$#b?bH=tA;C37cy`WQ!!M>Jo#9(K}DUnJXM zc6p}xsXpJL^nW{5h%-NNx3m)dJ+8>#sd*OoP_xpm*_d0NT6+riF#OwC!yWK(-zmUN zElJr!Y+s;#%P2p;FaGPS4z}*_(Y0^STl3)06QgqHrz==!>DBhQ_8uAlnU#K0Rx(Ig zjS%8~|8KgG%K-)^cfiS20jz+@|AUh&?ci!{Y2~Kq)ZAA&G)u&d26-p zrqkt{IUxS&7#5xf@X@`?bT0HfzzLJBYh7W_`)#XXDm*qAFlBk4!;v0j*7J>vM&AiT-pLU8lo5DHKCiTT$-7ZjJ*L@O`SN zy7q=mKzzO6tbnDE;s_FfjL$F}Si9OTA^lMg>lQI0m;%(7uYY{Z03mNGnbvmC@CZ09 zl$+37Yu|NgA=c@waQOZ`hn8x_p}x;8E}Pc@Se)x^I;@CYYuONtSAB2k22@uEHqa{ic2WkFG@DxHu2+VH5O=mH z&`0KE+qga5PP8=@_v=C^S*G;@E{dNyyUd`*3Jc^=1jlrJmrCHY-8QPF?=rv12~-;YoI$S5~wP5Q_V@1yYL zBBc-s1`xS`ex_urYstIHm+8_zY~Bpe^Ce>|wMz9#&#@um6AbkGKmB-4tYCm7fcrW= zeneF?mc>hwiVQO}CJAj{@3&+v$cr1@F+V;JJ8N4OHn#*7ez6IF;WpN0z~DwBEdf6f zAH}1U3Ta28RyWq7tS%T%(Gu|f!_|*z@%q`<|B+eXSC?oOJ4K)Ig2T7M_vm!92|Om9 z86tT;OaOhar$Yq^hgX|EPg`V#7FNU7&%5S^Ly!$M>_9AZ_~^^JhvT+a`E6)bqGGFN zl{t(#GPs6qcH5fhS=%ab!;D0N^kxCpAo%cTDlYw}AHvCV^WVoZ5AA2eLP#~p3lG%=UGQ)cE+xgyJw z5MZj1F0@&%2hk3|he{SDvQq3m2x*zg&kqC-RsY)9F&vgq%TBfiPxo7|^)upC^UdCO zzx1(lP|)I(1?Bjdnp5*J<%Oo;wUsn?Gqsx-;Cy1(gvZ&@MqgvSIDKE9Z8zj3(U?4j zcx$mjcEN=;kC`IaUV{4*f6TG{AVr@d-P2C7(kLQ@0WH|~RMRUW2gd1W*^_`HxV^hI zSXLA+dLYe5R5`w9gu&t7FRD(q(xu=>;!HwctXA@^lDz=cDtDq$5wpCB{%2Hc$Y?s$*9D}X)(s$FaqXF` zyn&T!91iLPxyX~r95|Jeu}MJ^VZ76gqWT3JcCFHR^A%~QZ_YLC3hR{dLVxGzr!1nV z*jA4ne}BV5y)^F4nwAIW!d^gl`a(oK0#*FvIJL2;E@H8*xsMst_!U7jzwk+ZPkF30 z;<`pPhjpsuf6qF7v=`)S|D_cNXm$R{m_*p#`9DoMM>S;u8_P(251MwYb4h^w;eHSIs#9m@4Q3x z5j_qWj8Q1)%7O~GkztylE5nA=$6DBOis{}Y%H0Ul+X9fD4oFa$Lyzrv%)>12pRWV7 z0tD08;$K90XxjG8hp=+ctYMUYFoNe$z(6Gun6ug{S>RNhIvM4$ibbJN5bczCN@ONe>`KE7na9{q$Hq&Lf55V_$5sHj zdYBuTefV2#X9$75tn6*T?~Fv1ZON(o1#6CC7{^QCbM?>`EFcuv3@eMDn4`o{JrqdV zmJBDEfT+n~-m#9zoLFp4gbJ(1*$*W9OE-C5;`8J!oNk$Ze>FrE0Yg$tFlUA8_FA2d`op; z$IfZaGaXTC2hG>(sNtaZ$rl0ra^Qj60$2!&^9kQR`<}vtKsv?z$CFF)f_5Ob+fk?x zoy~(9Ak;p3{SG~?xi9)K<9X{02%Pz&^gL{?9cA>fMoba$T$eSQs zb4BlnehMlWgwfW_C3?mtZ0lH%U(XQh=GDqx=)5kEzJp-#pEk_~lJ~0v(+Mo#lEqH! zcxy2BQx{VjI)Qd=hx4Li$^LSA7K^5ml)M!5N{J9+P|acZ!lZa#@+3DSV#xRv{-39# zrFcJn$40tG@RHD?J?~3)uXJ-vQ>z!`a%pWgoLEoo3!PM{)evsuW>F+dD=oV~KW-nn zkKAT7Y>|MfY~aW&DYlct*5aL+XuxV{6p%LCLQyo2@aoVAk~>Xwe5f=1?w z><8}nW}xX-HFnKhZVpV=6KN$4SVQ?mpUJio3i-htNIg$YzE$VS;+ICmbm=BIlFYiW zy!)q>3A2HkgyC>MeGGHs-NFt7UO`;vQc;^|4e&wsR-LS{qodjQVEG+Kb*Hf*0A^k0cvloIn(z^3&Uj%_49f4$FL9r^Zi-fWu; z|Me|uKgYCr!r5x60oixiP9QaIi49XwPtG!~SMN6ruJMmq=Q8R?i`X88>@~GIKkzTi z{T+ML-i3EW|J=TN-;xQ1mL2d<$d_)JE_O1Q^$+k>20fNMaGgUvePa0KY$eSvaJG93 zSFoZo#q@K$A)X7NrLK>e!(4I2(f@3)zbg)k3j{wuvFpZp6?>nu06CvZyY zRU*%Dpp{W(Br`nt#1;FJC7zYY$``ZN&yqzZlPe+ z1{n`vdv*;l{OsWh^nQE(tnx%>>W<;Q$PCxhvJ_k6nJGf8CxJig=w`>GRwB4pND*to zp)X@Paec}Tk!5?AUQ#J#O&eW(CD)PV?z3g3wmVG^bx6vijVvcp>{oqmc4fCzIboFB zT&vu&dqoS81OQGFz*kh( zZ_%OpOXrZ;#OdjjB))j#ix&Sd@J;qFQW#C!Kzv7nk*-%VvVUBUr-ZAFa3zZlnIK9b z>e5pr$$VCD(Lxbz_Mxoh`h@;I28Y-4n-;nu+IQCk_urhb{V^*^#42x(Z1PClB5MLI z_#FCs*AmkJ24n_)6!L4Obv@YA1Hrk35$-9c&w~dvnH78ZCB*`oqV+fEDzHRS<;*8DcjLYYvSpnw#FW}u791&_0vb11iyxmC*v1g1A9!4W-MrVsZ=IiChr;Wx(TGN^CdBQy z9F+=ehHXHy37SO`psos&v8L}cr&gHQ z*i1ZP_EY0IbgErSW34j!eh2h0B_YIFqVE@U`!%~=+Nr{Ww9sF&E3&{TP?7i~tf^}C zsPb5+(|007h)UYX$JN_@{W&_hdAOPBs&;9`ZfP`uKyj!&Q?_OfM(@D(FZzh5agRfz zs`>*TD%6YzpT4l>>aQ>ee$`7vHG6zTj(&jAV{1r{Y2knApI$BQ|7lREUVOCeVP0bV z;6Z#jAEL79x}kYLqeKBw+Uz%Y3ZlzwXtsa017PDk_e|I%Btdsl$VEA-WoerD- zqgyy+Fm(sY%rq+wzZnj0>v`JhMn6CUV|Jxi8LROMgZze%Vu8WufmCBFZh~K(JL3a` zfmw>1PG8UY*Tz;Sh z!po9&#-cT1tpP$1q_6^Hl^@M=l8q~TVudk$)v>5*W+U1{Xz;9_$fTq{Yb)q9fVZx- zoIg~G`Zr<*1_Ve3)lLU@^4ZngG+x*>w2M-pTlcKjO?dXJi$?BS2v@0+LSQBzYOxNs zn7LTz(sluM3fomXi9PO>yy^@1@&!I65-W6othQP^8PHKO6=~Nil|55MS9-AG4%XD) z8Dl%CI7?4v42ARo%=xm!8?riMcaW(jyoTaiMjd8b?;7&ckS3p-0 zISPOjsy|@E;hL9-N(N7p!B%5e^iZeg)w+(=40K;#Ql7K(J#u zTp@w7#FCYL9n)nJOmXkBbq2bbfcvJE+_&V2{b#4K-hQz0; z>5XEx;mpYO$_{R_oUI2U=pV6;ly4CS@p`A$_A*30Q9t`FtXuHU^0;soEke+A zLQUbC1Wd%H1QIeEi{EM594$E70$WOZL0)Ctmb-LSu+cIMDXBhBT|WLK`q!?dz;d?- z{_)03Z@Xb5P1~BD5~V4=6_}nCQCUd+2$+3ja0JTU?ac%Pd;0F{IST!_JS3$(f*j9* z@Hr3)5&IW}4Ht(U@wuKfvoyKcxNS8rX0E+oeTzV^%iu4Qm#_nr?m)Vlh8C_+89m0X ziBR;^=MmFVyWzSCD|@f3!Sq}O^9@70lXq=>KXiQ+cN8Xmb+LHBd@kRG!{?Xez4`|` zm=b@ubGe26G&v@pTCq@dl15bmInCzkFmO5)sKJoFr!<|8m!!r7W9gY|kH5cqx_NSb2`0{sdz-D(ToysLqcw|} zWe&aR(i1^x)UTYCfK4Tn+dHfvxdhL8AaXe01FOW4DRAe;qMG05!l6|@?U;cQKp*_n zDd7!XPvZM@6Ms6ik{FWhsS5n}b)S-pkftB*x_A;zTR+|8BA7u6+S;nH;Un2jlZ6MR znB9OzLvW7Uz+<7`t@4aj(f3(!6?g;Plu}yo1Qlgqqt!d)&c=^W3B=KIPf_ zOMWDeC*TNKMfIeOsX#l!Txtr(nE^5W{!yMSoD$-cq9hAls$eap)>1@LxQnD3D?Oac zY*mDd!beO`_-o?pl~|7e1FNAbO|BJohVVIaI+RBT zAz6dbF!{b2E=eQ4NE$zNdo6pSXrfLe%eG4+{sNF?^}4^dQSM+81llr$MM@Lz zVBY{6gK0AP%}k9z`s4_8L$=0bS5kH`HRpyrwIkbecDYA2`)-@9C1GBnCSF7l_53_~ z<5;?ejXp~tW+$b`*Ic?U-rn@i*>~ZxeY;v&^0fOlMw+$ z(k=P1wJ6Rgo8Jz64+@MA^o?E{A#wXa3Nd-*DB%`$wV8FrYcq7ScID=zTACfyEC@O}8T{tjar*TpHD()s=Zex5>MY!rVgF>0 z33|xSr8_$rB|9hQzAlH8<+!2%YNeUdx*cGMVKU?e^nb3^% zN5<~+!>Z}<+a3ikpRZKWApN#wg3XP(o=GC^G^sL zuiAC^v^;c?Mt#_SSQP$|A4+XsQN_y8QyC1j?B{6?)jw4ydWepmh7Tq8Y6@*&8~n)% z^E^5_ck~I=?pPRNuST_#_aQ&pn`+gGP;>JmS?us>R2s&F<=RU-9QB!MqooR?M|h(# zdBtU;#nn1m!+KW$2*`t}DVAWUC0K;@yeSW(7vgON{^3`R4?17dsT1q^E2-I*E%PzC z&t*RRL`y?KAb@cczrY3c(UUtI+~xcV39z}upLV=W*Hx(n(?hNTCgYyn?>Pkliswzh z4x9d0It^e8On-@_Mhdi?h6tn#Wy) zQ|XMK&sq~w746m4|0!95k?gOxDce&r&%}4Nwmv`kG3(~SDp;VmFE^)PnfkEy`EbyE z@#iY2BGN?Az0*0Ik>=3eNQ^>B^*E@xk3$kXua67Apu37hlz}clEV~4wnxqnwoig(#F0qUi0*nj30tz+(BChzEA?dJHOiYCi6 zlpT)%4prxxGwSJ3=&&7(6{;QEC1uu$=<=FryXv00#FW@kFCqAw2=qNyf&ERW%}7F5 z`kx|=;|2ZLfvm@={mo>yZizTfV8>y$nSaoN16a%9Ca5#P4s`%)J=nA2-;LNF6B}E; z%CG`b=&oEDE!cp)p2-<$-J{a%aks<)t?j8c2@WWi*m3dh`Nvh|DPBQ)C$V@t7(# z*Z+5~hppq_@5M7bq`zS26MfpT6^g|{vUOA!M@%FD^F+`kZ5964Hme5evT)<~EeB4> zta2)By5LLT@*#D#XS_sx;H&`;0>rAnQNPL;s5<+L!?2rFU-#!O>A5L16pr}JDBOfZ zX!3pf*S7qQlzK$TxJ#;%RAB*?OArafd8GwiWGa;#Vc^$d&MdYfZ*p#dgWc;uE1J_F z#>u(#P_rHOIrDSh_T|Q$2Uxc1xqBK*-R|q@Z`zo@W>zZ0+ER!@2H5?3#A2H;BRb%L! zarxXX*6BiD!t>UP|E^^|mJzLan_XR$>Tp1!qy+Dl1T}0&s+9ZQ4D-RM)^cQuO-jPA z?}Sfv2(OT7ep3(4TzM?l@R3=k9*LW+8?i)djP!;;acf&${QWy5`0ci8fG-7W7D*qe zx)X-)2eao$`x9Cq*`;;;Ll~1e3zL&MdPiPvVNa}ORcG5S@)$A1#ijvvZw!Jr+mj`d z`%q*EL#y%?V>QHVWRmbldCiJ0CQqSJk^Uh_rA!jDdB`k5MuBuu^VyiO+iK1H`Blw! z+n4YqVJ8xcG20}luoNh>LRaItobhmqLen&PyaKqF74%Q;U6d_|^mtom)?bQ;Up0h! za`lcOgMTg9eha=2db!97mJI%NV1Z(A+~Q@vf%%C-+KH_S?1w*=(W1-*Rc{cataBIf zTe2i)F?PrKN00EE8Pi1pydk&?$D`!&I?L~d&&71Y$6sHx6WKad2}<4ggpQV8>5FAg z4;swxo5v)=)fr83`7dgt)nR-o_&y2^PL)i>Bh~9sDtmJ-bz+$4Tj&?NG6hB0I%B|3 z(hVbDYier^m1zwe2VlJKlm3pO_pW?*K6AJ%d<`Qd{)B zKBP)Q!ff*hrt&>YLwN0}AL8CT7d;%-{1uwT7nbFn^xBVZM#k_19_^y?#4evt81cTiT_%XDZi_lUIUTqAJNDZR z$g227oPljM@7mWZI|6@K(mFW``cUtEOQq}7kTV+|q@7k(;_?8@=rM{cl7K&@7EG1VAfR5rC8YCz=bu9wK0T z;bLw6pK31r0o3B<|DqPdsi;w^J0)#FrtK9k34zk9l}14dt#0Ly$gcHRFxr*@f~r>^^|N0QlPnj<$lg0qGLy(Nu-$sL<&)kyEs8 z{`zGJ>eb*jcc@06kt+=zDVW;oosWg)opR*d@?N*ZzA*$1oK?M+%?JxCcShtDv81Ha zrPOWqgO)o?hNxtNe!S;xXY^+F@!0RG$R?rP2;(j@I2X6Z`-<+&Y204eFsff!!BQ&v zPxddW7&6*LC1`#A{dwvxA%7(CIX-d5${-%Dt-5H%%ogzE?^+cyc>$&ls;o4ooY@1V zn$^9LZ!&ZJOR6a_RtP9FnrMt{3h0Ag@hsfT8oTiJXbD8*g=*GU@lA&;2*V^jjw0nx zLx7w81N(E-Nt;d)SsK%3JqGkc_Li2*q^xGhJqK~hVXC^2 z+RwWpUvbj;{j4$u`AJ~inaZAs9qSO*%rOY^Us4gK_0^wdbX{HKJLJvb8lDggUCbj6 zSH2dNbC>=RMF*QEx*(1mtwmswZAF6WRG$oQY7nL8y>8Un`4qwy>_fBiZh z^4^1N`#6S~aG!l@DU**yc`t}59`v`&ox+;R`T;FH)jO@ydb*>jW33!p?o{r+u*Cb|@rD#W+9zaMM- z6WQyNCSZuHC)w`!cgtAofjuM7E$77JPhUfV4%92}4W?>bHBN|U;~{eG%xyjM#BG4O zos!bFox&;}Tfco*Gk(qb^}D9n6{`z~y~RtSJX1Hm_J-4I`-hcL2P|=Pp$1d#8%AVK zcFKt0))7I;{=b^9|NrFje=;AD0GQ*LySR$FIJ&x;oBeMv%r&4rc1i%Q?JodDhUGs| zWBm6&AnxMg=ptwCVQwdE>SpcnU-sMp2CcE1xuy62q|mTeng5r>vhTgYD^donHJq1T zADafJ@@8q*NF?C_C5Jm;v1PeB`|tkCQF$D^U(@N!>HFzSzgxTN)rZ_5_D3Uw$Sq&U zP2L%pnrJiB3)+M#spnaSLnG3CP(ik8Cuu#NUs<^`57JCQtP39_>033GGjp+H6sz{G zFJeSDf6o}jLJ`O>xCpA|A_@n07c>FkbLHvXwL^x$j=o+4|NUBs>KkV5JfjLyH3kX~ z^Mb~ZJXsBjBSDpU2=U6PfcbQo?oldag9p95Z;FRewDmr0n9gjxh((jCl3=5}}LK|TV6d9w`p znmk4T?d@jO3;$TynjcEPm&Q&4*r^U}#Y75uPtj3Sq@KL`txiZ|92CfyMXM}{n_QXT zsceO@0p$-=em)#{^kNR1Kdj*F1?X-gh3IqvrX!LQbYwjP14{hu>0m!!i`?%&P2I7_ zIdNHy*)|rvkjj9RC_oHZ z{NIbA|21;{V-SFP%B;dQ6H@p~K#X={5KI}O5O_F@n{Y-?A>Ag|+z3JaakO29dbpP- zg#u2ro!#s__kLVU*R_7bicgsl_^$+%))VBD8~2$3db7y;sbGHH=&bK86Y^2h&$6x% z%mnyBP+eIbCOd%|pFT&_xAN-W9`yl7S|eM7zDzp>B-$Cmkq~^?aME_7(@o1+TzaCv zlx1&(yy*M`3p^9QpA$>ejAs-qxvs$A%kZiQSU8+YZ^%eLq9d)8;327@xMVAC7ZWFi0R7_0T$ThTz= zls<&z#Sd}o)oA3bFUd7dEuW_Bsk>!+opSQjO|t&oZ}{^i^~u^;)ez={cH+1rgmXp| z4mtrL+-|7FZ2$;4{^zMS)u_V+WE}B;-l_Hfy|@syGInqIz23gnHCvwHK}%_yM(_rY3^!mcic$q6)(6M=5(yv&0=a zUroi83IoxvMH1M*s@1dICM-y9)pj;^2_%&pD!+&gO`|@oKJ!$@qX=W- z;x78Qr6WgQzI?x-VlI7t@yE;%D{B%!w{6IQ;p%nPUWz%jUnyZJ73@;r$QVObv!DbG zK&w z$vRc+Ln*w;95u-s(t>)j8=xr+%UkEqblvSHN?kLR52}s-0a7mRGh`Q;Q1S4Z=nXf` ze$r_Y->5&ZkG;00D&cK2Q>kmQyt=^`T+D( zi_h3urF*WMBJy$s)+5JbR|D*tk}8|uF(R3ySPY3V(V~W1Qy&%0n0R)T&B;?9w8e~I zCitC?dQmHcLBD}?tdBS-%4f9RQ=11+SW6+LWl^c;t{@l~GW`nhi0Q{lr|8pyf-$;$ zm%Cn{hfD|TlDXIY)^<#Sg+=s2=j%b8pDz121WU%xB{JV|i7^bTP&4w`^EawS&6!Ix zW4hrMLt6BjSqqkdU+@_N0U{LebH4PbvnfBYZaFqh?tZb7Ti@r*cqpiC`IE*PE4in5 zHQ3|saJ%x}9$$c24%d0r!O%_%=ECGWCgS&HjPf@vL?f;rIH&!Mmk}w=xFF-*30s81 z8TpCov&`|->2u{3nfewz-Lc#UJ;v$m760ol#cV#77stMY+^(oE<2Qa>#4l!-si%Y~ zrIYWjK-)Bf;*5W%?}4oVo38^-?GD~Qn|P=gdzk;nSPtxK#ci$+-)|ViCR^V0XE#Fy zoX}%+EXpw@V@~-X8cOFJJ88U41?-OB{rmHYo!(qUIpwiz*&F>Y+j}|v%}m!%6b(KX z=-tqy2^h+9NFNrN&|;WUVPL%_)bW=nYafhW(qlk$hmc=LpYqyBMWo$&5?o~$v*%5g zdx%`op-qy{@Q>8yF&iX_rYFlc$>P&WM7a=D34SRqMmY>rvW-zzJR;h1Otp0+e+usz z<`OG1)>WltCaFZ|7C_IaqB@O|Ghk5)Bc;L`LI1dBvlalA2u<={KB?p)A<$^~-|c}s zWH#;^FrHtps*;Bi-Q1DLM1OAC12;RKQ-5d!ebStOZ_Pox1@mhskwcmFPGd+m z*axO`6cYkLi0?;mVi39CekOzT<{4yC4OHOXeMrAjyYP`%E6I|`jo>= z6U7K>f-A(pwni`%cQ_s#5hm$-_H> z{|OwH7}+xYFwKe?vT1W9XW8Jva5+{Vt2(rcWxED^wM<<<|&O4wi{&&}HI++t;BFPfmecgT?akaL%Q)vQXM0 zv+7fsot?e1?I6H%5iURPGX->@Zxt=oNHHGh+XJc0s6YyACGg74m%Bg>Go@`fax;3} z--_R{RHcC2m=cxyYl4mgEC~{wN@xJg50yC&%hm-v?J~eMo{wrx(iS_mt;nT}d83gm z+YbwwTNbvt!ykO5U-I2o;*UP;ms-1Xt57JWh9%`9iiNm7whK-Z)-R$=BM&mYAM@$0 z-z9OzU47{XRJ$OiN!{SJz=e1x0?xPtN%+LJG1Y}CvE^5l11+}hKg&-&Xy3`hrwb$O zVx{A)D`k`yGHY% z$eF7L0&%I>qr;DjOdE)^of8^q@NsnYMPhLMK&=Wd&LX>zdo^*?pI)=C;Nk$-(eL)c z8XBcG!4pi0l1+{rce{iX!cB{U94*f{#X}d+XDbu5G@rLPIVUXBd)<4Ri zS!L8LlZenSZc15XI2p7?Wc`mHQE0 zCw9)ob~f?bE$1W2k^1b6MFkZ``APN>M5Q>$@R+gdpH<43Mm~lhv3cMksDx&&Cuse` z9_yxrzCg*)nhwo}!19*shnI|p2UKs2_XkfevQ&^j@qMW}aH0d8dHB{dQ;1x(SjYS#osc=uC}wq?6@oG(W3Hr+hBK&MnE-Z6HDW zk6Ea;3;%XI;*v$7{G{m9nbShQzjgP@wD04R*SC59(}5Wxe6YpqH$Fi(THqPhVzqxq zcJ)W$%(Lmp16|1sRoQo}h(5vFTf4XL16xp~4;ImePievhL^^L^g*7Xh(tt z5tCe3Hnhl5;Gs9kek=-P1JhlF2?6+RABUu_Yj9uhkh8+okt+&gKJVTf+j4OEf=dv4 z%4BoNfX8k{lgL`dUf_Q(74OIN)5!p(;t=4c{trq5d23f!K*vGc%gr3H0_Nx-?qzE3 z^e+b3|I}O%PZItYA};*bE4si?SU0YS3C?mkiBKFYo~N`bCo_N%SLy}@V8k`EC^Y38 zehB!wb7l%hor(;A?7@j&Opx63P9zO@CczEu@jCWe$ooshqvy1Ii|7xfBGM18*~%|@ zYxQc*>N%2Zwc9xH_x$pw8tz`yQ407AQz{Q~snb}xAfDi!huAB3vWpIfL2g?RruzEw z(OF|?aLrfEL_vxw$08!j3~nXd`1 zgmqmqL_8jvf{=}e@^KQxa|XsoF*c(=HWR}A325C@OSt&#xs#5YZGiHkW+u!7>%!?I zG^)r`JJfS_XPD8RzPlf)YK%d>FXz57UKLc9b|52IO8dnU{{A=h3&uzl(+S{ny#gw^ zf5P=sa&a^@cXjBs*|&cVR5_k~7 zUMR47U==9BJom9SyHr83SaM#8-JFg(Qz>Zm-Y~d*Ap-JkJi_p3g`39FaaPgs3-B_A>50^i8bR#bQA(^b z=h`_kxbox95V(t}Cg$Ic2-hYId;`%_2Zh67Y9Dk#iWKse;2rMx!ZS=&>uhOKKT%E( z*m)eiJjEcLsP`GEXn`f=Mx7E&fPLw)MlloraT-cCOJP$<#(S7FM;z{9UveR-09VvJ}Vc`_ukS? zu+0TN6tMh3F*?8WVi==ZUtXA-pNZpv(8uhL75wk_g#0}Bk~W~7#0)4x{>hSb3(8Gm`&)LndS?h|D1!dpO8{o z;I9qeLliG!m9n?sw%M#K*7G>VhU#XSl;2Fj#5({@9s?POKdlAc1)g5?y*e$uyRhd6 zBCV6yLC~)UV81mARHwRF5vH=kKQC1F&#tj7xMf_n3msb{W?dO5o%I|NXl0<~EJ-0H z&1xE_TXb2dI{HH7$&0%(2Rvi`uWl`WpZ$?l#1rbx5Y}cyC~8?ro)B2IU^SNnNA_(T zxm1ei{@_zao5;4Vh^)_lO42Ya%7p;YkF&F8frsivHY_(jEYg6S1)wt5*2Sj(PVI9_v0&gkTw&-A3M z^f1ez-G9yYkjn_`JUHcB(h*4J&YBeHvDh9$R=MiBz6+Vxl&cR&M#kW5_sZp?6r!_3 z*+MD07Rj&;nP&@fW*q;m^OJE%j*fxM!Flty05~K!{IEw#c3)}~L-;gcI=!uB$xe0I z+89J2qH__rdO?9cacKOP=TckT%+I%W<%L&ge|~o*md%^p#x84ZGcWBbhZ;JE zD-N7OaO%brE|IfRp;qot5!`Q*R1f<7Y29oYuX@cFQ5E(22ASr4_RF<|AW_1#KqCm)!aqY(ZSX6|D&eb&qxT zt-?#Tw2!N+>HE)Cv27bOfCO9GzwY}T7>#^7WrycZ4keWc3WP8y@g`RDlIGTJPJzb> zq(HMNLOj=LV4qqQU;#Z7Gfb#5A;#cL_tR2VKn%dV8U_l;pouxu?9v;Plk)m)&gB`{ zzs46G;TmvRx-V^>PTx!xtW=JR&Zr5{6c9y=GO#(&VyM(*MVDa-WjjTfA~FZIUJC?t zc7L7kvR5^8WTUg*Pq2wKanR&jMo8Xc<)F_Me(G4zoOCLi-SS_%f$6%&OH$3VdMD;k z>c#Wq$^DYp*T#j@OigS$IPF00n#>=e2b~p1izPoGftMK4o0ObQuQ-JDHR4fowpjow zBG0y^M=e9TZ-AJOqXZxQo-!FFJ+D}&W2Jputsom~q3uj=QuYI7Obfto;@Yew=eEL{ zdMe}B%4DiLT-W=h-luO|yi2}xZ;>EiQq-l)a-vhRs!;q;2l`h!osEwS(I)f@u?RDE zV}vgHJJOWVco1b)5>gBu5g8n3G*iXy81jN9rS-0O9@@_rKNelH$(we#4wvo>22qlT zHPr%Q%}&&Tl@0@Ij9r8xgUGNUtNWbh{~_(1x@*z4Z5`XTZ5uOoGGp7eZQHhO+sTYI zW7~Fev&t#=VV|dc%K8DLjF-{d=(YCRzUs_G1Lf>888ZtNrtjq7u^ z9Amkq=WAj)jCtU-pebOMBn6#S{_R7|1c3=KKIqmh$H)wT%Z=+3jmT~hbaobv!Date z!JbYp2C`9!2^kUUvL}nnotg#c`O+R0TZiMg>gZgAOc08jrrmuKokmJJT$;abz@6l@ zux&gEz(2haTz?xo_I)=3vOkeeqsb&c0o~6p5i;}MC^F<3`KvDxlN36fh5@cLHcJ6@ zhCI;>+FP19+BokTl#{4MEcksV98W&x9gPb#0k zpHgtn+y1wcq|GZ*Bxvy!6?427N}WSE5i4s8BABFCK zzi|}C!Ii=yvImF0Q}r*xivSR)N|8b-Bx$iPiA+j;Q}3DC@3X9Q=JvzyGrnFV58pa# zj2p4uY@?F8NzqJSMk>Gq-8}enp23QUFRg05w|a21%JlMK6QuOI0jc4h{$L)D2#4kJ z&eu6H2n!1@&c8sNX`?SyOtM*?Dg*}tJ`$aiue-;(9Z&n~9C-Rs3*M(?Ujb#^>8GLk z_3-&Mchq9BRlMfJ*6qyJ-$bilRJ0r&O?z>IDxh634;kV!*axC;^yezB{m`gijcAjb z1WpLz7-o*6`ozn)_)I5H)FSC-q{Y%qe#JvB1A|sP%~Mo*hH*GEKi8V zrCn2zjodayc(m0lMv;N&^UYjsZFu>ag5)!VYdRdo*}E@2bz|jcG$kO~0^l8XpySAI zRZQ>hN`Cdh4kxULtFNv#+n(%R1N&5jHfNwWRb7#G^2^{v94tkIK69D2x^r>uRcZBC zsK4n89Ac-ZbAEP7&~A$AtrC||0?jb(G)i)kpG8R*ayfZG>ORb%t{E$3gB5{{G7B)b zWq|qC<%GksQ96+*VHQs?};1gt-I? zbWW;A0h#VXeW1EH7DYCK07kK*+Cq1Gl~orkU@DY*lLvs?O~^^Sf*ye?uim#HMIQZq zQlEvStTW}43@)o1+HMg&>tD*#7&>Lse$*>8;Ve~Ra*_~a`|@kWc5vd>0rP7mbh3z2 zhO=dpH;jB*XrUf7R5Y$*2YC6y%{aGMRzYuijo^c04N8<3((^3pCT-C+idn1wwa2(V zjVSUQie(VYiPBL``~E343@@yn39xP3>HM_6r*lsDK$*X3#sOj@mTSp(qK@NR-B3=U zS=!^89BWw9k!&~a&d~qh~bL(uu=A$nSFq0dI-4KaIQ@IBz zbsCu+9yzUb++P#eiO%f)wwW$7fJhN6akvCGWkISC`btSbv`# zll?ow%Pb^t_Xol0%7!U7@^y2d%#i+5xcK$byM8Lcu$m)}?1Xg#-x+icxUr%0&G!Cq zwYm9tyt7$2A1J^cgJ3QIl z1w=_VHBdLg(QjU;2hlFC2Op^x+?Z*yte$bdnQ(LEBAH{pWw!%7AW!rkOCsIr9Qj1* z*Pc4Lbw#h0eNH>?{k5&>Md%okvt0@won0n-6MFL@}6o+aPQOm5+p4qq7P ztsH2@SRieN#yKUhWv$#Q5JYbB-W&7*fd6NlRM3FDA4ijo921GOsjzCvXOEx-i$sqDJmX>-O=_*Ak1X3#+z5 zbA;;7*S^l!bPqOl{q=)2AT_03V_(FIk-(Bt@gQSMBD*SQj1am9*)u+r;;Rco_V_)O ze9qEX)&}6PGagt zgSYV7v(AOS2ej^yN++!Wf9cX%zg4y$AZK=PEv2)nNfM5O8t15*zZHXb-xKxcBjt4g zWP$Rht=7li|9Jy^5Av3~`w`Z^er|#PX8G=a@)owH|K;*sw6gp^#dAI@wHzpnG{!lN zp}d^-sZREq@aAZXcoBqfFdAGETILD_l-vS4zKy=~{L93&lL`A(`$9yCqwiNe?^kZO zn(^oYb}m?bl+uni1cyNWU+B`BzbXIX>?S5imPI}7)zS>|VRFAS#O%NqBg0)QrP!09 zYJDu|Ds88NiOlQntWUgk&u^(~KmpcM<*>{+KuePmxJAt)R7of6Fij?32oT22ZAI*_ zZFgdR^L1oLWl`f7PNfI4GRN8dJcuTtA*(rNE8V3*^dOu`kgVyVf^o_j|wNa_{iA6Fo+BN4jsast) zMa*H)xuW$u0yG(rMhEj>i{{pr?61S$k8dZQo*={QrrwXd9-P@od-f`j*)+~h7+j?B z5H`S|dcG;`yzXN1p#?cdS_;6VpVgQS&`KsO4yGu{LDPy|ISu5%R5>o5OrDhkB~~hs z#Fc-^qXVf@qhTPm)5Av#0kj4@nRm+ZX#scqo8M*a*0ha8_WEffGO%gJjW6 z3=8VP-jRw$*jBDmfi|Mz7S6WTAcvJlEDbl@w2UaE0vwVg^F}O?!H-a4G|6(Rr2YkN z=iX@u*Cwy;mYsDPJRIstkfEe04Y9WZkeoo43HENO)^5)uE8I$~Kc`EZ@qTs2T(48k zBLpR$@89{&-mQ%oQkVRtXUFUDyb`K2wO$wT&Cp9&B#jZ}g`;Wy78WLA4j!mNf>+>z zsXX8iS&HDn&wv9Lp24}0!P{(bt(5l#DXWaB zn_orQ8WYcsdp`mzOhum7K#^2}b~5kfuyXW905U3olHJ;8RkO6Vglb~gZV*7O%0-=; z^mW2GGJsn2G~d>-YU;ap@NvKHlCR@pHuxZdsPkY2T(H{yvrI?o=CK=zT^i*y>JsE3 z8)FgaWSfb^tq=kX$&x>SW>{->6BeDR`~G>-+>}G#USx9gq%oZ7^6;o+De4nVS(sB1 z`fXX?SrUgx8+qQ!?}ZB zmgp5B;YW#mB?|7geKtV~PCX;M}=c*M#Es^9vrcTetVy4Q=jP&Yycx|+!x z+-XmyN)X9rXrN6VvJp%E-~@H|&eu7@V)ZBYnT&@R)^6Xs$u^&#jaF0k74Dbm7(c+8 z66hMpHsF7b9qi)vxqo`usDE~T|Bdkc|9zK=?v7Uf_3-)WrjR=mNBNqrP3w+Fu~BO( zb1PI;9jdrcAt1=ed<=oP1ZYgbWMT%5zU{p}ZAyY$0?D|UXP$A-bUfm`zps6D(xJHU zrO&%Q(U&B}TJR%y$u`VKz$a!UJ;`ClyMY|*Lgyh=1`vBmP!;uc+*NcMCP$9I6yyJ{ zj7j)TO#tz67N$dbfJI;X%K-y)aQm8>msl>C_DYe5r;oJJz=+OVMPZ7{0uKSU8jw)D z?5HVIy6H-!$R)};3`JWn%$F=VD_<5Co1!G654xAigMtSr))V8}`&-XVl%y!`=-vx_ z8klGrD)@IzF&zm4WMcz1ZYt5G?*G<`m&twSO5qTWlw}My2@|5vI1ch?{EA29oFNtt+DD63ZKa~x|4Xf8*$t4FJB=PR`{7Nmg|r!G7C8Yh<BeRs;RPJ z5%nDv^%qVgWW-AuYY!{QwQ6n^Bl}B5S zXRy6sh=l=uS^7@AKf%UMA?s6%qZ#^G7-!GXDVge~MwHQyE%%EvRin7Mkagdc@cft{ zS?>C37!TQ2Ao?d$Q;!0T@5Yq${=&B~Qzw>BWj0j`B|FY?xl(z0Kz5?0yEIgvATd5( z2J*r#if5!3Y%&;z68_R+ze0YM%vud?Gw|*40PGjqu>ehYWgzLzr-kGvlGwFJxuZZQ z{C$WI#gs%DXdjUT9g6kq#Z)zU4kq5YO1hf0JFy4bK=r6dI)dIzyE>qnaZF^PG7meB zlN6s=d-LqLj)T!ZdswWir7g~=yo|-;5-sNUVgjppl2UoD;r6maYDz5Z?SZe%!k#;vsRRbQ`9em+nO&jsLz zfCf@i0YxWA2p1<;M1G>RfG9ne6ts+vCqtM<8A$igh0_z)O6VR8NF&w91Vtw!MYJrf zQgcu^?I<4de8=fy@$_t>Y6(r~lbpuOE~KE?p9)bz?19H{ z$F+hUGCCG^e}>qtN^04sgQ45-7-LRNs z_nE+iA))lT@&2-Bk{FW;DZgSAHTbKT{bv5C3_&Kph!r=|L=yXrsLMwOrB{J#n5%KRA7|K$ZO zTWRv2lv>w0b&H?BxBwo$-l(%8iA-b(#o5+84uu76eX)dp(FIocH?LGgf;FeL{~b~I zMmFyBw8dRZ%^68MkIW8AkLtjHpg4%f@*j>_Xgkz_ZWWEQgr^sJl|4|<_m?Eo8;MN8 zzGgb9{-lucnMj_V8JdYbqEYjxo+UCrS}aQca}Psdbxyqs07?!jDdQ!MLC&HF(StzC1IkWmA{c-3z&EVd9zpMT76*cf=(7I0nO@lde>OvH1QI@^2$RnGN(E7z5q z#jTwNm&~Tni4Y^As^XfWa@RPjMw>=qSM02l*`n3gre@>HYq(o0u?N3Vyv%N!>2id+ zWx2T$h+?&TsEj-Z#s;ahIfw?*rbRuJKt058R6juKm0_@~5S;$2UmX|Au-&+Vb1tza z>oX5me$9VDaKKLDl+HW1wijVSHxf^HF@i4Ca{Bv1_KA7F_O1+XSciA>n}51pE%>L~Xi*4XzDFbtq+R+6sM9HPEM?V-YK#0>}FzzTEb|bL#;&l%XMJW&$O_6*(~e ztdQM?nM%Jc7+t}p39MkS{yH(*Ap2h{B$jpYJ$OG#MTzX+Raq(iU_y-l+m4ti4Ncee zHpCyT^2^I>S*arOeja>Xa-U;*nRhE%?w|^v&9jMsGwJVdzn|a5V)VBsIDmxzjz~kc zbtSsy0RZ#;6eu%r_NR5T+M~yQD(_vw2AzRG0S91!uPRG&keD!?-^UQ9+zU=FsO|}l zsCd;$cb?o={{jPh?aznIV0H#VRI$K9^8>}O7?MDN z5_lg-gE699s?tan>=+eb#LShU+PU+JDtaov9Q~4thG=_ULRC3|K8+F9dwNh@m0^1y zJ4Nq~Iu-yERCCw9PV5{hgi`+E@%?tZJJ6|lZEE=Cf~C?gew^OL069`Q0fce+W!Nih zFF=V9kW>PVGiqJH`!|qBP4#W)q^((Lx|>bdM`T$+B@hl`TS5u9U(+gQ=6k*A^yXPn zKs{d7D-Zwyxxq=5iMJTmECvLlQWH!WQU1||QJ_#I^5b?zFy#+0NK_!{7L1OdkY34s zf&$atK@nhgWQTwdh>h;DbMJ+vFV*ueIg$jSfTl1kp_B%bN2S)aw)>{Y(VcheI!ieH{u!6u9m%J0qg%Wszx6CoUjTb@awSg zmj`PWSnwILf#BW2!RFz*96y|-1bLYPn0I%xz1|c^u;JZ7QA7Jyxz;K_Z86*~Q0pyi$!Ll|4XiG7s@=v15m zGs$;=7QRV~1WS7f_gHBTR)N>AW6HdkV$R~MMVS6P5L$&2F92#(!LSJcdG<@iNEAuM z2dvXYT~RfkJO@^&?DK&!YOf>t4`1d2r_@fIWyhMWu%b)8V>-RB0~$bQkRqXBBt zRJsIxH`L&G@5xi?7_yl&WE(5|a~dBKUqby}i1YXP@9 zi8?WKOS6y~-#d5!s%`1o2w(+UPp4R_g`=JwMb+kz&)7ZZiABCxTUsr5ZBzHUlvua~ zWmfTYHwlbRZI7S5i6Gnt`ZU-F<*1L!QjK3@Y+o=FjzB_(+-%kEE3FwV&8(s=;#iFF zwF`bn1cbL_X)@##S0|{WWNcDHPFytmPhsT^Q_;E|6;b zo9{0dIh^z96GoS7i54`-lmVHOvC3fo_@8Zlw?AE@(rRl1287=O=;-yso_(|zBzkTb#E?5W*^p?GZAw!;COcRE-}~mxyr79j_wI zEIN1`F(Fr&4ue6?@Jgy^?NGYIyG!j%wg2IKgkKAhV&%{v^MJ$As5F>1j&DE1 zU~cbX%}drgYZt9(7al#RTV>^0Fnx%GJgOBtvVn5teXE|*kEF`K$+op{Yo64cd*?$t z{N?Jb+^w>zAK+0iO(=9|%(t+9SM6MxrUE0A{){cblB80xMyNr2O?P~P6QH3uP$1JF z>o92zQ8u>P-r;U9Qip!n5Ho9;S>*|SUEiXlO6Crk#|5$F0lK@oG$hfSVFn>F$<$); z&MC9G0jol3vhbL(!>MZN**t8??2uuzC1-)?qz%38h)~ zR_tWWX=Yc{2goX>i!4I3z(Vc(?-IyBRC=r>_#Lix+ zm0grrX1?RL1tpBuIz+Q&^x2evVVvs)A(JzvO$*imQk&*-5$zL|>^@mKZLOW{bXOpB z4rzXmDHZ*_^t&z5mGc^$ zs8FGe{2J+OXX8A3QY9)#{xrafh9PEBj57b)9-hUq^69T;;#|!=MrGD4i~L~%p5V|BxwXSrUJFKy?8l3v zoAnX5lCf&V_7hu%xF*wlQ>X=>j&P&fQJK`%y3%CP>eYuf&3DA`kBY!3ebM<>B<-u{2nq<>wExo+qE+|EW|8TUACB zf9z!DpV-X5=^Fh%`8nCjQno)Nx1RGKk{crlXocf?;Jw+Ko$i=Tq)a5<8bMxJ{BQ~x zXhMV`%Ih_E5yiN?KW`OXib)9bw%0wZ_g9zo8VM(_#104_`+y)V3D9TDk6vMI1KXwl zL8@an+~!&ZN{v*8>*xo|hB#<~ESG z{DY>Ei2dNLq<;Q=A?z-M=zk%;@ad*Bv=oa9xtjZ+4I0ez-H~|-E2(#Eu0%moZt&3( zBxf+c9y>LZPUK@wKm^-@X}UD+z$!u=8nnl`#okS~_Nw&2^h$a{Ei)}Z^wlv#de=gfWJ~uMm-IyO;k~1k{)ee-hW=qxoL48{0 zw#YhhDJ2J^lSZf5KM!SoNJ4-%iE7n#XM+hMeLDh^?7u-c-nE zx_KO}M}SKTkc6-w(v{)Z`gUP?KNMwFYbNL6Yz!bffP2}-B#|D0 zY?5Ym&LW-#T=2+{yOKD;pxo)Iai7F1e6sUS4uCY#{nhAp(bKsk1y-hA@=@&fICAQm z0oyf++7D2uaG(v!FdlbUegCPfFitI{$KcHKETApKa|ycU_>)2#4^5{;Y**I+W$FN58YSUqAq{V|mCu!p zu=lC3b=%;6d!8Wp;i<*1su$h?!+UT_wYZh|Gj_c9KTkDfSqzEVk6Rn}Lmc@x{4oV% zBlG`uX+K%z`ez#l<143kuNx{H1hwL{D64w$n1@gdHZ!$fxd%5jQz z%4mv}9jzsgf>eacNSHJWs-P=1I`?!K&X} z?*_A+plw96tok=JgR*sGn1D4TUmv!Lg6n=8MBRQrFOWz!oBe{eigJ*op8aQ;P=UW8STr)MlZpP`%K`v&a|taNJ%*j5~B^0mUiF zG?%)LOtvHuH-8Udv#a2S7|Ix4Uw+#mtLwGfETM!J~u5faXy^Y5{!Tt}Mq!aD0mahbECM*_*Wd>Dl^FE6Bp;V&SnkTfvo zd*0_!h}JAW=*&y(JS$(&rV8QpJ0|$&d$QmOiueN`?`kGmL9b!Ew2BH)_ z80rwCH(fMLb6_qyr)vOrN^cIcH4TconOzKXb)}c7j8RWB$tL(Vi7HwfkW-3oFQSI``I!W`qnE;kHSBc^Q)%`?(K`E1xJ6o>(nPLTPK? zt+G7w1uV%M52|7&oP-_AZ3Xh7*<~2~9GmpIFHDiay*tg)d+o4!)=}&!;*!Q>__x}2 z2-*@`cQfOCc61ZrJSj%=&w_ImEC!%CMvJEnfF!)mfjRu}ZbwHi*!>IEIJmE?+FHyA zyRMQOtHP~-u9j4I{(DR`Y^DrSE%pkYwg5LH&{Ra@TrIimNgjlgmL=UubE8!uSm5$x zUS)JZG1_aRTErM%YULE6H%%@dJZblaIf`S}LL`@*D|X}U%izjnW#lG|j({oX$c@1r zNun`rwz$wmmElEgF0n^sXAyCY*G12Ewz7s>{S>xsT&Y~laY6Fr%T$@yp-8(nQ&&T6f@Ci!a#E8dvOK@QL(@zNehC`0I|P$XF9eFd`Ns7 z`t6{5Oi*+yjKY8q{a_f~)}XgHfd#G`lDB2iR-~lA#2qK`S5ah?2(yS6UP2mZl9b+L zDUp=dFvvEkxwLni%gl*ZE;m0nrZ+|`g5+eGNe_{uZbF2nfQ_P)DGMjy+{ry z3P!NTmO$y?XOQIYA3Ny{mm${N-D6PzS_ zt+xtI%F+B14KJcrM4HavcNUnWk(8^XdB%!)mIWdBOcNor?H?Fkz|8pV;IKY2@2tpatj1_5z$cVPr%8j}7&B(1qV7?`jpbo2-r z^*mgWAEjTu0b0TWfG-{$X+n-E6I5_JaQ7KCCiLO56VFVS4DVkjd6TYCjspkg-?J-{ z@dsL%DQzJf5V>;kmitvUmFN6@k z|6lU%s0p4B1k*kev^`m%58S1{08?FbmI|uCI{zCqG1LMfD1Au@)QGR;jyvdVSRfQXhz;NTir>OjrV{Kny0gI0XXJ z3Aj1oPf_kDKL%&uG6$}3-}T)h1Xj;u#EuIS<<$83baW8Jqoq@TTn8b&uBlRH={UK_ z-nYK`9aTFj6L)`uyV@SR@Vvc@o)~_|!GN*mp1#LV5$Do}X%wMQZ+GWPSdOdu)R@?L zN;ihljb#p`78f4hx1%%rhzX4}v-iyuk2=5lBP4OLpDnWx;!ECP6>!}HJ12(&B*fj0 zDLD1G{!V5weC{bQ5<9^n?av>9z%}64p7@lI7P5v)K6FA?&W1otWL8(ijB<;ug7pT? zGcLM=lH|WPe1$y7H$@CJT1Z9AgI5STGR19KsVLolBE=x0 z_!q3A$l9OzQ@qDN$K|jxJ!E$liWQ2D0S~bYQU*-}BMre)DkGeJmd1)XQ5aGt!@#{I zV4W|t)M&VRjDLY!gJ`diRLzE^q#nqX5!@-v!&qU6OLc{Syp}+!skCb>akHne_Gvmy zh#X*PZSm8;m$7&@66PbW$FolT#|KV!tmRNElH{l;k}m7$eMCl)jG- z#A74}u`ED_Q1F&_R&^TOhJaG9;@{2uSc)!`+T* z=yjd=d!R4xGu+p0=JOxV5RvDdSAO2I)-C^Yr^3&Zt=JjHj+ZwlK&CXruZi+SX#p(e z`5-fRZ*);^hzmWi=pdO$>1}6k(+Wbksy-nzj+5|wV#PFagr!mxZFitES-r4iYXkoQ z1OmxXP9($e_gQm^j3S<-p;A>MW*6YdXzr<(i?)H6(h6FE}`r z5zS4xg%iDiwkXO`Xvk+tCNcZB>e!~p>sAIjCS{^~yNC1fJM8j2Mna?tag?ql0masd zv1vucU(8FMcW;~?j_$8JgSG5{GrQy;Juy9gb9%}(aoU`!QcO0iSU0M*Zo9(midB}b zgeVActTkNq@j>(i#cx%qd@npL4A*b^;7!=>fS;%j=3DX@1}j(|Z@}4nd5$KlUxJRL zcd(#)2G6C&wm-SRrGT9&MvW%_ zak;HmwOo6`4W8X+J*eh+Pv5p@JZ>qTAUs8iW%w(SzxY^pc)dJ)xx%C3GgUUhYy&!F zh9x9#HP#`8rK4s#Ht}WYP{?|O>&yDE0#*_JU|Rian+1NS)Chhmr-GVLnTn%XjI9rM zc^1#2*J6T0ny4azX~mM=ITI^-{5yolTQVmNe~>V7ctdV*OQ8o{>F}Z7T*YTcRphItS5WVeHD?CdkzYjJ@x`OaBzx{c*%vx zHe4;D7phsLw|T71k$uViui4{Kz?zNlXmehFn~w?fA2BIqUE)@x3Kt{hJwp+y)L84F z_J*PJ-+0u0cQNhq3B|;*v9SiL8=~hcCY3zQV#~jHRl?R9{j5pck8%D6J*nxd*uY?e z26hzU+vcdeTmS45?JU(_NVm55{(XEf3lHwudT1iu=8l@lnvs^I^n7QO5?JKLw3J=0uDmMMfC$%FT5hL<|LAI$c*(%-WnTxC6)&E zmK~l>W!6BTUIFD}MP@{fhPkn4(aCZ7^4kbTw`4a{E>J=cXF7Q{^+r3}n==xbOXe4Z zSBXI=0Q7uMhbHD^rb?A(e}v_*5a8!aVn}lJF~uTU30v#e#TgPXnvc9q6+Rt*c6L<8 zND~_4{Q1O-JaN-%;;fp&!2rqPbA+m%F5!lsWn?(yJw$hB&Ipf2FeUCLAU^fm4~8ipK7N@MDVgUY>=`6_8As@@hN zO;Ve}+4J7uE;?mf&cMWGdADaelg-L5W#psguyIQrc4jEa8>0AnV~`6St@Yn8CVB$s zSJ!A%*VKuxj8qeL?B(?*y|tYQG}1p?b2TE(JGK)^)ke+%F5Ouv;n+f?+k?~J`S4rk zOM-vUfS_Z&{)m4hu++xqLnbtjPX4YXPD%wd;-p;`+QYA6x&6~zO%j2r%Vks3jOQyI zlmgD))~mxDb)IWO!A_yxt;LfsQGr%{x=w?w{L!>@{T9Uxs{En1%$DEUW86d7L&ELq zG{zgYnxbDNZim1g~(sBGme?5l0Vz~eIt6|)d?hAhO_Vi%!&G%nQs!4d%x z)u-~@(Tb12YUM&QKG5n6&SDn$?El^PV(?&oSoC8-hW*P#tFXI`zO}8e z!G9T;s8-SZNwlK;lV}Bwl7#Z2TxKVK+FP8?AWAK`1%sJH_^I`=&le9Yx-ho>@`R^U zPeJu`#{?8YnsKe!<}8}=Q9q=f!OnKG1Deb-7so91n?aQaGlC*3wIdEbU>fXx2{&>I z(~E@PL*SE2W@w939|?=IdwOQ5*q&iM9A_w4!1AU{W==`T5~5L^i7;*lBtqJuDG@Bx zjF(hK7%Vy&j8F{lv=n8Ry?#5}-+S`Wmubh4k%h4e3kfnWR8zvr=nF~5A;suTDUP7z zlGN%Vo9uNy9-rc`L5{G>>}AY*jEjFo`({uS^4QrDCvkWzvOyJ)~I;UfGo- zSBChcuITUyGt)A-o+vv#`xp@`a#TEg-0F%b89R<;A6&WKr|>FOUVgk8boAcOwe2?n zz_tARd&TA`ZJJ<$d`e^%$PW+c(fw_7-Rs&bn@@zT?!XLCnBqQRvsuxH{%;1a>wQD6 z+rc{HHY!v+^gwfK0OA)r5Am&=APE1!d8}93J5Y+zdY{3M8CuYp^S%lX!V2>PxW1*i ziS^Ahwf?GL%-D4+r6rq+AN+=n4(nR0Bbh@*nuO7ZLyeASB#ETYHy2lVNbOJz-`=UCy_2QryxmXlyyoBf z8NXb^ZYZW6!v^tOqkqdQQprPZpZTv?eVOt%$?&UmXuiF37Yf+QaKQP7Mrpi~TXeIg zU2hYTrf{yKER}3}Zok>g-F`dyh)!jd6djbbj|CE!uOSyW9)rL5QVavzy1uf?cf0Zb zFFIHzy(!4zPpV4vCsif+FP0yF7|N!$!h-+hoQPJ^w_RgE`21;y5)y|+4Yt;$5}2e2 zw$ARbneUMMX>dLk@51D6#5G%a>b*9Q&I_|?L>YE(@A7<}Zck(v(Giw^W(W{!n+^_6 zkArZc|0#bp-Ejzt)i5t-9(a*U(GLx%d`WBF31lnxi=Srtu{0C$vq>&O(Tvw5><|jJ zE%wJvij(@B?M;PKxb>(&|4CMvFG*)|{v@l|P>?Y7q5Y-4HxGw@LgSM~1$S85(>OHg z!Ad{vPzqeq`jlF-w&J}@#k=C+3bn1+A`w$_3Xsmc3(rYf1*c;2=Ike=sK5Q!|7zAw z=BMi@b5r^hme>0j=hepZHSe(0oefIIip4RFB2^e(s+*7h>eFN^ee(bWF;jWU2`JD| zJ>3UZK{<$I-_Kiu*T0WolMyr%N16zuHan|tLj>~NtXa$&*V0_^^!~V8vM*c;0W)rd z?LZeTjn2rLEfkPn^O9+kJtnTmBc#@r_3oN}%*yH|izU@w3`0K7&#%mfTe zj8SXo%a^3hB3w(k#uv?mZHrexH|C|vD_ zYD%EP;F>?OXVib~F{xb^3d}coK<{iuRV`M&+ggQxeok-Hg~^!o%j}mghkmB&txvAz zCoFk1YQpR}?`gud;H3uwa*)-VuB)4Q&|n(o;8mV^+ycbfN`dLYb+cEY^XTIzi5Ref zz&;;kRA7K@w0au2`Tl!Lu3rM!_;<6Ef4&xQ1B)-o{B*1K{Pa`)n>Ro~XA=|S{~ArM zs{hYI$>)`>J#fT`O?FZ40?A}Tvv#Nx=rY{64td`i0XU*GE zJz!_7-#Oj*f`{_=4hNuXjwCV*1ZCBV2_EqjwOTyZ2iwl3=W7c=5Vs=XcqYnF(k_0U zpDK`d(Mk5a2rd?=RL<^bhC$$W8k(E96p#If+&G_~6TVtM5pt*j4abmD70G4ZRO`G? z@kHEyUgn0sdnd>q_9XSB|MV?)Cli|&XT6ONrn?-JfUd|^-d-)>vD=$@$YMFk;(4Jh z@qp>6)sFD|D~T=BqGqm$EB-^TH2T9{-@az|tp2sSN)n&1?N)7E)<6yXMX=^!)>;&~ zC)nCap0ac9^f`qZh2dGlog_LsrD)Dp zk|i+k7uTAo@lgIWjjw|$Z(dzo9ILMQcBR{_c9#vVLwBiskPMWcu>t{`AWu)P`BgBt z@SRIWI7NWO&||}DJwSCE&x7)Xe31bkZm!kEy0-0IKTAHXC$r7Q!`9>!*QNA(5AE$_^FajFU9!*Z1Qeihz?BZcAjYG zXT_@nZQ|el#g%i&5w#VwGk^!}=Br&X+INR`CoLI2=iFhLgv#WR&ER~*Y@aC%O2R;= zz^$geYt);fORR-_5A^E)9r-7z0|GGO`ux%J zeQ+NmjXj5I>hLl>I5v7rqMvo!><-y2!68-y&fP4m*RLh)kM~VO-QWB8I-cZd<2HF= zL*D0n|8t&~O(z~D{LFJ4lz%tRMa`|8{_A;Ot@b~1>baH!Hb9h4%hXfmjK=!71v3H8 ztP@rU3!_O`)5>_BpqxV>@w;a*(xxcOP5e=B63Lxz`#D=^zSc+c_`HATW*9)HFExu& ztu6q_r#5_%04>iE3OyiFkmgqXEt}>P13dFqf-8tW=nqC0;v^}tR$ry$y1w{qp_eF+-xtaDEy76qOk4E(AW~omQ>nB7|b!M1m+QOlxcm0XhqU?rqa7ML~lbMSbX2>JwDFUXr%r6@l(~pm7BVnTQ1QASzM#HDl49 zn({7^lG*#`@JWsd^_nl46W8wVQ#L_(aPt8apx0I^KPOa5F{ZschnN^6-E%v^HC&DBOdlK6$Z zl)_b&nnEoYbmi{4%S0CY5J$kz!FrS`ddVE&Q1BU)6}{juT4E#0s6&LdUlmrDkeekz zzb-d|=V(13L1$!(Q^Qx5;JMDS1WtD)=hM;*<0Nr5P9CL#a)#?$38@sgi?GP-# zZMZ|s6ow~@oD6!%DoiIlnq&G|(VhoNF*D!_b8L)HZqMuaXIZeqy@dzk=Y!AN?PYHv zS2Sdv@tNetBSdCV`FkpPa|2nm1MJA6oir9KxDd)xEjMZ^$Xsgy?i&;XdP52iw4go& z=q{y5wMg>K2PcoA#d29UvonVksTp0iR6Ssf<@$;o>57#|DLa`Y2=D5901E9Y>*1q9 z!bNm1Wxr`sCMYcn-xl_ALd7|(FV-vnGNHhqUVZex*lc5)@EfL!up~>x7ZxqLY?BZV zaR)8ss|9-JRHZha5Au&g^G%SAZ}-L5XmaOpC7bKmjjDgURbLQXED*KPa&A)?_P9<4usu_mUJGQ3&oma-V znsf3MYJXs+hqw9yS5@UF+S{Wqf~wy6 zN={(8#)NdUTdVc`(fVQ`iy5fKAxufkiT3l-*h}MJ^QX{%L;WnCrG967Hph`hH^<3G z0!x!6UQK*AmU#*}Ww^d7&b16B(@s&h+;fD<}t>FT6s$6&Vu zAB-qc*?Gnym6SYTO!-3g>MSL3?qsya+7j_`3Qo}_DH_Y-e}b1YKd%UR zr;tqnS=Euwy&4=$e`2fb@M$qEXs)BdC2jYZn|$m2RApC8O%0Ndx#cPnE+fJ>7|C+N zKlG#S|KCMF732RjiM~qpTW(JrXT^09u&NK<^ z=T#IO)2UQEhS5C>OfT{+mq8>y;4W{_M1gj`7B9MlFbeWUFh?PX1$|U?)Yi$Hmm4>p zr4pGaDgr1qQLmXIsZ|QqS${+s04GK_ip8FS(?O=&Gd8R&5fx)F(VtN>C%n0Xzq8_p zAzXbREOpZ3B;@-|12wTeJiXg>Hz~@vzh9(7@ClKDrGW*bf%W{5_zCjj>cDazCpno=Ls32y+LNR0;Okd{_YZa&{DZKM!Abd#}Z2 zLbqco4&cSESziGZW*;~V=s}QeUtgZ*P}GPrNgy@2MFo9pm5w@f4V(Zjv2S)AV;_yz zH&g0)!5CWk3*c$;RiAHe;Hft#vxtv!Y$8)8Bvpu+|J+$yGCeav7uUW8s_*mv02>ts z3R?bgT?Gc_li|aH#Y@~QLT`dXpAUYY)zlb83bSGpP4fP?Avz~M@S_T@#{6bUmEmGF4Gab<;d z@ySr{khO<@OOMltjTjcQ+J$LYgr>7q6^sqQ0+C?!Y7!^xUBR)`!L;0Hs&k0ivBwC1 zD^_>fR-{eYrSHV-=4=r$WM@oCE6Q;en^srBKkbAD61yrPl0K->gEN?R%D-Ug16qtw_Xm}sA01l9(XJ`F`Phj_UM!}c1LMF?^D?t14Gcc z>lCTeNxlmsp<0u@|i zLDq*$I9i%Z04D5+HgGoZ(9trT*5Db{{8#Zue-ZmIwRsC!w|QEOWR}R`pmLU73?dzA z8Fg9DZq`=5PcuGCTPK|rZoAzpA2(Lq?dWR!;ugJ<{>=8!?uzh~=1W*K%-D!(2NxE? zb6_z=sFlqlh#j_GF>h9`Mb_HQ+V(Y3Lsxy3WvyU=6%j*rAwrPuBhYd3pC~)56Fp7F zdj%r_mBt}4Gi-C}nXTX5kfp5o;B%ESMwH)AA$18mbdg67HbdZ-hi3Dq3;FalaX#H1 zDd*J!8!6HhGBX+o-;IuFmKkU-Tgdn>$BfD zC+mV5JGG&FlRA+`?e5ef6|9yid2oF6`llx67E1HS+4C-w-FZUl`_#-~sIpnBqI6R* z`@2{-A}j2vS_)-1L*Ea3lI3>|hLayo`{}z>otd3%y4e3tXyCTVdZz#2lzcxp<$q&E z`2Y96RCX}1aQfeD+NzXw{*i{_JzeuRkt&|ZeDM4QV{HHgSvu^N2~aS`QOVQMYTSha z_00EpO(L^-COq_&bae8Q=Ai1`S z>!Bi3l>!tyBQsf9VSr*O`GkTe7FD&OMH=yf=N>9!6wd?>8Rt~=?J1uxuE;8+Ap&(j z%6s`S@ltc36ozDh8T`I$nSGAAT&7)IvvgBdkNnyLM_<`~R4%04Tki+3Um-nE!9Ss7 z6{SQHN$Obz_2R-fiGUEaBN={6rGX2`e_cWfo_{ytev;T|p)ESI2+vo9v>`w1Kfv_z z6UjuEOe6<&HIs-DCc`uYUzAir29Wtmzu7Or>G&_rc17P_kOFIl>u4{0g>&vmm!)|; z&jb&jT4Y0x6wCmxKQT}BGj9Bf6U6q`l`TR$F{Xh1L!bFRBzlEc4LaX)&_jJ{G5q7z zIm6M(TSYm7X^b&hKzgzsc|N$}g}{h*FtTfQf>C8ITVaBR?ie$PhkY4bDaaf4wZeA_ zc_FY}v5)wZMoLhGUwrZ*MAG8N-aITDhYn@SpNx9&XNv%*+IRpph*@dIiRp@dQuwaH zEQT#+)YT_5#EQ%!azvU1h04s5%fznOw8kbK85X zoKB#Bol*~-cT8V?Tw+^)sK5V4BQ5J}^`B~_qZNO22MjPjx`P{pT#1>%XOii1g$dA!-N-pWOKXUis~Isn zR$-BwQ4KTge#Td5Y)w1+@;_skUQS(ewazjHvs~)m+DZGK$Ro;;3DrYqEmOy)&bBb( z%eb93${>xX7__5cAx%y9w4#?6q)s7mMxHXEAJ<3y=bM+uI+n?tqQQu87`bzV9y(9) zR2(Oz9Q_}G=ba>Ayw#Tpjw;7 zZb&pZP9TtIOE*G$H8j%G++Az^z5RTxq-8jG0PK*~e#^{Sh$f zlK=j4uc4Nth+ms>e^|r8-`v*6|1q8MMWzU1!2sH*e=o2Ki88JLSSG~|V~Vl2r}vXn z{R1a-%cMWPAI`woNZwx#p=s^B-lC6$gN)B)K_NMA4`ms|rPVKF=9mcE>KuPvP45os z##|}g5ZcatO5=EDk`?1eZ-6oG@M_xf`DT;y4J+&j{$RZC@cKM0RXPijQRQ$c!L#hr zJ*yhOT<382Ag3CbLg^7JmIi};lNDNRz*XF(WBd_`UmGI9v_Gf%k_&iys>@lTBqv% zS42z>gFuMy6Ps#vJRm zP$q@3ptd<;MRT{4n-5nT4qROFHf_p6a!EOXA)zdcOk+&2K4y;d0^mErj7Z;3zVzkt z>XOu{mn1B1{QeaNE;ik*xg~Yf@DUdx7p*-OWnU;ID1n40x>zAMEzvG$XVt12BU5Y~ zz&&p~tT1cFOTey+p-=BFX%x?gyOj&P)Ru-2{D4L?he*FG1Yp@uWI+j_wCO(14@x0| zO=CJ;ALJljA6|muBaTL5Q2{{zcF{GCR(J@2Kp6&`Wls)NuMt5EvSpT|pL2STiJ%l+ z1t`B&6Tp$OlptouJlsiDT6{x*i+Dw__X5k#PxC2STJ*USuP5r8gNRS!a%ewgc876t zj&sCUrX*?bfb|bOi96jw&3@c8H}tDuuSD^{pORC>r?$;Uk4;9fQxLCNSa*VUeX2ub z0qLSj9O;#3Weu;9K--DxtIrjo@-fmIcVXU@#GepZT*K-SJuWlUUQ_u}=DSu!{OaGABg2 z(ii)n6Srra7hID^il(@b!E6RViXD_Z?~IG)@l6|5fe#0ayT;pJ+C@aAdau1RfyAO) zrw%xigWNRWF{>J>V;rc%Y=yGcpSsVsfcu@07>;z}U!F zje!PZy|S3&Dp3p+e0v$W2kGenXZ4KX7aj7SeI6fPPCoSCos zt>Ky^?MIHhA^2@>xLK@^z9=)vx&3%pp%Rm41w;$$#3hlNWyYiWDr+oocJ5|z&S8#S z5`19O249oiZum#qf+lYTyW|XcGyTD%Wcj$@em>Flas&TuhXeB`75=b08gmC=flX0O zGGJRCc(X4|OLc|UoHi%LWd0HUkI{aC5g7=27kh@Sv+^HmQk7*5yXQDs(7-rDgU}Cb zX{$aT#7Ph`TsuF5C^$)(ihLh$<3!HmZJN4j-E2FlE}7b+cF;e?ZUjzwaiLucYbDl}0{KBpSGs+amgO1V&|3Y9;`1Dp_6_ot$oxJvRYhln|@8{4V2T zGI_z?$WL}{Xb3p{Tq{z05}1K)oiTT%G0UEJ2ex>pi0}8Od1~^Y$bJl+x|B%e2UR7< zHkTO#=GtnRKDy`B>tq?y7S%Ruf5#&2K>3pkx-P+~GTliIlm7zg1C1}NkC`HBiWoRA zTqZ5!4=Vs!uuJACbuvaK7lLx?%9pCVBS_hOkGXUU!A`?jQ@(Hy;pM>9Y-SK^;y-> zOCSy_>qk4?ggZ5u8b)|f-o4ShWYQ}3vg~R!|HE@Rv4gpl>Ty#SVplXvjd}wBsm$Oc&i|X|akIs1DBoSQgI+S=$2iJMl)_56YPU^DslaEvmZ_n7W z@-6-gzD1^$(5zrq<+;@HLBmTHk3+L2()@-T299Rd?w3-@seQ3_Jwd?9&Ekz>Go(~t z%6!-AI-+JXP4KB1h>jVNDdd!(H#wB%v<>209a7u75MtYD8~R>qH(lfWczPn2-2$eQ z)UUh#(>xohFuKOF3Gjl+ghz%O!+yEvcR-deaPyQv?Uft2Bqxp2c<`AxzkWc|GBNks zz@XK&GY=MVrP{2XLE{wuC4zE8LndREw9Hcg5IEU2=enfqkRD1I?5p*!f*rj^XKLD&Ip6azz?-Da#$zc9BsWEy)NtGMgtC;4(z)7 zarWy>%1IETQ8>ZRfSL2&3V3d}0I7>&!I3CfAAy+6_ibpWcdaWQY+QZV!Zba>vbF84 zH5T*P<8|+KI8phIg74Z`sLDFY4o3Ypd3{b}JA(|X9ctJ*xKbDWdWqZMkm^1Tr+s&B z!bScrqPJG6R>EQblzih61>Uz!eq8y~L66DC!dLuG^-xzepllp#;$~GK z&hkTSsxwT9bPM)^oUB-=Uz&`nWL5(QJqR{vVQa3mQ>o0DaWJ6^jIDF7-rKNh2zi@P zFic)xA+N=nn6CTXl9jOjK97#h-QC4k5sX*7(j*pX5{3J_!3b{s6^=LiQSxLNx6bW_d8B` z{reXycp87XKQM;Cug6Zv>Zv-{*d`p@q)>-$uC+e!s{}Re?wd%;1O9g;)O9K&?D;(! z^CW#=6P+S5D?dMlOx7v4(Nv#A*F$kzDoJ{yW%og}^aRBX#N}*n@64!zb-kwrDpq8U zDapxGEy@iQ3*7cei%!*=7RJ`(y<3Y5QstO_$oXp7lWHysx#f_RfOEd671!OJSoh|E zI`H6rDbn-{%O$+6428fRUhOfV?%B zAZRG&=H_Jq}`%r59NGbzD9 z$%Cv|86w5{u1wOZ?K1AQx0Y(VdQy825Rqv93>d84L+>MgMRVVpmRmVo{IV&`{6Vt* z9maZRv4Kbafw5}-j{~}*iKB^=(?8N%{^Jx@6QxU=1qOtVKP4-FtW|WrTU5&UK_j5b z{m@r9GL1cBa6jx%A#eG4!0CrpTB(!6h*obs%*;JKp0SDcL(!y+lpJ@Cn7&o((HRWZ!ClZ%diZFIN4-(6PotHf9w2t$jVu@vW8 z%g)W_TL^=E6ioL*K>fI{i_CN6kO=lg=2Q@MIJ`rksRH@$8Qq8)4#<+rrwx!g|F8*k z5+~4o`3SR6py5Dh1sooJHjt^Qk0%F>4>Pq*bGYk|O(0Zhf9a5vEXr1~%`r&^i5&9L zXp0ZVLjwZl3#};0WbgRky2++$O6B_C3K}_M{<``jU04blWWVbQ^60gyWtETD(VjFd zxZ{r7!IYqDb_~S>&RPy3F<@@ARC-6jrp{98oavkFuMzdH!J(N~L<5 z`mKgQF#@70+|e4wyEd&~lKBlL3bd4m;%w+Lz0)@=8D ze}CC#6;Web4*AV#o=w!EdKGInIURB{(F)4`K|ZDI11_Y)+MV%l!uBL;V}|t~7Rwp| z06^gXz+x#`nAsTor*Kh~nzh_M2g28uoB*zoQTa{ zF{kuT#3bP6-L~yTM;v;Ia!Ir@Ym*t?bd*_6dX87rvVDo;O;_MnL8dds3{@dWuWMAR zuvPFuMlLiO;~0?o{gplc8$soP^|XL5!&T@>6sSNLafs~KDSgAUl0fOUUV;MIXRtkN zvm}KGUgRHlj7rkJ_*nCkc=4XP*@#etd1=UyCK++OrY$S39Bn!>D9Lq-W%Yb9 znmBx@(S8%6@K`*d))3rUz1kp85V*UhPVj8mAp9@@bSPi2Y*`@k3D9rPA)rS{h(DqU zH>l#UXPM0Pge*FpWYm&8CdUU70jD=i@(K$vN3$7vw8g%Jh+sc@FIXSNz6SNIJ>hCX zyk#p1f(boj!sls*XN@4)zq;J83u}rskC^bHYv8elgfoIdIc8x$$$mVH@a*bH3q@Eog4HxR!J(9>Ca20g8hxLAO=4X7 zBhJ6jdZS5m8h;Z`SGhJCo~3!Toryk+os!|mbCj{^O$^&1@#`Y!-mWaMHQ*6Y90O2w zFYoW)K0cUoeX#_}9FFirVvP7zfvCFo&sqUT9*>OsEXlyDjcgISC;Uw^`18_?>KR{{ z66o{6@7X#^=MEGp(tKJx+k{gRRE#HU+*iOt7HCKwDd=N77|a!bwBk{Ujc{s;xz57B zJ<=wg$2Lf_G?klI2}=VIBGlNYj4;o5`PKEd$v`WEW;C>2%(hvEGX_&C*hK(ToQAUn zt5U=dTi1Zf4Y-x~M0X8>bUlh#-ftSYBML;jIA z$z8p|mqQCkaVS~FWkRS;O`Ly0^EDr@yINOGOem3srAV+YBT;9vha+Ju2gS%2q=-}62=|fiW9d6CSe4&X?0_(3x@`T^R3}+R;bJ#Y1p{%LcF9_% zVsfm8OX1^h(@+%hd36=kBCrxz@0RAQu|Hs-u$l~nIfvjTY;kyeoHBuMebAH1?^8Uk zi#%enhP0+MpC+fditP0Q?(CamCbEYN5 zSs)>W{GU)0j+1?CWk;)%LejO-;@rL3zG);MYgmH$79^OzBzYWE9OW+#-a28!i}oVa zDc}&F)+JZZaenq>3DoNuj%aot0O{xPcEAnBruX!HXNN**UCbL*L} zvYlpWF8Hj97nJ~*=RRLd%&-ub%+SX7*u>*5@oCK0fRXRGx!P%$Ml_vGhb&Y*6N%D6 za@IYTaxxV5C$^}q@MZqLBegB3{6nBDPphH@Ezf(0LllU7qjVVBe-sMqPzidWRR~`l zJefMt-Ka9GxVr#J3iw`D{ZxIXsexA98oOyBJ#EB;D$AbJE`jKYnUQjlwzirtN?@T} zmfp=u&cMPo1GfnY-(p};#y-5R-E!6F^A%FAZcRpo!a{C^)@|A(ilsI7ywfz!{f7`=)zBmnUHK#|cu z-p+2&0DvGTKkdW+eEci?@45$;UhvahQ2i{b$^2KpDQ#A9TfwRu!(|v0h(Jj$YNnbuoy?j!1Aq#TvXTR0=e<69 z^Wy2mS1aNXO=SkhHue8;ClQwn#bN6^JRtl~O(het9Qd_G0fC}bP=wg#j+WY$DdecG zu%i&8l5F5FNE`izhP0U-GWuyH$*wQYUE1G9;42vC^^BdNXQLG(t8wa(;We;|b(JP5 zb-WWcyKbS-9jv@FKrBt#&^&sb3&{K9;@dZ1xu_Ay2RL(^ThRdDK+YnnJVRa2VOp64 zhjcWDv&4dg;3A?dnMV;)>)I2HVzbT^YTbziMpEPzG`s1%vZBSF$IgPN0L0xjO8aP@ z74M5?BG{I&LG^e+n_8w?sGQ#R^&1KY_)-FG*sS37b@9%{g;7^_n9ruVWd9v_#Xv-$ zU(Q~sw|FH=A`)1y+qB2k5G*-zf12B?l8NIXoW55KOpLeu$aWfX4Pba_5bs5zE+OAg zh9YKKu!>-{OY$=ZD-xpBF*v%wykRw{9*($+xLOH&R?<8H@ik6Ts~pwaoxpzkkp63R zcCZ~ZY~SPaE$};G3xv^V1Cx-e_?DUWFV%W$H!X*$yz z+7BqwPgZSOb*OruuIQJ=ytuhin@}tST9wP{4iMjevtAFNQvzK3 zDWbg}&O-LTs+9jv`0^i@N|oBE!;eo_=RNh?4wV9?hzk?@xI>3pf&)`o1T*^TVZcan zSP+Oh0L6Op%XSGM-5!xU%H$1!0zdtArwt94N9thu@n!ej4(i5$w$K1F$lFvJ69F*; zV;?!CF%dco+J`XAqfwE9%WTnp=A25VibW?-0Vuie&Bukmz~e+>v<9EAwxzQrkg&NV0HA~ z{f0gS{Kf!_&`Z;VieD0iliTwzxmpxfh0@mz-Bv5G#esW=PONWJw|sKd6e!Mg3;kRM zf-ZiF-nG=#tbIY zW(HX47zx{4))boIdrQ#tDNzUcr?JM40Thh|*T?L8DJv z%Zp6|`H>>UnEy7++j6%aE0SfN_=y6G3JxGqfp)IIRmt?KYn7+dW=kjz9WdExsN@qBBz2&>7!+bFM}{H0vaE?F@Pnam3QlUV>~r ziez~fBLzD$*+x1f?AJJ8LvP;Fx_hdb8nVHhnn&L9NLS#(`U!D zT!)>u<}D_yz1?6)i9&Q0ve$@c2oB=#g?p*`q(|_v7*$6KX8TzKwEjjaZUNqK>*mG2 zVpwP0vZO1xwO$5Y_GK!GoB*1k*#1r$tqdf)ls;c)8hh)HI;BGf2S56`5mWWiyvn3T z*sk7E(0;a}a?L&!>WfT3RfDxV<_;wS-EyWf*YqwFYm;roVfj8|Ej@2N=U!E*i=TL2 zVmNl)wz8hp@O-Mubm5UbZ#6x*g}PkyH{aeD!UzKg?xca)b5ev_xj{QR+I3!nhc@=h zM(g=83wA?f&{+~(h`M;2$99P>eLMED+bg8XV%R5Ub8YVO>~R!8t7-@-CAS;6W$@9> znFS?_0>%2#;t2jX#`G57zn;b1dnV+9Kg%jGNdLD?nSVY|=*69^t^RrSzn#RJ>ROI# zq9{JcYFT+#5N5Tt*d;Cu@zO zTn~YddMC`P9VH=Q3>-4^H15KO#(I4UYmR!r++SO9LlfDlJ4g>rtx^ zfNCPdBm+gidPEgxiYOh`D~SAN06PmNiO2!GB*yZS5F#i+oS}py4ny&~9Vo?3Oox&0 zfgKI%g@m8=5)$2ye{`A(t?MsjP6xzo8#%Fe|Dd?I}`H zgbq9)K|_pJHWpdtd+-+pnrVue?+3?0!efFVD(quBWBp9GBP%N@uM2KdE3-s~I6i1i zkld4GtX`JOPF#2FoVW6SOe{%N(TQ)r$a&N!Z23Ol-TmstYPFdj6dgU-O6UjPtBHSa z*u2(tnP%>8zlPuL)FD28c<=n`yLL-`d3TD|F7XYISyvPN(ZuZNKifrXzmJ`^Lwja- z>aBTRFTZxWydBH7+%qPxFOH8`8{wltxklYf7Uz-yX4;PrBNdwrbrr`gas0e zvXlWwQif?HFjSwhdW0w`JKef>=A6-}xv=#q3_`~IVl806@u2zXqU2QX=rR%Z<7|It z*Jzkx5JsDHb_qZyDk^TPDW2PvV>?)s`Zb6V%li@Z1Edq^ct1e^lJddH8`a;(sF#>(A`P(Mq4Cy+OhVBzXPTRNrsd}3QqJ5LZ%&CM~O=I}Wk@&ANGQzfjiPHU4UjC1ECm1kVl7MM4A z>y(mH_rLw7OzEQzQX0y2Wn^$qN548Wt6ydOPZC)=$yTt>il)U^B!hFU3sojlRye5p zSiA%q(P3(8<(zd7E|ve*A6OTWSmdZ918?LfmGzNJ?XxQ{Q=NA~jju0x$M7CCTZtf3 zdQ;1)q%sb)YHVf3W@ohhVJFU^cAYvP;uVQpVnqd_FB=I@h|J7I}K4$`~lNZ6*-ib5+ zoI1DAsXQN!=I9RSnyA#IUzLHkzW(ZHZjC6Pp7>n}GPM3(3J^1O!g_-qzPZvE$*V`C zE%2D_+S|UTGC&>Y9)0GukI#5he?^`45+qKqUTjp?HyqNg?0C3C#}+*^X-LtzQsjsn z**0M@LD8WOP|ykToM9%DtiW4C}mBPGHQ zK=|K{luAYhRt66L@j(`>B=e8Gvd(w4o47z^r%`zG3=?ckeSuUwri*$wP+I0@O${az zPK%|Z?$`vr1T@g%NYJ}@uWN-I-|BHL3DZOnvYUn^xMoGfn-opCv5XC*$>*#7@wDbfAd_&QiEah znm$d1&iak<%{V16qm0lN&ixX0oNqW|?C83ydDh?K_DFQUHog|(p2$SyOS=z%zIpP+ z%bDqn9X`PS*Za_$YJpkzXJC8yF*K3;uLd?zD_d9NpXiJK_)e@+-TsHF+UHr%zK3Uo z4#xx@SH7_h-ASqzZd7;fmve}K1bH~D2o{M+3B^bEwfJlTZP^xl6u(ul>+|OG=Feuw zMNW1RrpP5AyRp6=R-OwMqnbW9#PZg9b z2~hSw`y@QuSST7RHy$u z^Ja>CP9^s=SV3U?Q81D`>!A`yuoSw{_UP}Ff0r(r?nZL==Yr@kX`+=lpfBG`;Ohq- z4yv>x&IslB4bvhr_%}>RrHZFcnZZbNA_e&-;>YxmgzfSOTmqldBF!rsfOdL~RL5* zbg?WuICoIvVI!24)b970rcV>pFFhAcFpt)dyUe!f>?CNeDwVUa9*wv0u=C{}B0eqhPbo&3f>nEqD}@ zCL)P6UUeMhMcW`+8(To)vUI6W=CjVsW?ZF}+WX|^s@z)0a0yafFQUHBYHcf?~wd$@R`RvcR9kXzSq0R%sA;#HN)#PYq4P ztm>X^4bcM`UnCt;s8(q*&?u(7o>`SMpeI79v4{J9&_2mkZzIA=^{>xqIM*7Hmix7@ zT0yt^H){UQys;@|IO}`))_vMaGv^N>Gl#JIU)Y9b{L~*kvH;w19p5Nz68HW?v^4><}lxQ-v{2rct_Ti9pREX~$Qc*sh|fneD7rI&|3A zi<|EwSw{aENC*B#p^YF#U4I#J09Ws;fxYAvloz~ojQ6veG;mAO`he`Si9(5lM|fbdd1CG;U9BBZV2XKWv~)R1@_6&-Gj2jcW#%S| zIv)ueYgRflk7J%LK3QbpJSNX|kKhj&`&d14vvA#Sj)>Hs?Lje|XS@hPzQXRx~gXRYEt;VEW zFeHTN_&RqU(P@-Lkm5!gm-}}}S*I+yh*rUS9O=?q&U<>~r-@tTvsDsKoKidW(Kk~x zT&Tn7APx#NBLY^`K#i39IKOOn{mhBK;TG~aqMZ;60nJnrYV@3m;rF)Uph-k~Sq5`K zgI{M}nTGxh9{QdD`H%e&^|i7;+zV1*t8t$>1)3blSGoZU*EYA`A9*P2oxOwm*OJ+T zlgmShCxi1p*@v3{lSP`62G!tIX&G?*hm1d`^&0#tb~93dWcY zJ-(ACCLDNCdE>?qiVQOr3F0QS()c?N?7DmRyEE6L5AYrIrzmBCQAl~eSkt6&pprw# zC^9#|{R_`qf8kYqI?>9xz)?9I>Vyh8;g4d#g%;IbpuWGt1dz90Lbi)xo%wk!K84nH z5O?a1W__jwC%6*C&8q1s8rY*JL65wK-v0=SDXC7H&wf1p@7$Yi7pm5il`$PHG&d5=C#oon7NbM(8al_SI4?;&>k8f^nI>%GCvXOoI{8?$dF>Y9|jjt;T z@q5T_gVFn=AI!vZ^(!FYa2h3Vqj9jiPT8d*rLt(k0dPd=d~keg%LvY)$o zK{*H}b6I68d&#(Dy|$eA(Pv&)fobpM)d1EJ4EQe(H&-CvTl)&rJ~#wAO-Ef}&r<|# zh^*0)_)5sT$aNhhzW#gq$FDaBdj}UTPEJ9ekJjIEZ>!AadvsBa#Y-7JwU*9!3qwW% zL4pyu(U-lm;MRx4$$vf~(!tuh;?aGkZuY_c*rT!T&|}IfDQuNA+)1fs)(sIXk;~NL z*AeO^eV7McaHhf{xE)Y83E-0J=b6${A=Kf9*y*w~pRP0J`o)3)Eib&E9vMx#lR9T8HpSX+)7XGLHWUfb256$H#R^PcJ?in*R4S!;BPeXHWN zxz~-aG0!N(R!P)9DjkIP+}xj3Wt6a?OU@hLI?JE*mND5=Fy_zkQ_@T)0J$fj38 z*2^V!{8rf@z9JH|qPJ9N(McX0)!R>=lW<*~0*vr^k`mBah+a^oHO^igzk~zLJrmPYt@I3dnJ(HN@W`u4|%PDMW`kvA;g6*$JJf zMjuyjB~4PvEt*k?rA8l#XE?^lA~xHeAwWy-e}v{!Ia{$_&=#46lF9U`>t2wWu>F(c zTj=ygS{uWW4N4n{D@MpeG9gbY0HDi~^{`FokhKTT>N(g5XNF3Y`4At7TD8*6z@b(p6i=nb}2a+0<9NgcB4o z;J~9x2`A`>He#7TVJI$nMM5_x2j|oW|qE$FRXOje3z{{~HhoG^J_= zTDf3tq)8ClUaAt1pT?g3X~Uc&Y>1Co$b|JQ%6tU@6jDjE-aXF(2)mfsEATCu!dRM7 z!SK-~z%P+hMLnSAc)Dq_xQqurK+t-hn5GwuyCm6ZfRaGJ&5s7E9e^Z8=GF^PQ$09P zI)b$G-344&@(#v?vHF9T(kXd&O_BY3%RH{N|&;h zl+9FvbL_U4a9EF06|DorFE-g4FRP41`%qZvu*BT=B;#ld!dKrtfk{HA^b*eH;#jht zH76LEhnXtYX?zch6z)&GhMAdOL4_VW+uWr<7^z8@YP z`Tp+9kUyL79hN*x`i86*7gbRlYiX}>7$m*ebpf5&?7^2%^@$iuYxq#$Hh3vn_57BV z?pu_ZGE;Wg%cJ#nB&P>ZRiBX&Sc^ooLzOHEYvgj{2s(YbSEP)kXQID^Xx}9%IYpHuIt4sxrZYF^fpghc$ z(auuIInNfI^nLPC_7n4998T5rFhV_$jq7`xnI7KGQT=IANy9}+Lg|f zm$+{uPB=V&i#1&jCsq}eJC|Jn-0x^f?oCX?bn7IwJo%{oT3nE=tQ^vTT1L4wR z@Pz&PH$Kru>2A*Ur*AFzv4{D;B*_1>0O=(iZEgN}^}m&4r~0PjJO_gBv|in?aV>B! zWklW(O7~*w{^j6Mpk`&eV*LC>U$#$ol zCyxTNUv6ONj(Pf2hHx*L_0oY^0XdEw@!?U2Fw1?|Z2N#n$es9bJBbrSfZz^n$Taac zM`8?=U)^dvF#(X<)TMkQ6AYP0_Aq(UYUyc{thFQo>OnjT6m02ZR=tgJqX=_p%-Zd! zUKUf{yu3VIzxaq$Ma6!ZVWmh5kR(kFkSy~A6wNqp2z(|_G{hC;j+}6xJt8&lK*^L| zygv1c&-1KbJ~|{hJE7kt6<%j7CtOsZ)zwR(-%Hc2k{q=kuox{X2r{A2DB$~yGmp51 z$@+&`nBtb9SQe8)G^+N(lP30&4($?3>GuJ)7MO)a@kH}E`2^s}6NDcNTEe~S#i-an z{ThG7am7RTQ=pGhfPV?a3`@X4MJO8`@#3JLs-?2lb0H}l2Q z@#W&<4sN+|Xz_l3IJur4E)hExzk|{dX0Zs#2t~>I3Ocp(3D{b5c2&>FCoA#7j0{2t zkM=zkFtXJEL#Es}G&smXm%uniMq0c|%-YX-xE16QK0)T&*FlVWbjx{C{VPZ&Rn5V{enyj7n z0no^qjG@g6f<~NxOww_vYOlhij|uKFE-c-OgHnMC##DVzLl|TQ`xbQ`$b{2{-4PIq z-9N>l{~;hvShuUFDugVc#WMn4k4Esg>Df7Y} zEnkfawHtnV*e;H-V15EwwoVys4$BTDs-ZZHy&&_wz)~)#d8(}38)~fZWj#j8^vWKz zPEiG#3Vy}y)umt`$<>A19<6zudfbdYw?w9ZcNs9Cw=~tfCcLkp@wg$}D2nQY%C^B% z)cd31VQFHk#5}ecUbi)grkXDv|EPgLsg%%*Bg3dThsWm9C7fpWpqzc7EL`TjkKlehF@NLmwRuanc|cM zW%pvul|cBA6ljrF*M!!VQZW5v+j2(9?&c<`j;-Y=unK@~A>A1bb&QaeWn)-`MT|O8 zdq@Ok5po&!A-FNSBZ`76Ga=7|@`jZkj%tay3&AHg?y`|)WI~#+h{aLl_N>WTC_;Xj>_D|dfH)|54)M%_auaG3-XsRtlGP#= zJ|u&AUUuRWsDum%wqujpZ+EO5hW#UlPi$WAhm>lJ=PcLp5I}HKD-C#r#OgQ71MBZJdH@{GI9e@jKjZoWwa24i+0M*<;U;w*W8Pe(q@w>U|A6+s znnN2(%kpqKEd|YGPf3sc`WZPXcBtSv5dm$leWA8>c~4$85^aOoYpdK{ckbkaIBRmb)xzka^LWjwYWv>yC@HV$m zgQN5YEN}SmyXIZvcnUB)WOiwMtMl+@mDprOW-D(RyjfRV0PTDWtgg2zE2EP`Y|egE zrx>jB!OD>OJ*7gN&2DIain+A4SXAbNOc5-wq%CYs{&vnQQrGy) z=+5`4CJoDh)J=y&{k)6aC8ijXRm3Ux=92eMfWTN|kti8xgygQx-IiM@r!{U$&?3cY zFwW%o(?qWUFHVT=vgN~8(>87tH(y{IzJ1SC93`wH-0Ge^WeChZ(9$}1^EMn*;_vUG zqCuGnpLcYi&rGl{%x;qT0^{KCVtZpGj|^hmaQk8Eh3>E!&+s;mOJ)MKK#c*%fC7U2GCFOL}y2qV&O!I%b2+OP>jDmw9`h(hzvgnX*0j9`uCuT)@W!2Z+Ve;G~7q z<}iMJU#MqMBG{BC&wJA%18zg`yUu~OGuVRQX zm;;(<)9RKO`4memVZC???;-LjtnFqzx&ROiCL^8;10~@r*V{2eO2(qY;rGm5mV}MC z2~-dh2FkE@;*t!Bo@NtbX-Z&LGWe>P$r?lj9`h$zh1JnJ$Fi23GuwPupu(+b)k_hi zY84b0qy$s-p*^cp8;iOt)-Y~T7ZEBHoONTx)lgTDMJ6$wO>VC^ak|Fi76m3I< zP^>iKF-_Af(=X@MAJK(TE*KeoD>Q|$klNeh5A?9&Cs`)1-7fI%ZgWsD@F!dpM?j=8 zl6MZ19#hzB%iQ=>0g$C4;Xghc6QJ1W%eVrOKR@ zsdcbm?vapV+ocTc_KY-bM>?b2QhN`tzNI)L6XzJzjoq)BNhza(m3UDiWTUMIpIvDf z6Vj}IqQcWph_2?->A#xfl|6gjcjCF^O+()rR=N$B0oENZW%If}AK*}G#R30xsK(js z3b{3{&L8hAhDCT*#M6WLvo|F>Po%p$(doK4>UVzRdHsNnmBynk4x7@jtyv=|JB$PU z+G@Dj7X)aVIeQlGdJ5bYCh>VZ#*Sqmn0h04TLuMh~(c^6LhO>3r$VOo|U1*-VhQRG{pBh1Q z-&Y3ptF`ZrL7U9JOEa6z@BupZ9>GE|hB7tLk9 z_PH<3>aSkJADO}y60TXzFK7I)gc{)mgF2vEl+NCWb&kDAaGn}{2pR41{`h=7v1Iqv zGOWNrWLHgXoQm9H$N;yTkJmD zf4w_BK0NNeLRIX_9l@LBjPBX1ccwt#C@CTsDD&1351&Burlol&HHG|GI{NQTR)z* zB&q{@@)+rNo|_Tkqxi(Lk}mM|9|C=qrYfPCoJA3A^HuQvg`rOrm=s3AtV3;BraEp< z38$Y$RL~$6BPVO?$#7%F)}?Y_%?!zO{fAjt8+#yVTpvVko#Y;NrN*RKurQLy?5|OT zbx68)>3bWOQwyeYSe9%t+mVuEFD~3;)(KlFyVMI`X+QvJAc_SMkUECu*8oyfFdcWa zVfFM}96_XfKwmc#r+OZJyS~9VVBKmrgR?aWv=gs;<(ZE0CLLLqf_KXO+d0u`@-r&AMO&JA64{m-?ahjXTCjuu=lt3X+P=}m`_ z&)F5o7Jqu*#wUgOw@V88oR10oqC#0LJHo|*E zS*1GW*tat2(+6-W>?@>idzES9SG({C3l}ib{ZJ-g9I7Nxbxd{(C+Z~1@QhH=e9FB4 z$=Fj~AY6b$-A$aOQ!QcBLVvR8)VKLjWj65pO}EBWUuXj^pdXAAc}uwqu-hk9W-){{ z18T_?(mO{chM=8OJEfh_;vHTq=vsmkhi0< zzGTvUC!zaCiZ%QC!3cQs0ynVbUF+B^Q9y-VRApLucfMWr>JO9v}&ZG5!FW_hn3#NH(b#cYEM83y{eM!Hes_vD`=ee zhuGr{+J4uOX1CGqHqY+(Vgni903C6{na?LJ(+BL5!*(&KT4*3g&b%PkJ`-P333GH6`forGpMsMXfo>Q zuTzB8Rn^r;^GU?hWEvzEdie)%s^`>5LarJykv^{*^@lbZ<%NWO<_W5Ui>p3=U<&9( zoLvMVU&fl7JeXdn$$7$_w&%#7dp{&zs-h>npyoEr$`e5Kc3jmc4R=8_tttVg{csv7 z;KR5oD}H;P{ckSJcPk74;vZa?A+_~*jc-{hR?3L~R#t|J+ zdvDjOlzsq^VF+a~gJ>_uM`pCkTX6$%Di$ev{yE6781dC$|y#5}jIGs%LBKzqP5<)qfwFyy|*dR{SnJ z3*J;m&sY#z3vB%8JrM=vR}!co#hhv^Zm#ant!fMIBHdr^DE6uJTHdV6$zC$5C}p64 zsTG4ye(XJQgi!9)1s}j%yt>#XVNgJQKoi6`A8rU4nHnRj2X$22gUBDP+A-q^REL@u z^Oqw_VFwuqzq3Xcl)E6S4j1r-+C~l^N+gW}4|Z6MA!*pB^!P*L!LSUN>*VeqiI1>O z#tf1nEaxs}U=POm(R;T-nJ%qTMn)Lv{v zU;VF|pvfxVCdq%9iFEJs63h^#+v*jU@vBAmf*D#Pna`4t>~k*t>91p2voQGipzCTYgJSvYZ1Fuhhp^Y zdk)MS>|}!kc;%7~Rm_a@`Sa-EZ9HFkmqYgKSjh%xIX?-hl@>2boC#c-lmJxBq^wfY zJdugKaWzbksGzf`M`gH!or|~aH|LFfK*88Q{E;EP{gG4QkkuhmXCQA{+L>|6G5+luV63cS;g|&X9LAj`NF6z2}v3A~PO$;e`d^$XiCMH~@3Mk|#x@{fI&7o^CXo zF#>4>66-GAPr$tPEo}?{iX6X=S|)Rc-wfe&$H@+vfoo&4BNvW4{2G$B?A^wTh_3xS z$5c+IPho3Sxj_501U~Rh2@CaIL{mJ-G>sOOci=O&_Zn*=s!Zq*7|`$T!wJ0}-RSXx zQAaHc!G70(3Q8f{JwJv1?Q?g^qTCM+>7)*uPwS0JMu@Hm6{$=^XcPx6_2v*MoBs3C zc($nF%_k`~A>&LAnW4_%<-3Kdb-WaVe>2lqe^hFteZ`*UH2-`BpS{?A&5leZM2z$6 zv2me7a>F0rfjD)BdVCS@W+iAP(jgy&wbfdksuVNbGhRsJCTU=KYF3xdJK)*a zslWrBhuWGZ@te}D?liIdy^Gym82A}OK^dv=p}HN-Vo+ca?iDMT>c&;`OIw@tsvrMC zV97Dte?Ba}-yFS;?-2R#9hPsNo|ChIllk91EE}pee}UOPzb!(TfWEl@S%}Bm_wXDQ?z( zGt8i%lBWYD9+09&{W+(j3h*C{G9xhr8`$B2FCtdJX`M(nDwoUszL1HYtuLiI|}NPm9>#ID8@ zdvqXqG$P9UPJK>A$DJ6cGO3^> z;)jmkTorKL6xt+|Jx$aGx%1dPr9YXOa$A7%e^PVQQTymzbQK9bImBPaxU1l&e`v1l zslOpgT?jWCF2h~@WDNALmcXMfdzo%VOfBbCnmmhfw$uSg>8+nPh3=Y;{=+DaHeHV7 zqxJp?R}wwSn$=$QVVjZb{g7*`74NLKT~f-3f)DHN*UjuBmvNC;Q+w$SSkzVaaZwe| z82@HDZJVS}kOVD$vxvp=LW7>+O=JI)nZ!={pt}bxa_R2nVLm1@S#_>05h^a%?@&4| zEn#)6Dve8AJ~r)-#UE%C>TM=m3vEtOqMO0AsWXDkt=Po9?ZeY0 zj*Kyf&l&9Y7Y5@qtGnmQfcDAWGmc_)j}F`JpZpekY+&W!X0Mw`U-#ncp! z0dG=N&o>7t`Yu`xtevVFpi92X3v{hWK*T`n?O`Z`j%-`ZJv31J5~w$ySxWWQEXFnw;FulDvrJ#)gelC0MVn(1f!z_YJdww-JB6)~B$J*6(d z!5K%m)iYf}Fq+`hADS002rbt%A(@+5pKI$&O)4z(6%|!xw(Bnqdu@DfQ;OngZx%;r zSviSb5G9nbu3`(tDP%C93-+!@staO*rdako+YfdFP6nS@eTi16@|miKoTNJPT`Jai zO|N_PiJh~#5t4nt4F?mTl*2xrt-&`f9c&HPZg1C*+uQ>+(K(5!RuNZQmr7Hd0{ zv=9||D7u{W#}vEsVy@c^im%|d3aWxSIP>^!#?dM|-(nd5 zKvNJCatJVclr;AH^Y=&K=7DB6qdMY}-$YrN*@UHN+-yCqy3E33n0`!?u|4grJ59+< z^0vrikPJ8g4P8$|KqtrHTz3}@22}U3;C#+YO6e3tf8?@E&8)nY&;;={Qi5t9x1%Xr zu)k%~?LM>})Q_WkV|CUvL5`HmO6s@!Fy!0f$g2dRL{UeYs1!{kaON#QHYO-F@<4Y% zIkd2)s%>4?c$fRnu*~;HXi|i@h|+KlNvT6FZ6p7&b1}mh5;W=2A_>ozvaJir%UN+L zJ#57!moRI26eBOh_0j~om6E6mv08CB7$qcYcA1LKReaz7?ouSw{uD{*IpGE2Bwd8~ z`LPYBS&(I_`B*88UaUfTI%m$amisgh*qWLWhO$##v}|xAEn~o`(&`x8l!Q&|s7F>v z(aiDg!zVPRv-Ic^Gp*a>?mfH5FPY3c#CRAwk0fbcFuc`d8N1; zkb^d0htRF1&n!|4ymew**UQO;Bb7d&oUtf6*W4fzYs%+mf8TY~=ma}@7fBU;OtbDH ztH3VAkRn+#bw-NHXy(ZQD`@~q}RRRx03MQU>DrIepcZyLccY2~_$0QpEMSiy%Uw5d=XSUo zRCF$@T5-y?nbZvV@s*dQk5@DARO`yh4yC;$EEr>*qyP@uC(Y%~Q>u*N9yA8VthBbj zQH(Y>TJDRiGEdS$;&8810Vj#4kk@#GoZk_MV>=4hvGtaE`Uo~&?z2ezusgRFeHR31 z*SQ8LTn zUqrZkGg#!U14cAF_-f>&EcI1IJvkakk*_e(ragi4GBtQyY%aY6{C8sv?HV%|W{>g8 z7s4{AOXZ5%FCXHD3wy|wz#)*#dN9wdZM6wF$q&#XU9ye3xVFhyVbJ{}!N1%*5JM#>C0V!0hk0_$JhB?2yI&s>m2b(0GxZ;POBhwn@m? z35OYy87wQ}G|xI7Hd5|3E!^m2p{oirJtn-loijwB*@;&oX&p5%K!Q_%2Ld z-|7kjtmsY*sC=-XjI2??0oe_lsnd?A3D!gWIg+HD$JFxFkp~1fgD7%Arm8VFFgizG zM%-V0D`haFM#-UAg#*V5k*qPPPy0eC@xM9E)HD6ooHbY)4H_mIgX$U`2~D3E`YX|fZX@c^iOEAEcvCiH+P-bMKW z-Q6qJ)^c%LC_J@7I}am_Q7T(PdlsHC5|!T4GoV0$kPjTF*N(VpdNG|W1_2krXF|vk z$Ox3M^(g9i5YyNqZPW(ka?JekTTQ$z0DR>8ioItyC&&H9U9A`&&1q33W_N7#!6o2R zIXwLYO=*zIeh?Sw5Yrro*=519#-gwu)TlcBR6nW*mB+;_^X+^^iInGOOf1PQm6#jX za0N))4cP_-z=MzrgAT+@36(@zX=jw=!B-$uF)YC1b2}zF>h2;L-gzz=oS;;`00GL1 zvJf!TYRT9TCIwr_QWuweDHnkCGf%D_4FqQ9Ob?5l8MvLc}hvN0~^dl53 z)V%Ag8Ubxk(n-pN2!K?ogyFgioxp;Y_SEnv$49OavY#xUj^^gv;x_myw&b=Z>Ne)y za!#MRV@&7nPBa|9j6Qt1zs1N*9&;A21GDqj09m ztUY&%K_q88u%xGWz3{HxlLeFav*97Z$4}Wt>BWWZDPWH)oZYZxDNRvG^(rUQj4m4e zig0J(Cqw5HJ>xy4#R05NNhZ^<35AvP$+g*BXy3VG*yEkFI|!ZB`L&ZgO1d`8h!f^I zyRl$hG6cag=2f0Ng3dUks{hebSom^bGBl8)Xf4B~#xo2*ccQ_`w6WTD>IyyiP~wef z>%W)s?mk)LaM(e-Ghh|W*yT|AOIXz`Mu`fP>VqCmyXT+`y>j-AA90Wncy`R~m&U{@ zwRe6?Jvc7*(QM$RaNaQRF(6Wu>jj+qdAj379n7*$z&D374=~;KM+Lz;?T@H?Azwun zF=@qkm-(ayTb)lHTZLqg+5~}38*!VUQ|!VHm9r=?0j5vJ5pNt_RVx=28sF|5a#q|E zua!q;Xcj*1OJ!|iH0)^aB?GDdr)V?>>ugf zkfYXWJ_?FaFS2}F&~n{D-RW>iE7h+y*Oq-Df`m$x4&J5TQhgI^?CkfU)_dCJd4C#= zd!)iZKp>5RySy2sU_<*2h#ZsNF^tC*cC^BYC&W{CN@NtsJRM|KAPKOslDdOln{Z-l z6%x_6Tx)oSUx9r5nvm=5!bd)odArth&+PgYAbrh#G>~6?6{R1f{^?emBJ2K=5y^uqA z@`tK~b>2!QoU}laMU)XjelFWRzpLI55&*?U?kZF6lmMr0{O5h6b_uSm-ZwbUShS3| z{BKPtkZz?+hNMb_H3aAQKN3lmJ2b6BR@W@Gxjj_k4iHprK6;ndoIEbb0G3sI0{ok2K8vFqYisIa+PyV<|QIyJ`I<24V z_w1ybwj7P5e^pAbMq`es0=QV~Wha6ojVOt1Kf=fH60KZ3!wL5QD*0vbGu0m=@!~ph zK`Wtr3m=1tu85PE6f*!F8lcpZ|3MNq^agJiT`#^#eE*<} z-iBc3J6r;iBMV$>K>QUrf&tAK@S&!MB6|ZhLQ&4kky&;qc*!kNA+^sWT@ERBJpB6| z-h?uYAVvX(qHYU$U_HRl*>%7l@p?6L(8m>I%>>j*;!wd-D8eL+lOCVjKlu-klK7iM zjY4wR(&`^WP-1bnf_B8^+q@|R+#Wn%JV>E`81_zdl#_SlxwdwhLyWHoFs)^Uo8n^pQ?ETUvfMgfFT-vX+Dq^h+oJ2TQ3q?Y0XlN=& z2FbmsfO-iGmZrLDY*r~4i`w`X9BZ-&v!mKJpRw4b*@HU;>aF&xDYh~)2+Ld%ie;y0 zXH^$Rl)p{LXx;~uBd3J2?0Y@QLMb&=7XG%9+-`iyy68-`E&}OP#=Jtnbh4KiuhtT*t*-&89McaZYS7xy5(`%@9>nG0Gc; z*HTHOga=4*Kt~+c1{e78d2oG9H~oQCSi!Y^Ea@7W+*~DBPDLhzYzj#XxK%7k%^D^- z!JTg}p@h+!Co1y+5iQ$vqR*H?Tb%e!L==2Ga(CtEd~b)A(OFYBJl~kG_P(4zW1T!e zh1kCM6Tif&$fDXUNgZHX+8nDoINw#G3MxBbjW4^vIbE8fjh$|?t*Uu#lEv$_o};I9A~y*W$xdh+8VeCoFyWngbkk6o!B z8%@-)eJh!DpO{)Tj-3~HiM^u$#emhWD!HD%>f$FiIHPTgRRp0_qLM5d+>?v}(*bP5 zL6aPgEAl?<>{Om+lJ)V%NP---mIYha&^22lq9e}c zb=!p4aU47cq_xDB2Fvp@V9_rVvxZQ>%V=t|U()M6j7P3BTqJ*vS4|V63ucgl0_rdw zoz+tr1N&Suji>YZakTaD^6GBLr8hYY@&-|OkRS|~d#;6$XlEGZdKKRZMSk}U&_F}7 zFniA}GWosp+x0E0@#tx$B$%_{oWe6&{wjx+95@Gz#51s+>v=56eW`-hSaO8LRJUUp zk{PKY?>5#O9)tXmz;O%@moRz4CA5EE!LPv4e`VY*?t=?TFePao7M9Gtx3%p*l)}Be zbuY4miTDYjpAL>QnX0vHGbghe3yE#*khy2hzbk;a@`-8}6 zbW7{G?_CSt=W)`u>(y*;WDBj~=FeS;9-Rj?-c;A50#OBmpZMSysm7yK(k}TuKjUZ~ z(R3mo_fP`k>R}S$=i->#2P^Ht-Xw60ey3YZX4e5_HH2`8`~;nflaBhEkGb~U$wCp| zN0jVz*tayF-(H;q2;y{KgO_%V4}DuG^*1)n^(n0aT!nHpRk#MtJegFBL?5ev#64~Q zj;unLqUzm-Du3{qLs3e>NFolp8JB@>dR^c&WVI6UIPcK149Y}>#OeyXAZ40IVq^v>~xhC#NOA?sbL+ zRfU$ru$@T4$XPM>IhNvCko1Yuo&YZjC?$bB>A_v;h3uz>K_=QiXrtT9vHLGE^a^-nW<0GEgq2nk}`>Fj78dhi2>=g|hq) zeRq2}5wl#5;zkWrK2(!w&uYY5yHRW{Fup=fUOs})j z^1{x;vS*sGWV0hy6=+&E<5NT{onxm!-DbP-$>fgsdK^Z(MB&PI^Yesf9_I6GtjBpHJjalEU2`iWkyBLZV9@``&ik}}<4*VP4RW7Bsk?j5F)mrvIL~3# z-7qxa8p_I&?8n$LZk6)h87j{wJ#WAVj|O+=40I(LR+`%Vc%|F?K!DVtF1up zP%h;f!noIph2L*ekxL+A*t+6sD4|P%?Ml1ZbyfJ=HH5V{gW$S*s$+q`@@m)ykgl^v z`y@p_tSnkzUpwCW~DqY#s2bzdSOiSFVX(cgJtbR7JrfRL{=?iEei< z8xddl5LmE7Pu86Jd>y_mA7)AKW88mi|EzYCzucOn5Xy31?_3X6I-|f-#Ge7^Pl$$s(RKs}p_m4KK!yrohj* zLFH)iftxovr*{KaJGNg*8Ig`pC5fQ21#Z2NnSD%@CaYV6`TNs5%45e_PFJyPQ@tk9 zSrxD^V$PpP#8&)o5rz5)XUCwjJ4lX<*sF)onp2WlDxrqmfbQK;sc^=8_fYHt3b>j# zJ-Q7u$kpKC(saVK;7U=w3tqO1+I3vc)%Y+0-E2~CpUOj#gsQ6cLg-R*) zKXUj1s@pJnkvdYfF4+Yx{nnY%O-z&zp_&n+r8>{mAf%d7MJVmaVM~Sg;FKZNLQ9Qw z)bI{Ep!*@PAnesiY zY^ilnLMT=uOtvs94KEYGHzq-{ResOHMYJ!qb36aA)wi7qzy$_13@Pc|#i z5HNb3k2FP}xc<2A)v6;isnU1llVD+E)C$ln8GPH1#vivqlV%zb}9c1vkHAYc0f1kkmu!c zZC!2Y9Lmyd;=Mw+UGR8++&(`;@@;L0-DQQeap71qwUd-Z@vS0MV)ud_N3(UHvp<_g z6-yahMFX~kHQT-S79!v>??Goq!9&=0EHBT*fSc!vbb^o@#WMF^>=oUBg>jh++E>}c z!E-KU$C^gTkaTw9O8a*#W2Y^!{WXvJz zBoC-}wIX+&Amwm%m5}XaWE0g&Ck5VK9EYNL`Jc(t;^m}q+tHHO>BFkpCQ>vj+9-l{ zbH;?u5}D9t{sIF@Xe;gdP~}bK#uEy>VylWt&>>Xb15zLU<;%dIQK0iuswgDMwJhyw z`|yk!Hp%Xqmg=KKN6VQ`&Vz@b-I4~SmHLLsf|IJ};c^t=G*o$Y6X^JOo$D;GxpvA&6&>9qNlE|9mMEk;ltqFP><_p(5MC^hO?T2>3aZaiP z=-DOj_FZB7bpII{Fc!M_;q=X^;D`T)()`T_TTw(nSVn}_#`wQ`w42myoYtEWKPUC- zaLuSTq9g`gXW^UAL?zF~tM=EQGg~o9l>$g&fvt8nBZs#iIkq7&L3 ze=)YT7#3)E^=S@g{Eh}FyJB4x@<4Ok5-62^Zim_PYRCZ}2@Ymd$aZ#AS!Ti0A^zsg>BRXeHZ zytDF_fW+irwz#~%rHR61Q8m(7S0L*e(3O(&wnMiVmN%g^=G*4B4*m z99f|18)GwF9~me;Cq)fal)Pnfe@CHeZf0(uFt3|?>{TVX6VE|IXE6{>!lup1_ zO1qAn6`*Ae0bOmsDAEA24Qk=Okf2sIo`5{0j%N~!XQDR=x&{xLG&6F$KBH=Zizp(d zV2?aT{DV!AnDxk7BJAhow^`3!Q$T|lp?EK@ce?fpf&D%T(Zu6}s;V}g0?qFGHegnN zVjNnOOo9U{P?Zs>jUgmphF!w`>noPWDv2J57i@iE<@;6cc1Domc7Z^DnSJe*SePf| zQ#|R&o!|9W@CTdb&6tS&Y6F*-8AFht#l;L%<^9e5Oi)Z(93GqlZlBl7{fV=?r7b!% zh0anc3|%Y|b~Ej3bn6(+>zk}v+|kqL<75V}hv(~AO<>l>2qxED(?eJtC~mV09rL z=+Tqdo6MvkYwSL~_}ItZq}JhT)4s9y6Wv~CUH><9G4FE7G*i}{iSrGYWdv#w+6&sR>tiD3swx%nHh{w|zV}+~nZ0v6 zrhF}<*DpFTSupB)xB72+qOVSx53w5voItVL{{APGTg|}Kry}0|3wOSrWL)CUTqM7} zwhBL$4#U*1?6u2Gb$N4g?%+S`4TC{_v?>-8gh@h93Qic$P^5S6XS%Ln`CORZM%D@M z$Uk&vDCI`d?yrA)e)3WeF0jEV|3bY5wTsQZjvFvAd7x!Hi98A^dKc*f_AY!i<@>Fd zTzsdB8U&y9is${l69Q_3t-_iYQm$y=`-_uUu_d++7q-2JI^W6hix-mEce%p+m?~Q_ z;OzGO!Wl)i?PkKk$Kms0Y^fr3X$KNHJ0R5R;=k^A9aDnLV4g}-i z{$_!ks%x3TOuhs7V>lJbS zn-#6?%>Jc@{(rqH!M|8l{{Q=aN&d#l-`Ku?dEfsRW1V%|jxzR*xR(FMS=0Z`)xWPG zZQ^QT{jU(VDlxs5-x%u9D^I8mD2_(>xa5Q)U5G+i23(`*$UO_&o~EEI*Qh$ToH<(g zGcunX-xCX_OfUfIDHO0Wh^JnB>=Gw`l@vhJ)}mbREd~BPW~}xE$T0}j+$b2pf^})3 zXTYeUOjzQ2Tx8U}1FmWZ0khlm%2(Zec*z-hhqP6R_|W&XZN>SpcA9kT82G5p1Tuy+ zgsL>)VXq_PcU1`8yVIEN!j{g3@SZhy|Bovzba?qbtIyfp%&j%K)af5yzE!5L0vje! zUm^cA`NvcsubKJYw1n?XWB>b`W@h3j;AY@x^0%zRUF17$`{)riuPANxDdHvZ{JZ-? z=kt)FXvA6(q+*O#QW^O-afc-Q6>ol|ynk$LSX)3t>z5kaQ5wD9*na6`6$4l#0Fbqk z)iACnsXC2_iYuGcjxzj|Jy$hz{LRou3x6p=Uq}#>#C_NC2u$k_$j~Gb*b%58hDx;; zA`SC%o#5q_bcuXJs=9cw9lh|TsTyfAIF|kNw(p+qTVN`7e(A%iZoky~0<-T^bpafA zGJc6HGVGcr>tZk33&&>T@`tD*#aG+$Q#K!&?FblF>pv-93|qp~Ref(E<@XkH|IfGZ zZ{zq~qQ{`Vw^8Kj4zG&c}C54yK1!vbebJR_K7A>{e0SWe*DmR5T*bH&=m z1dy5K{D;I~qFd^E5+*+tNNx|X*NJj39;B60%K73w$xvw{d?6`$yrjTM&*dWKE#9iz zxC7P>D8?Lh2L!j%GnN@TR&-v3%DP6Vad1gS7OB|8v%c$|VcdIPjL;b~Z&Z7X)@qAQ zq^890CQUHZFAumNhZnKmqua3f|GB7dQ#-JX`tD+>!2$p<{g1ZjZ#`fGsWNtZtO%i3 zuc%JLgpjuma<2!b3n73t4KDTSD8mMnjzow>;>q|9!G>R6dXkQ;8O-3owl*L?MHKsg zndweW^S!UL=qRYqI35QZzhb;^^ev={IQV*NPcv+=aw2?!fNr>kLN>5?Md%)j*CECi zA`;r?8jFO0&LHxMHb=tAW8A*?_ND@j9}&j>TeV zWnQ*j8N^xfU`W7eX`k4N?1t_$6X*ZLnUldMYT3OJTAD@rd}-BO&$oW=#Q1Ady%>Ke zpueD?w+}=969+(>{R0w`L-R1Jz>~Y3GbXCFF&Oyz96h*^K25X2o zDkIUSv3aqLhDG7rJso0lEKyK*?st**Yf&3C`Zsk;GkKvfO0qv=-Y$5aOenYcjWst= zp2LWBEB}Y5BG}wS81`|TPcTm2An&?(-@nM2O7uDC%7 zW-b`hU(|4`u{O+ZY1hj3*;nQohX}t#>9oDf&U}i^fBYVx?U0;3TCwEN>)N7{kvh^c zHlJ>;w&?99JZ3fj(~+9dN!kmJA?)>vJ^O6_=q`2*Z*^zl zDssml=f1Jit;3K_@6)vtwapD@#>ZY0RjmxqJ7D;6!wt;LbzooT<*eiaZk1?^SkKdG z0I6%Xwd2+I_eNJh(L$`hICy{h7uw34vh{B*@b(Pf@%4#|AbQOS@2uOVx3Y4-FimMb zRb7UuY0;;g2G7KIlbfdJ|HcD|@^2n|WfLdo|3TWHB^bOU{_cX+d}G(x{wJ6C>pI{0 z|2viatL$I(e*_nnYSMs2NkJ`s4{6m)#4^K!u8Pzh8{*^i=8~==5k!JX9QCYz`Glp? zNhMMfL0wU-Bc=?w3f%HD$#}z89PYe+S;Q7`b-osmvkcyKsk2UIjXP3Ee|+l4NoFd zhCqNhoN3$C1wI<-5|5-&J9_e3Tf}IFS&2bSNWN<;^%AOj;>674xkorZl;Fq_-g*%7 zt+_>V9OE=dj`)S3O9+~n#)qkypBP8CkS+tnJGanfWRj544YN1H&Xx!2vxntH=or22OE&nrcoTfx zbQ4?;`3l(f<`US>{7Hao(WjQ>1bEvcE~OQ!JT^TP@?K&V>P@#L7VHbmKlZZdRDcOS z7do8)`vwN*(lqlqvRnAhacr7HnwU6hgB)<8IXyXF9N=&qhDGlyy_vW_&L90BY zHGPqyGaPNb(;oV`BKICfEGwdw19GTmCAMXau9947a)`YTu&SNg+A2MOSuJ#(DeNC# za{^lRi{NqSo6F*{;lB3f+G>&!A_2CG(}kbcl!q8FjG?4Et1*zZQ!pitQ`8i-n)X(k;$*&LFO*@;`Q>|a>$%=B-vNra@QO7#x&Y++kx_qDqLp-a_1fgF&(P?CF zeV|<{=Z;bzddav{fof!uI>tPEHC@yd*ms|t7PV384y(n6tadBkFiWss?;C>VCB+2S zcMcsZ#@Pltb_VT%yWhL7E8Ui7+1>|5B+~mE zH3@)BLppFnC+i|i!tZa3pg2y2gNdG7*l%p^&7F0)+k7>9qiQ>~sr-~VDi)&$A-8@K z%4(g!9nB1A;G8`A$^-ZIjw66`dEnf)I@$|O3dD+rdFDqX-*eB0^D?a}kGl4E_C@kH+T~NSdWn`vR zX8nJr!`&xP{B8oFkNL4hkb#v<$s9|2#pQqT`&L)+mK%sB19H?;wchfcMq!)X7OGNR zuTtBtq&cB8qX5k7TKeOI2Y%r6fDcF)3#)LF=d@nUPSao)atA1oA@vveGcf7Wu8Nsc zr@vu~*;!bkiZ0PK9R$r;04o=NmaFsI^6-EpvCmG`(GD?NjZo_0+}n2l|h#)O-UHU_gcgLM@Aw6=h7RR8%~5^A-%Jq5e% zg}yNKkSACF5MLYmBoxEd@#hi{?28?+b((0p=ghH=W%o=Xw*pE}PAW4S6;gPc2WyGG434iJX$`Qi4#f>0W|IenVJS*Tb&4=c*&3BW0ry=B1c37R z?%Z4}@>BI*#vwU$;}Hx3e1LVXKTqDEG)W{B1RblLRJ~v8fMEgd(<`A>3_`uIlCX^! z^@MK4mL=;dq0s-L?VG|Y-LiHowr$(CZQHhO+jc5u#Yx4sU9nwZB~@`MXYI!6)BEZE zYxmjxU#yFDv%a~$@y>yF2#n5@MrrdVw2UV^#;4n!0kV(`bkC*OmV+jM)tjRx=R7el z7qyYKTzYk_E2k!h-WWAP)=PRUIWZD%V_xz6xC)2aWG5olktvxcyDgUCDx`u-cx)^Y zuCWzqgTEtY8_>lK4O&J>#Zv2(1g5Lu1u?W(UEz zr(cMG=aIV8WsocM6U)Q_jh zwreP-{xfO4gAp9=5Kd%hj4{t2j%r#6*rwRMUBJ0S4z*%c*4T`I6oK%J?pDx$TMFZ><8o4caICSZsh{%7MwfnVe3e{`6+67` zS$tBZ%83IO_Y%+|xn98$Q;*%#eL(nB-o=!ox=Jx2CPJ$#=5TM3EPa`aJC22d)Ze*% zHa?yzSE{|Lu3U$Q$8|-Cp$)@9ki2(*i6xoUVb4l!axRh`N&AEKMX~T{u_|I;T_7l3`j>RaPqA2iY}1xMc%>yF4@^XTf`88n}Y zsyjTZRcpCGTI;vcWusIP>Ykmoaj!K@BGJtK_N2HL_cmml)MLlGB`w+WF)8(aTIKL- zu%F^9Nb7ffRn9Mp!>i>qtF2N}m9FBP3Fm#y=SVZV{GC#kRK>Mu2E^$vfDikB;wXx` z+1Yvh5mhV(V2OZ*04$ML^n2Nsh~Ebo^z(*hum{R9*SM=bTV`4F#L~yB8R{?ZsW$;n zV;j`>Ns^m==z61%4b3l0i?wExGDTvGh}g~D9IpLYh4A{!6iz_$@SK!5qAc;)!TCu( zBhMgAXS;C*=RZhSDSLW!P!FJa^_0;_X6$_(uMs@-&|S;f%`ivK2%brnhHi0uBTSO$ zeb6o*v|72mxTX#4`|xs-IWtHz-)PJybvz1T^nS->NaUXHvj75hLcpMxKl+Y@j9pxv zjZFTaFFmZT_uKF?-<7)62wu{ll&*4*?vBb@#$E23lp@M?;L@=cSzNKNk4PJofaS-O z<5o7!5SWaH{eja63>FsQozDk#?rZ2_XmAngl4Y&^0r?%zT1vWkA2D3zA7t<#350|= zYK#V~r}I062HB%4@=DuKlXP{BOLq`|i^Pq^CA2+PbcuE2Iivh4;HcPjW5y!wVX-s} zF#Qc(khIgi3(44UGvvXd;UO6PhSTc?NspZwXQ_eQkD85kut7=AP#-+qnLJV^_PTKC z2(4b{K9{A%PvXMSf-0G8fn;cai#W&FbNF2Ix;k#6ZQW_+FN#HaJ`;Rc8%}3Q3F%IK<=|Ve>d^LS%8*1s_2= zeHI-9Xb}Vq(^hwTh|!vev=LfOUd)Y1?>G+#&N1ew^N_-J zsG03`1g~WxT;*tLSIR00dQPtP5VV}9 zSN9%_(W5U8j7=%bUJ3i7AZx&|7N329{LgP5Drhb7qIG5&xgYU*^FonY;O$6%#8@U~ zPN{3)HqZ84<0yMl^9bYvf^*a^@pD}-i}Qo%X5{VtT#@nbM!X;8%{;M#FQMQ_?kjR@7n^U6WEg+)7B@>Lk{NO?mZyloGfOw`U|bR^Tll^E~qPl)pqU zx!qI*5#4N=veFk})IVPxi_gmRSL4gyT2-B%gQxL6YtR@Qfj`6*jq$C#iMD0D^9C2*n#<&WmQ%)6=ly1)~Ml_1S7UFkdQkU zlJkcucV3G0nKL)F00=r63S1~V8HDlaJAHqKu$E92bv0LTF#}##)Zh>4$H(IbTNjXz zj$SIY5pl32Bm9jBl~ThWzD9LSd-4x;ga|2c~b^e zav41z5;q#kHSrbFzYfy}`n|!Mpmc>jFlk?&@qMyb=?sAPh^b^yxUr%C#E~<>1fedn zF{vXZ^46Of^ZV5%OvXe`sQ}|b4KOZ$l&Se$K=doX4y(&K;BX*zpKHLv64;8|;(NR3 zGz%Yu0F^ryA1W>h^^r-?e9=uliqME5eCK1?OyIQFMFrM|LIh13%;Ip^hJ6}T@IS$T zq0x@jmkjO1ymHXHdoxzj)1}=7);CHOTEP?wbdn1JYL1iAjLK-9C3o$j@GdC|_arW6GafZB*&QoN}eTEV?DOiNK zvj*l8&3BXg0jdKJT;J)UWO0NsFz_fdxPt*=73&IxG6|H&s}EoPbZUI@G$jdA=sRIp z9#f>^IjZPsOvt41<)<^Dp-i2R%_h3U4HWzmklKZb#j{>K;RG>Qr*w(SKlJw<-S<=B zu-_un@yHs-xEi=Cu8Nt zPk4Ra`pQ=&uswLDxqc!KT!u@_%Uv_lQuX?*i$h06K_lZ=5m+ch^U_2$=d3z@h~62gDgx}T7MP93gj3CM8P-&=5%KCP9So;vH<^r~|L{EAJe_nwS?3|~E4)ukY z*og!`j9qpXnNjKsnG(7OeGU~taxA^wB-?t|b|51ra!Zri91{GgUid|Vj6=UGW=k(< zo}^j0j+)gyx`C<7Wj7X@)NzeR`ueR6debl;RfZ~p3k6;V4i~v6CZ7W{RfSj|qUX=l zy<%L=3`^0UXlMb5K6Gb z6f=I$tVLquf8b%6jso7CG_UC!*Nli0MZH%J;|I)R?MKPmxjY!H<99Ke9 zfNAuS2m7x6K=1zf;y%kiEB=$^{B<0F;%5dZ{$DY|f4Gp@E{REDkP$KL;Wc{9QQM0@h6H#7mO35gaFAE;ezf)7 z%jrVEAY1A(A_h(T!fu{ZCakq~Wd-E6K1R+(`He@T6uMUKgT8xR@q{)FkVr4#qg!^> z8c$O>t=B3a{GscsL2~W+DPjSinhqF~VK zZxQzVPrb>(xL7hzW(jY3hdfN2bHvi;vkB-L+v{-R=}iZyho=^L4h^KHV{@uo4Hnt> z$mMk&CH%hsu58q?Azr~B@aFjdggMDC%hjjsN3lg$x5$xp4Kv`c>!^T zU0;iFpYDex-!#0ua5eh0bYXCoUNsIckM^^1umFcSWB0UvLe{$P=} zEp5IAgXWmD$*)RRtY5H)K+^PpkfVQq_v#aQZlzh+#`vElpIwduE; zVmQkC+8}$!r?!jYqZjaHg6||Ohr^**%iFMA`wu{M4%tBTU#3Ifar}gUDg&!Dmw9SI z$DpOvx+X+P>vz$5Fpw@x^Uyc29fiMjZHqJj=U?xYPo+Q()hS0+1q(B^Q?XFhlizV} zkTV+$B0t;~h0EHT#uc~$i9QA<7ZKOTDLO?f^rU8edO*?{=cbraD-0AFSED%wYnGG}*EVJoHVdg&_3YTlnx9`8qHWGM@-NpW@xM2jl*Ce)01yMWsFf z+QITXcv07P?%b?z`i$v$o^a&=rKR6uD*(`K^5!ANT&yjj%N=UG_)_8)O~awMF$* z#;oMwl^}PCC>#f?K3H(yy`gK|AYgVK(K|pXJr4e|o*vcBZ0FvqCMWshCWIBu8MQ$z zT+O7s_c48`@+yl`mZY+``Cr*h z5v!N2>HKKgthXh;9Nvr;U~TzmI2U0O4q-6hpeiJK!RcW45jz~{PkB9;Xg=(E6v02o zZ5vj-6PF%zqd9Dkv_>|-T=#sd9EtEc_E{=LJUiUwOL`;=l(_z`z|X_EQF<8p-Axmx zrU3tw^wG{1)xPsqf$)8-OF}4scF(jLxNbY(jKRLEW-^~b!5}c0QJ+udHZ8DgJn`)a zzX)~lZhn*)c$MDBZXD+^rf;KY&5~spy%{yxZj#Gj7L@wTF_ahu4&c$|ygX+zR)qZ|Ew^mszgozln8q zo|3aFh3;L$E{JZ@OKRiR-4Aak8Ge6oA~K4|>Ur8^{QaW4nW#1%w!AMS=0PuU{d0!( z;LnrVPeVZM&oM3|ZTcc^-meIe974VkKmKKS;J>c9 z!u~hlH8S-wv;Spc^k4rb_5b*rj+TyeMvhi=wpPZ@M$TTpe8xX&uF9PH`04@H924Ny zv;9ZUP!SVRQaC}guZO-*JpSaR#W z);X#7T_WFjcSK{|v~#hQLx=xxBJ8)|DA*84V82{p*Q&QAUYB!^l z!OZa^HSa_hSy;A9#@%*TUJ!f%zl=~2D0D;`j!(oeNHsY6d;*@EUdSWhjP;nOS5if= zM|b+uKFF&p?htqT#rw)MA@W^^-CeS!t$>l`k|9qU`k>vo-N4RQL1&zsM|r5L)+#t6 z&B|o2r z~Ry0@D@F!2i^_Nn8d5A40`-pS*KcxTZ|08&~IGg+uhW{GstpD+I zg#OUQ`UmJEz3EIP0PKqv;PdZR9sTvP{{CY9_OJf>G!X}Tdoz>YIGF!`GR9H1Qg*uO zc%Pb1Ud{1u%nQV~6c^-}7_{8GyIbWHAz??Zu%+narLI)tQ0rRjT5bBj@G$@S&HcOL zwO{=g6*FgdD-*L{%IhC*(EM@Iiw&SQ9su_G-;IC#qfZsFG&8YraC232wX(Hx_4*Y< zP^u^=1Hy#bb)wNVh;LnZzir)usz4mPZ&x^Uu?TlX&g69lvG8u6ZNAv?gD_JBpOod! z{P^q0QaIDFj%zqfs8@@a8h^2#RFKMu=wM!mSlqsdk2lepQy(;Ku15XD&lylD-I(@X8>O18%&QT?Ls?9!I^F!@TRR>&LE$Cp0&h<%;?SOV z(iiWB?Nikdy|rzT%_1U7fg3m6S-HqOr>w=$Ri!x7@o0T)l)4_^D&LL_Xz)e5OL}>1 zSkzR9_HL`iZqej>njZ8jOL%hg_oKhi?fCm65^R3R@EA_R`o{kUcmo3 zggbKlI6n@M-VT7rk^TR?ZGXp%oP(*AIbhc9A7LZ6)cAgj^0w}1cwH&c=DK~=!;sX1 zgUFDXXVjRa^Bh0RAno@a={Z^)~tzOk7uE7j;S(fVk;(@8-d~Yf=%%a_6Mr78@9s4Um&?!D+QValIos7 zQRqTRLVr*E0;>WtAUNb5EUyQVr&<08$x>Z(d4azyM#h3(n3o^#ak90|=6=C$;g?R{ za}e%e@ldg)HZq^HY;G%;TeQ@?LO#qk<-NlIW}2h7z9I^J{0Wit^;TK>0f$V!f>uEQ$IJZKs5aMeddXtA zuvspar$*Gn%|vx;qSZX$8xM5V``+TUBi;~$g2z%1+Q+zVIFfu4cW8tZTHbq6qswZ4 z#9rPlq?a!@0Vdh;Is!AoGkq(;iTx`qG;sx8^`@CJut00 z32-bByUuAm5e?TYb9@#gKwAalh%1m@(7}LYYD|DpE1k!Og!cj%#FTDD+!4#EwDCke z+j*Lrcy3=5jv8Z$rC|D!nF+1*gQm<22slGxD2;=OlPd?PYM>Lt`z8XXl1$~ywQn61 zOTW-=ky$JW;zt)7AUVyhSsp4d6K5c(rq~FYv4zm2g^U4PvqR`PN)2mL=9Di=QF7f` zRHgwPCrW*)$>s5$Ym#PO*)}kh{03NJq}`OQL6*DpMN{gmdgJE}Cg-`?ebnds!-aXv z$=HSK0k;)-DK@%wxOlL-JCoyC`cc{z@6Au`{sCG{lyDl(tzs`Cj^gO*jnDC$TW(9^ zLeYf`Hk*4u74GwQcb5a~KZ+)!r;`sh5_rG~2_i#BKacKqUUA7e?NmQBUm@gp$g;^c ztf`8?_H6%;x*SRUm(#n@h-ZAhU|&JM1ff6Q?YeVr0&gxq2oFtHe0dS6HhWj`XluZK z7W`m4hMVU%D7_%Ty0ki&a~Au(v=Z$i~iNN?mvGsVgHI)psx z(6d!&mv6%su=&3&C%RMOjv&(Vv^j@|fZ>PwPR(;yrtK%+_+$aO8hmo5Z*Git-ebk% z5W$q^-3W6^lU9WX-m?jDf;w|c$$Zzx0G12VUQSP&;75xEz=T*#woyvLJYKPTayBnk z5~3zaq-aXp7ZkhV$U}wJ#fCK3vA1MuW^lSV;~Q!e$pc|R{P{RmPD5Gjpjl=)!88&* z9TqYqOkrW|H76T^OcflQh16)@EPO<}Q@*6{g%xwDL>c>GHn7CpEPIDcQ@6L|PNH77 z_H)qFf>s3TPv8StD1s?)LVd9;^2;L;3-Sh>M!gmL!{?v~Iq@x*T4u_Ys^NvI8fdJ= z(e(GD4@5_ViOrccY6vrFx@s1iKly91Oo!o@F-!rYj3s}TuWykoS`FKB5Yu0*-b<7q z7Er&hpX0$_>BwjdFAi|6WVFHs5psz3O+=aCrgwf$o92Qqqk`|xE!zYO%0v*oZ1)~;1_k|nZAz5-9*&v&T zQ-HdUC|*5f02$_@MEkj{tx`MC#U_{E)LxAFbG@Y4(cHZIK_XM-`Y~(G_4*T|$JJ6+ z*1&Td#(o9+err=q&+jxrxqQo+u)RS@JP9!l$231i?DImt8lg;l$iEOf^3_bcV}WjasBDk8yhdydQe7Y zQMyuLH=4c$(*je_w``6pglnM;c{VPdN`E!+{Uq`L}U^h75O^#|$X19*G0*7`7~0k z{3-z~zc~wPz&@Cj!_Sv*`!8PQ^|$M5_M`Qz+Wpj;ZjazGVmMo!m`-Rb@g+q;CC{#` z&+VSc@j7b9E7=e!pdgz;!*;hAx4k!4Vh7}w0pcx2X~X^Fm2e}1;*a==Z!)5HbVT2S zXj8o-hTkil*Pk^{x#I*rRO*z*<}hav!IQ_0*45JGcRvFEvkr({_OCn!i0uu~L-J?6 zPI(8{KkRi*r}6;2PSh}ucW4AWX|hxOZR$ucOi$Y+>Vr*XnM#z`K;oeQ3aKqhsVE0! z>Ll0(SCat#6|PZ=lW}4q(MGbit`@&lxfBVX2sR5?xovj*b`SsolT}#`YE5U7| zgZdkIja2xz@}}BCWZHcEOr`W3O*}MWl(N<2+UreL;3rLARv5GZOYQFJ>V*p#QqDY` z@jE{ACgThvH1EXOckQ|vb>=j6ij>>vY1I|Ud)O)A(?J%}obRd9j|Gx95nQyTE4z}r zxVTa-D4Q0z68Bz>P%&hKg$=uxMchq3Fh^_6q|oUR*R@UGn*P5?g)=78Qv;@bRvhBhwVsgERS;Qb@3N3WP)*q~#`KHfdg zIJL($M$a_hy$-9CVaxk^*}cXaY1+>}<#+u`<(^cCL;$Qk{}y|8 z^KLt*6+`25L#$PgutmFITN2OG510jQs9Y9u?JL|(D&al2OZ-?b1a!x9B^ihxA7=Qm zTz6b~{YqUMNsupN z^1_O(trp}|VoOkXPqUArEf>;iGQ}iO*h9bNE+#{-)#QM!t z1~`-U`*T9?9MAWYUMC_px8MYYG@s=)!MTj;H@)i%eS*Z`i7@Kl+UdTbDL4xuNI;nc z0Jn0qa+pnQT{x9Nb&|*tl^_BAIEoTh&WHN=!5nB8r3`7ChS3BFi7)}w--{=*LP1kH zwhx4eyyu(xd1r)MVQEfeyJ8XTVN+2CmoV%osa(A>ha9f}qLZ@ntN=4M)f z8q5p=6P)x1m>lWRr(sBvcrsYGB(o_N@|SNCv~>lxQOucAzJzqxYSZvq=+{wg2z-31 z3QZKW8k)%<7+we>8MndMsG{b|zlHV1tLxTH>sTak=+@31UMSgd9q`1-H5n2;6H-RDsJ9l8UOCW7`7UQ#lfxc&}PgvQ>=k+_`zac)W*LHj1VznW4$n^M!;~0ea`4 zg-&gK3ya*oOOUpEcSH|pXPkI4oCo>OamEzYV=;LXFTb!VHgu{PeT*+nxBXwD!oGm% z%^Cc&t%acKGJyf$nh=2NKkFj>9oNcc=6}HRu2K1WSdQ)(I2LXL(SAJNAs&b=2|^<8 za~oEsfesX zQ^gcqi8uo_=!Pzl&j@M_lkr3+wZJ6wI)*|LQ>=Cl>J#GD!waAh)X43mMJxp+2c-Y7+6SEX_K_tGK0Sn;GQd05s5c>IQ;rvU4wbGG}i_NV!Pmo5-XFN|^ zSfp+2sT)P}WZ*@mm8oU7vW{?A^cn4xr$Hm)^5Ps`kOGb>Ts5zqb=_F6+y(f#@jkWz zder^1*{Q$k-tbA=x%-3Q28gsrI(oX1qMYMn?a}kmNz(Ur*Klr4|d*n_IU%ox$t#q{|>v$JP*}M7<)89o_{L(vVJU0 zy*IiVQ#(Y1Fyxjo=K_-XQNgr*W$ol0NMmAf)9l2Fk}3d;uZs%}gU&#Mr%YEv0&egK z9SgRO+))T4IFim&w{Q7LE%@WDAFq9e0?F?Gf zT_(f2n}C0G?38))h#$j3yRcbj9?t&&)*_!m>Fuf8Li}UBnxwjBAV%(s;(KA8^;A){ zHo7A*=$f$J?ku7id!8T~wE3K#Gd_5bAeBRup|;BX4~7Pm>&yG*49T|kv{A9IygKI>Y1#pc+N>T^UiX9%ebB=c7EQf1<|YMfnRQkd9Qag z%V#$=aXZf%Z`>CT^iH{v)_gqNawbt3~ ztgmHhzPYC}VCKqfbXvm{xOa$ce;SMQIoxZ^(3x%irxIojmY+7HWhWjd9~a-e%1F0C zH|egu5Z6>?0^zk0DIafaR*WDp!dSH8$Egw)cwSRNbVz}^>%MY&a9p%LRHZeCT8WH< zGqdQlM9py7VDP*84CgZ*dBOBC65@HZs8OoMv`}x}gi3~Q5b+1kp)O}XFrBY>d8F2> z%2TRg1k^);Fk-XicPGCO^s;aUqjQGcbnMQ^sbkyvy24*7w8ai} z)Qo#XtHdl4z%K-b>>x`*oCq=m@{j73eSK!}2ZrI4Cu>cPhhvp#pgKtQvbbFiG{-L` z=&GSQn%qg0!A~VmO7Jju5Xx+(Q1e{&O_{JY%x+VOA77lgU|*EgCqXIBPFlu|OS2I* zC$q(Dg-LYRO#!zGO((*;s1-G8Bol|CqFB8iOmulhb##-T*47Ixm<=HW3}%?OJGfWO z599M9gJUVMYEgp{dYC;<|KQ0zmZgM@c({k z=pW6J{@vsOyf8CoXQN*Zyg352>8t}nixUk`WwHX}uL!3dbfL0hrBbP(5KHP~q~@A( zxU=pZg_ZAq4R=8xP;c4>>;j06Gkg!*E`D`S-^1)J>m&?=Im3v6#hb+rzerpFMVz|l z?r{oVbgjUcjB(w}VKadrY+vJ#X=EbP2O5E^jOxc*#Cw6!3kIN-@A^fz2HPJfN&H;xmXUry3m_a`}HG_Ayw1>MrXpinA6t2 z>^lfsnKpSNPxnKG*YK?e_k?WJSOmXuNVcazM{wIustjjlOWScZg4^sC1bTjtLL7AH zwv3$5;c;`cFq=xzx0ArS{y z=@I==0@WX2adT`?`4?~(H(12*`D5L221kS0UKTS+(wT;(9Ieb9PvMj zS0rpiuE!>O=DXMmJ5C0<BCND4i5w#05_|>Z?K}=TS-{`js@x0aYe_5R;yO zxv6g$^(6DTtX&a8pXhDE;OQB%l2pAPUdv;#nAyC<3o^;>lQV_+hKOd{*M3d!337 zKGow5i>(f=&EL)??G(YOrH*Y6B2nm}McEw`>y@HWoV)XDZ#nhWig;6w`)T0&Mn`}% zJZ>|2tp}`bQQF|pWKzE=dzengVd%;3D6V<0Mc5m)ytBLkFi`wP#9h-})4-AccShwv zF+r6Zt4P9LCt^CQTqlemMt~)rOQbDjGQoF71RB_K1tM}wDy@Jzj(mP|_jYp;=w;HC z7DaWDnt1gzZH}djNrGGqm2{`uw~F^AtIYQ|V@-XiE?>m&E1H3cFQ~*;O=D@H!|I>vIjRpK88NIAl8xA~|_2js^4g^p9hlFN1^W zL5}jyWg*}7kLOc@sa;{hTMS_iyq1&bsBu^<70}Ah%)xq$kQX(YSsK1qI{3__UO$g;84>I zKue2k7hD;H?Y)KR$lT3&B$v_NU*vNo@K&TGhnuBzdYZpIDK~FKp6XI(3*Zp6x)?jKjOCjx^sZ` zZbPyv$NjCZv+^yAg>gQ+EyQm(at3Rp8qSe9Utt_hN1B?06ghcHU{>ZiO_C#-uZ|5X zZ1iw&I3gz5%>DjF3*J+cMT{67q+cP4SS(65T#(WL=~-AyHbZji5t?+~hOl)J0=WsX z4Vc6b$Z*D?Oe1B@Sb1zBPBK)qkQdn^jP69J&kC5jlyVF6n;XzAn3&&NY6Iqx0k{yR zO6izdS+k@d_)hTacHypc%F|=Q#`wkFnfvX{(^dAXWV~{RRN%SJoJ|9FM{`5U%kY-1 z@0}~37p8&(Iyjs%l>C9soF~n49|Ql+bkd0xdr#h>W(zvizJ(>jKJ1)p`YRXFh_0DE zUV1t*6w`7&F-?_KRP}CeiRwZqF0)(2&%9fVAdmcw&peW)WCyc{h{&wXVd=GC5nAcA z^D_QJEQd@sL`7MS7=FgebvlShDbgqKmW3t-9b<)KZRt5Q4c2Ic!q_4Z1+W9GZl|#} zsRrEsU%3;cr8o{12R>p^>Y=(PNfIz zbUT`FAi_&=U^{%pg$WRoo_|0L0*&7igc(pjl|i?YRWr*itbi_O+&{+rVJxF%kLWAS z8Csya{Eaj;i`7bn9ZZeJ3<=8*LaK^`Wb)o*gMQ%sH;tU z=BkZ1T%KcYMhs!_bb9pB-0r@vFy>(_*r3= zIDQ_jaaiyUznJTPz+o@5yJgc@8D-$vI3p?KWFail(j|=mxheA_(-*?^dtKGdB&b%g zVDsOkOA2?oE8Ff;y;ok;X(IO?jIE6EOuj>RvmN?Q?V@Z_p&ijZcY%Aqu1LD4xD2LI z*zmYrJtlosxK8^;xYTW~x|RN8p|;J4u*KWDfcB|BG)<55+#I}{=EOswfbyLl3sT!M z)5V#*)3Jb(X!nU0Tpeo$6`1#umCDO5wyN8cTgTF?%V0dr+k4+Rwx`3osg7)%metQ$%YJk8cEpXZiU1It0qXzIx0R8N4tJu}l6ZrM^;IwkX z3hj9&72JHlAf(k80VC6=c!#J{n;SR}9RWq{yrx|t;k41}5-mV= zX)a?#5(T?9OOub@H(O9>!&#+O!ICX;q&-u3Sj1% zBZGsi)Mpwz*|xA?sfd$gdegy{TW}irb@_-v9IcQg!^8FI$|CAJ=zL02$=oZn%50x>*>(;}MDtmCg6YUZ%@io+C`EZR zg;ss4SxOkOmCj)%M}5G@PrQmP_fc@3gaQ(Pa@!-iUND7Gh=;L0UBw7d9Jf@hVGPc} z^FYil(a(!dwr-h0gdP9}4_d{pq^jY6<@IlvYEd)`>Z?&xc1#wZ{jtyo{y@k!huy#D z6P4fRjKPb-9RTc+N*k*baJDO*mGFsU4?11fOLlhRYdL8wyt<6gh}`ocjb8Vw;qG}x zZHY4yXIzk4w&6i<6TmV9`5aDb z#(6|?M6&eiLr67AsTTuMC7v_Qlz>&hO2Ac{wy<5o+ANK&=Az~!*fr4Lv+uc!F+HvK zyPJM+HVYs;^$!1DCH{BSk+PYIo3pc({eLoiICie19~%HhRY2Hh`(Fj)KTacS<>LB( zzloZ;0@Ttk=~=(TzYQ+-hsFbzn$X_asL@-E-!Kcw10Hr;TH0M7QJ)w&?VPnk7Lm!M zZw&o@_Wsu91TmV4BmpZg8Cvxuq!LghKo#`^0(`?O>iV+~9?hCpoouJEtThsFSEXR( zOEhUJeBe%K8I{Ujmy$LU%u^BZ4e{C!1JI6D97869D%RYCOr8EO%w z{;k^*R4chdx8zR-upwueDEhe9qQdCUqnB^?6F4ucu}%e%Cz+I=5zx29O^eKz;`QOY#%7axpTt z{k0NFl(YHEtm&U<+@QDp*nbgOZKrL$N&#nlHn#4@s{9(}+qFv%ESyQlYU2<7h3e4| zE*xRh&H|QL64gtNs%MZ(HOEgo^Jm-6zKe7diQl%h3p?lwRgi*#smbZ8to^f7GXA_HlUs)*wS{w)Tz z!Z%$ZN}XbUS}L7Bn>B*@He9mOC>b6zDt{zz5p^QqG!3cYJ4y`U ziflmz6tHN;ECBiWD943-%~D&M(K+-tZZrU&zddSvs1L2f(TM;EZd_5i>j)q1Q;3!;&jKJ&v_5jd zeyb1bg=}4y!y6cl)xXrfEk$**vSJ6-&J*JSw_>)M*zLL+Lr-TMH{@#~NI%5AOFF%^ z+A?E;Plh02W546TeX$QIC10D#Z3|i*GQZp5b*Muz4Y``R`l}lF*TDL-g%AJi;{s~N z{{u9o;uX)L0MJARK$GQv72v;}1K`&xnpi2h0j5g=8qn;G02OL#&c93v`29b63H7!= zdvl{kXVs_^_P*a88g)fUMZ_9MhYF|o-OqXfRD1o5nDjfpcj<;ttCKKh`|xgwFl7}1 z>k-6rp1Nj_NqvpRqcM%`gvI%>aD{mI2L;JG>E0GhNgb1t`^Ph!J_lhHFiHikVd}(; zXz=_;w7#Trs|=#Bh`jH8BI`?|>f2@~bcMv93I4!~WaVB)_VnL7NB!d(%%|o?<3h+$+khm0nGb6*-KT!c@B!aEIRj0La&>brz z?h=(UzPK!WiT$%OyLj)*QW+F0&7#=Y>D%{whwH5`P)3LFAt}&CY5~PmJM-5q1GjJ? zmt6xGIwm^&I<1JpEzF>v!rp9YX+2-co^I%NF$ya|QZqu;(8grMK%`zFcc~jMmWV3-@7*3k`8}V$&Q+}%&6c}Z zQU~PxhomI9koWpU905&H4SdtlF7%c7ciS~WzR%cjWL5&2P4m-UlKVn~23X~Z31cS1 zVz5sF6=?uji2`IbV6D!Y^7_qK)YBJwnTKV5#g`D85?SwM#^h9#_|rrb&neqZYZcq6`K3(*LAXfw`gbAD3msTIjC$e2)gPL#@^&96R zY+WXdQK~eA@`VNBCQYG3aLRG9I-~h6#K98Bl6bAkrb^OSCDlcDA{1g4ec`m4mRG0^ z*qzI)!bW(3j1@fWncZrXPXQrs{ICkVY{lFz@HJTr&P*@g( z=p*izOfl3yyXA!!k{7s!#yz+9Pd541H<`(5R)5Gw&Q*0uV_XvE)!wA`N~0vt)al! z0PbP*y+Fs{-(=kugz!>4eQcu#Cb>nZpjb9Uf3wPCz^mzSqF3!lYN(Zlksse^)W@EA zhn#nB02$Bs-Z6Mev%9YFhmm)%cV&#;_#Ns}S1V}4oCz|#Gmw~2E<}fP_C6VxRoZ>s zCROS^i~wfS>9%a z-A!Ca1u<1I&sJB(eSO2^sI$e7sf6LlY||2OY@Q#*BA}|TS6$?kWBL{-$dd)oHvOe&JN?7_&PMSSaF_;Ict-pF!M?E7Qlf3a zP^F^w#w#Q=51h!kgt#@7MOem()E(bFgQKiUTTf@j zl$s~Q-prB0@2~iMTAepn0q|P~@cX%0-uIUF$4pgvW!p^z=={;0!ji;n92J_h)DXB- zi?yFq%Aj{9Vg=s`CXOt=@~Sja>5=2Y;(e|2-r>w#X7KTQo#PbPpc2lU;ia*iypAjQ zR%rQmk<^OoBjgd$(5yzXRJ(jFhpQND9vyeH8F<%H_pL!JrLV|0T7p|iixNLUAa$Q} zfUMNoa#2Zp)9ezWh=eg32{t9E_uQ=mmR^vAgg(9^bu<^TY*G6M`}A6lRWt3mcl0{`Q8yt^40S| z!|Oz?Sx29j?{e#f^1_(r^WJ2Vw>_3Bku98lz2v-8&{bQH{Y*+>`=#%9>Y1anBW?-+ zYtT-hpIedn9&0%hXLCDaCt*WtL)#yV_5tS#%o71if-lhdWw%1JTJ4yq%=@IE$mEj? zSlO&Z(?zAY*|V?R#>=zRkFuqVE)PDQEla6IAPM2JMlc7Jv}E-QC}whYU*Shvvvs%9 zRSp}_8ZTAV;tFfZMf-DjS}4x&%}J-c51vxx1P46qxFEloNpNKvGmjDlJIKREuigY< zJyTE(qP_cZf4@8R0CJDc$E5PaP^m2%r0HCrN+OB))OTm8UairaUg=ows5m0qQtks&x1(UZGU9tr?9$Ean^cij!<76Y7 z(Tt!r^JR+^%JLVG=sR^IvUpWgbd#$$_7?4Nik;iaOU^-)GupT`s}p&< zqFmxx*H>OR<`iT*KCX!kwhC(XdEEQxa??b?K`8zH1)@JM*eA&d@I!O&(Yk;Z5_o}p z4AhU^doR6oJcCl7SL7PwTlkXd*J`t{-LSK|Fh zqH3c!2=bA@sQ>AM3ViL$XU8VeG5+Ji3L#nj^O|o`g2)P?$v^8~5TmDW3(=OEnwp(0 zYfS=#(*Y4Krzwl-mT-so(c7%u86_3e237#!ssX}@+!9V{27gXl{ocN{QiJZWSVSPe zwU3+nNmnTL@#X3wA?Phni|#=JTuVMArlqH6jzkwN^H0z{Ccsz=#-<2X*?OGJolcY; zos(7vn~wD407bEG>X1^F<>@?&h)E-wlh@nqWwkR(;= z))seZlL-1AfNIxjHNAAT(L2ugK)oR*(VbNm(ofP;L1FI;*9a4wrih9HeW_tk>1T>qum>vO?eo`Sq zi+EvzV8j{qI0@rr70de$tzKp=b-{)EOz2N(m^72iNS|}`=4!n7%--QiF8Q&fm3aiK2H*ivTH^YiK!0RF>1-P zCDIfR_mWL?$P2tGjCWpdZ!ho_s{?^)EGRH#GebM!*&;R5Y|oCDXYr1QcRg{6+?L^P zCJu6WgXNz8fgqTT;5|32dlePV-IH3$S`Kv;Q?pNW(!NmVG)KHoT35%l7Qaqs*R8-XS5e&)GsXpc&M4xtB!Xg#yo@t@$T=-jv7DJ zzx{c?&c7&0&2OqYa-A5KD`(4f4K z?02Ck4YtCar&cZcJiJEDhSm~Bn8tNBJhapLR;QO$Agf-N$hZgEma2wv! z-i8mXqCUwyqc!2Lj_<+;*I2fb(8KF8PkWBi*>Is*?!XKKL(#^kn^sgu1|y1A%hb{e zztCVOnKr;ah^I3`bF z1rz(cFT8ty9P0h&3KrVtE{%bw3w@&G307bcDS>x-gv26yYL{($SK$z+eWk~RN48&o zA1V{|vG{5MXu|@XblYEtwve$UAl4Id0itC`pcVE{RzCSCeOaUOO;6zk8yu#BC*8j|bypwbl*lhJqtf^P3eOMpkh+QM%1sZfnz> zzp3gUh`ZEsZ&L6P+r-)Q_TebeFBp$OV(Fgszj_!5(osl{13C(F_P500Uh+@7j`Q3~ zI9X&(C9uPj_^Pkj&5iHNejXc+-gsoU{9C}~nsTxp1?Gst<2aQEBc{^@ZP>#eO%12c z7POvW2xH%Q4>cH?WmVt-%mZ})xs~g`*dGx?duJENA2&e%hVNU&uw>wW@ZC$fNbxiN zhad5MWJ7KpoIedrji9Y6DIk&6^VMU;1usn}nPia;Mqxeoen#losl?R)Pn1hjBz5i# zb{^T~<$nAilIL!3Rpz#*u!V&*JIEfD#-{~r6nW$Z7sG(tmTo<@akhAeuK-9VZut(9 zP85(iw^_9@Rj`R)laC}bXUb%g(7-ZdhS@pZ|?Ne-_f6a zU_WPg$BhU3QDlwYw8E^#Stl}07oI2Fsl3j^9r>dL8kP4@<6bJbPv^Tjd3J?#vfza~ zVo^x_Q~g89;VNwbvO5l6kuyd+WCC>&ctxs%`doRs0j+1Hs%u?EFT5PzK*M=faz9O{ z)}TX>RhPKCe>&wjQIPFdT(ZJfMquNNC!fAOW3R&Xv@Cu%T3p7Wy@^w2!^KA`v4C>3 zyJ#I>Bf-O>inN!=M8UD$L_DQqgYfkA$EN+@YO^zHl_zM!0n!wuNPS&Bs|WeS^u!&cNTvPOtczFT|VR z&?}TU8y|b!AcB`|*rU>g6Q-fmym*awX%alA`SOQsGoY!!Fqnud*pwm1@!0HY6xBdV zsf@~K2Kbg$=)8~$3Hx)UY{UnRxx{z5m)H!jW^i(E5SBEJ!ER0CD|yRRX8O zWA^(Nh0;`c45F}7DGk=0tU8N?ub&zY9HMN&ne$B=3#EW>)vzIQj$au?~!~8tB)ptN$Xk`0PK(Oai<|Y2ZEnTxrAi-=yGZVP;_~W8(4S zvL4`izSU$^=eUKumd=Yu<)MiE->F&*C|8R+OC>cJq0jkIUc=}FBg)}k`drPmHge<} z${z4>cS8uPvlbn4)Id@*`H2-;(e7(uYOcqUM=L2S|xgoFF(e1CZ-=n+}@}hjEnKX`^3iPU&QuBv2l;`TVtt1K1_UaFL#baGxA=DZ}?+^J$V=>1VV zj$86|jg6?Pw3`n{3|Rf@5JGptl*l0>nADw``!Z&6;H#~52^;7RXYtrv7bb+}8TFiJ zWaU$adev%oF4x_=950s8G*p%x%6TeLFCqS~^3^|Y=K2?psE9TkeYWEpR|7u5BFPb|MI4n1@04MwA7qZrRq`PAv}yS_j4-OnHo2~L56|3dkwXR1c!9jPJo@I25d2~8X zKb0%vo;DNd5?y0K1}MDSHn!o#&|=aq?is>uzT}s992~d!;Jx_piGg{BLVTaQh1aF< zvL(*?$jXz!bw64GT}JG)CRCov?`p@-dA0{Yg?>=e#_QMNC~9JD@?UWLp}qK9Aj{?r zZ&kHPZ{ohFYW*@3S&8X$Cp(4fmL$rL&#g~^CDMo+aF|dY7lFm+qFza0k%-PswO~um z;c^FMQtE&#Te}ns72XX&zf!2{VnY0d^i=5%EabUdku+ovIrkD5U^8X{u9^4a$)z%h z{ZmQn-w8;mWtLa*Y=rdLx0b)C;*OX0FLgzj*_7Js{dod`ghVqkYP3Y&aiUJ zNe+fF2-hv%(h&imV=Rb{Vkd#cSAt#%V1sVXP1RrqF2Obz1yWPDbi_ubcSGPG8#^|7 zp+=uR41k!fsD?10V_WG4fapKsi+$cd!D=kIy#A8@oZ@-fM-_sq$}~kJ^@{xmx%nh^ z>+-yNQs(QO8ALYK4o{a;2o0A#1M5kfeP|)xWS|JO&qoKjBavlSFRh@!a!b}Pz+o&~ zh%$1(kJlv^QOSQIX=ui9U^Op*6@@k?y+lzW5MuA9i+Z}%KFXc>F!n$>jYpw|0P-T; zeZ}%*sSELpmZEj{Kh^D|15Z>z7%Br8y8Su~0bS|Oh0w5Yr=nBde}!AxQqsnV*2L(z zeZ(a#E(KXHDCqAn6a`@jnAB>(qyiY0{TW03_=4+F^;&CgTo^!Js>VfSSJ|@|zaDUp z_tNAW4^ivih2~k7mGT-Jv1JpLJXr1&ml0chmEk^>FgoDGBQ$5a%HB;c(A9NvW6R-s zsSZ=bLmuE;j|+W3B-v%`_mUjLInK5b8?S33Oy3qK&xTe>>FKeUy&L_C`KT;n7)rnR zDR~ZWfOUu#7T2U-whMm`!D{}{Yqy+}hQ9WfcYy}au1`Zd)254=tLb+waOf_DGR$A^ z8UGuEp!t&@6>s7gq4363CoWM)kLXb5@(-{(Y_T(YXw4SAhClG*7wb& z;U6W)?^walur2M-(0i!TVv&%H_B2nO_V(g}S)PYqt{VBrsnecFXYg~eKe@(+fNQ3& zuCWj>siAqrBc&xHw#<1*~w=0AlDfE%{A74bB*`Dx<&ymym2u>uT6}P zW8}QD8$C_pbF3)nVh4)H2qU*q4l*dp*(G@`Ecw|G6y;=ojdFZe0oORUz65fO1{_Oz z247sG!T&#eR{E)Q1azLjDU5#+ICsf&*n@=TAZ3N_ulN*E6C-O2+aK3_{~8*DhF)}L z$^t8I*>7oS4+twvOaS(WCkj^I*E4?QN$9g6kd{jMkZT`QiX}%rAkb47TMKKE_w_$WMZwQ3o>b=1%`q>8-6WJg;I>K z;=JE$8M|O~SLzNfz3P%P@v|nUQm~v={dvc$^otNJSMApj;gPZPDR1>*5JKf07;6IF z+P*hUBqF3)#b_nJp<1xyiH1UC@vOBO6Oi#AF!O+`;SO_!t8yOC<4R&FuTR3Eu!xP{ zu;AsC%f5ot!$$tdKi0(Lb(%i=QYSy1i;w{o>f?!l*CIW~VD7GT+1huz6P{~|(Sl4k zF#wd#uK?=HT*;64?Gq;hQkD08QI$WC+ufOB*yhEe-TtB}e+g*H)d5ZUQ%csTO%j=@ z&xL(Qow{&F5%srWuZxHp-k3hXZPbk2k`6aLLly7+^j-75$L0-A_S*yMC_u5M7!NIW zyu}%CuGpQvSnh)f#`|#{ACq9{vA@`b^;LjmqZc&QuoS&`1^*Sy3nbQ?o$;+|HZyygDr z7Trhcur4js-Z+Mq#je-;6d&)yE3-f2fhE3%%)sTE^2v7bJ?&@V>x2IQ?FPF@*d19n z->&YZ&4?P?#M4}TOYJ|Rr8-K|d!Wt1S^!KxcP#lUwN-#s!X{tEp+dIC{}8qKKaG?n zB-Mgu0V?z$je`F)1vmf_baSO8Z#^9JJvmRlI=4nlxjz)UK@X%W9^!h|qZxSsZmrKV zI^0xpX!y@(-_$(3?Vk2?dW)$T#Fg`LJXy}eJcH|O#Tuf#uJjb;hhVNa6u{S`NR$0{rQ#Zp#{uHh=u(hj!slFAOaq z>2}&=^eF2~1kT3R04i-T1Eme`m;%tyq5+?$i2(n6u8Hgss^=i!_4O4o_cn%=9~^`% zzL9_Tf?5e($M-%PI-$ho0KJ>D)_u_QGrKrp9?$jS9be?FaS;dD*Jsc0Fj*hXas(pH zdM}nSg{HE&A&Dw$Tq{kL-FEJ}=s=x2;Y+E5RzySRN0R|jGG3E2uN?anP(zuH-oCH% zXw^{e$es$w8>^U)UT~+9)HdNzKxN^UZr4OK1%=^L=;Pv2Z_p_9#?Q+>k;R0hQTaQs zu_2qJyeR3U$}72yr3*MFbhb4qycGQqcy|7bx}Y4RR9wtGw?muZbK1Efx6$~d-fZ&q zcMTXtq~S%7k&yd8K=P~q{of%8*a{O|9*BsKMd6*b(WObjW1sm8Etu1iH%SJkE;qW* zV(aRnEPMs+8U_0YFyz-GOn(kEvrDzEOr z0;59=d}z}h-X8#g^4-TiEKn&!AIuP)+_@bgiKVu-9FsFzLGt7jCfEm7c?F8TBscRw zKeYo#s5d{gq%vVWhL8fk>-Aaa$CV*@soyTeVH3o=U3nZ=h2oyFTzYV)E74y+S;yw6!qw3jUk&iuy&kf!gF zCgj9kR4UKNj54Oy7qp}gCm(~#9E5+B%t2wi+yG$-DrejOVpe`J_Wv^|fl1;o6MG(t zQj>CZaX=JNbUA}_$D zN*~mxH;hq*F+S<$Y=uyjs@IHd?V1SEFNu{buN4(j;sw{nUpv4NT`qz)lBCqPGcrQRk!ubP&b>!#k1!KmH=2h+6(r@oR|2vp}>_Kk_wI6}z0#q#{#l1qKOXtcGM<2Tu2MJpeDNE+O6njB&a|z~Son+C* z>FeXWb~Cn1Z6U3Q7oiaHj1C$aR?6z(KJ-DX;NG6vnB6&Z5ETey?Kodn%|;j zMlgtLP<@mc)O4t*pBoWP*#~hVdD=rH$^S%`RTfZ~;|GyFcgvt{H~$C+)IW$|KxTK; zUG>Tf%+R^x4M{^41OIWw!a=t=dzklSgRPET5?V!REs+Il$@E>0P1tc6)8cOA%3VtvFv zdcox7ICv~@7V$xZPM1>Aw7T8371u7c&V|zT;nH8N?n=ve9Vl((1u*<25!%-P=trQr z{55R_t=G`m@L*z}p;pwDkb{r0u`Vo$x;f)=KrycaPVsvhi?UWZtE`cR_&^h0*ga z`%x-vHBv;7WiJ|jOXVEtnWhLzhdAschhA9WuI`IR8x7O0d^bbh-E>x%z^aCo)ix8i zBw$s83TRb>{o}@2vi{J41~I#E0a#$Dp0sNM7^=rP_M%q2po;HBY=3fVG zL3h0VMWN&E9pX?>{!9YAn4h~X==MW|jEwADY@H?TKo>;*;Uv(XtJdG#GdouEb`_}T zF$WYqOn{;XsN^Y?CMffSp;vrlRinwT#%mDk;4Ua=ruU0WQ*f3buecDj;|7elZ7~)#YXHez*@KZ(sS5kF#d5v`TRiB#9 zq!VDPqte89Nv?V^#wWL)_KS~|OgE|l2DOaSi;@6-7$lw9U9{f~8eG8eY zqoJ)6utfv(j~{mYd}9BUL4OUUu(s<4*}p4mx{e3sM{SW9AM^UUd^Z2R!(eh9UF<0V zRHt8XI5*V;9foMVlkpdx-H$gKoc0YH9pUHpH-H#Qq&&sD5!6?B)$NOQPE%#Q5!X2p zuCp(rT$@_>aO1X;DYDiB6s2!~yOmFb%-6+QiENIv>>Ac3!WOX1FT~pS@*Wjv1mvk# z%nyYagN++H$>P)G1UkRiL4zhRJ+Yi8;d4VlC*R~WpX@(nCOdc;RN(+~u?>d~%vN&f z=EwVAihlHd^Kz9SyZu97y4Hr>>6+*Dl91apWge*;ATGKUuK(dn<5JMYK`Re10Em9> zz{o8`Dkjb@_QEE%CcueU3*a*OkIeC(8TGB3$3A0|iv9;m479++i2OKsTJ#o)^%bw@ zdY_pSQxvtYs9A#`RWVDkW8^6rL`vpHO+A!#NHhu)Z6Yv?l(xjY3B`^2>pmRns4!hH7(zg29j##GoxuGd_0Dxbz#)eU zSAPWs%VFGv(X}MQ9C?h#hBAv zZScKkSZ@604KvWmd#Weq0X~bbVQAb3l%|L+@%A4z%p!_@e1$!Qun#nWI^*Z%F^F=M5 z6LOKFu8*O^WF4D93`7!3Il*QI@=RDm$zoG$bRTvQU^qE<*tKb3?v=f)e+pF!HVpJ# zGgGmEzAFjGOq1?feJNVS5vZofp8h0GHlQXGuf+{{OuwnelldM{_^q^!d!`c}k>E^K zGxy4rF2Q}=nJ`+V-^>)#0a@e*@dYcW5arToiLxg2@P?n5z+iHz&*lzYYW;3ga~ql7 z322n=yK17ZTcjyS4sjoV?B~v~-a__8s|U2~6b&tm6R z$TVZ)x6upoT)#K#niVY41P8hGf})lb_BKx!?OKu4cbPn&BRO72*SYsqaKJ>Oi%)|G zkH{P8@v^Bi1}WA?A**X1p08}k;aty+O2o0JV37b-f=T2EC-t^)w7i^W)V|>ML%pj; zq4#;WP43(nTf2Cs;Ws13C?Z>8-Jjtx3b)Y>E5B44X0B0M>vGmyH;LoH>KR_RXfjp7 zg@{ryej0q@NtD-0#B;NaQp1*08lGrkhq!z1*jS60Z|WX>z7_|kPTCf0o>aL-dAczZ z{$m^RYVd;36^?e=Zz(?*zn~t}LMh82(Soxd9!a{mD!1oIb*PeeLxMc`&NNDee$K=K zu;T%+v-|np>n}vR1~cEtGui0vPvJB2h8Q2c-*TDJL~#rlnSfoW*w$1 zs0mVWr->qAWhCtyww2HDy1JwEORSDZqJ zSknVG=tH7qjxyxfzK?;9xRQhGwU69Vt)FGyTeyk%g)m`aMLjcA%^IM031 zG`m6#i~$~x@5tV(ST7x5GRqE>wIZyeyBvh?l0aY(ZpeKEZ%ao}JD|abVcz{@`dY)P zJ_@?0HM9}&OG|-oXn74N6Qbe+{+2|i{1VQ}z0DrdP;$%C+Qg@BSn*viN{*m)^c%D( zh7P~W;4%Naoe1YorQszb)ls7=13Y@qndH=U(vwk{PT1HiMPH}UxwUAy`}ZTpdOg{Z zlKSm~I;eVhz)2fUDLAfxFx(tgl;T^RZrwQ{+d8Wz$q1yeoY*kABULz&?resptHlES zG_%9oLSBzPT=+>7q%=z`M8EwqmihN@=;tn~1C|NeyEvPum^iuumjeIA6Vm^zxi)d< z&Yc|K89Dw`yY$^BskqqNTYHECi|TBhOhoOBT>i<4T$flm*ssEHE~uvEKD{2q870Pu zdjB_c6P;5j1?XZ|dofM$XhY=wEeeNiNBNCd#7QM#(V_t^u9V5Uuk>N_oFz(H#pbr6 z23V!=H36%YUM%MRR8&h0 zcS&t_%($=f@m=l2BUxOq5u1myM%o{q|*%aMVLMFf|eLAO!MP4IbomQD%EFq>yM9rkXn45`u<^%;-R!P z84B4&plThd7j0Y>edQ^JMXnP~bT7X31P6Gvwy-8lOM!)aTm3Rn&A44rG^yImb7SYodVGVPL zP!S%}Q79!Mfz1F?dTNf08>7&j$73t9JGPfQo}(k})0+}wbk5%4sqWvUkWbqO9=`>C z?QY=L_W6~MUD?Fh(Za;lLc2Z91woU>B3tV( zU>RHtKEHw9W)oPaZQ*)9>$5Hl@&z)LC4zo2)1wT@+Jq<4;N=dY%epTBg>XqlpkY#+ zH9V^PZv}>)3q%Y7O=%xI(vk!W@|!TcRXab`6X47+QnvCcy7-;=FnKP|=Z3zwXwr1E zt%($euz|O!&mD5UQ}~zF!&eFYS;IfJc`gaH<>Fq@_3tUg}0~6O1<>*`p&k^{N`4 zta)(QRw?51+X{-`@*7gM9-j?)?X3@8bLL0c63erg>t#F`U_4(+Q?eyu_v|e!9ZeFW zXSjDfn5?X{>wlsjFpYPw0@Wc`tVl5M(T%YG-KeYzJe|jaocA6}Z#+}?i)gCvKVqf! z^A0K9Jn!%P^nn1Y!L6{>_IZn(mrmHTwNIPbVrdM!>1mrt@S$@!b35Ycn|F+*JmAx@ zcA9wsQSRKVIg8(Quck}$#bfzm$Q=r;I_Z06F6#ef3!d^%MdE98`Y+s)I5U(IB=91B z{_@0c-y&jd=VbErA3w5(e=a0^%S<;sQb8g%jX!O=v~ANIc+4Oyd@IziqofT=F*{Tz z5z_LDFI#-2ho*cYzUYjwIr-*|I(g0}t6flsx+h}ulsitkV5V%-sUkh}dS`WFKdO{B zER>S5Rwi*^YNRt#NRn-@`k2{AI8^3IB!~*O;w5iNeNDmKyM-d`44Iqi+#VtQh`uSf zO(HLlVlu?l#es|OUqa%*O&w8hW#8HiyiTB^YlFL@_d?Ps0U>xyVlqk$MImj>_Ng$x zksWA{*5`N9FT^(?xd`DX{gG79KSCauiidOuy0+eYEDi;(TnM=V#Qn~gioTxnLIxoE z`Pt|gS+Jce(N)Cn&|aCbnM7i0%?? zTXT5^rb6@Su&*uZ2#u3l7*I804k?ly6k*HuQLmw%qJXLhcQh>TOSbpVJm7>5$~tuO zBh{DP--qyL&Rl8+66~Cs>5SPY*Waxu6wjl1fdIfp1>_7rci8uL*lx#S{w-#IUUL1V zHEoir$6g2YrmNBb;r)58HPAU}ya;eLX@Y_VEmFD}+lDuaAneDE0k1u$m~2Vplg@h| z{S*OXQw?@24Mz!bT_eh{FC!3XT-`QsQGWqVNZ~CU)Q?y*2O?| ztV}y&Z7R$Tedz1B?;G=SFJGsG(rBM47xQDvl@q1Z1sx$wscRK}BwYq;?j~!fWA8K4 zQe~>oos;4*;|f&_IKw2w#a&Apc`u&e?Zt+zA5J;AO@CMm+y%A_es|blbo&$q9sum; zFaP}p*q=?|KjzpUcs&jJqVE}GxZO(L5b>w29k8++L|gX%<^wSv9r`IvWyjkdtox;r0NleQ zk43Zo<#jT=m&DKKE7eYCxly6+vc-v3uvIPjk+vCuN5|A41UmGzbi+`_#GQ9eo;}slmeej1YQoy>*_zw*1w-w@)%=zgwPgY0!cN z1;F+5YvAADQu{N%{(&|81F7FdAE}_Nzhyb!w*G#;T=1?;y8lH+@BG<3Rvn67VXagY z*ic5I*BZ}53oK1)*~A-xm|)R{{z)&xC}m<9pQ?;#$@rLk$ z13DK5D|ptpIWl*wk4;P(4!tHeeq&>p$Ndz)&LpaA1=dIsh{i0gMbYI4O z4x}x`$tPU%W_k)Pthl^K`7-?pHUr|y$*1yaf?Y%@$hT^`J>P9Q-yrUAG?g!S5LH#lNL=Tj6gQNJG>6fP zjcS(==qHw8U^6(AxDCilP66VOx}ny({EU_3uSi9GD_mNO=4)XLmn@7;Sgq?>h@XI4 z2ynT#i@tZ}cZY){hXdem}SM_svBCb3M6X`YiVJLGb9IN}+|glkt0o6`OZx4lF+vC;2_Y+SB;E3@ecGpafl& zd7qctl+|3M3P-5yvP=Y+Wp-dkh48-jQq*k;Yx;deH|j8pK9 zHnfsWWIM3r3OU#jWCU!1o1DSkU5lg)5BooNCTqiuGcvPd$%7FWZNFw*nG8Zego;{s z+-*wz;5DxAX2fy&U2GAM`P+SvwCL9%2Cz%*HoP$TJ;3;3Me*-S7{H#|-!m*g{VRVv z+I$2-Z}@wLg$HC<^=ohv0m@f##r*xx$dpgy<=rqgfN}*&M0pZq5-aCWJyC#S##oh`J*j?8 zfHs7FsQ$e7;=_h@dQsbbm)7U=94O19)SxVD$5faZdfeBM$uGR0Fki=p((E=OOuKR- z4NNA(hbcvzv(tFF2?jlwlj5h7u+bBmYIJ0 zb`h|N|GB2N=0e632|(@FWm#Y9k1FPdjwa@}y0CwM*&ls%;PAq2mQ|tWrUg2@V8eF* zc8cQur?(&86V?D1J7z!^I|wrMK4P(4g>^dkE55R0J;At^f-VtYni+=mu19gvgEr(5 zvFZ(aPuziPNw!e8U}RM*3Q}uF!zmg#75fm4K*;f)b`z;LY98Zb>^rUyti&-7ovWR` z^^l>0A}2%MF4;O;3fsd%o)Xoj?Emy|ak=4xgk;ydEl-8|Y3Yt^mVhKSPz-O4vIfet zl%Z>B=r|G?-P6VfeJAxP~CK@$w!ZmJZ8Vm zi`Oz`@;+kYtx9xRx-ian+oXAqf(jX6e-(W)SdjaI>QA8Uv_E%E;Wx|pmqhD}BU5qy zCwKqi_^j^UhYNB0329>@=@60llMi|!c+X;hvkO49sBMy3$`TZy*hLpms+18)dmzWtwb2h3 z5Jg)cm%`)w=*eEIo-ORWI`j+#y(Bh#`jDukgwT}SDdbZlaj*3cFUIfzmv&Js%f}qV3+HlGPw%aYkT_MIf1GRn zcv+?I_K@=X6;%0$ZYRICpz(!j!iKh1U!nX5RQqG)53q(^(`)I0;=2I|&=&UBCrx1t z;V5okK;OE`R|5Vs&y-JA?gxTP zvVhY1nNvix8D+c#aK{LVL}7wK1V#aJlL(Gl53#gma0;8kxcC7E5Zv2-4nB`SX5}8$ zHeRi=2u+sXHGJ=-@xg0OE*Gh;6jbN+UU=or_9-9~n$KYJC1W(n zki$5pxSbjwnggrly>=zA*&sf#B#F4U9q8)t;|h-aSTT2ri;DdOkm)JyIR%g~BCYD* z>ggvQH|26h2>k!YlYeeo;OiNhf6*48{``6jbYEow;QY_M*zoOJzU?FZ@rd$ww_X3V zi!|<|H7@M8U8KXPY-pz|p{8c0eQj-Q$-pYo)7w>~9-?ZzxqMJDJ*c2nq>#WWQi55B z*oYLRm*h?ejta?jUBvGwvuW_rKI~ld0{2`!(>7=W6lb01N|=J1?^YuT3hy+%D7n4o zS`j2g#IDU+mHWPSWjqz?H5N4|Y4)VH4O`1Hau8TC5?z~@GkC}>6G^s<-q92P=&3_S z4~qPoehC;3!Kqa{34w6?(k{(siFHSn#zv+|=(4~P(z9g_APcs421i+%YxZQjxyT^GuLN7{ZTtdlqy;jiP-!;&4Fn#>m5+^*#1RUb{M>=#2LvC!(%o`exSuJEdBjm?8{%YOZBgEM> z0Hjv{q<`+p;r~FIMf8VR|94n}?)W0>dI|~?IYb2Mn$2qhu6X+Pj_){GPId*R04om* z&*^0Jb6GU%Ix#aWiT**p;uY*2d3(BNqZW2t{2M4H2mPlys;sdjfVMx*tGEUofpHJG z;tGsSagz6I#L%t2K^8MW4jSlPH4VPMu=_ap4vOW3zR8ef3B_6vc@$XXSPn7)DOz1JM@rF7T49 z;vU6Rp=$4uKDjYUT=i@tG-C+M3Fe1qlza&UIU>jKe?@%V$U^!KfcQS}-_P9y_YHAi zio@2#$l1hL)x^=p!q)J|_fl>Cq-+GPrqu$I(#;7+53G6a0mF~aJL98wl9I>v_!-0R z?i5GHja{}<3fK+3ViIo=0rbN&Y?yhUPC5tpxo>ZBokCYRQYGOm2ZL!&qHY&qzTUMa!4SCc|g z?BCSl&dQAM+5qTKga7Qh!8e4y0Rwa-T#SVjrG7-rA!Qi_pfBIHSN`~}ln#kKq!_L| zUX&;=JMo~aGzUYo3!%Bu`5ptkjWtAUZ{xOATi@{O9iMp2Aju{P6~z#wLh=FQ=uaKk z6eH$I6L5rT5hPk;jngXIw3ei+a=2FdM8j-_kQ`V$Odr-TgaF4GB^Q213jOhVxHwyb<7 z3sf`o5`n_~3NDUZ4;Hevd+|E50s_uRjY47 zZCqY+%=v7(eu&(KE}Wos*>196WRM#ykM&K;(Y}$4S^G}Vx_Qm)pb0#NW57WFT&@4N z$MCx=W)W3k{?SYDQPxoaZf*N6m2)DJ&4*QhFA0u`8MrguPdKj$O4{uJ_62(hg)g_y z>m|Y;w>aC3xN#Y{on^tGg9qS^QVAoEUj>oqfhY zL%6(Q3}u$U`jL;=@9M?kar-}^ZBA**71=xw$h_lCzUoj5>;;b%4YYgsa0!omvbd&3 zlKwr@;Y;Z%Y0o?Q&;xogf=Me;D1&*L;Tb`QyuYD7fCZ1vM2LnEt0A1oVTW%pdq7M6 zS>~BNL;JXY7oXW`_q5)(pl<K72hz>10kNs1wF>G)&BT*l^3wEC z=qG5r9cv;MTgYxzrSH9)B)RWOUF^M0-c>8So8G{30=b`Y>XZ34c`egd9z&`Sb%I<4 z8XgNfw4Uzf=;L{K*DdDx_xrIwRHRvwVh z-P6|M6OsxMEe2uLo(?Ax_y+Lj+Oj+iECmqJ-CtzmZ<$9o&_*dgRI>X<{6&+O!zKY`uRG zsq8+LLz{DIU@G^nRM>km58?lj_Kwk&uFKkRl8(*p*tVT?Y}>YNbZmEQ+qP}n?%3?k zH`hA*>~r?|_89%1y?)Fw=6L3hCnHx?T~&40ebt6L8@{!4>o%*8#?YvX>7bAj&`~N3 z%xABGgH_6CX&5azVe%yVu^-+9$@Ma9W=;x}82aNvAF^qEzAzYAk1Pc9;j!E76YN}m zdXA9+rcf-w?F$kq)vY?QGmlKj3ewB#jc$5LS3@u17Al11oi6SOO-WMVGoknFka{u} z87Ojh=KhdSR?s=pXncN$8`8-r*GA_ATJ0$1OTyT^Cxk7^D`r@Cp4vjy9G^53D}hVi zl--fi^C!!!114@F-CUOul{S=CAswRl0|{M2^;}a(2)>Yg)6sDpth=lpkqS3%tZI&G zVlg#FvDukLr2f7fAHcoL5+1dS(;ct0h1}GKKY@~Fh zt|?5N#rqb%V7Cyv*`((J(rDGOR>aSNBIq#msPwH zq=;^5=|qMs;MQGIUKn1xp9uQA8L~VNibJdUeKhv3NrPhxTcIfuH>C|Pjj<9I&DQ16%NmI+%diNs>i@CM!g?#%jtLTjNB7NupVs*#k);+|46Nr1ZlLLqVbo+%!?+ zE@9PFuWCZsNh?#IT`*bJK5)lsWJaek&hP@*~qjW(>}hs&J`#wd~LguD4h#)Yr!FnnCHrJyZ@b#+x@qL30bV!tT4XE&2+ly zXkV@eE1zid4m@j4_q$caRsnL-m}4?7(<5g52!oALe?(d0bXfw&-n?b++hvl?5ALmx zeZ7z2T{gT&_-<_2tnCZlQ}_yu##%W$RQa^+=CXkPU!7;~e@U23%;=^p z0SVIqfImh5CU^cLMfx3O9wtc32JiuPD7=Sr*p);zLTzYNvhK~A9Z1YojH9#qX>Y{% z4BU6aXy(u;uj|o?z;lgWwogxVF==fdiC?m37?n5(AQjy}yQAi1Fohcq=TgW+XN^({ zRskntx>w+@C2-)uqi)x1HzU2;v5_I`$UzZN@P?z$mk0@nP zz4@#^-k>UV=dCbx`MbOuQ$~_0eL732r*2V8%`$6d0}x@v=B(M10Syitr7D>e9O>lQ zE;u`_#vKyQO`|ErSGk`#D9Z>k_#rx?E+-eW%OOOK<|UQ^78ec)MS$@xwvzjVi)|G` zd8|!l-+ido1(_B~Z<)taIf30Ob1{+!bxLWQE0|fMU7svnWAph?mpHz{KSp#fP71SJ{jE&&I=E>GSDL--vzV;PbrjXVI_U#L(fXfQ6X38tAuMjcfMY2(Oy7YDz^3=!f?nF%u!N$~Sv*i}~|LaQ`_ z<#i*in6hSmCX(8{iyje~b6$7osW+G?oDpLorH}7)(2}NE=%UpSuQ~kiQy7fd#I`8v z^q5u2ccQ7{)LJC&bqkL-PnQ>EoNmgjVa>20W#{IRUzehRTdduGCo%ktEYg5ZCcHWt z0tOVv>fx(PL#=qsYgwRJwB>!ygyaPjO*eBq+wzSo1R=GTKZJV;PV=;SxOAWmTGMkM zNF!bAlLwFGo@-wMEJ;OBpn7#uk}hqEYqYEX1^OyTTs*d(l9UqDpaIsX{`h0cbB;`* z+YOn*&9AoN6g+Q~dnLU2m0B~6@mlngOv53(013|)e#WM!6O#tZLN=+Ir8%}T)OX{} zNHv0_er6bg4)wMlr}lyxi|{r2drA_)oP&wd%>v zr%BWnK}oE+ERA59R+C`)!wa+G zXL-qt{o%@;+L9)vK2MO{(MP6{8I%8sd?*X zWi+-7e%19RdK_4Ev_U&y(&W@jy`GX5+_th9!JnYPw|OYo{dw$N4)*iHI|jkIx@E8n zDq5#5hKQz0^yFE?4-AGfV;nRVkvJ}O-?ko+YItk6G5G6a*eOG6L|nJClznImY-V>$K@1b|VY&jX z-rdOAv`$7@O$Ev@-*`^n`kBDGsm)Ms@rVZ;kam4fSYQM7I}O%+9xzSjYjhZ_O*>zU z`#uZ9?U2)I%eMPGNE6wzxm&WS9^Ui9(wJ+6dR8m9;OU4l4y26-tW;otg@=FBgcXbpogEy^ZA^b>!-ER{boDrJr}SC&vqOX2S<0Se($+ajVeC5ePiASV3t7iQ17I zS_$gHvuz&_8hHQ(RTIr$werX&I^$1lZf>CqFFN6X6!7p02(+;vd|vK^k=cU&uPU9nA=IP1dffhpHJaUSH`Frs0{Swo}8D{I{D{l zTihf^vY4qCFw48&jJ8Sd_*$*wzR$b_ud}@C1q;~ z^=ex__)8~QDndxW3Sbc8fCYAHf72lTyG!xkvF-o0TT!SWtq73h0`Ty;Uux3?&{rUS zjF5B)h-xi?m8Mzd(id`L>|gEXYa;U8tszCDT~CkJb*@j&>L`TfK}AKd`i|WB8{IiJ z?ENGJQgViRj`V=OBc7y@?bs>~=3zsKp`|=-H;|#f7vgnoicCMW;!3WwMqdd~mI@W^ zMJ%2^0?T59f7mI`fZ^sm)z%&Z?wUe*f}gi7r&lvg|C$2{#0+6YBNyZpzH7WQ2RVIH z9gbIl;V3n|$471mSPeW3cTABV7QGqKP%)uz)8zt~Xm#oX7Kx({Y&tWBun2@WcsZIF znb2dU)fbf9a1fS?9ow5?Ao2P`mU_mZVv=c)QvQ-gi)WUhslSwaaiYxdf19L4$ zVqH))UHaWuG#B$BXiWEL6)wU35i)#31mf?YZV4-=;ZUPV0?->t`hvEO`AF;n0{JmX zrt*r(N}XBHk+)Ks8JegVg6u?^&X$(Aes-1An8WhvXSXbr z0GG8T4|WE_$F}Fm>sYLi_%O)0xRW*%-JojxHEsk8%LXooDcr>1)95zDyvQ;YSUO4= ztQuLZ*$eSQ??6xTrwD>!Bt3PPR1)UR6ZaKRt@rNM&x2V7QY6SyPfJS}Kk>?5pW8Ta zFfX)H6a!t1ME|<5vLvePBpQ&zD4_rS%IY5j1HZ!?kY+ok)1!9WQ8`@`JV>Q^&J~F# z$atO>W^JX6%H1fW7=-;GvL{RU(4nSB64T@HibF7oblt8K@Ob0(DvRJ0S8D=OH$@$> z{)M2{27IHW&?14XVXP3ZDbZ>Y-XjA%P9hFbb3h_4cGs#_J(*ZBI;luHf)J|(1HJ7I zue`P>b_Hq#-KLB4t53_a7flX~LtP%rsj=mqP3I8bUr2*o;)iKwh=lo<@c36~O0nZ7 z$mR{%SQMj|aMKr_Vh$OkzTV@=pQo2n zuj4oeAi2_UP~;Q!xJY$zE&Cew?hP1fDT9MC4ImI<$ZKZmY*7qi5*{@znZxuBYY{GB z2sBv^q=_?1_BUO=DV!*)k24QfWpx}hZ!A>XQw**0K|9ml%qdrNT+oe_99X;=zmyZd zb6bc!eZ+-?=-f?E-Av8stP#F}OzIf^xSb=#&B?6&X<8Vrkfn>z#{D9O&K+}01t%8I zq*zJuRkc%leGrqzTViyck6t3nhoz7i9w~Byy~KZm`jJ6<6CO#+J)NUoK*j@Kb##|# zs~svDMYpSzq42Z_LS$09)E$S5`q9ND|X*u*i7ySnM5E^jO1uFBSR;1MBqZcq%v$<;h0PgM^0q; zrXZY0=v+4RE+70ku<<`COe7&D)i?lm&;_LQB7c+q0F4HKg8c8iVNqGqcAXx!>rM4K zRuC)ataG&u?IId1++-Lih_W^mNb~XD3OyOpqa+G!*Go|Pa>+oEt@ft z4Z$cIv$Iut5GFaS`2%Mz1;+QiQHEqImy}zD&A)QevF{BUHx%CSqwz4F2eI@Ct$N4- zGL(c1p~j)>l&Rv4K;(Qc}h)eNZHnm8#0uEOVQ+w6!!J`q&Vk!By@}2Mf=v z5=}EJ^+GZ{oecy%3)vtS!myp4U24b6Yh~%3fHDqY4K8}5E4JLow3xTANy{}w$xiw= z%M_*}_T(Cs^H>%5`dmj$Leo{+sCGY8?gjD~Z;C%CUnvr; z`SkajV#!<)z5aP?^xsQh{9WTz(YG=OY~ZqW_&-b#alzLxrvkDAS3qv~cW?gu&-?#7 zJN$Dz@Q>}L|NQB9uH&q*Ez!RaA|ciZx!}5@`2|rRG@_)T<2s&{)-X<-a99yF z_tzUK(*-lw5?xsIh2h)Ew(rZDYGNWBC>>g8YqVbW7d}g+>vvVmg?OAy;QwAJ@Rt{+{}HfQ2uwsc(Eb-FR9iC##TMIGmx3-ATN9KTi3`-U8J^vi{b*Q?c#S&RjB3 z))=nHvdO|MSsr%_VkP29ReCUAaT! zxtLKE@bvIiAUEU0@~y!~28e58&KAn=!7GwQ&|?v)s7_4bb`G>U}#PQuS;}8(6ih|E)W8O8|qn(lLMYna9!2n zC)51NPVn2%%B2)q$LvntvB4&0gIjo$ve`!@q0!Uiw@SDOg2qZgwx5#a#OxxEm6wf1 zi{@@5@XZ@!4ywi!1jBR2w{qJ2xfHr`!xr?#G@8D=u-Im>FNA$VUWeBxM&(l%A*tg%%R#pbt>{B@$<^d{` zV$7XwvY&DpQ)z#{VslAgcA0DFvB52|is{Diy_;NlzfonB)EE{OrD6Afy_)fQtH4X@ z@)`{AvhsO-v@_JgZBuJ~&{4arL4Bs`$?<6kJBQP|PUxxFx7zoGpn4FbT7BePNMWnK zRGFd*GFivz8qBD82GM@wF=WU=0v20LG&mPc9ys+b=ScExt4iJlA3ww94`+*_#ERYsK+ROBD z|LozSSyW+wnjL?R{m9#yTC`?m3XL3TDjGt!`b zQTHb0wYO=jMp4r)KbC~ug_C;<>uJ}Q52zDY%a=JMu^3yDmRn+tw961CKn0W2Ki1yO z@KDf)30~#UVqnf~o%+C@nz}dn~Bmo_!`w9QT)iEWOd2 z;V89YJ`jwYhI{wq@L1mZFo>!f2(hBIH*BsQT@t_2Bx#kjglSJ~8MhBBzzP#+9wtp^ zct|p(_3v!Z+$PknFEUvs-xo{b*3+X{<#4I~RnYm`uY6B8KP+4@5`t1*)Qn1;J%zY($Te zc54p#Oz0o&W9QE;W?``=bM!GW0}7r))BMB~+|@jtn9??)3GMJa&P4&~XZ5FWlX5Q1 z+v`z7AMvBI7MdEhSaX`k(XTkj@`A5))ZS$4~^0k2h7>ko;)}vLkCvj zAB7FW>natR6x;0P#~kaQII5pCj1tJ&XDH=;pXF|jiz?>&a7e{Gk8??Ev?0R-fx3LG z&4%>@@A%RtUbGFeC;ksr=-DBK`XPrWEHC`uh-H(%F36O!|Rh z>!n1Uxre`c28|QMEQuwE^6RE;(Mc=1h-~RdMGB#Uaq!`WW5fv-_+yYAKVo!Z*GY*f zO7oJz1E!Uahc>59NBH*EP=qI5oCz&e$P-2@8T`q;ze4_aR;pX zaU@bGoXxQxa1$P?Pn?p#uhPvBZL}facAXm+pL;x)7A%dF6dkR!otK=*p9$Y=om1i~ zPPY90_*ANMTwcaX(h4$RbS{#Pf{^yXJpbY6yL}nsLH3110(Vi_Mrf;g2X2nnF zI&glVOs=CdlZaly5YEQEnJF^bIv-j2G>D$hP1ugf_0FE=M%LCGBX-DM%o9s>} zQ@s`--KmI6GmZ5FmLhbF?#c$C8#-(Choa}XTep$xBe=g@dxduKfs6&@1h;@x^6TFt zpWpFJkm9%vpqtonOx2`7jI6W+AM}|3UfJ{0L!c6dDM1o8S7WA}(#@4~q&qwQZbahw z#MH!^k2}pBV>l>+h<5u~aP#W8-z-KdiN1(4dxmQ&F(KUcT9b@rnDDeOsmZI3bG_Ei;Z_!$AC+C^~dD&g#_IR1PSQ(oiZSsezpb;3-J*Tl|v z;t;}<-%*2TT<7k`qQAKI0{4&P?oZ9NU9U2RVFp@ZFF_8ZDUM~KX^nCV79w%ZAb7Bh z$C&%{!iS8%7(jW$B$w@O40?6>PKxq3=Ue)Bu7&*d49!Da^)($}2p)iw z{r|M4;Wu(Owh?wSG`4dxx3&45JrpYbxiG!+NmVWM6F#epNw%3lyUh9}xg?wtrTKRR zP=oiULUZwXRE?+yg+-so`fOditd}%VBqFTu8FGQ@9ilFH!Wx7VuBfdNb?@m#LSuwy zec!l(sFTp>IfeAHM$L@2>HU*wkb0cblKjHF9pfkppbbwXg})~S?^Xwq3z2p`V$&^1 zkRUg;DNT}m^pHRs-M4`cNW@KFrwy8FfGW&Jruw9nNo^z{iVlV0r^my;9wEn9(2tNx z@n>Te;a{TrI8;vPfHaF29j+dc6vcMH?KW6{dO>d5{UNdVu&`||pkIp7NJ;ZqrkEd? zd0HIFEl|f+E69;W>bweC*?|iO7C*a>imJ(WXme`vd$&20=63bO`aL2%np7o<``y7x z=FO*XUxTl1fIdf}K63!Eky^DpDd|mxNJ$s}B9M8Fff*f6Z0XOtUZMZMqAY2hcoEE* z^M3(1XBmKAEWThuU-K$7T`eKCTxWmu1#M?68C(58xANhX8Mf+0O5fM+{dt+$9?*3f zSq0TLV#;#oG?VSP#=t4k{jbev`jt=yS3vwr1bqI}%QO6T=76o`e@w#~+c*K#kL(n6FBUj4{5QaHzC97qLFz{z4HR? zpCVM>eS^;iz4{FH;M?~_#T@-q@=qH0_Z2_ye;6kJ=@|cqN?-c+=K2rC-A6!p{!hg= z|L48`>)#LX&woDu9Rii{|J2q6wpF0Zh_!|p1Qmocrzdt=j3SJ&^do{ArDZ7m&{++$ zq-t@WT@5YwJf`>H<|)^TE4@Ow*6-+Os=Ddqcb)>}+@$rRdb^g(s%yJfu2AGae+Ng8 z9QUc?(z}+WKW6vc{0P#-NS-om=ZzegZcp}|io%%$hn4JFR9cP| zhZ~i2xc{QCnC5#xBDL~q!t`#n))=h=Oj<9&@e>9e;yGoab7TdxU=AVJtGGLV^HPOS zIOZ7kF3T2QF9vh~jb7BsCEdPogN7)C3e$j$1q@m$EPTBb6p~Yjh`gk2h+E7ftnz4~ z8*w1o0y-qsI5LT8!|JaG;3tys1-@;8F312UiLt7W|7mMO47yZc~=^s~>w znV!j*jybzKKT=gOLZ(dHxg$qDOr~w85+ja&bZ8!^Y{CYrM`8C72a~K*mRXDh`5#bl z+`7_Y=SYzprK48l*!hG|okBDe&bETxq8=$E`a!$Nh-pff5LJp0 z!@XyY?nA&guntm#ef+(UZ-u-5QgKh(Ju+bfpn3s7^`ACE{)q{lm^8m2Ah!LZ{qcWt ztp7h;hOi9M{saWYI;fu7FxcW^GGP<|xFodJd(Hm=*Q^9xHDj{Tc^jw}I_>ZhO~-s` zFb02s_1$X?n(J<>YJS(~8Mcf6wmx`&jr8L;jQ0ffE6(IcUt_BNnx_?ST<`7Yb$Rn%rk}`Z0=sk6>y-x&GgS@xMBBLl$Wb>ouMyJ*t8Z}d? z!I5Z?MKI>*G>?@0IotrpQs-|D-nc_W`_9ovs3F*ke1KWm3q6}PosX|o)t9e|V?g$u z;V|_&T74+cu1%1p)V`Tut6$K+&d47i?}w^nnL_iv16K}5qb6Z_qzd9j9#@RHMsX`V z!uIkP#LUV`D*iwW1aKaz^0(u!w7H`rU_9cF&ecC*{H<%n>skiTqYiH0QP4imz355m zvY{8EkTwXLtWV8$I;nLdS=L zjhC72coU`h^tFe&RIZ0QTCcY`?FY0%DS=Ov>@Te{i92nTo=~11C&tW-=nDVl9C#~6 z8~j5Kf9=A$=(s`?NF`#vujJFGOKF8-a)NOL)cJ4+8M*W;Kue*MzX;Pp%AMVe7D*lz zG)u&c?amoVg=Tm#g=sn|Zg6qY%lsv8#Kg=IU(*g3(A69aTUI(}{C}l<3jq-}Xk&jN zK8W!8OPdkzY0KabtUv)+{il-)|Ad836tF78!Q4>F*3{J4=%0^&iwBH2ELLNwfPHKgzDrIb$>6LFf`M*`ETJIL0co^{{v?Kj=YHfi@ZAiL0;c~c^Z>dUF@(Tv?Uue z*Y}$h0x+XueDDV0jZ9t!V7B~Un0V46+C?uH9{5sJ$nm8N)NV5Ym`PcP>BOUS$Ck~#^EA`zBhY70nij`7Ut=!#TTj6m zb@16~Qx2o6TLkk7L*ED7`d?zJhoiErVC$pV=I+1-^$zI;tYrK_URy$<0L*kOOeq;L zu>VXmVnpPRw*uWF;9(OF6}XZ6pen5)}bThJkfx-2RL()6c6j?wo-E_{z39 z5dre9V_dv!;-|IlpIsUik>z)epQdu(Ii;%&_liB2SslRF-|nyK+}@zKx)WQQPV!q0 z)_Hbq@dIwxRgJIk0}u$Qs6`KbgQyOhgF>_;1);R?Dt#Qcp7YS`i?94(oZ|H++1NqP za$$HF4MVMaieYg%5!^S5%HfD)Vc<=5a3(D8IAt-kd^)9oF8zge5`Y4pi>Z*p%qF;D z$umA_5FzKJLJsX>Gwr~@{;YxlzOh5!{jL{j&$)HBHl=rNq!kuQV(ia+e`;KGI7Tnf zFfa=Z^{6zUiz4HX)qf3wDol@>;M&iEwlRc2q+TuB9~!Xek~tgj;7#e{ZMq}#7QK$K z)lah!JI$b(D}7M}>ub7Y?ohb9L|*ySp-y(%k!{``g` zD=x4&a0Ex@JX(xnwa5r zvlVy9Nl3sDLJ)m;oEk!9HOaJC<#Vc@@24F9;`&W36k73U<@O7CKVAoK^?SfBn{(O> z`rL7y)Ob@!0{`mTt7Y7dUl>-a-9SPJ^HC>$EJh|BO8 zaTEe_vE)Pt7_@s`k(l6J<(bP`v|``2)N|jkTB_BUgLI*mBHc2#LRIN^OO-KeF$*lp zTDZ!kA$tWZ%EBm#TxoGLMUsY6v^8#-Kfb6_G>|}9mj*U92xt!f`Gqp5Npui4dz7Se z6X&7+_6ntmdS-=Z81qoK=8N8U*9O$MOVfliEoL{rLZ77q@g;J8zGU`;ngK8VWBKUK zqW4-6SVTj!gcz;D4=RzRJS~9%Br;sDyz0y+g8eg7Cjt31ZxgF#d?fhy>1;Hb7XdIX z>H-Nf_dDhOL}~uS_(u|JxqB(^ji&pX-h5tOjPaX}VT$1Gnz1?BVj$(OXxg%hdgJXY zxp<>b_%SwLLEXKcGATZZXU~F19P%SD* zi>SydD@>K3J=QRKP`Z%+TwWew(IzNeMp59o5K~%CQCd=BBkP}K6Hyesix57`ZZ|Bv-%J#n$1i-JAYx8WOpw~MRRES|civ(?ouzFl)R?+)PW!AG@Q-*ZD8|hJ8 z%@;dw;7ZPotsj)s@9(XKlC(7I)t*-2G8)^8$y%*&tFN{$xnBgq3#N>|B?k<%O7J7u zecm^k9j)bY#v`NaX8#~k%l|gvtQq;l-HB1?_h=qxR&sGfVJydu0 z5V2wXAX8jr$6YJ2-yGu)iD&65ue9e{X-8l6Q*=vXjPd@n>){s;S0%-L-oE)S`?~+y z0okjm2>)XnE&(JEknrD$w}ODdTw@!<-){Y?{BCUvxB)S|eXN)Pjf@~L(^$>QYK@A1 z$dS)2kx)cr-=nc7)KniP?e)X~wOeW5aZj)qcc)FL9o^mh`Sa?R0v`KO= zl}M7vUF@eDMRr@rf#Fj|qKWPRr)vzfFBt6oWo{i?&(7CgnKgHdUvyH!S6STW^Xz7G z*)d)3M;*7qT$AG+B-+NJSQd}L^d+g*C$l7?UBJV~dRyu3Zkq_K8C6Tjw<^FkRok80 z)~!^sfWHSV3>HEMPmp3Cr15q0fG2ANLLq;`g$#Sp zY2U);W=2s_3OsfMGmh4ku_#3c7mNu7LgS&`dlOPN?^x#1 znm~Dj87RqOY$uR3GuL&u+A#KWG{{Ymv2kR;ma>xN00Bz0cZ6DLzpYF*T@{bnBmYjh zycyi1a}(YCA-Z+u$7Wa7JkDf8TdSG*!>rVFYQvF+H>cUj!>CgEw57){ujfFUtg|>{ zYXf-%ZQ$&kwpa3w15jTTmWFmu@5T#Tk4~nAv&~eUE1LV)nrh#)ebITYtINl{ORGJ- zld)rYwh$go!w*+i#oHfcsA?xPP#?KnOt@qDTyX*tvE#zs0s?E8n)`VFYRGM?&P_Cc zOfLos2uSMh7&1TtjFE*^(cIKV-^tnGw@hBCWGTB&|0k2H#)_50vo=U$!dgcXlspPF z2&O5Owv1XE#;qh>0L>2gZa2;sh!1*>hqQGazdmmyfAvxdgKqNZ1oE(ZYd-28-m#3T z77!?T^jWpCO`e*(pj18lNnW*RE%=Nwvh#SMu*x*D^EIxqua)Wp!RYYOx_reN+s3{d z&%4DjYsJjEyYaXsp_!`&?+dx!hY`^Bvl5ebkCX*F2e0}LgaTUHGzyIVLePb3^)_9! z*B1A>6MTLkR>}>kpGqkt1LHCh2ns`uSG&%EV-6IM;R+_OuqaJG zA2(yC!RlLwc4T+vc1<_Ed7cYWOfV|QFe17PYAqfkN-HtLf5kniH1EV0a+8|wFsZe)f2X3MbC0yYkgy9) ztrMPHyI@V(I8OBMDMzc-KW?5NIAVY_r!vvAd-whTqOCb`a<$A#-yyJ%Lrt>h*Cv<) zLGCbN5aBkY5Q3TquLz_7QN9B)Y}sS=+t;BA{}M-oDpO_1d;G{T3mdqse70Q*<0VQQ zwL$aaI;Io_%#E<2WRfSjYsaLo!DPDixu6S3itvuv#oQQ#dwY`vYj&blpe8gLBrTMp zLbKjQi_VX!Y;CK~zTa8myi8z^IukDAD&y_tD_(Xxqar7&g$0Np3giM=g|i)p3`!Jb z;SD^S3+rnQ18#evFxfT}-%KeJ8G2TUq~m2QP?DRgKuoh%SF&kwh^3HI4Y4*C|z#^V^q~ z*ynI7MdUCL)G01)(!CrRyp^Le{VI7@Lyhk1hmK9>I;BGZ{vmEvo#{LI5mt&#_mtEb z(~tDJe=@H-1@pDRTj!L;X_ECzRS}hu9m`2S+yf{Q6=ch|-emq@-8(mu6KW;BH+bgF zq4x8!;k6bM$Yz2>#2H9_Q(Q}-TcKyjKxsc}$f(fb-au*jZ_r3xkG2GPyo_O`J%|iE z-KV-wU2vY7G=>IKL7$C*tF1d1Xd>b`#!}2476vxOW=jkK`$o<}#h~&7Wu%=;-MdFB z#H5Aaan5?{Ce-H6NGY!|Frf1qJkg_Gv-LK{Vl(V0 zr*mX}#bgHJ!jBU=acK|XR;$hhvRTaZ|Aaz``i_gf)xY@^NWnS0H8;GH(mWo6{t4AT z!l8HksHPt8%U5SdA95?&qQ}b_Keip(O`s*tMy=vc51e93HGBkFyKTOwjWMT< zOr3X?I_){f@+7-^=aooS=LdBpv_=)pB_Qoyl(L8FyDYM;7ERo7_Ckpl@=LJxsUJm( zK}iYDUA3%Bw*N{gpyV>Of9!6n`Wpv_e-?(~cKk+04#tkZ)w!!w)CL$Ss`pcM3yK(A z2{cZO^=vpLbF4-<==wOTw2Z@DE*Mu`rcB9R_tg=M0rbzgcY~_w*5PB^j59j*j9UKg z=^TV%)nYB%UarbTe0XN()>fBRvgUEY%HW@*mHlGi_9UEM4-_YO57%VdsU%KPR zZsuO=t+AtLbVYQ1Ij+3SSgY@lIBO$`7xaXcilLjv+W5Fg_KaYV`iK_S|hR*5C$g^nuh zL9XTQPT!O{8W%5APEnH-&LjM8b7BcPLpPJ+GO4)FH+O+`1*VlFM7I>S+IM6j`JvaStnmMLctKqot#z|KafUd;^3q zHT2|e{JI7#*(}CusfyACuPcvW8D=NZdf{+I__OkW?`%Zj`={E4qKpn3t5;jpG%fiZ zk=dxPK8wdo75cPZ31YxVX$sEC$QH$_jM*-i?W4FG#sWiF8RrB~hIY(FyNAY9d{w#Y zE9Z@<2+DYU6tzbKgx+;Z_ipKVRL+kesw&;eu;38ZJC4B4hy=1MJgIic=+BI@pAhH1 zg$&FwdJps<6E`V7cwIw&Ad>Edk)cf{wl{U+tg*TUQPPzm}6uK zcSR~-p3Vy6?*>djhvatw^Fqy9ab4sOL6=&4Zo^c2f8ZXJsxmc{MOG}tF;74bLZMglu>TQhC zV5{|Qm8y6!ySMq#iQ-?OC4H$eeu2`{fBl@~4TjE*qBfY>_WTtQ?aq*7RhbukK-Cei zDue8^hVtd%a%g@7cg+QL3BtOmH@g9f%ri(4a7cYX{r7H^K$s~L8_=Xpze&~Yj|^P* zW}hxvFcDf5dShI$4hRAVAw@{o~2yA3?QVXGf7WkA8-DPQG% zO|OhvlJ&%ij(|nwd@(D?nyi>Hc~cdUkcCu5w7f%8niogXT!x7Rz7>oX>&jmSPmJY- zpU=c9rVA~|r?}Xk#00~}gCr#T?-;?;xXPRhw#|(GAa$TDmYBZ{I3(+PLvXAX;EMS=Ka2RN_S)$`27 z4oCyLlutg0#?aq-dT$=#H)e$E>l6FE&AE;8ah{R%d6!bIXnG1=2Xa}{Q4p+>?SSQh zP@ox)7yPEF9d`99_a!v2R&yJtv59KNl&sT8E;{OCA=f;$$ z{Sm;?w-rx7$T|j$#tLPwBiX7)rJrMYT~xwc9t66%mNzw=5sd4Szj)c$KGW3}-wgfp z2c>>VI|$W!t1^QV`n8xeNFRrKj}bvWOl^;i|L&?APz(dGVB>kC6j|lthWqiMg>8+M{lttZ+U21S?IdSEbJ}r^U_CX2(juPnRUV z$CyNLFQ)>H4K?7qa;CYX5T2ajb?0|Qy?&2EIU0ALC=Km|^e-hWE2|H1M<36Xlfl>c zX8uTo4PoX6!X~proeb$pUA|xe!@^|5%E;DUW?6C6i}{-JB>aUCciy3Gt|J+ZWTIh9 zBET^=R3gAWep);*0q#7-vB9)9tBXIB=1h~kG&1B4_vnNcrt`c+ZTXls6`~gJbOBZ% zd$@x5wSgo3WLsseLdmjOt^h&RPjT3#*3<#G(%xzUirIDQDUIio_tQ^Xk=I{gsaxAP z=%-iHw2}AyhD=ktJNa=wF15A=2)t?byyw1*bJMaellKV6BCo~POuvffF<(<o0dpunAni@aaQ-A$hkox*=R)nXWa#}omq!pcHp!#qTBKmSPL(!Y1 z0oGvdUD;Zl?ac6Oy(DB~Y0omy#9mQg#1 zMUox*ai!48^f9VkMv@#PkH2hvj?Uj{Ud@&--|FDv7`D;n`%0sW{u6HNuDm;NVb8Ie z^Lpq4sZReW1y8PBj@B0*ezQi%u%W#3~+nn#MGV z`9o|l^;RSG}s%j_Ck$sM4(^$Wpr{mq|BgQfvn(M2a#q zDj+$;+w(lbl0`s)1b|A@GPJPSKXK)E-SmANo;(do-1PLsaLPGl-xm zD4p-?OS9MbdVjqjtzIP$IMsCVw{HDFNSOJRTt1L5BXBof4ncaDEzH42(z{B{Jx|z} z^pvR7YlEJEhtfiW$H8Co(xWOTJ=JMwS(k4a+MV^4a zbA0g76F`BpHn~$#fDyntvI(LxtC(4FWW&cg&l;R z&(CJ(i)~YfIL5;uY#Okk*P2$bf1Sk7GllI<;FEt3Jr7gPY{w1`f0MaD2F21hpy>|3 zTb`h(j`5j45+++jfIkTr=@(23LD%t~$+e2yKqLgt;BM5hLNltcn;4sX9Zh4j2%7Xe zQk5W|E!Gx7p{zc1)v*8~X^;tik9Xj-6IE2SB#$lx0!PSj8X_GZE%>j`OZU+&3pcC- z5T?=w;Nm0GFdX-(ZFXlQmMPc^d2V|E@xL|KD%T5=ZImcn$Zm;`7>TBPA%#(GANa2+ zZF(>QNYZ8#9+8*&d!cBzWqe0WKdPgntIQQh!ZaklN8>Et`U<0aKa4wKva2!Xg;sZb zdqO;L{y~OVHIOG3h+>n+Ou*IVfL9}Tt>h1Cor99f$)(7qh0@gIz8CyvC9U)8)xuZH z*@Jq@j$9hPz&>?n7CoN5FkfQC9Ya~#ST8HWC2V=@e#>D3hW62h9cnz>lRYYmb3H=M zXbvrk!6`fpowsy$*Q-1HN*AAJiw^-@6kojkC`=MPN*X)GKNX+dEhYdR)XcLE|P_U!2F;_!aJ;5_(;#}s9D(Qn7+|dHn?P9ESvu}SvmVVN-W0I7? zysK%_9$mGjEqGnLB2N1}7PhKSXi3=)rK!3tkY1+#gB>-*HROt8!Kp=SO8J4AOMa(c zBcM`wrv<)oWV?s!d5vhcm_I|uuu{z3uyw-KkO!ettHR|+hqHV7$Z?c1XS_wG(>>o; zD=l~2d7A3JnGe76h~cScV(<6CLKgXHlD#%uRX(q+n8FAouNM%6kqpVRAA|C3&%M1` z^Fy`~Z~=|tn+CE|TeeRw#WZkb)`gi77W~`73*sf3YLeGJAMY{4T7>HpmgL^rF{L@W z0p3L`;{$vl>nuKM*X=?}(u3Xsh4QFF;x3&d)&5)}EM{%0T8()48P5tMsEVpo;nr$4 zwo#XL`0n{XENJ2@vUZE3c(`hnFDh-s_rW_FNSPFMN0NA%F2OEZO-kBss$|9Lr7wh- zq}|uP%NYsI7R}3`V3CD0VbIG$5m9r>+U8H;pLpm$4=8>GC!SLp0vhuNJxDO0Lwn%VJ-7 zyg+90^fOqPYBy`y=+X=?@@``8y?oybD6#}Pz7Btm{9OOzZ0FCZvwwdQ{GZNmi#a*j z30j#01~dN;=fPmFaylunKtStkKtR&}A*24U7XuDPtp4k7_-)07W$C!idfWd0k@k+! zwFb+&a8~RUCo8sX+qP}nwr$%hwr$&XR%|C<_P+OwarQp@+c@_}&oSrx(eJ3Lu710! zpL)s%TY#CS;tQW{EdWBk*u=vo z7l#;9hFWM!l()VvfUm<5eRZ_)`Bdzxse!q#Mk z@Q0MInTREXn-sTdk==I8ff6D`eF+u8+X&>t7-h?Rw~2PcX9)F>Y_Cbz0Z_qrNTLh1 z3QZ7tugU;5!^yE@QGbm9pT^!jW1WjlP53uy`{gL}yNt}RDK#uo1)KTOo5s~Qe}<2h zdlnaTJMr3nY0JG67}dnY2?mfdj@Tp!@(z~E!OFF1(eL_Z5Iy-3Agh%BMiyzElf9Y? zL~iCZlEZZl)Bio+EiofV#Vv8mQOtbf5M~$yf!gk3SIGRJz~fhQ#(L++zz)Xy;Pj#V zYs7Xs+bFed(joR2lzi`^HC%P-PhepL`q=TZ@GI4W={{ifH7m^R;0b@l3sj#D_m?@z z4#I8!cQGIOF)0{Il{ZMJ*xnDNbv8QhgZ{`c4_NBsAVwX|(g{)`-xVDz5BWiIDX!XFsS=)@Cv4dKF@}9P7F!RP_`Z8M>i>} z!@k#~nwdl^((vKXHXgYMUpIqbg4KLAEyhE^WWx&{yAK1#t=YQWq7+j#H6_(mdxQ*a zAdGoL;$It`7zbpWE|wK+!pMSyF>2cSnsS(qpB+;|Kd2)jVWYX_#&K)L3sLZo8ggcs zKqEaf8ILMv0$l3O69MtkWlx}jZxQJvvYb)~`Q@@A4~$p{b!A0W(=}b6ps)y#on|d% z22r@}2%{G4F1}P~$V-ap2~UL@9HsjSE2c`Mt?<$&k_1&2g*OAkJQw;vk&~{sVc$}g zRC3|`B*mV!sCiWm$&5F6R`9;mS#T;2hD^@yS{N4a+ zoRYwHKKJ{4*W;DnnQM-}xctpcB)A$vr`8IgpSm}Cqqp}M!9MIcyI_?U7Qx~R>_r5w zm;#i?Pvy(^NAjbIuh7L>_PXb`{Y(Imnb)}^=F_S8&WA`WpM|1t4nW7@K3QQ<&P(F} zwkmxd86l*<1Qj#jQ4^q>ExI^=06<3$7XrOhyejD}Ti#P*h~ub0Xj3DlI;z_4K@2@C ze?MC2*nIymV)`}W%p`W}A+550vakqkU{E|BhEO4Yt^G(E!?Cv9q_X}1dv@SATm2H{ zPQ})IZ1sq4zkfTc61xll@UV^eZ>N^vj;G#;6)VB@8#0T;!+3G<(^4T7H=-TkYA3cF znOBxO2?qad6rZzc;ee@({-uJF)OXu0r#`CZlr1`OR;cnU(Eaff70+>AQ6dTZtd)(4 zW{v}f3+(+CnT*U&ur%p(t&ZkFHhEsBjMv#_>8Jm@^8MldDW8s zm&to~?hBo1YPfpT{@|F{D{^IwX#r}d(7`B6-88<%gfZBm5Pa~%S?(1^W5{A{%8i@w zQ(v~lk@|{$XcP_psG*IGp-~!WZjxToVpkYXkj|aV1Mm7jUzj@ z0V3`g^>aQn0PL@<=~U#+R$x55|{uc6@a9e0-c!EOoG3LH$pNUV=00pb)+T^$-gg?l`(M!w>z!2CcN-?J^Zz?G)s&V>GFQ1}vX zXxSfLp%Pf9$NM|Ojt##fTn7T(An{^33JiJ8P*;q$=KT`nS)A1E3(%<>V_R!*_@petjTp& zwo&h_&aQl%mqis*@ji~vAN9hnyRz88xYpppkCm*ROFVMGj((s(_mw`AeD}y=?fQWO zTUui0Rd`=5W#B1xwvY)5S-J_$!5gjgcNS)4VqJ!5i;C}hT-nb>t2mjcX!_=93l>F* zzJ7!qlJZcVa(`FrSu=~&+@-@x~Xv~*9j%0KPH$e ziR;&R-}x-4K5O(grtRuy5JlkU%Pa-DDD*+@Qp-)qYz7_YKbX&m+7QHlh-O!ul`2xK z=m_y}YDRXSF|C0RGD@^Ty9@z%>q^8MZMr%CQ0($Ih&8ELWA|6pt(7ytk?1|y%pg_= z-Ou=aXAucqf3x`1KS*SV*eTpc(r@O&jjm%7HM;A@KoYMRXW zYjq5;J`udX56S(`8{T^(B|czpxdG}4a){hn#L4c(d{w`?s6T@PT{4MDFk%Qk3dJ8q zEgbOa=?XsnBzgTXRkI!sJQM2+F}R#6S>u046;w}sLnlhG&)&XN_v4ap*QL~ULqI|> zgBd9c)*0diqqgxFw|ad=J1iG_rrG>nf|FY^)A^ASrxK#gjgxCU)=JF(SB7GpN9r{m zMZpeNI*}`4?eGAm#Kjcv`nnbRDH3Hn?JU1jqt-J;6sQLhPX1$KQgZK|HjcPQD$iqh zi?=2jB?hP2E?)*$q;^7Uq_hIX)T`*(r_>|g5}^DI*AF2`wzzzJA6!!gjA{E0OzJ9=YtLAzX!rt!a^Tcl#~V33ZtN4d|>jC*no`$SP9 zHMG^>{8A0E`ld0ZVzWB(OpJokYL2S9%8Z$HGQa`0EgFlGOcd<{4CVE(CKSv7xK+C-`st~O zP;l*pmD(Tb7KxPXVQD-3d&@73R7m|Uv6QP!CC4GRkI0gce69lXn)ybj1TZ2hpZ80- zm^yus_ffCiOf+=VX>-@M)DGYVsRTfs#uKNAZYhdp9|l#o6{$e?@AB$biW)xWO2xbt zK%2%dqX4X~hTe-}P_$YR-@(SpTV`&EjL=2Wa<5T!%&z6$!db!naX!ZZLX70a-M}G~^#H<~S?2YyQHE_1RmS%)>XKzemLW+u7R8m^W zRAGa2`?}5*8#(D6AEd z4o<;eA!3Z)Z%r{A51LVlT&OIlsBDlZPl)Y=Ubh^LT0K!+UOllSHbX5g9T0f|Y#yXY zj4f>x(yYjBlql`R4N?}dGyLxEJGaIUwyKSls+7*_11sGPe1Mt~d!C|B4e+-)+D7|H z3gd5;wS5oX|7Aq^-5uwz{TTjL5c!W4RDZN5J|#v;t!z6rO+h9uNxfTsBoE+!@ZPb9 z0K((LqXMDQN{69Kjmm82q=ngSK- z-^qs}dn~B*Et}r=5cprpCuHqxW^ZF{^&PAKzlu0XF-|!)JuWp#@!zBjf?M8!`1u*0?8vS(j=5wnmm(1%73W57f zjttfcD?$j|a?}mNi?o5jsmUp|d4uo$b0kTnl({f}{l?oA= zZ-^C07g-1T)=xOM z_h(Hzp}wi9Ty>w5O58KXrGaA5cnF;Yq2JM-I4_XqWN-_yWiTa1i3-u&WGy}Oq$q`1 zp&mQ)Z{CJu_~OzMQT_q?dlkyD5tY3IR>kv=M0X<>=6x06nbD4^hrW4+PYPs`hI^=B zMYyYSL7Rp`;q8nz`QrS2N*SlF%iUSJp(??zxyN$on|n{A)tA(dNTEdB@?yCG`!$GV zg#}B7xq!CAT8DdQlxbPLu7he->U=y8m_~mtOiyVpvlUpH?&#RJpV*<|xD6BvJedM5 zJ^beMdROdrRZ`B(UlNr|v(t;eFB|XDJ9WtKW@D%13-3wnnSDX61Kn90wA>L$O>}rb z9r=I@iiv`Kbwpllmn&gLWd0sBmiT1DcJ;l_V1EO1{6S>(1%H;o$sukpj?YE)HtBd|Lql*2P+~NQ zp_!+eCVwq{a>><{neN|{$w|4$L9~KNGU%aHew2*&yA`GL`SJ%mHE$0zG#;o`LuoM3E9sjSk^-c{7n{{@C z@0u7s;2#x8VjGu;8J6v5?9x;VwJJo*id*AY`o7%AoPT=zHCF_ z(%=Y*K?+|E57Pv!Ze&IFdf2{RUM#l%ZZ2U-A82vm$&KL>e~(}BIUVdZLgUo?d4+s> z=t=8w?u8zS8gqBJne`@7q^>fH5ouF`m|{u=dIz$&3U@`gylH(NltLysM*(VoSYXw< zHS$3}^U$XYwtga}NTbxbvThSL9&he7_H?t91@js)dVaQVO8?T4IVPxhyD5d~qVgly zJ3REKvrn5i^C@%1u5w5v`U+?}ixW;sXZ4e#f1%s<$3qt0<1AJLp3-Quk#B+#0XCfh zTSn`?O!$t@rylrYNWiBF*0qgKb+QKaMqK-I`AEio3<=cJ)Ws8upx~i-=;Q0hsQgnb zo>MdCHgo7k+uf->AD|`e+ukEs_OUFtmvL7HxBAp%>l z)DWN$&mUsAD?l9LO*-)aryUP7-+YwowmUBatooqofNu(f=_ff9B~}`+#v%=2PTL)NS35AzPgDK5G5Jo{?-)K5&N}>s<68!p=N(A?3^@== zKg!y>xAQ5X$Mu*8jcWkK*CCg9gY*)wOk`jT7~p^-dR)&VE2nH8-~@zSkn zU$d_(&vynx=(Kzl`BxRto^`W?xV=EJaU$}t{DhAp{Bs!Gx~Ph(bzxu;u7V=(Gk-0C zaIfwo1Q_Y>IVD^BAKdoq!98oK9%gPM#diat5zAsz;=Xr`gqT)x@Zo6V*KgmJ2-nU60!j4)w$RHOcY<;02eTOtg+wm^J8k1Z)dEaxb=#Az=$38DK9n zEM8?q;Ex5VGt#j-AL-{WVNU&2V^;GdVs&WFe#RUyt0|D;z2yu@KnGEDnD~(fFd)OK zPoNxM)yI|NLp`r#h$Qu32uTOil9`!Na!MK=IINO{ac62+f~;jVS|X}dmp~O1lmY&t zQGd)eGR8I4*l~F%$WC@B?Um?jjEw-MzHpfQdCKO!B2=)P-LBD4otD&u@n*U_T|ujn zhd+{N)F=vdj`=BEV&3|LO9@MKQLJk1{wHbA!Qm{mC7U0KknEb@pjUNZ>NLg-z+z<) zY~gl*f>09X{Bc1+RPbAZ%6#7m2r6G(*v`asVW21~R<@x{K0tTFT5IcrfD*dd&FI?;F<0 zrt=pvv&0^IW^rHC${uK9x-#->Mx2I^2-(SzLI&9*l$q&xBr7~nE_pTY+_|_>Ow5hl zk*?NKdp;?m#F8{c0XgGCGQFz|$2(NHD)%?5xyP`E_k;IlJ}L*4hC5k*G3*FqH)MB?jXZ_T+2kG6M*$GZ}i(WoS#Wc{F9= zN!-gL$Y8-LN<#1Dj5^O@MRfj0zg6IQ7IJb7c~@605{QZ_ZGzmGFv8+p%>m=a=+>n+ zXAA&~)RvmthL}|v3%jyNc5cnP_+y)ou8BnDnc$lsxQJMdE<78jKyr1CvXbxblr)&= z4Y1l~uVQh^A$|Y!7c+p1HxA+fT<{pjK1X|>vW&;%M z2rBpE&tDwMId04zOF$OA`3mtUR}F>5)ZQyw~8l&Zq1iI z@1V8N9NP#zA1ABpKU_!qb-?a8yQl6$dMuW_mLMD?&tO5p9H9#Z(E^f`Xu){*4E(}^ zw?~c;+t-mx-W9vEt3CektC#?GAY6Hn1;f)NW4qXVyaHcBN8l1F#QccFI+syyf&yRt zj$ok-YCs+IwsY#|?B$?ekHuief$=;AcG#euD zlrerGlxFh1$;>n@1^q&-ftqY?6LVinjj@@?RuuMPBxXY+@~c(bGJ36K0Ilc~&mfwg zl}&>4-SiyuOV4$w^Jq_H6nT4&X~uI06-PN0V147SwM{VzsNe)L+hEc>5vGI_2sc+D zRR6Lk=;;{qCAdbN*dmLxSsQCzyT1lp;xr_pAUg;Oi$q% z^)MU~7kx>d)#YaGZY|MQ3%QDx0zU!osbf9Ue*0T{2MJ@9jiw+B&)I}a(IYpPh?_-V zF|{i>K`m>ekOTcO@tWgF#;>T{i&9w`UumHrmAnB+JH6uNm&-jlWVnHtR1txQs- zd}=pkAl~klqEllLPEvKGXsR**?;}b=&^@SfB?8k)<_%nuzA_52Fg)pJ{N152VB|&~ zo|aiy9Yj1R&jiE{orJ$s;q{mdE38|#{Topza@pDJ>Q<}mh;E(UN%;(R)%~2HRsPF`Qr*tU4qh6N(D26w%v9h&s_-5lYcd)Tm zQiK2idK)M*_{(r|g#!2ieDXcxUq77Wd!_fkn=U+2RA9n8o026pA&7SNR)SgkDn~Pz zL5EoxW8&t1zO6}*F_ULnPJ7%PO-6PbM;Zw?#a5~jk7G+-nhzJvcg%u_pV!}s-gHVN ziq!zimu4+530n3yHER^3!wl8OjgUu3l7k4Yov#op>t47T~P#Cjp(7NjV_;)r>@ZW8- z`;McCzpLNr{v(@9iU|lwD+v8FYir3%#C#Xre6x;6vR;VKKH8NnWU$ahED}az)+ZW> zLfawhBW2)!dYJ&WuPgJ1b24mO1oNYhXju&F{*w4OWp5S0+0F9`tj_871lrQN7*RDU zDS+yIf!Flil6H0p>R*VQb%r=6vFN?ZyT~}zMGVDGzkwv-00Dm1vfMZs0%DxW2kakR zA&|O$b2TH5=*MEjdtPE10n4(P7U38oj^EmXVeSz)r=tABp?|{~;n?&m6~oWnhN`7y z<;@}R8@Sh+%!*)Zz>&#ud%c9cF}sNj&OHnZEjIlFF?Jd_y34`ib&YN5v;#x)1n~q@ z?rI7?!Y};p6JhLTR0i&xme$br#AE7p*E$>Tj6~hEqncFqaPDotTTD~;?T#_OFpDm0 zIB7Dx+Y+OUf8T=#`jdZFoyR#EA?Padmn9R&*ZP#2wF;J(;BOWvN8kBjrK`#rmVN*Z z4;{2Wd+r(Cdy<4W_}E)aK$-81XCF9s5DzMV=8cRPRUjkiCtzT~mfHfYYHA$e&I|crfwkAcU?Z z@%hAc{3nhA9>R~=#OS(&pVHs?%F8R0X()gwl1u<2rUA2Vjx{$5X%*8Q)Cgm5{JTSc6~ziM zptrXMOp42f-Lrnm6DWz%$t$5pO#>^K-@$HVk$$5*4Wf*A-^4OEg*x3?$aBVE{Z zn>dSwd0QnSJ)H)w&IsZnnSItLsB5J5lkNpUR~|W-wbeo=WeZD74V=0(i$+irwxunjroY^KyeAExp8aA` zK6zB1N3}2m>m^MJ-p!E$QAh}jB$}=xVla{;wG!f&uCIU>G&AIWfVaj#H9!N_&^Tvp z)-P{OA`g+TRaY>hhj#Z8ALE2y`;}QrsQ@)+5|}-%n%a-+I#l&q7HXqtCgzQ$oUf1A z#@eSkNvflD(>juf!oC*%he@ECEWMjEbRiRaAm3|bN_>*uI;d8%ipvT9h7~1+**Xt*$jca0GWfXBV+wZHvvm@W z{+sMgWI&Pe`Mc(rkcV%^_}Ur2BP(f=V-6apIDtEaTo)ez7Yl=hwR8 zJ}Gg>&DZ%qfF5P2Ta&3FzZ+M{WsEAOISy~^Jcyp8O}IT4O2BGrF`c4khm9ypXo@WA z64xBlYidw60(g55j#)z?4oZrw7*%!|_E%9%ra%)% zS5{ov1Aa2pu7_55aEJ7?8xGF{S&z11YE^k@h3O{RwTxVjS>cIl(3+(qYe*Le`oPPP5wZ=$O<bOtP1<=m!-;FWw<$FHv;`w?drD0LU6 zu#}`&i%|R{R^8>6*hT=}(dPh$5-P3K%fBz2*(#VJIb%8#9=+H;|5R2nKhN<^RgJcQ zopLOz&^OOlos>Hx0}rT;^#yPxIC|S(I}4iwcs?tAN9IU<&PPt7?d0&wQ8he_GPY-X zj%7ju_TDTG&(mWA7L1i3ZwFgGf7-8{*Q)(ry`G}rAGbw<-qk2w)N!V%X)=>?z;HBT z%^_iKTNlVnvg;JeEIgfDS<#_IT#_RXBz;9L&mS@e%^_PatS^Z=W$~hGGdtq!ilQy4mS0hxf$_GO0U`wkzRMT|cuPwpO~* zLa+yVqG{f5<77pz$aVWTyRn;t_*l+6BWpUqy(~vQUa-T{~f z5Onc)(rLRLY(MTiZr&QYOYJJYJ%8`!R(TN1RZL|Z2moP!o(OAYDxu{Gv&D3XW-%1s zq{UPvdzPGpF@FW2-AaWOJL>yMN7%MLS8V6}hLL5xsnt{V?v#0q z6Kwjkv&U6D?4(9fdLEj`+Smb0*cNKZUx1w?Et9%#hk|SIs9YlSs8({pfYO#eU_a4? zjsL{KS?yxBBq z{w}%~43dEkyVXfw^``mP36Uxj4%(}mS5mnR* zAV>LlKP^&F_p!>xpgub-RhMV1SQ32zbZ|ly2%n)NlNF#= z0#g~y*Ou(5;P01IhiQlDR*?i-ii{cXz?FTVjFNNbdhLzPVYB2KaF0)oL8=+98Dv?w zC36O-e*TLF`VJU!GofafLP#S6OYP;$=@IkrI23eKs217Rev*LMURdo#}B5L|q$A)P6$yzAG=Z z>^S5OzMZXyn_u@55EAi9^Z`P5>C3kuuu?q_Humd{nfKAoVEdGvecMGr3X0+jIu@KD ziI*IsRN^b_8pUxg0iVSWgjW`S{;oVtupTGT`TM%A;d}7^N7nvMCg|By+1lHf8yS2< z0_<&UjqDxGj2!-%5v0cXU;*)n_Xl5Z6XDAV0<9vTiUwsf&2d_v6G{XrH$Ud zB(30@sD<_aUR1lCGIlJEd4Y*@zG3KEqM4q4#SN&0y(ra2*B8hERV3RlE^nvIbVF>Z zY{7JBDc+#0_a||Zf?yX=(!1P2BnSq9F>bgEy&Axk)00XTqIkQ`MDHoHfySEZVx1d% zlAqgbRiI@z0*dltWfkK_Btd*cLUK*5BbIpLDUE7M4`?(xU8_sy|AeX!?e7H@_)AjA z`WwvQ@E^GB0l^pJ#y1g_FbMzv**}?)U(dn9$Wg(_-ud65+EdqXSQAC@K2~uomk%0Q zGca+Lz7HtKCzUj#Z+_Zyw3q2In*m%QWh^(~=_#4y-oEAY_IUvQ)%HLlX4L12s$f4@s)!2S9;dOaEzSw}h=Yj)+>_r2Mlm zfC8M=!x~8romZv-e?2BoG~GjitEk^gd2Z^+@k@{x+ay0`g2>Y^@6ba#6acMo9Fx1# zf{eM)%Olr}IB?Z-%GlLpVKG5dB+n85>C0t+{s78GykiBcRjK_GGl9-d=PlPm7y%y% zyUWdxG?vXc8ao14KZqa3TUus}$fJ$7=#LB7h=2q(Md-+hj>#(>uYfDHW<2mUg~fhdj`tD7(J0YCLH`vE{M{f6ue)3 zW~xuw#@qI8eg>FmOV!GJ-kGM_XPKQI%Y0Weq>m7MeKJs)JR(0ne`M!40XpQ}Nr3g5 zXjJTx^717kgcsM>o^4K>?1#)Ez|6b|5e#HWV;3`>yb+%aulAoTWdR*bOU1T&aA~&r zK1(3#-_YW0!XEp$blw=!rE_i6QhhD#6SEI5E(rraz&xYSMv2iE8oYacC&*S47W-`**FM z9wHXM8HqTydFL#9D=<_7VD1e;i4!ms0AuQtVC>@sn+vfHB<5kTF%LpNi5ghbgKkGb zf5cheo(JW=b{JQzmT+S&(S|Ygr2|Cu3t3EpzccpS(83fAEpuERw|`T@XHIXOCY&Sh zsa3~h*OMMhn41m3PsH~v?VwDF7?oVFzLBUC97n1CE}?!qNJVjL3-M-&$49l_K2Ymx zj?YNFL`_$xjW4nO)eh+#p=lRtjELtU(3GWJRlt~8q-%S8Y(4hNX?90`_r1)8^z(CN zht6{POB@*;P^fJ9+6cOzdNBERJS`NqXPoA1l0bsHqF@;}7{@ZUApS*gw?HHX$vDI0 z$HK-cHtA|+>4KFWX?p*uQTnWDr$Y&Myd9?m7g(fXi0vrA{ji{+omBLf$2e{W^N z(_1g|A2l}ql;G);EW;MpeZq~~S8~;BW5cym)yBlLX=8LQ18F-o8-Wz%R50o3xuS*T z%bP!a(%W1lY-$4$gPJ=IOVZ-nRb89=gIq4!T((SIS?qZ{ZHL44j9lR*4_kF?9U1v3 zr(`kaP>z8kS5$))@7bwGhSa0Av(EoCsJV?GY&eNzjo?W{-6x~dz_G|d8|7c7(EnKS z6q4|@cnTi$Ifcvy+*;9sCBa$1^bpcMPXRH5A#__+C|$B*)WS#0PRpogGOt9fY=uqp z_PL72a8zpK;O`GmPoC2l%`YK+*k6?sriUKnrusesrsRJt8jc+-SmJ)Pvk)O;h z!V+B1(6FIP7!3e_9?}P$&>%58$}Q{#q<)$qXTI)FgoW?oV`(S0&UWtkPA9|uKXhFw!qsmpcb)%LV$Rg z!E^q;Q&1EBl_;z5ehi{~&RjluKZoH7@Y;olpJ97@=uB z(lQW4Xm>jk$Bt4G&Q3c}jzs5<7ARPnPBQ26W`#PCnO758bdgxnTrG!uZ!pqLaC-6) zL#Cg2G_6<_s?n9G zjs^_iur$H>*JPF_Z2UnS;8ms&%N?VLDQqxE3}(TT)S!(Q6|C9+_2`cg5L?%6r-hY&4-tl-KI;)m*5Fn&)rP3+BAylqSTRXzb9DU0G@@ zT&I>DNSh{Ypyu<-8t&m|m&{nY!IH?v32U-w=h5f%p)%HC&O*?c|^f-zC^Iqd1G_emo~ zAoGFrZ!^rH6q@oYyjr~De1t$IiUK*$^LtQPDp;#MIw`BEdXUO4O7u!IApH~QLqut$ z>UUMQ%3pV-ZVcx2NWYz>C=gC7NcQK-72{Dvt4AGEA^SZVXL($MRZOkZOX+fZ%p_ol zh4T+G^LBEl4;`!`Gl{yjA>r3@$B)uZ0)6|j9MA5UHzJYkvrf`dCsq$c(TVZ!H6LW~ z#pZ?j#cn;yat+B8QGCa@GMWY?jC2;(cu;my7IQ8AdM>+gQp?6}u?I1ZKw6+Q^OImR zy02_e6wO^f=06D1s&avGJbL6D6%U>MGb9+8?8nUEOCIV9DoOoM(Jzx@@a58vkr}YA zRLk9!sPFw=!7Rb*jj~D|S6N?w1+D($$m)NbJpbE)OiIsM&&23IY0GKvEM5!s9Y;xj zUl#ojR_1>+^Y?Y2ti6%3(O)P*jsEZR{uTZ!D3(uRfEF(3>IK-G?z(V|{0UmB5uarV6rgu*8?PozSmcn_V>*cXd+Z%#ntx zuQ&@b$9}^@iDaz9`x_iO+_|8RdzQH87I!WQzdU^5wYor-c!SmlC?s2X&nZ~}g-}8M}~<62YCQ}c;bkt00$6_pRYE1_KQEPciRnZZ3) zAK%B7<|qTgmFK)NCMoNYre`*H?LcDRYR)SY&xY@Jy6cwXjhMX7?zjpO!S3Sd;x}Dd zxU2l9E$E%J@O8gIXB3uQVAGpj>}P}!FqA808C_))?|rWpkKp;D*F6iMizb$5mn=;4 z;*0uEg>;=#q0}rcw;aJcorm@V=v#5x@gm>-II&&8s#GGEw&=A1sTAdC9tI8D`VDBj znrwQHopCGgefoada1wK}Uy*}M%Zg}gxZ43bKz9CVe`f6fQAg`l(qHQihjOtVagwUH zZfiG47lJV)f?>W?5>k@LMBj@~F{vohjnK%~nOSHPKF8TCKBPNtFh|+}erdiH%qpw* zcy3WZzZYz_qFy_B6hpk)H3`dT#do#nxFK+?YZ`+2=~&!4Y?ZDXIjGwBXB0c9#67EY z{2>DAC8)bFbT7HN*B50EShnqNayi{fN$a_{$|_tZYok+LcAl~5i6xwbT90}sdi^`t z=8)nBee!n%y8n;j?tj-~|80bBFq>t3$F_)rWdq2lt6#9H&1xb04xaJATYd>EwxS-q9nBDQ~`y`i%s z5-uy$w&9^N4rACoBKX=OaGT({@Kl(KUsuao_r$k0!oEG}-`T@t>$hxW`Qbj*`?<-u z;8}n0YQ3&DJ+2NyM6ynCMPrXAbOo2dtzDXyMC;po8NmrDVj1_rr^TY|C;tEzMd>K! zB{_10r%2Xup@&dG>?+wU3+Q*OQSP&t1y%Y0NO@(DeVi8V6^YZ9xEdiaUNrx#X`Dzt zV3fyGgPo#+f1a!52<1OsaXs6jDHKXz|LRo%u$BrIa4k>ui)KNS_Ef@FWJ%5E8*PUbndzWt4Ux^^t$Kcp zG{*O4$VOaq=_jP4X%x-3PQds@O?)Xc+jY$YjK=pyzG*dX7UR|GnfXA*&Q2in<%STl zgYg%0{^PR(_CI;2{PkV(FH<=GcwXXvIWNDHndP^a{mc20zWo*)K;17zN$05uE&Tge z<@b>Ox96ADbNfqSk(806sg0q`UwimD{NHE)+pf(t-V6D?NP%bGyoI7KX2171E;qOj zU;ePsWYGD^c*{WC&-StfHkkg5O+OOQ8q<#G6~eHo5!@iU3l=LdUiYDawOsZ!f5&Ab z;rLHXV^~FvKRzBlV^bQD54)nY(c=b#Dv4w(7!gp3$}TSit^wt{@7GhMbO~yy=%6Ci z*8|0y8oa7Iaxn>Fk-co=j9ALCzG! zH&cEYpB`IR6jRi+53AXC0I*f_xE}_b%pmy2Ub}<`%0?9IS#y-@4q!1Zc-5w#L>JAX zj+xbm-&LIY-1q4Hzka`v>2Y+U^{5}w2L=e;$S##iMFBb)EhR^vu8s)U+e*_X)Nx) zo&zkfFXOFUf83R4tS4KJ`uy#(G4FYx&ih_6?mqzlnE$0C{mpXuHxsW>Dl!UZ%y8Yu z3Ma8{wQ0b`A=><6V-EAlW~37V(mw-7!A-JEV~tee^T_&LstL!V2|2Dg6KWe@FU-Hp zT<+#OHj)B*LFL2Q1o`db#~L?MaH+jRr@?@N9pH$he`r}h_E_I=gAuEU#if8K=;#}r zK&nARl#xaFD3B77EiCCB!#+ca=_Q@xdQp>~UVackXb~YF_sn(H&tjUPq!6inP#dMm z>Mzh%TZ};A=Z27wkp?MR)S8PvdcoMMSi-(_PEvT_4>EW7D-+ox(DDXzxco1HSUwTuopU7L0D8O)H{J z*(fgzM?#~%iANmR`sX|%7>Le#x9Susmo;fxIdn< z6)R~hsH*375g^!)3e6+8B6#D5d;N1pSY2$)CyYoqyWq%y5j_g4Ta{lC1G8YnePG7m z7%9H2Q`rC?c%*bzLjgyf3EO~$<)NQXIWv#oy8jn5MxBOM2VanV@g&*;5cnu#!7su4V3+05qQ7xYE{3Nqzzt*Cb11Yo8yhfzb~8gsAj zlC7}41Nqzs15?4xl_=TugOd4fR2`sHSvxAfWxWcfQp8-GCm8yflI59`eto3&XfH?q zGRgykvZ{~v2_85ZZ7bPHp_A-DyCHtsIL-QC^Y-GjTk26uNSxO)h0!QCy`={+<1 zeP{NbZ_9VikN(kcUHx?5vT9Y;s;U$@6+0GwD}vX4dQj#JnE;CIyiQj<%e~ylk&~q1 zwIq(k^)3)(*FdRmL9q~V-VOZVZJl%U3Vf!?3XVi2=M4gO!<*@Z4DLzK6AjDWB>-2@ zK3<_(5f|EHA1{u8nq;R>1!GqEO3Ak{kzmxuin5Y>G>}_cq0P!pRlSH9!XV+HuS^2m zC)I&>;1v2F?MlCQ@@;l(-XFb>kI-T6*TEpHtq6?hW=ceQ##+Z(adAT6jc2tvbxohj zUBJ8aS?qN(yiBN2wV8u@%9$WBB2#xov(RkKl8}*=4VkLJv{)^n2)?HIM7r@@G6t&5 zLVy$Hyuc=PX_~N*%OE3vz2@tG7>&?2C3^-@=Gf#`HF|b?+~nMi)Kso=d*Ac+pMXeU zUK@k~w4>s{7{~AWjs4D!{x?AU%T&TUuE(N}9zOWo2NvH$tT*Q*y~+tdzo<{Y7#+Mt zDS^7DHkb^jf3lWhWG;BXscm)q=ChRi(WS~oAQ4)`Qwr<}@*#jLMBnp^O<+yiz$SCf zY6{-6>RO|jI{G)xx)<6KhK&RUsYnk&Ukeard15bxor#JGA48-T!t%*db8r5t(#+c~ z2SaRcmJaRV?yTC@Cs>+UoAb*KGPh`E9|=i@@NhPu|U*5vgI#y{G>{V&neRKDQn z04m4j;DEhN|I|Jy7@IiT{MEU;Ny^&4jO+l8(7PZJLKO-EO>ix*0HzTVvOCv(d$WF&cOmNk}!~DA)jQ(`JP*ZAvq<_NX zqsp3=6nj`V#XvDO1MC4w}!Hp?sKOPM*bQOe^T0tgB+kS%> zM<7rK=SQ3dG6!yZ+)RmPGUB3iF4$Ay!Dr9-686qJ*OJaV7jVR(n4IP9>9mw<$2p+p zV4Zos(cUR;UZTb{?74D=JF3%f*7q&qTWY45@C8estoE$BZ9>6#w1QZPfM^9yT{$yn zHPpD=@+^zDMR0AfZBkU!-DF9%P2Xkw0ei5o5&fWwWqr*8^RE_ zq3pZ&l`Ryijf%bG7A5lBOd`Ffk*uz?i|GZMckYWRRiAm^i4}&q>X?9&4io2!7ga)l zqV<794f-%AtVHb~kVMLOBQHdXPr{Z(hU1SCEQqU|!0D%TQwp*9Z~YKZ+8PVEF-JI} zTy<51^izdVMvctya%C~)u_)sjK<~Q8t@5b-C@4Cx{=OOg!omW!aS;XBJuzj@a2;?*T`|qa%4NG>lxx%egKss8xwRX zo8Uos_n^8-kXBGtIhYb*NlI?>VN-RfN&C%&oas!9>C^Y9di_q-oMw;Jr~Cl8HJdz+ zAUb0=wi3l!YYp8NpLhT)_vN-BGggjkejH}KY2sRQw&lk9LgGw|Oo4;+<7nUpXf=d2 z)5eL)*+lMrWIyR5#2?opdU}Y?9 z101wzW^D97UqatT&cW8j9O!%gskZ|xS^;DDrD$c3Pas7sR2BIf)_c-)yNf*>g?8{2 zwdJDIyugcdm$5oHDllo6xyf;0-AZG#D=Ax`(J-K1EUVf7sZ85pl1F_5$>rIvy zSNc#^nfYOeD>wNk+~JHVG~QgGwgb3mIg!0#Ky!JgVk`B}Udo((1c?Lvp}{x=yFGVA z=1M3yowFwK@@+rg7l!6uxJeRgq?b!vLDc<4Tyuwa=WCqvK{IYKPlmeh2rF~ZeDGa^ zNZVJIV|D-2Xb+l1?-~J5hY-+c|89iL9~*5tacf`}1UP-w_OBiV>v(C&K0c)2UlJ50 z1^%pVmEZFe3a2gjZJPp}nZz;b@lUJ*_Nr%6)m&r(5a{uDa#^$KnPC_Ba+Pj_V zugbWS>nK)Vetk^BAVADPh16DV%>8uVJrmxDG54R zL#d@MY0Yh=42+xn6esfK4K0N`+WFkg34Tw4CgKncaIVLl=6Y=H4jiG zxAPT)0usxQ8NDYM3KU*(I++$(^zVFj(`(yv4To_(UEtToPI++vxvL+r6IrM?4A)$3 ztt4z?OZCw3IKT8>ENwi!Dv#EwmLsojLLaQ74ARBs)R68bLe~Y$5i@tNCzkabT%QNZ zONnx?N7qmQDXeApJp@VW zVAa;8zw2PL%^rH?8P6N96M$w<;7dxj&++aY<3s4;@E${<22H933B^3)qh6u~%~joI z9#QaPYNY(GIzNc(lo%X3HV>2cIA?1cqc}-8ZSRp&Mv+$H%9V4?3{lmlXM90|P(uw` zJ~Eu4Pehomq}a19UEr;?Fk2A!%KbdafB1q~u0G^%@BfiP_@fggp_P&PsMCiK0`W{E z-0`Ed9L-$*su|hiJ|gxiPwp$jF_I&`+mKw8&;D@Yc`10dlvx_<+{Tb^ZkVB-{RkHLG@Y^MxF-*{?071> z{}anpE@v|wfs8j17?F|un}_}X!oU@(YTM2M+3-Lg!no!b-F@YUvDRZzvHz?uBoEAda9*I%T6|!3)SyGgun9a>Smk z%S1~~#H=K&mfdLR#}n8HdQDt8$#*_U0e(oX-4MEAOyXX$M900~1fR#Pc6ql5a;r(# z`voiMme!|078e-|fwG(4eGE-HogAtcPZ9~a4J~PTh;C2n63cr5>_FBM{WXp$2@f|b z#ZAZ#Pz)%F1))(OD4*g%fKZ$+%8XSx-#gHH~}&;g5yspV01Kp)G29>(Vt zl#vKN+u>pKTD#|SesW>cFbdf$p$mc&=mc7ifuYx;EC zXzP|*wM2);o>JilT?$RS8ANILW69TOGRdos3^tk)P-~89<#g1f-EF8^xJRv$M2{g z??mVt=R&slvBMpOwom=G(D|j!*cq0U)+BpSh5`szKLT`4I)9RS|hbMF}m+bfd{n zD$S|ZGt?xNkrP0d7;d70azhW-YGGE7=gcS91AmE!gXZ zrgSiQI9-+S_NXIO{)HNGlvZVPh~Pcjtor4I^< z^jKma(R1XianfPcOTXX2fqBj$tx;yW)eB%ZIG-Mj7Fv$LlovRV6JF!vg*D`ZjQX-t zxHpC=?sYc3Wh?B#i)=zw8Q1kKaxF_&gPCFSl{$Ub_h-gOB= z>p*7wm?DYXQbJ)vemZTq78Yv+^2hKau|;VL-;?VFLh#aI=Qh$8az+Ovg{e;WfH|m+ z!OfT?G%5joSkRWmo>D&&?{h6~SUY#wdQ1a5d|J(-de^TRALTI%+ruXa-O9%xE8PUN z8RzNxw%)#Ye4Wx~o{6X)S9J#e&qb67K1c8cGAtt~pzQkp$>IAmhbl|?pEK@&(HC$O z7)k-pLQBp-PK2;3vm5KuSX0`5iyE30zufRQo)s7pmz?(z{h|)%t^2Fnmix!~!@_8l zerRd}6%7SK)i?5=Js#p$MUnfs|$+E zm=C3Vy-E2zoml^*Vg%zL3u82gJIqDrOy#m?&xXohkFOD7&X3pp^cWqscjfkuX;&Du zKR!$O@hJU4`NA}6KAd+*nqy_!n!;YNR*o^_y7I+}e=-%awP&AmEHfg&p4W5Fl3dB; zd@ZHcUJ#o$Rvou6wpfUUWMhs+Ovp74o6eQpE~kx|u*-si5viNzZhkp*7Fn^XOeSm|?uD{4u>QC+?F;a;$8M3Jui z`dOc{Y^hVn|J#004-GQRnnE)@YWgb0Wse>b}D2b}9Kqlk0##4kzZ!1E_G4mYzHofm$gPj2Kl zps)Z^O&lpU$#{(LhqJ*v6}kI{@$u&R47_Ie9C`Ia2Dq6I=*R4g!KaM6;ISw4HA>`n z9zvA6i-ZG5o189*O>)v6x6H7Sm2+XoeVF<*WoD~fTukvMY_-8eKlf(b3vOg1eiEyD zuwg~L-oW;t3*nqieJ7u}Va`H!wl=fF9QSDoeK+MWtomb$j;-Z4kin*!E0qXbvv%O? zcN3@n1b2VubN}U)Vu}7mVuTcQ|AdZ>dvaibE?+DVgcuE!7&Rg=r^IRn5ddwK%7)W< zr{@KpjL!uK&OAA|4KY;yL(hoer?YUB&jkYqg#z~9VM^mhi0nO`zjKYMTBUTnptJ4t z9Ck4EW3{=fsxKLydMrTPGvWx|R&OE@jmb{Ukk3dLEV85cytEg14ywhLU}mJ1E=J5J zU-;4eCzR?Qh=_g$LTMS$S^XoKo}!tpovXfsv5K*Sqq(h(pqa6u<)4A3x6-d&LiGzI zWaK29t7%U4B4G-wg`EuX$;%==%^4Mj>awDtZ@bSkQ&{c$sD&N8rq-@kv!?dH7?E(> zzWbyP>t(GpJ~6w4aR^-uniCR5_$Frt9qaa$ADZo2d8 zk-+I)hetba-tMfIuXqD;7~G$@0hpRa!wlFQc*&s39mbGiF$+iw3nQ1q3=}6xs)cmp zLU90fTDVfm?Lj&a7v~a=>HB;7lokWZ6Hxb+Z4c7$TfMfJ&%0(O+h0csFcjgM2eq4@ z)i(N%p}$Rq!W2^tRH9nW&YfQC31!bQQ}p674-#I=YUKu)_czEMgP6ji=;4@6k5AIR zBUSX*!`_OO1+soK)tX*e7t$0v*!oj*TpjqFF9k9EfjKD~Dy*r!gj_1uH(BJo%R^+` zp4o(pSp{rAH#eWzd!ZxGLb7G%gf%YWz4ikqiHppI`_5`t0pUoF9

63A&n5Ty=8} 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⪼dm9m4u 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 sY8`1UvJ-6@*vs~IUz@>Ez>% diff --git a/tools/prerelease/CS-4030/AdyenPayment.zip b/tools/prerelease/CS-4030/AdyenPayment.zip deleted file mode 100644 index df4efb4a34a442b488a10284573cd65789759de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380277 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 diff --git a/tools/sw.phar b/tools/sw.phar index 5b73f4af33284c3a8728121f5438ef930c751e76..015fc45d68da4ca2efdcdc3268f2cf47638da13f 100644 GIT binary patch delta 67562 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 delta 63962 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

71oCNk0rOnb9U|Vr~g2_g3Oc_eccp z+o?EzX`t=4(x$ypqGg+EPqzwUtm4djF?_{Vq?q?MxZzWe8K$3GQD;40 z@<>~)(DUAo$cX=0w`6NMYS+q49*kKntb}ds#hjd^4Cc+38h>FlM2ci6K>{P0G8xNJ z!bGJ?_Nq}iXwb?PT|aLlCWV>8fpOVo@#d{caN7e!Pdt%r$5T1J_##h={Na~;|N7q- zJgC4GA%q^dK1338BqWk`JmgXo2$ggVgi%Ij!X!(x0So5VfCqP5#D;Tw5X*5_?GG*q~=(HSF0gbjkC0mnZOnyq>-f3|};S52Y1q^{}4n zq@=Zt?4w*HrrYRPcfV6nT9Sq~-&H7eG;JQm+V+OisXNQH!%tD!sxp!gG#4m4xYabaRee#qLRJhV*nKw!#y~ewUy?&Bu*lqvq%mK ziiVnMskOGc>W&e!o^I=OBhs&4?n?7`fCH;M@RMRW+0wR$zPh-AEx)B&%yVEhrt_9) zjqOIT#_?zd$<)>V4p^1Ak;GHuGusY-Cs5GVFJGMde+zKjoHK zQuzfqK6Emo)AT|LE;I-Whpf2G8z;rYC1p>`$t#>uOfEHiM2mB$z)Qi;iDF8G&?zDE z%PZfCic7LXb*>;R3b`~VWffI5b?8|QEo~iLJ$(a1BV!X&GjofeEUm0k!N0c z?~DHexSGJl@*;=TPl_ z^*^b@Zvm(}{T>gHy5a?r)*&D*jSoo6;s?_51c0<6K_InOhNMC_631(iJa`>aaFs|Q zRUw5{jTB)&QdD(F(bXWuR7=twLg?Qpfe{z>Y)3CTgRU<7Z?gs6mLZIdITTmVWKzAQ zxednsR9|UYV_JIS@iLlZW^86PF_PU>Y%m=!uM5m?h6P<>VHa7~9P7L68WJ_s*cI5+ zLTO8jQ~qq=DgP_hd=6A0L}=ro$&JK_t#U@vWw%jA3Kh3~T)7he9_XZ5ZUx;s>us>n z7MJl0=+UcBzX3yrjTklNHn+ROo$hjv2Q6B{TeVYywI)MXikNSeDJx{23tF4Uo2+e; zEGOYlNhc$4nZe=V-Hw+8K1u+vW=ny+a7wZPYdF9W zZtxJVR1SoC5Bs2-(nAO%phF~1)pn^NgpRz6 zuiffGUh#ot;)5^d%0$i#7A@JqMHgY^19xcd!azPSNXOjHjmSDz(8$^BaKu^4qO8)+ ztFo-Rx(uV&R(l|yFlF8y{!cHvd_$G* zf8TY})!eT6b7GL8gK&{!#0{2~rb|I_Q#?^Tr%as@e?~IOS^Hd-Vy5|@Z{L4@|Mz|V zSRAMxm>t+0kPf0_+$DBiQPQMwpyFxEmK1G&UZgtaYKB)O~q7b112Te8Xe>R4_ z@X+)1`wv&QgnGiWgTMc~&iFe2&A+qHRpch2-JOlj`{&EQc5W`0V1d>1V^w zdY;jr89kkUI=Ay;=jqPjqvgH^A89NLI#I~hJ{B&qCg?J=v)=G zrM<1AtFxQg+tb%SI55N-859SQAjEy3H2jmY|1p}l`})umL>W4{X)_bh)P?+n_CATbOQADe-_bISl!Gd}_l9L}T2$Lv3S;`cgXs=z?8e+Gw$IK2}{i+jNE* z{|ztkKMHb?u_xD+BRgeJ7DHz#+)6LmRRzMp)Vp}x+d%!?jsUo0Q(U{)$L6jplD*X} zwgoi%(XpHWPYGyK89NcRDFui+a0Er`kE;zf+Q2=-+Zje!3Qz-vLf0)tGAV=j(p zG*~X{U6Nq}Ot&rJMN-6h8=HMiOGw zC13(fx9J$-$}6Ji>G>OTuP zlU^Lf`;x8MKk-HYc!t^mGFNXAaXBoTOuXwt3LYjq_Z1}R{d33JDAzVp78;6co z5dbw8p4L}aPE(~T_zPdcub7vkDo7!KqKWM2<){jr#=8j@oY3Quc#YErpTlfzH5>GG zIY^5#?ic2u3uiN9knL$TLp{Q>GRPVpkSrT!Vsv4gBRu0$YOb(>k-iTD+26>DGiWK9 ztbkCUn#+=8mD?kCx(>^M^WgA3t>db?%9=hYHf!|R(UkEPV~>+Toti1>yb?*s5_M7L zCA>z=Z<1h(21p!nca)zE3c87=wxgY)Dtf3NH0Oc5Stk4-6T3tT2R@qIQoyE&ZqzX~ znJJRKkd$3}CZ`-HPNRXr0s%^;!}qB23VF_oEA=gthr zTvN$Jc5;;5_8+z|i)XxFc4`@Fw7xAf{mPayf>Ci^n>PxUA zg+(L;p+14Y9DQ>g?-vHr%CT9HNvyP}gJEvijmP{{{RRM^?>NO|jL`(ck&K6tKl3%n z=G3#~^i?|c!S)q}7WLth+jo@>Syf?vkEmEzbBvbg>bc@{RD^Bn3AaW>8WCD^YKqWf zJu6FS2$`!YS=G!7iWAOTk`^4n{-;|qtgxU;bU1HBvq*5Z%*}+?=Ycv^TG66OP|EphdulsRHS^*6sfS#y&4PI7+EaRQ|Z z-#N~88s#**JwC%d?v7d}xdW;oL}MvSKHmv0dbuwQE?@H)nzVKjAocPU#k2~4@rl%s>z}ang4g`A&i|~@IXB<(IIQd@k9*9{~ zT_a-Gh$JvFMv@Y=NH;hI(;Oa^KvOX4yc_2@;K*SXa2yQA*#sCWO&c^Ev@~c4RKRJFq9P8Jl}N-|1VuU6bmo8lU6DKY%z+96+3k(&qYx z8WxT;Cs=VmTqi~0cRBZXP42^+LNU=J@Js`K-X`j_gLUcRnvnLuTDL(7;8^mdO(Nxl z;0G4p-7e&qI>@G2E|7mpf72BkbEn^xsD0#4$``N>)235M%JbIzneabxG~r= zaJ{ctX3uQM^Dn?q`G@sy`Cn_VIj=fihd=l`-7zD$7PYOtT|vv4)$5Z z42lFdGGaS7ru(%EHM3e(u6_YUAlDBJnGX_|d`}gtO&w7kb#J5;s|Bs`b@ZT=7xWvHu~#uA{=M?@+qYLqRju|Yb|w=iCO5kaTdP|F@iGJk zahCeP9|4h$gW@_}EL}kvapmfGne5)FMyIR)dFVLkRW&G*6E)tcSC8|GCpFQ)Zva37 zya*22RIe;ACHaC^G(Mcq+J|>sijx zCdBG7?leJ(GGhwDA|&H=Ew9-GueHN-V_3Jj>Y)@CxxVr(7w9eDqqiKL5~-QX+VXM8 z5hG+^pX!{Kq@4`@CMMNByxpX5BHECHx(QDwu_u0PrA)lfOrEiWX7>EagPPiCso2V> z!M(DmZ5oW(Zd@KgeLWrbeTtSyGzvXl-O?stiJEEjmz2S6DtXfTZ#8FS-fk4pSoGR~ za&4w4+!O(?o6v|Cn)AGqj7^NLSulY2@{^*k!JUR(<}K4zb2zv_wPN4Fpo(_nuqXbe zokf~q!*GXTOP1|!!JV*;DEpJTG6?@c6>J8vB0ci5hBS{#uhe0@`9BA2m6X<~=271} za?b5|n4_*R;vZKi$EG z;E9n;deWV7MB<6xsV^;ii9;>3>z(mKB;CU#?2b@UWb8xCXpIH~6{@UV#WGb`s7!xQ znMSbt-$|<-fG1<_Xpe>+9kHJC?r5wxJ>D&nrh{w-&^nar4b?GoWbrOxKlfT&g+$7! zXk{AKRmN*h-k|zib6>K7hIm-%Z6wZ7Vebz$7`FO3n$AMv{u|| zqjp-y76DFI5wAcHA-L8?OKr!SoMh!mDy>msvei<990FR% z-sd6^SM)>>g_QH`kym)K;GMOxg+6YiEhKg$u+x@W<>0jn$()sSK3Fb2<5W_b53Umk z5gw+>36mY|Fzrhz2VmCA-Z00V0maf+8XhfdH)5B4RDZBq7RvP+vf!|k82N8<4Z6-* zs%7a?SL>*sr~#Jmw=^W&%4Gi2xdZ|N@;U_yC7{b}aIvC=5S;J{g>unwxl}b&Y%Ed& zSmyv6B-ow;P!j;Z0RRQ?B5;gxDSCOjgYL;7DPfDaI%t?|l7rHobLABq6iQXk@p_Pp zsVTm#ly|))f+Vng337oT-y>+FV%6+*>W7b|Nn3Dq!*RQFt68Z;}hLEr?yrJ+nSM*4en=5Lw@^P5x9i*Kat{`vUC3GPs zPC){l&-pC8Cy?*~?puphX+DrZWE_7_^wU$pBqUi1?f{Z#Xuu8}n9WM?fKrQ5)UeS= z{GF}Xdo6z?DGE14laZ~bWa8C9JLb;nCDfyioqjQ`efKgB_nsDsc?#1n8x6Q(4AH14 zslcrV5us@8)G`cGL6gd6g$h+Pu6jZf^44+7#TUn3$HAKwPWn(d*;o7F`YTY+g)q#e z!VMbBHE;43)A_**f!N?0SH4uj2h4;wwB9RqIw);v*Gw2x9FH#;6SU5W&2-4}aXQ9F zUHk@){Tmk?k=@!3(^JR!+ts^8L~WQ;T7`Au00pdR!=1a?DsNrvPpcK_tItwT@BW%5 zCEabFFcyZZ=h5>GO@>CSa1tchWGp(2mN%G*s;{lG&&?L56=pF#df9b&CDDPnYzaX$ z!sC46iDBA=zRIA6)8?srST=JU)7Q*aEYu7oCSAW~ViidMx(O|r#9YukyA)~RPM>;x zGS#=^)l(0OiNZA*m{(drwDSl{8xC*JP~{^`^~>N)nwe@-R;}HhG4;}JcJ#>MPu{)Y z5d6Hypc1kcTbRFOYwWjA*q9&ZP?a{K7J_i1!%^>8kl?AAqA8!2sC4l1;koPc_tSyB z2*o>o5W;Z@&4E&SuU^aKP=|5nV?IBd-IPr3c*c2~X}+c>SZUlzKFKux!98c-`MSog zaei>#^V^v_>}u9VAg+@`_L7E%+`hdP`o+MYn99`-V*YgC*mJaEf#cN$Y=M^?4gETf zl5;41RHRv*&8T$sqxiC@?9w+Jm3|hdPVYOktuuIwp^U3_6MvBBHrwvYTa#{{ib?Nj zfHyrrRtJ=wCvv^Cx4?!9Cv%lws9bV3KrF$@eEXC;uMfx8k*d;OoY?hLD!64A4O8{l z#yiIoH`iq+Ss6kYajIZa{R_!t`bx)$bTxB&<4^<6jwZ_eTNP4PX39rqiKHtan)xf_ z`eP~uz}jUiPFI}Q+woe1lQ0^)gv;q5A3=muRjo~Gb(7Y=Vl0a?m)P<6c!%HXKY6JE z2(701z=e#3POm6|^MwS`T}+mcw~ailt2V8L+Txcj>bK!Ud+f>{$f>d|vh6G_sbQQcalYu#?Uw0El zjYqoqymiUwq?;Rt6~>4(J!G?2_Ioa~(Q9r1y>5J5RUJC%gOQpF9@dm-AT! zG6B>Y80LYg=Dx_(OpRSz0kVWGkkeOFP||)rJu(YJQJ*y1@mBS-weVEM+cmCU@08e? z+G&(nT@Y$upGc`8B&O7-#G?{1`RbFVJ%(Ku>-z3<$4>1|?T$*^xesDSqsy>XU0ao1 z878{9Y2CSLW8(^QVE}uo8aJF9*KKTtG>a!IG#e&`;P%dLxtZVVon3Q3Z65Q*1rnB0 zuY6%B-b=p#jf#OgDTbll&ij|%Tpb^~HCAn|iZOSLwD;3^geO{`W1nO~gA8^o z(ZBw1&z zJ|&?BFGZl6X>4s6`zK-1+>?1cc0P_54l{IsCkRAc(S|Y2JrY)9|A#yJUS%O0j`wsR zIjwM5EKls>F=j5wS7QE@5v>`={7)e?XF#%{wqEh%k95t-BZik&(*4i9C%>O(e&MQ+ zzGme?Dj-~>7Zx%L3!id>zv%tF9i(SGAdNGPn1CL&+z0=urA^XXJK!K$FrP%YZo+FR zc*3>$B%q{RV}FUX=bgFdI)g9larwj0Zc35gnigShYP3rRV!gNok{11vokmM=gnutI0}Ct}4u7%|4Y~H< zn$+l&&XaqtDdvF%x{rCAp+4(a;_BC*w-P;z1&3i`9hCm@y!_Fg+DO`u4|^YWe-ME8 zUmf`eY2;UTk#3AgVGfHApJD+*6}^{kjvAbM0vmF`WeGfUymEgmS04wHv6KufIxzSBtE^6Yma<-pS^N*Q|%-{(e^NvYer{=t+(bOjonpvFSsP z3A9bLRm(a~j+cWwTDsrwN>dIfVFumOMJ#DrAL^rdhf<8YqoS*e(b z?SIYwCC-?U(1B*zbyoZ}Xv-*DJ-)%dL%F=1>p_V7_My}Ls zkCi0$l>(N+C%;SCgJ=#9Uob>&Ihcygb`TyhyFiVt%MN;jB0CN`9!xVKP;Um1AG-%# z%{gnU=Ch?{?oL@q^OQUw!;mR&5`&*4z zWL0x(c6#f1K&auQ&oy9j7JgAWlrwcwwQ>}rC=ZK*z$v-ix36XIU*Zs^DYexX zvI$0dp1ztXN_nEivUzeT7QUW(xrhbzH++9jzXm*f&pYco-#_O(2X&f$bABtcTO@0{ z;>Yo8LA+=xS+fO|(p=&)fD;P*g)7on4g_sE3J!&!R-(9YS%jVR6tm~-fd&yVJY^Du z(7xz5mJquhA)lz&S}_&lD~KK%m1n3?$tu7-ie*!Q2@+ML9qP6#z_F zE?4#9Zg~OJpL|-w(CK9bucMkuVTs8xxU^_~e-?k;7U#mk)rHY&Rxt$X-shdvKHgZZ z#AY_L3K1uKz0O5=g^Jr%3!nr3$84KTK{7-;bSwbB^j-9sfb#NgFdIS_{5ssbRFL1d zHp1$eEzIe?bchKMU*8{*zcKrKRjiYJJR~nUIj4KwxqBlgIS+q4ge}(fe0BE8Um1XS z_enr$c{g|xB1qn}VFUihEPCo(VAk1BtR7BbLGMy<@8a$j1rT3fA64GG`sL5I>qCBe z`z3O0F6y`oTdee-xxrVzr5>T9>q{jw#Kn2Qir*Y{j@jEk(3?%iMYxAV(!W!``++#p za7bfph7CSGhsw{nKNV=K>16#;WNMB_)fu0q1GX?+cqih|nOq`%LoYn?HDbffds4#L zjxFg$$!X1;Hen!SbZm2F^YF^C*X-9Pv*;qRX?aC8buhY~je%1Jv*3@pjNmQzJ`NkL?Bl^D_;kw9y7SNmC9Smg-daVW_g19s)w}682O4}_4x8h_odcI^>la;IW;dIJ6R%uO zI^5inaC~m%2tl8dp19~b8_#M5Ak>H@bQa`x0K-u{DKTXFABCdhMuBoBa3`3Riz~SV3|lo6hDu%?_<8MMOr&DHLiV`k8@T zwMD>;Vt==e{rhSDhUm9X*mmonQgDee`9T4(h4DDAgRiJMqKG?PTL1TU0n8#P=z_e72EUzggMn~Dz!*T*Cc+cMQR4K)wQz|n7TT6;TqPt#oZWK|fv8Sai z%+nC(X#_LFnOVT~g5kOr=Jw{g)VO9MnM6$pG_wo{5%}O9W{2vEuPSLtI<;gv(vCbS ze&rL8W^jhBQM~J}`m0lBqlNk0+T<0sO~O@`To+}ZR6|k=5xX-vgsCW>rTQMTZ=g)7uOeV-q|GAgLi7Hpi1Q#R+>SFN_uH&q!ot zB=u(|vHlYc`Vh1qv=aoRY|;wZjWWgPPzO>lGASy>*BnTzOKDtF;%`dpAW@o)RbAL@>s_~mmfYjwZ0xM< zaB(m=%npaMhTFj7aMpH!AlY*x1dTpIyEWo&KD+vqO^zYc`|gCGFhZ?2$34tBOM9bv z(RtS7M^6Y%(3h~h$X*j>h5zy_xjsBBZ1T{|C&$c<9bMkOwswuhpiOE7EJt^1>(W59 z$g@R{Ia3@@f=g&7wGvt-*|fbNgA<(AFCc#Czt4@*rS?C+zZO9?2tsNmSXpSGtZnaK zQB>B4x#=Mt+?@5(oO)keyuhNe;&RZzx=LW%1G?bOl18h7PKGqA!s`Yl#TNH+f$M~OH@6-hBlF!wiiGC*>=6o-$A>O zdsSsm#K_VLDooVL~hnfzxJ5}y(mnUCTRrWxjT)z{_r%04Mm;)r%P zoOl~oSt^mi3(3we26u*Z>#rYqExBhR57K&Lkp(drARw!dXp#}EYN(Q!X^|-{nFY0W zs_aXN#+(Fd2A-1vdn5X5_G=*rh3|ysFM?G@xjb!p5#%Z2a)D3GrIn#D)J$HK5mQ&4 zyk<-bxKU|~?n!A*>x_~VC~L};f zD2LiSe4+IG2zqPynJa`0n0BKKjj$^m8sAtHim@?JZ>h3q(eRL=c$@udWDhiSYuyh# zgJqU85Z+wbH1wkP(v6DtVE{ss)I_Ryv&q(%?d#x6$!W={*vlZl;dEcPuj!HVM!};Z zuGR_X`_{sl=YqrHq?--yeE+&hu1ok5o5@%V`q>ER{4a^0IhKKF0Y&OuB@G$#-A+Y^ z=WB83e(xkXh|S|{AlPmh+Z6LdZWANvZbhNDzc*a8z%&y{+G_khmn^k`BoPm@$C!z? zf%@U)OJeL;5)pygSXg395E4L6>h@3dE`mNG6*D!fgUt`7a#i5S-p|ZA+0ER5YOWa< zS%CAk_`NM!!&#!NQ1iHqYyA{+3Z|mYt;U!|T18w>6O+W(NoiDlnN+%jIFF+>Alnnr zyBTYpH=II&Q+&Ky10h* zaY^IjLKXHiYILApLh!tDu5j8ZCiy~yk{6%PVUpGqA{L`(ky?~_3d2?&{%36|tka>e z%Joafti39JmY&_C7e>4inLfW*Oj%l}%CBwADY-D$nnSGxW^yZq+c>NWn+p+Vnmq=i zI@t$K7<=#S9?(l%bRGA|9-&`vQJPTZr8|>y(Sd0aO%5s44w3%GVau1P>(Zk%L69!0B*Gt-7-A6H9YC>EGw{tB!99; z`02Ge0I(-|o*@=8(flQX?uV!cyuOE;G|BGa<;EyGy01(2nS}8lza6ANG{q>=!y!i% z0RsdFcPVGN?HR2DL3Encv1ErF*(H7J1>Lm%=q6pM?KIgrb?ZJ|E3$yPsu@|b9f>?W ziVkcj8gsFw^ou)#)tC7%S6E-Ke4XdV?n4SxOALexQ~?{xh61EEJD@ZyC$Gdm0Q$yL zF8UPyBwivK>S?JRZBPA&y>$7}P(90w9Eu~7y?xKV^HPXDm2xsgJX+n$LK_Qjdp~jS z*4t6L6U`ZP(s}MNQaZ74D4^jt;m4k1X-lM|k2L!A;gw^X%bU|LXI~;?ziliAi*$4L){lcZ>0>Pux?39Ro5=(XS+`Xu16#$VQ~a9#847f{5oGDc+|3aG(xk_0 zFZ;$tn}V&K^gPx4Ltu!CV7XZpZ4XiyG{TeM40E@4a{`F3ua%XbzL7ce&ue9sN4Vl_ zrSr^&oV}4T2QIAERD-xM@3Q1S<*(Tg;1j3Q7MYOb=p|3mjY2*-uP$qFH$>j%v)BhF zZ;S^m*RMj&^Wua4DmjcLpMIw7mFq*YS-Q&}Ny&6jy%@yZSB4|))0SY)?zu_RHbQv0 z`pcv_k;k{x`MC@9C>n>b6>iJ)<<_azE3|nP08?N?V3u+DExC}^M9JDaj=q?uW7yk z+e=;G=?)Cy5KItVwF+GQOT?BZNci`{i<|uYY#~&3Hr_m3+0)0UKz@#g zr0zFWrl@c76yBotzEb=S9?KzjFsQ}d1E9bdYI-I(5oTzokszgLo#7XTPfZSEHQl~` zW%N-?v88sTlLf-UNmtuhQ*YLoyTJt~q?MsuDJFC-f@d4WbBdBCG_{iq*wFVAQ?P~N6>KH#zDy*R+8~%k^T<( z>VORurUxkPHtm|k&;c9DOZN=A+jO@bG<8wm84)GQ1kxD)cKmKE`P1B4@rSp%cTr&J zOg%@^ogS0L+IT$DfAv{^)j}0n0I;F#CF3R2ZQXcXR31Nsu^vm0&2$e$qW@t(pSU#A zMxSI{pMlO1ZSMTm17B{=gT7JdMMJR)vkkqHU|8^DrXA=M_$nhHAu2F!f@hyY+Ho z;A5awk_nv?Ge{HSj@VLSP+)U%7s@$G#X?RPU^yoat#I@$pM4SweRbTxp6@u^9-KI@ zn9k2VoF|yKna*=gby<_4&H%mbZDm~b9X{Qim7XFd|H}mq!~M8i?onSqHM2Fesn~j8 z`I)e}G`v&ra1}=j9}7p|bjqfF9AjcwrWOKQouWFJ!jcKU7ehx+CAc*luT>{jvXdtW z@+lRXoyo%*1rF(G_hp$js_Fw#Bk#0B0Wg;hwU<=SxY7bIR`|~zO2a)OJ_fQwy7di0 zdo3AXseSX1D0F>UnG!IVdx&F1{WN>?HQ^QUH4ZE~%A2q8z5$UmiC1rLtQY#09zF4; zLm^!Td%O3dp2z>TjRo&eSa*5I15kRmT-2Otfzgn zvidk&?C;U^EVG2xDLoB+_cc zP{e?;(jEyU;u~o~sifm)%5z$--LfM01|^6c1_R zk0k!ed_1I~DN$&7MUlXI5YW45u##dl7>-TTb(k^E@F=*MSDk%$-8pc&?6{r4Uo8U{ z8(2_I97vIT((8|D(OucsUBR?EdT_P=S#Bw_dY`ei+`9jvbs21px{wS0r8G)Vzfje# z0OFx6YgS5Dq*)mv0^W;LvyY9yZXRD|9tyQ9N$@C8b|1XaRi$yDxUEGrb!voTTd})|% z+qqej^pR1Wb52pRO|nWuBqt$*oH#}1P}+Pck#~wBeFM*7ZxmzYsh&i?3C?@ErXfe3Xz-O} zI{K6O2rA6H)-jCnwJ&;{pG-2U44jD8pfJB!5qM7(7ab zs_x;V>TjnL=a9)@mWfU>C-cNQn*~x>hnu zY?H`jKUkCOZkHI_Zl|;FbxX7|Tl2-*Xpoqx=2#y@dPe25%!b5(xS)%}!ZDp)B=K$_ zPLe^Tm}rS7%b`LQ*mv(-=)TY|Ud24@921N{XXi?$d7MUBiffse%At;&%E=)|*Jze8 zWs1j}X_xLjlAQsQc=VSXf9~;%d?zk)(*3`ozsG+^e`m6pf6;&ALD|QoDuYz#lCk!t zYI==uG2>(z+0NVD(bG5`lJq##&O^c(4aegZ4bR%~I@Ajk$Jb=5I*GaIE))h76otkH zy7>_!k!CPyB|GJ?u(lBC_*dbBa`J;K_2(EA`l4 z`rl(7I|?~wsK99P%K`gfl6HZg${RH(m6tU`pHCU>N;?>s>1oFHH`6y#Y!T%wnm{5a zH7c35L9q2IA5;@K#XQ#@Gi?E(ro6a3!Z=pR{;ZGE86RT3vueDZrKhZxevFbM)K5uK zy~Bdg@vVZ>uCtrBE+&=SUVrjCntyh*gD z#@PBIihRAtoVzX>yzLOS(Eu?|;i~V_ZJGGNj!Bs{wYfyOt@(!rAhA}u)}MaLWm6k^ z4skOZa9l7I-@uEnPfe4Ich^#}F>S7BtW%!KvIkM+n}-d5YRVO)C~3(VkjyaGJ3w>{ zHi1sVq{j65#5}@mU^f71?f)j|PcBzxndcN0xmu=d{{rdgC zrvX^b(n2z8%hxw*%0n}0LFwhyYuCzafWoZQYObw?q+_&Ga-(dl69_35OwI!SuF~=k zqaT2urKRUlVAq9R;EjzR$mFDeRg_uS7))_RG`n&m{RrVwLW-E^$ZgkVgexVu@#eq* z#0Amsx{ZptuKfs?h>XG_RskXlKzP_i85zNUruJii*fIW9(JZ;a zS!FY;th5=^QtQy=-cyICcGL@Y7aTy`y%~oYyZRlw9nV+Xd*bkfXp;7Qxb3hV%8%Z= z;BbMQlAE$e@#xiIzaPc+j35C4mUp$w1`j zi#Gah8|?+1raWBnd$0Dub!ad2Zeh!b(eYZ^t(oaKC_u*1Lorsa{^3q=69-dwX{v6P zIxYp{iOlkncT{qX_0GN6+|e+W4aua%nLonW;~`zg#Y1+e#<4zkMqN9{bMhaAopu!U z@-bA99p}Fsa@t80;cH-JZwe4(!_uDz)wH+f7H?b2d4D(4TK{Vnr{~~qE$5P^ejnq^ z9{f%H_@`Tczq&mil^cE3FIyTBXzvx#Y!&-J$Fh^%B{v3@pT&P4>kCKzVq=35#@2!U zIkS|Mp%5018BdMZe4ye03`I||&&TkU#js9g^Wz2T@R%|@L=fLM5WgEgJV+S?Zv_2A zeH_Zi#j%HbYQ&+&`dYbKY5bvC!C~=fkr9}5TYh~v{b%~!4gQCHg<(o>pk^NSz*;b` zwy_|;p_!Cd-&By_)I>trd11YMy&{V|Q9j;YSP(Y(x`E<~wGA!Y+kWKZNJmpN*10NK zBl|-rHuCMCp`-9Nk$HB(nT!p@tJx$~L`dQV^B=yy{8j8zrsH+eIfiTKKVi!dmjBNc z#`FUm&PUx~oSW1mF+K@ol8xVjXVR{O(Y}Q7ZjvJ*Ny!;G??Js`$D!P`fu5oxBbibN z=cd(lMonu+T{oLyIo+bi9-mnj#?u+ngfIe`L}&9gysgjqO`{WkJ#T0TZ8yq_b?A== zlj?wfa1QVfGV2%@OqhDUHcr6o%Co!U-TCle(gznpVcr32rLYl*|eIdDsTBL z2}uokfG}A`Qg?V2mJ;4%gi7_bGV_hp&O2Q$Q7)Tj80lelF4)WT94dkgZ;fMyUJ$Fnd1s7;UW(Tg3^U zT7`7g%NZ`{GSXSPL%?nE%ePQdCw-^TuHJ#ppArSrjo%}>`T}24g#F;sPcsRupae)p zcdu0J(o7;>OLM}prFFIRaUJ>pbPWcBvB|oyG4(P5Bll{nh}O-G*n3Y}roG7!;+=x* zf^sZ|O#M!-!=TA60418{vsqVv*FPs?C*01TloCsx8oY5Id*j~VR4kd4V&}gTp7F!d z3RI2Pf6Gqy;ZzYPEu)z~Ym0xkf3dOvMeoC$1Jcv-&TS0dcsw$;@L;5Fs6rZECGesstcZ;pHES-)CBfM%o@wM`J(D9hGNMDbP001Lr5!8n4;!FJs4iB z+Z|mVxv*iKdgTF0wc$aEt^jYS1@$!Li-E{9007ghjjE|p8%k=eBZ*r0i6^S|)EgGuoWClgUOP}`ih~UZy z(b5Ibz>q9&7Xy2%L@A0$kzAsoJ;A?Ww|lPmjwAT)_lo*Tm#w=;-SY!w16FJ+wfAbK z$CK?>&GzVlxUs&+Q8zU`_-VZRA`w1UBP!g)x1xYgt-Z|Py=mQDPkHR);7TBw*tS}L z-{mkGYq&6TXoN0V0jX?hPKz$hOCZo1&)c!h;$4RFa17J1*;m*5vP#F|PeU@KM{YEQ z!06d&m*MFE^=Cm*SMEo`s#r^sj%Vhumxfz5?a|!(zfW8j_&OV>%i9Pgoi*?;N&I%^ zw!~T|Y3WfGJB)WwZdbj9@0~*oI7|jHCy!)gW*0hWv{9|jX$iJxa z9w#2#{MB+|H*6(Nl9hliPMxD9xswh*83Jdv1b4b5PZoZqxnY^VbnCp_#hB(d3?36d z(yp=h`c%XKpdtWftjP{X9Jl-zau@;*dS?!QJO7G7HU)cgKY$JK5dZtOdKW05W2<<) zt`eWe1b=>7$rH#s>{4`Te*o=r#$u$Zjy2!a@Id@qt~>oT@J1v1|z z%6`@Pdd>L|G>?G25IeRgS2Sn_Y@Af~2WqNwo0P<6L@RMxOY+viYPj2wpPuvasgnA= z>>mOOw1!-JY4%W8H|!bxBW|Y{^yaGZjRMLA-K2o&F$iJwC62xyU09Y0#D@XpRt6w7 zCpiqgCB`sfcm_Z@T6i!?KQsUV#L1- zKvh=r;x}>le`lAE|0oGtZ=NDwKWnI}8f!Rhrf4Xdoi9D0DBrS^nRhtsVJdC5w_rw- zFf}>7z{j<_p<_*t|LDhFn~|QNbBtO14s1G4YPdgMPgc7qYRGR+VAP1D#?czBsxFtM zq8UCbMsF+)3kR}k$T5ci*s-5pmGn^dO|utexMs$&u0boOT*Uv*lCpXkwH1g(OHv)+ z%7y^z7RAc@SYL$!;+J5Ar>E@b7Di8S^kr{=#Lfj^0YDdFCbv77+8FM&uH|}76^5BG zRz3GzHzLWx-2WdoC59cgz}Qf6%FPydI|bK|>Ipf^YhY=OxV4_2L9nWZvl~ffIY|~m z(k24?j)1>%2u&wmJf_OAjAMDn5{{)~wcrl-Rt~q~??@88_ddSf9{`!wtH?YB%km%2 zi!t5_PUZ3GK$X4BV-K4&vo-Z~NB^r6nEe4dWkoe^ICqftwK@QHw1abkZwYK^#ZnsP zl%BVyKj(uo8*6nR6$njA#R=zYBZz}g z%8#Kd#0S?vdLi03T&+jGv3_9r{G@cfU&3R_Z@i!Up*mCj1)m=GR|zHRZ2zgmtqn&g@gX>_ zT%&Hr)`8azlPEyT;#fbik|jcASkZC(_(X9qVrkwKFAZ9P=Gf4Y-wnN_A@GwFFDfEu zyrtTbot0F^gue?Ixc_-(F;9*kT3tum@Lf-rNov^<*7EkNb|-JP1O>NnEm#%_|Ac|% z(T=89j{cv5Ma#A1z|$HgyJ*tkrk;`!0M36bPl*Qjh!P`B0u%z^L!z4+pii6b_}f|V z;?IX43od0Xkz_i72&diRrw!tFLfsedkOwwFZ88Vs8FIu+wxzCk^KFZIN64o%6$aKw zKc8wdYI33~jv}YgwDYTlreD6H9%E)qya9L^rPk}-{~z>LC&r38z!rPc+C~y+*8+X9 z>16_qZ$EfFV>1)o2;~<%otnp};>U^UtmENS$)bx;1LV7~z!}!HN0~befDJgg6H}0f z0n=e~_1rKOo;jVdn}Vw>D9kpj{&P42qX2XH3=mPmsblS%DR7VkON;*qPZhWiCXJG` zfjNO=W&jKm4o>wn$^MdlCI(DXWe|_276xh-aHBZ7y@-NT!Mk_8D#DKWbIl>R7e`C0 zj&zicidG$sV{~+s)@9)wRf>s~l3zp2?n}(=aITo+_4>zxlu;lzoTC_$1=$x`4E5T!|#F2g@Ekz~o1 zE60p3`SKJf^xnQp?t9^-G2?danf1zRy&ib(u_v}Y^UzZ?6DCc&U>Vz#6=aLf8?x%M zD>zAx4$bz8f($Ej=SMi==Ltlbe@sbRlDk zsF#m^?tDq9j1%bN>!>13ptnI2b`q-Jtbbr|h&4PiD)WRV9wX?BP?(he+iKOgIr@t#YEc55F6|OtzUZdI)ah6xE7(l_4#A^G0w#&}$GSR4V88|3x$bzE;n* zt-l=V^KnZmmtEX53&=Y_Hvw_AD=x=qQ|UMit>#GwQxfpir+I zO}3WoHO#!xv!3(No4nauJo0wl>apj&;EA_+k6!eWr(X8<-oZP1C-#qBMICNFe8wQt(FR*uE_p^lN5uBpcfUlr6RLe@`3qob!Muc05`hV zMPeXTPDm10<2#dtzTr0`7BEAAVSu;<)58)*2NKLJ1Yu}c2@}Ib7#ET_@}}AkNL-pA z)NCpMxV6B8PmDLKl49f>y1JNHqC)`Sr-ay=55=lpIc-IVlQv)ClCT*QU0kUlm=fJ4 zA_@A4Hm*rgK+^??_OGmh=+-n?O~W4j8sH*Ph77h2UnH6)g$e7Xcalgg@uh(fD7#Am z4_$d7$BzB@Q-pg)EE}t{8;~f>WF_i7g7czR$s7$dD zJOzU=qeua^F_=k{(pr;I0hn5tC6onvBKOlhqr&Jo^DM5)d0PYmgs zLEM_l(M^G&LajR!Tn5d2=KXJQ2l^6N-`u`mls}ihmA{vNmj9Lim;Q2j?TO7&VQZDS zva75WUx}4;-sAi&RMlP?%X4{GUdyqZ%398)Q?Yybp?~lWa9Ngx=KUj8o_X}wZ*$fE zSE1+?`-iTKc7r0;XkVU^Mn34}R`z8Ox~ofJ*4<@I546XES0RZqHJ7BRN?3G!W@S5s7{OGK-emIc-;rkl^VruDT^5f?M08mW?0CHxo z!u_kwjP-xw08;zmu>J?QD+e#LALWnkCl&zV4@lr*z{kz399@5W6951pUjP8aFFzD7 ze@h#~A0DLHk1p^Bp)V4Iu2%Z4Kl=hT{@CIFfB+Z>slq3t#{Mx7P+l7oPhO0R3O+0Kmu_;`e{!_6FMUm*5u) zWFtiJ4-fJ`?tkLCW~gVRr}ugP48Kn;)9fSjy~5s14-k$8+9w25t3jCmFNb>qVY+7u z04&8n0T~Db1EB0Zfd; ze9RPqd2s@}?>KHv0H2Ghpn5Wl9uM;W^G)&PYl7;1pbVEFeRUsj3QW;n_y!?H(P zX^}{Rc;U=)5^Mu|L`9VX;|k$MMN8HBcJfdG2l|L%5mAi-_^g+I)bHd3p$Or@G(U3d zs*ErHKnjyk%NP15Hls-7kbqL=4J@fyP=)IF9A6bu8>4$?cDh_`I2`%#_PO15?{tU_ z!>{l#TD}<#ZpHa$#b?dl+cRgTcn-VNBV8nI>D6!M+& z<7t~ICG^--d_s7cK4ru7i2ch(lI%qAdi^TYJn$+b-M#g?Zl1pPJ~AtbJj^1PTWKPM zaj?ZB%4zbeq&IxIX;=k>*%`i1%w)ECsKNR^nlES9lIAcsYO{Q~71jC+ed1{eF`|)H(uBJz7Q;0Q2I7BY z>}S>()X1TKPJY&A+#fE;+(r-8roCg`0l8HRaT)b-A6%t&GP8adcXqQnf_ruk(Wef@ z=6@;Hn}^A>ezfE*zuO3ZrhKv~=O>t9M?AGud*~w=Q1qVPfE_e_>qBru>=Q_zTlXS; z!xwhstPz$LJ$J-2Cgx9X2W>9sF1=@@7&QJCK00TAWRdZTVp8SxF9|?QgBIDqwA@-} zFd4;o3hd*)%HM(;r@SC?W>^{C;vL02qCZGIJWjnmPTjwsh)H(~OPdw8^y0>Muz2ts zy|00>+cu-8EO-#7_53roi}kp4y_J83^yaiOy*nQN_?aW88geqpHPJw0J)|x9|N za`zUSmggk*+)&5A<=Ca+ZmYe#VD7gu+9S1W21KGEE5!i}r$PvUWqt-vrKhhs~g;kPy z9W>5T(r<0(BldG$w$%!pe;ui}ndjvT#B6i_8{!-PrThAO>zn7>;`{hh_U-z9d%ydX zuedws>lgRRv)*%nHoP*gyX*t4-qnG$vD2|rU?}}JAQ4vZ)}%-&et#%! zAo??Pwbd04_O@0x*Vh*?(4atJp}_%ClA=Omqr(GKl%zyurNspn=B7p`$Hxa)n5al; zsmTc%>Z(dB%gYN~oUBZ3t<4P{?#>P`&(9AK-~j(Wg8hBOL9JrMTOIBGD^CBdp`44 zy^P+QqU)HZFi~%5BqYAyy=0Vdpt@j~W0T>syWY+V}L?ji#C z6Qjh7EX4vV{K*C%?OhJQPm(ZJdDU<$yC|ZE@*t{btPoGCz_f11P4A*KVmgCcp5FeC2v)`-V^wBXjQ8rO*ApiKuDz7BGUJDW8li9 z1%n?_L&;%WxPc-~BY(a?`!K=I}l&k`n`OrF6k zr1>}9TPEdXD$(oAwH(oKFpskdTlxBEwZHVdyWr z{?Mfqjq+a9Dy6cfWQ`pBrlqwdjiwCl^*2wI(U<9oPN<01j_-G$b?S`?`=bdC)2TF$ zV;Et@lblic1Zb2$j|CJql3_)dG;AQ&COr!jNsiytO^hD^a_OD;$FrFZea9K3z4AK#4N-%A5=$dD|n?)fove7 zy6G4@X#ERGerjqly2kXSFwX(H#yh|;z~~5i3p41QuA?8^<`ierLoG?L&-agZxW76u zbn&|p2$*mIQboMga{`{&7VCa`fZDpFM-YWJ^c$O#hQIyA^WlzGJ&kHHA=0#*DX<|E zjuv+ka79OdC6{`Rb@N3%wm{C8s>;qAQ<(_Alp3n`0-t@;MD?3=9p`ZZLf{(Ls+s+`yqGPitNGdx=Z z{9w^mg85bFLZGeNHNeDw@788tYO{%YSU>oOry_+0&UR~dYvldxsllw_j`R;OTyD;1 z@RC>aLs$*=8;fI4pqY@}ml+JmEJh}xN&te6mp^78y>5(1 z44H)uKTKhZ9!~D<9bpFZ@dOJ=EU9&3=2>e-O)6}QwajFU^s=;8NH%C5dF)(t3|$8Z zCG;x42y5#QHu-tT;%!VWlPGZx<7g~ntqZ9OsZFWP18aLO!m0=`FRR^YE>+S+(@j_2 zH*3BG`xTYO(dUFf2zVskB&*+`XrO2k0T9k>tjf973cClFbWVP)PeJ5`OiAZ@W~CsWf{*@PQH*O0lv_X(HUf@wxToh(3YjVFP1C7%engV=+iDoX)rFW-fBQ z^)2D=)>M=UbpoFa1^cL^M^@7(+iBx~`t+nJl!4hE0_J{ssEqpa*6fq)?Y^{TVmXyw zz|g}rc?9=CG^qh|f)6eE4763G1?i(zuH}7ibjl8U*}@1NIj^hEil0r=nwN?lO6yLj zwh0h`6-0~`@qenvCJ>1PfQXBxI$-;Lv;}BPa`(Fm)Wh_%fkur_{{{uUS6gFE0>4+2 z*?9&z;#LeRYhQj9(Vl4qo%RERR=KjDhb)*&rpENz!-h6Z(Ywa5c@DPY@Vok)ILXL| z=&{s^zMlz|7w1((xB8t^q!Jh&gL@+r{tFgskBdL^bLt@X7B67oqJ!WgFz;)dVWe44 zNV^&@v@$G_IQE4DS?r~lRj64UqD{p7Qeu(Gd7_eHB<_IvYe#!9-iuWO3PFqG=C%6b z^j`lQpKk*!Wcdnei=E2L@1ICornZ9p)jIOwxJDM})1o@x$0K$&HWZczMz5+a_dcW{ zqatNK40@OxkwG6-vo4x0)B;$alC24vm?A^_dXjl7dSTfqJFo|iKM(dIexNBD6nq*> z@}xbQwIUlKnRFUH)%6Q^x~gZFT#I{~!8XEk{Y6#=v&N84p)Q+btV7{fF*D$cT86zS zT{}A+AtR&ZpHvUKnV!_#V!?gMHE+1yq=;7%0e73c{lsi)Xlx-CKk_^G*!tWP{Q+lXNXiqDki-$8J_x`m9pU3Vu3@+BHnYF3pfr&b}OsN zY4F3}x`yK_ffqBO7fX?s9&T`i(=>mPApsj&6WXwKO}7@7@?+OY^7<6?kfA+a5#s)W z+k|(6)pg_a$=On^!=+{sPCzi7nc9~r)ld;&xMH~GBCCWV_21`M9~B>)5>53RxwoGa z>ErlOqNf`0P*wN-@7kL5JP&*G={`E}Ul$hj4$-u~K2J*X`4xk82pZou6FonOIX+RB8GC16+G~9uX=bcZ01PUukH83i60GQji9YVNb#qx7_JWG#>dxgdf(uR{S7v<4r zTk_b^e6(O?Ab}->h41=OD_r3aMG1r_lt@j^2Hc^vse#ac_aM=9KwMj}t6k;Qi~Kg1MVjTK$HQtZ2Ckk3_L!qJ&mtGO zr;m-#FTd0CW)sk}o`a`%Wj_b?65KP9!oF@Z3pQ`5TEc?t;`KB%Q#zX%6)-XRb~bkc zJ_NEWA2kI2QvxBC*;)56pc_(=pOi2hjmO2s4mcttjeS6e;E~49`yx}AryLvX1EZw0 z=bPx8)7vq!2sdhAAp&kZ@nDz};O+>A%VjVerLW*w)@T-hSAisH+$$2kIao%~>yKNKL@~^M$sAJ54DpzDnJl>tvRh@i+*pR;y zRTwvKeQwyVJv8sN)`KWtlkxA_R&5_d@BCITvRZkKta8#@J4pIPB?-M6do+!l4cJAn zvoSqw3^KLA;R@IL!gu2YOJ9##gg9G7ZrW<-pz5D`{*h;T52a|}(9zLlU7rpic+qc`F23!L@Y zf&ifvIdRd-RknqADOf0cP=^``$#9E$6M93)4<;GlQG>r04Xcezf+7v9c}HAK>^rLq zykRtaiGK);emUqnYI2-1aDCK;)>GnU*C^A(f=QCsoBY@RN>-F)Ox0zJzEUk|<7f4N zb@H+mPI>AG99gD=!IPxj9>=R1aa7AU>q4J*b5Yo6gfLA2wmO>M5K#@B^2f)w*DD=( zXSMU@x~e6^ygSl7+#mn!e7AetY+3~2RVe^wQO-;B7`&Q0{N$6gX&Pq1W54sN#xCd~Ri*K?})-@PmBBK$s| zEu}kazHUbh_8f^S9UKw8;mbSu_D=B%vspb|ajOXq`SrcxZ`T!(h@B6QXrcw zmbiFAP7|EV0xZ!HkB-1RqLtfm!4ZmBpQOazv;-fma)|?~;mR6P%~OozfnE8H4L&_3##OmHgdk zxSAnHd7Lns5J_I4r;&|pkfVR0A2LX(it3;OUuJ=-wvPabC06N&6c_6&!|z8f{f$v; zz1^XmjOOUULA|Cu(XUG`;U}UZMr2BTdIgq^XIJCjCLqxTO4_02v z?{tojhN(sv@b^3wJ_)zEY33a=_=stVyeak$hG+aI_}|g45HYIZYbp6p*FbHUUU%Y} z`@(*_=Lj7%Gx_F&+=~rJIxF`M+~3D3k?ieyf$%%tD{mT{0=Zo4#f$i81YbfdeJkme z(fk*Tk_IXET6%-=6zMkgsRqBD2IsT1-JxA^*n!`yC_llQ@z{aCDQw3c?&tsK9pw);h1 z@Lg?@E}<<@2)=HLl*x*8yPxS?p*8NU&ttrsy{628xuo@4hSro!SEPf)0NrpO&%ZS* zt}m-SHUS#?k3=sezgk1OnZu{{Pb62dh6OT^!j|1AmUO+|7olbm9S z^aI|wUWJnea^6pe(t@axC!fP^9h)%OXMFndOD(#;daI8U!!k$g>IDro#YuOS*#+Lu zqn6!Vp02!jV_hJU6p7Tvm>mg2il?dxHqW4?93Ini6~{wTpqct zhr1n9OjeDppHSdbw<-j{D4)%NIp*l1r};T&ecdz=`Qg1r#xn;$GTCu!=%R>-Had8dau&0|+j~L%=Wr>^rs;3FPkwDL<*~~?cGBMb!g-WRpy@rtTm9-dQqV_jOB4suCVrn3*@iP%xRqmbuPt^@i8SGgTK@gQrt zu>nk?YR@cb^%G~PQsWbLX1}J3${Tcyjp!~F6xvg6mo9_=3K4ET<5ZaK@_QI*rb|(c zEofd&b*-u_#6oFbYrBig%V7JKl}Bo;a|tWgb%9+&<=*lN?mH2osngE^SA2cW(gad{AzhhOf&P`PrxK< z7(Td_Eez1y?4J)&B8(Jw;7hwelVQm<6iEK1rnKc@vwS*=%GKZbzL66%bof!y15wc! zygf>D#(LENSmnKl;b%D8&eqpEcJxnvckSKA$?AW;!>~~;f6v<>Am%>>5KE(@UyrxX z@$nlyN*c{Y93SKOPU{~daM4lp-h_n0U-r<9g)33ol0egT0}z~Qms-1DI`$#y#VNaF`q9X`1VIcI=jRqtFEz;UPAg(^$>~sgxnl1MDY&SuvI243Jz>=nh}(i) z;Q7%#A2}@B%o$?c9LyN?rt`jHxjtS?V!9!Ya6=Wzi~|rNtL~|RE!GCVzpj|QDw(cE zbP%WEqC_VYi0UU92#GXtqk_e}6u}X7eS4P5TL|tm!p2S6)lFCn*Gs6?96R{(^eaW_^fBM>9z#w-%bW18ms+qbyPf-didSd_!4a0UE;7?eZKG96SQu>nx;>HK=W0jZ zAc6(7)_-!2rGq#d22~+Di7y+p*LWsU5U>X>Wc6ykc{<;!JhEHET$Os8eufg-TJXPH zVE_l~dOIRXYqawrv2nZ+?+g*TMy->3OpHNl!6$`~wPd$p-1O-NABjnL8@A0?bD40; z6)tiLh8SOD)ztKtn)5<} zy)^uV7fI8nmCIqp^>WUF+!&Wk@Lj(I`VJ-Ekk=IC1_l}4x8fe6SUd=prt(hhF<1+p zM$_(y;T`9t`sdnh_bIq|_+@gAUfr>w3m6lHo8)dI{pt;jLv`_P)u^dk6dJDv`jTOl0_X885_zUV-re48L0Hym4)+h|7;Rq)`%SUM`x zMalj+pH$=A)8zQH+7%B2F_&Tfa}67vH!QeJ1~lB+0)gnQ( z3ILNWaRgsxT$nEw0RVj7SXCs1TNq}@lZTKhd&nih0{AK+e^l<<2okvd&PqbWbwD1v zeqVwKO$W?cuZ=ClNT8QKeupgo*_Fs0R=;_e@%IfvPp`$4t8Xp6bn`k5+=a&Jz(kV# zFV{9>;FuVQn+|qvk2U)6`QFsu3nJ*aQj`W5b>2``H0B{_j;MX_3Y`|hte;d|)=+c3 zCWM`%uy#o^)03#5!8fz?N>sh}V%#YTa@dHa@l9eiUBr z^=%v8evIyxHv0VCxk^Fo@BM@3v8{JmV(s4iZM9e=SLLhpZdlxn9-sV7@2xBiyLk(# z^;jExU{!zdwz0-VCAsXsbTV`%m~m^;`Vz!$pf=OXes)ZCU31_GJHVO9E~Wn_r}!%f$}Bee0t4@+8jkw<=D4*`qJgI zmBKCjC*QXo-HFG-*_d(&^7@^_cO8xSMe<}7myCu_fUzaA%M*e`6!}dX(yhKlBA#<- zZmlOi0Re8jmlK-`b-ul`*j_6`|DomTFUhRI0O)Jn#)YS>#AJCQ;C<>H8gKUL_Lz{O zip^Z0&n4ILNr>psRP3X)SZ0INdRjLbx8By#J>KoY;F$YoJmCt-WH6uC<=1B<3Dz3S z?!19@+0LlAU*M^$knZ;yzzL=yuyxPR7+NW494rSa z7bS{^U6bkb#u`o(0U~wCq;}``_&ubJC!K2nwYoyfnn25|JuLA!bwjm>pdQ!G|Q84TZ zaFC1Cp7MVskXgnhp>4Z?YC>mEcU2;0gjp^(X>RD6E~y|n`^>Z z@dr^-PI4U!;?haD}0WL`hdFQ}?mxZo7 z;CO-qnO;~z&6W_I)5nL|0Y1HSJG#gAR4ssBKd+w3dYmuqXPoTz%|_Ez-V7QfWqWV$ zdWrhM;$~M_WUtp>p_ZA?h@KsWr88(wGs|^@Snf0(0WQ*hJ%DNUN$YE*Sg!X>(C+g`u2u0SMT(6*Mz zosl&mN?57&d17A#_~|*G{-Z?v*V$g)sBt+G8{5L)>5adsl*+-n4fF*q$eBOr^CE{? zzgyvEH35=9IuJZ;VbT=(gnGL+Hioc;m8SKEiKS>m{Ru>VL_cAjMFy5Rwe9N8;*J_J z3G)P{7)ak{!MKF4%Vg>mV15MZ)@tCd%WggnoKtnDR9fY&Eqk`gL?m}sb30t}NP2?& z)N3m8fW;yf;4unS;SI&hBFI0p+QFy;VlJG`Q-gZNa>40~E*rar6}*IjC_EZB zN^x2INB@`0`~1?7{Id|-y!V^GKRiwXR^v4n@b3kNzXebpRy;CgI=xbK+*nH^r*#HybPNKkE;j2^5b;ObS^1H7r9smezjv4f zZS-RmiWD+XqCC+i717Kd(UpGJHu5|$^pRZMb8@`n`O9{b_I4ojtP-ur`tdxoqCbFm zHtsn>_=lYxvT&2F~*@ETyF&&t(Rwmf4Y*KXap(bzHn;@HM) z%#D=q1-TsfZ|1X%4So(84eLCjE28yfrQLp{!Kt1uRFBe;yF6>BDcL` z*bY2zn8{}{EHLcc_nR2z777k)FNx;a4tMW3ql=lC%qX}mSGLf`yROs5{#}F-M(-Kp zR0v)VCPC1Vm9oWV2iek}h2FvYIDlEzwzq6ioNv~4rJN~q0IeuKLG9(?+{aV6kxRLe zF&n4#?HxPDfQdCJ`{kVH0=g%gDIG1|VaQus2Fqifad$i7+$>Jjl$|P+3elZ;zl#M_Aq^ZW@F;9~OTqf)#c)T-&vlTi* z7B+^H^}|_N0^jAYlGj3Et|4|4hix);r}J7?udr7 zds)sx8@-}Gb5)OqLSPKdnxbn>{mk=4o2nz_Det#YlN+(&I`aqn+?%r%nl4NU!_(@) zy5ezPwAnAhb*2lzEF4?}`={(2Nsy!_jY1eh?bF<-=ci(v>XkK7#-Mvo09`N4k1+B% z)mf#uTW-|AevxbuzI5L4?4&*d`(*CGCV?A)zta$77h%ov!Sh`V={|HmgFp@>+|Qyl zsg%l@zS}0v5$<)zMGZ$a*{SZ>q}{ug;W1{lY#!+=3?kHxx}1c;El?h|{d?_>7n9xf zxEh>xN30;GPF5wU?jJD}f+^D0lVmck5m(b(?E8k~;0=CsfP-G8k3>EepSfpX!|RXxgwr2^ z_S4D8OInAPQuu<5@dj6PIQg0;^JO4%Wqf+Rls%94JjN@CFhAj5fy{%`=`1RYIDt9Q z1mQsy#j8HnLTGjC^ff|?6U&m#^oSSJmd)!`YZn#*7v?&$-6qQ7#FxHTM3o?kK#?Gd zz zKKMweROKZ<`EUq?hw5VE?@=@F)lLa7FQ{uJv-d?e{5^&yXu;H7ur(Q8g!AR?jb|Fn z>9wZq3-E30DJ#B&Xz;^sD>x?i=2>|E7XU#ziUC&v1RY=^wB`o1^`*A0SkwiuwG_>A zB7JEn;vxJVwQ{k3zlO)zV)I@8#DM&`0aglDz#QnLvkBE=QupZ^YsdZ&Nf~|Peicr6 z)ND_}^ZZCd$e8{p$-mEFcqtcP3j8%U$(0uz&4peGUY}o5#4q zro*jk#H(lRcm~_&c$GU{1TxGmNEYZCnaXZA(26t}*as9_%hW-IX41`M5}G6HpChYK+AYO8W_%#zdiDyk zRFe9dp4s+K&)c2r8boTw=GYIQu$FG2a~;h8J+?|X(7pQB9R!B_t=Y$zUddtu0lNsx z_Gb$Xk8qsY1|pton9BwPxdK~16)$xGDfMF;s~Aruy9LB{K@wcCaQ@uSICHe`PclK{ zQ!P97@zKJ46=ftcs0{?^L?2$&h(ej@B11NUbgQ_*0r)_aNh^WR%w5tk4-2 z#^RZ6Pr+{AbrAPaML=E2nY(X>Zh|H$?4W8+&rJF}>ivcjva~TqF&&CUB!gYIuDFd(h00E0OFI$I4&)n~@^17>c=J-a$UGsu|TTQot5W#TG4( z8XK|S^%XN$5!#j_!H=7Synkd?Ja(eCxH=Ilx@QAQ5TJTg-ERSG0T=yV?H}k~`(CeX zPufzTTi71gyv{8xC)>4g_hblqWaN8W0I&+hdv^9Q4sIB4XtBr)dK+Nl#$AGw#oPmI zD{&G;{;FQn5k2^jzfKyuM)dl+gash@w{!+C+GBg80>(U0UtCGWlt8zBt&j0Mkr6F* zPqvbxU@Au;ah!))m-_p;@=YNFI3h@~3l@hzIWC-}%PXb~Xe9xybyR!vp!vXPK0eCX zo;3U71u(h@>*&y*r`?Ce*c@rDppEBrlJ0}h;c#Eje%NCq>si(Ay9)nmfsX2ZLA#~Z zc#_zjdR$Ebhf#i)(?RIf%ki>HZp!<5+FNI?SB{7IVdnLoM2g))9UiJ)U)N#V!GIQW z9KA%3-7)rjqP;Nhzt}JwR}b-iVoXP(<4__zDt5ghD`{36s&kzb$db+GN;WB6{$a71 zaFURT8}%OT`rcI+d>`CpipcY1<$lfkoF11HX}DR1jp@<~Ty+Vt*8VJi1R)I?$6;6BOypkjhXK6q2VdV?qITC~e@v z@kL$&O=2!(BJmu@EctLqvS5k(Huhlt*YDAsh1&ctp~q3o3`U}vS5pDW2IL1tL8s+d z$-lL6GwRG7Hf{KU)w!S7UM8 zv$F>(RvJ+@VMIFGUGb0Q%85}Z1VomI`^>jLC`N+ewe}h`l>O@(ZtoA1?w1L z7^m{kKjdAP<-iQtr*dbc2CX?UkMUb@KP!)FN>R^YWX6-UJa&HmO*~fuG0o@>B%tI1 z!Q@?Tho{3m)D;K5ZO~6o;I7+F}`?Hd}{6L@J?Ca z(Z++|WKSo`JRMz<87ca47aFOx)?bQ|CLr$mS1+VBDCu#riqzDrvW8Y8Andtzwk2j@ zKu(Yi{h=Zv3yMQs0IA+Z+z`ArCUA`6Ewr?g24EO8b2#aeUJJx}?@bkP4@vD? zKMyX@jW|8E&o^f2memBz^oGuY-X;Vx39Bb zL)m_AOBD^5cC&w0jE|)Zrgm2PtF~v?czU*V4o;7f+>Oz+*w{(o^v+~5JH+cg?jo-2 zckB+(q1Ygmny;PkUW62MoXWvFE22oKb8H9bw{kAxXD|9sod|ogu`Z00CKRx;-U53E z{eGhJhnYU`;&=C|WD3a5Wu}u)M>uE<9M^EisznL}do6~w>}0@2nYwe>GXrF9HJ1g! zLXViX^D@k_v?UJ0YC*%vL6G?nY>_5E0yAI}5fiiz7K7M|K^jt5d%f=n)4C$V@EmFb zB|Q}mLY07x2){!OBEr=|s(kb{SZgSKiJdYMUx6Kx4e|F7#Jgu;{&H${T58bUr;C!p zioNxaiF8Q5$w;S=<~y7;YH=hUIwkh#m<-J5A@}M!nbpLJg(Jcq2(AfRV}&F&05>2P zP^k+tovI4?{z$|rZQ#{!EXXPgQ2qJmcVp5R~Eu@WIWIl~OTm(qGeYb^?XOG{&F*wSI^E zbS$j>Qo?+mr0Em?ZBoicbO$yD`aoC*X@QNLANW%Z-tF5#c+U^ZJ3iI|qdaz`o~i6+R=a+<0?C<30ny?PHz3%57n45Ks6j z5O3)W4pBHi1uI7QO6QUxgbLjVJbqXKoZZe2NjE z_2-CQr1WnO^l;A2phZ^qD9Hgu?>>!Dz#{}U%0b@}7y1VxT}8Jg_VbRCV8&?_8db9Bi*E$h`0ks~ zVPTt&C;RW_`8Q|Y!W>>U1iNe~>jAaG4CcUb^t}k!{=fE|`Z}o6OlVD+DYql1`vKxh zfx?;@Y{YCgc1-j>JQzb~7!gBMwbElWy~rlUgY+upjspyD2kZ6R6fipOlXQxm zn`P#0bJ>%j&?wDb;3D+;QWDZuC_xHY3mt*M%qz6fF zm+7mQj(Opoi8VSEy0sfOj**pzoU;eYb)0nUlnGAzLF4**LOP2MaNe4X$u1o0`CgXy%17n5F{wCdoG@dpUuudu0;hgPbvv|fbW5Y(+bHDs3 z^yT9A>XuJ(O1JAakc#1ZB`r%91q)k94)etYO(Cv6GU%gFwQGovywon5sp67(LW!oY ze_!M*qR%_bvU7Dh6tzz9GT3*$a%6vlU;d)gK2a!u2CMu!$rtI=9@porArt3A9(J3@ zQjv8jaU_#WbsbBdoY^-}>%4@4OH|`J#^xTG{5ua62}*w58%HIi5SVEFZZf^Wson=B z{CAPf!yevExA3xr7K?4o%RVzEqROF%-3#s2d>@H@%FBG0JxjywX1M6IA$do(XwO;Q zSV1k`G4dj-*SjF=wj{%|k;z-cv6{0rIPCbkhxsojcWNATfSV95y{QzYL&xqlUgE*A zxpDCY4U}Y6`l%Hmltg?%cgnBIA{|4dU&I|W*6nZ8*}Tc*VzleA+=7=_zF)3i%*;$| zyld<7QOmqG5>ZRH27w^5e*)n)Nd-erchlx}`E^$IpeO^Nh0bIIxSnBS+K29D5V>4D zAYAw5@aSYquu^9ZWs#me!_bE!m@CDdiy5t@?Gq$tw|_HSI#%(2W?|_31z#R`!`4N+ z_$YyNWu4Dh)YCJn!1^i+=8Lvb263RZ#yKX~FGE~>Vl=_+ODslYa3bnN*1lNi;-8p6 zn$4hE{rL0z)UO*Fz^3ZrglxWr*-jf@ zx4;^%?~(wy4hBnV`oiiJgTTVs0-`o^PhgQ+3LEN;4LzM!v%Q7d(%qrD{x|s9`4i_o zX~eNLZkD1(I@7<)T^CiiT^nlPV3{mD9z(UzfnFNDuK`^0rldMbD5&7>XU~`3DYlQP z-G4BrnM*6{I(;T>7dSPOobhwZWBO8V{mEpk)?DH!Vf)ReQdL6s^8TARoc=BAgX~u; zxyJ+?0qZ7)J)1zu;&j4(0aS7>=*|0RHla2c#JxFfseu>)y{qhu%vR*9TCRO?rZ?nS zo9%AD3bt9(WtG0*>M?J4pDaGd6WrZkb4Z>aWI{1V|0Q&*rndY`;CeMjuATC?Ht-r2 z{^MVF?HVe<(cW;~%HF3Q^fpm)e#$4GgO_#h-Zjgj^=d+HTYT08x2>j<*W@22_^^)t zPFMHNbnz8Ua$zs>=i;x=%Sb|U_@nh!3$(40tX*KHBBryjR zr_C(;c$HNfYQuThYdQ4VbwvXvCFG&T-iKX}c3?NHn|X%tR@Ig< z&4?$z^9SkTi7jK*qu&aC%+!D*{~9qK}N4UCLeF! zH=nySlzH5D^#{wd^r7J$?to5b;6uH_Ue$jq3Hz@xR>=sLB=z{{pAdUR9akl zB|MF6yfhi(c*EM_Y==pRnZ|Bo_tso?ZK-|8Ex~FTyReqmLbHF#tT}bYO}7=oFhRP& zxA(V2^`>!q+zqa?$(dC7P_@l5dF&zDG5PG`)a_O?{_piJO^z`1V+3deD2*!#2_9?y5-w{~2FGbCx(A zuP#NJHZQlEqTp6KBamS?z6iOGTjR_4;y$tr(weAayv&|QC+A_^L2H@`OkeVmy&5p~ zAMlYv-X|tB)ywp?8H3_|^vN|>uAXDhS%|`EOfK}0S=RY-Q=820tAeB*L3Nyrmb(Yh zSBG7nofdXeQh$Q@gUZax$!Sf8Q~C^9#E#b9U6@(a{-a7qQ=EstM8$FoTfdlGw=aj) zsW2s^rs%)eIH(4rQ1{~nzNa{-@K4IoRJCg~3?|goyDz#Y)L-}Lm~CRj;jm=69Z0Ul zODf5Sw35{Lv5?sH%v>?TdMv7^MI$(4SC)B=cbBy1u{3(F!?=zu)4Q)WB)&hi)1`g#L++Pq-=8K#3hz4-8)oSXf-|G`{|8w>roRNee8*0T z4so3`W&Uc5_w9c>xBKJ4qb9~h3^x`0>eAu@;=N5vD;69 z8?ZSoJ}43#hxe1CWg&+Auq6m5VxvT4-GOK>gdO`XP;m!=2ClW zfL~syyjpTSuRdplYt(X{`_n7+@RvQzMtwiD$R-A5P9AE=8zDyRbyP@cOf`&0YZytyMae)2TyIixV6{h`W3G%$alPJNkjA4!Os#Fy`mb zbil>t95ls!O{cS3^^d{)i|~4@56@kHhaL!JdJXvfEWBp4H;BI0k#kVjP>mEco_l)% zHy+g>3)1Dpv`XU8n*DEc}W|8398i01U|okGkK6~9^G-)k#A6^0UrrU zbUFs^fMJz;vGdcE48U_B7cX(O7`er&!$EN>`Q2vR1U&&JTS#$|u_`|__qU-AL} z0*`n8=4w$_j@~T~f}>lW9!h&bUBMrKN;|t}%-9VF&+ZvNy6ljV-Z9^H&NIlDc23Tx z16K|ldwL!I5DG59+Yw;k{MA!=?poD}TW|-n5f&9^j!))ty}pnUn6216gB;8>mm%Sm za4*X}y!Ci#@hd^!1D{U2R&am#%iweH`x9N;wv*Hmk{z&4L%3dheE){q7q7!`G>994 zU{LOoNj&#`%Ql^nz%)<}^Uz54X3icRi|GOD#{VHU=9@KR|Np&p$i~HCpKl^}jkyG~ zadKx^Sgor@x~{stfZ2%3Wg)s)h00m7zVWn#bB)Kxx5e2FIm5t!jkTg2U3L@<$=F*k z1RSPI^ri65w)NyQXn5vPV}IFff5v<^vG>nv1>kz4{tP0;LiS8CW;DFna!mkMU)28^1~l|4=m_rW zvtcf~N82GoJ1mNBrbLGcL3ObmI&!KY6!!*gPOVOGyY~i#*qe!OZEe>AH!RrTO_B$i z$c`{nXHd78UX!k#h^Nu|tFJYz#tmk@$0Vdp^vT2vwU#W@Om1tdey4Fg_72Mm3iKT7 z;XeT_)Sqs~J_}@RMs`w146bo?#?CO^SLnGog`jbjW@N_LTRayoJ-36m(7U&@kUjD0 z-VzJX4Xz!luI+GVl--*`>M?g_*{wC~??u{sYI3(z?5?rBp3d@KYJ6Q!XL}tT&E+EH z48B_|{3h4C#O)e;G&s$4?=kDH^IE-||u*nP#BX!ky3-H%8+y7EXG zKc}R-yEoF?>JX3KBs|(ZURRFeM9Ij^as7ceK8dK(6hzu_uZg*E8_vZfhqwj z6t`<&i~5&eP(K3j6zfh5!WH0IO$FY8^w@UIVy?$!$Jw!YMh zvt3oN+E2TI}~- z;&Zzo z>(-?#!9_!ZpOM?S(nQA5H%ZxU@wuq@y-p0>F*q_d`X(A%5B|uw+LO*)WEcU(?FA{x zdOm=nEae> z`gLj@FTxNn@L%YHKd>2=*Z7<`A{*gs2uq<=KO{S0xp zukF8wIe#56Ob-Q-37tBM&-0b|Hp|1!Vek zjZ%xhBq!G{QDR`y$LsgYfo%48Iwb&sg?N$Zw1`%SZ|O@~EoO+GG+WveN6oyf-ZIq& zdHwo!F~RrPt}{#MuWq?(+oGP^#suA?Lf*?j$*<~w_`Z|&5sh&EsV`%NBZ?kJaL-5# zJ@oODF@A;U)nwnjZ)eS##K3mZu0z=vp-wusacwZ{Z*+}+MHZxKC-bYp5jYSV@|F}F zhBwE6LBxjCXjR8=HPgSqqGg%mlelB)%E|lW^YY@cl$*n75)RK?fPO#HT?IPoX9no7k|I{$k*`L)_>Qf zl>P|Dp8Ev&o){QDW8>u0ZgVc?zY7K>ud_C{8&wt^8CdT>H9*?iR$yx%6u;`-wVSKI zuZ>l%3S8V+7?k%Be7Y^`#G2^bThsU5Dn0^y?yOh^pBx{%Wo=gIyYJ>$rp<{NU}oDV zK<44Y(rFa3WwA|8^6GNVKF06_x9*bW(1-spx1RKF!@Q$fbL+U`hNPkcgUr)Xm+q5T zD8&Dxn-W{}Nlij)Lp=JdPN=-`@#Kk1O1`?7I;u!z*hiT~_7d201on=swg7NcRRe5A zdUG*wTS(Wdp0sCIRL~!>`#-2o9cydL@C6y2HaEF51=^I)ohpc(HG3=E9Y=}Y>1Upl zl&utNY~l-46Sg@3`E1`qNQ2gar=rmu@}*-Wx57%$X6wuj9- z?#E(NItr~#=<}6@b>ccVotysl9gsX0gt*g9`oxO1whFM@a6cAv9MyNh@W1A6ECMzY zr^`x7D7LqpHEsD6T^W5yr2lI)KU!VZU@l(yk6Hd1X%Qa4Zd`m^q_=nU)ErAXLk(|6 z)~@mm%GelW2XELia1?`c>`0U+epV*zmLgTZA z4kL`4+8&+GyYYtqruhr*Y1P{7Q z+{jBL=jnzdB~E#|u27kv^b1ho?|WFG z7cyoKuZ_FcgWLtxkz(}a3pv@lkH~$TT5|JRc3E6pSw>0IzJZ#7^VR_E{3$aQ#Uzxq zeRWKtk(6!&Lx)fBuue=FIacgGpd@SEv3?((u-j4?F=gr$S+Ko(_-EBR^HXPSSsp7O zd9cF>kKsw^DOoPL{SmMr6bKx?sddmeWNlz{OxmQp^|pdJslJnC1NvwOo>}3j8MtCA zxb75CbIo$cUi-3n{*zZ_IeR6}6%X|sFi&H-S7ZO7(Z7&+iu&~+yHG4!v129#Oe3;pC_gVTfmbENu+MiG}<!PMBU zIe~qQIf12yoWMrs$sUpdlesUp*ll+~vvLP-|AbLdQ$#>uahoqU8Pt1#xr3$1uD7pm zzsdpcDqY8fza!0EF*$XGB6zf*PhEn{C)3vjJers4x9eE>>cH69(|r{4qyy*7~6yaljjVFV4fu%y(!EobSJt#OV6ZXMO+i zlyI*9NL$khu6cR@-cn^hfm&dp@b>HN31~C;ILZUIFI|crnpr4@`}K|jM+{C(E(S{n~&gdJ5ATuG=>H7})U%)pG`hi?c zz^`f0RXo8p(b!SFBGflm&jdq?yS?T>m)YsX_OzY84%egqtUw(;tI_E%po#$1i$gg3 zp7RTo6Td+6AMp#6mpOoznmJiod-!w{D0G0{JF~J5+XK^$2$wCRHq@MD-#MDVw1jBF zn1dHnMXUx>4|E}f1E>^G&K#i+Ve3Z7uJcCgn8vi8(nlUSd5B*|=tN1JO@+83ZTPIw zlLig;H3Q}2=8bZ4_HZsJQ#rrm92&^tE0Ahst`PrHua|u*NsA17rr!185^>dZzl<={ ziB+W?>SXrlxIu&c%&u8X%^vAD8+AU#szO{j!_YY$w4uz{^{4>2W5x zmQR{Hc6KCPg5LaRFOP*w(|4Xoi#dWnW=uSys;JC}@eRhW$_iHJBRUIrx3!G3XxO{0 ziBv@|!`;?lt%KF>z|OtKU2{6%%r#H7C;Sz?9s0;$9RTe7=_b`Z^iKuPtMCQhD$MpQ z&zn$@FCOs}JbyG=OUe;i}m#|`$G@2P?O7337N)CACFBObKLHlj-oD6~Y zZTzOra1_L$7pTR5eK%)z$0G~g_~$2R>#P(}0Ivt#Q zp_}MDgKRDk(SBlZg^l?^zwxNfzcGcKf8)n={td?palhpuX1mOuv$6MQux?6u)|i5B z+T6;onNROk0X}@D(x=gT39q|wb=Wg_Op&Hi&KyCi1*+TXu6A#=xgkgO-D=#fT3;K1 zt+*#D*raM}Q-KhCFWHN5`Xuijxi^p;6(B2HW=_-iR&3xVkBTTL8C4UyY+iVzcViN8 z+_e(eJv={V%%^|AUzS(GUlqj1`$af7&9-4D4W_L+U4;$8)S=7rP~{rb)Pj=6h)aI} zyXBR@R*?kn?pg_d`MrsY>EYlo#dkbN$T<9;fOVp_iw{MOCi}{s7nV_6U$hHb&QvBu ztj9>g+M3(MVBHf~Xy&WnY~=Qa)nAB)jD&5y_v(J z!i$mqDwP4Q7`8t5PAee2G~!-VTGW3=i4OHo`g=g%A?KF}=Rg**msal)^O6nsS|S{U8SY5~ z>);(V7>Is-et?a;qFumY)&}F^($s8(80}(=2}5NV2U6zcc(Oh?sw+{VKhw3AF{Z5% zwSR?epNna0WTVK?b3@!1D#HXC+wU54=7}0@b=m+uyVf$s!(~&gv^A4rh#g{({_{St ztN6F76^sKR@Fe7D%A0Bhx7c!We53-rpQy^T@YjxFcrUG$Ng-u=8(Nc)cRE#z+C;qK z)vfK$ec;%GRz_;9PkND%cd&$X_6v0B)@fH5524Xjus$s8z4eD2`s@0qpr?j=>uFqu zZYO21#wKJ@MKEPSF1d#;UFvW(0d*9dV`7ke?%{5EWi04p2Om_gO8PMKMtk^ObDlrB zTmDkQ&p#(zHr_2yQ!3h;ZbG#5`aJ8UT>krIqi2Trgv|`5t=G&U`R|XfR7CoP&zvA1 zjo?8V6ym@s*9YgIr}K202Iv{KvH~!lrV}?MP-?zmVZ%K({@}%Lu$CFi3#4S!D1$dAYoNMv zS75MdYPy-Irna1edDj~-tZSxBNGcdPs_aB=T1Lyk(41s%pk^O!IG(G>`T{*l@&{EcTa6=)9nQey1&ZDoPgFzlg&wI0SAo0M4QI`OS~yv-tR{nMIXK;Q;_ zP4(Y)In7HO^iSc2NBg&w%v@%!beI|*8yh~=L215hW(iOMpXXcP#b2tSe&)mV1 zK)=Q_)C&k(+V;$u5|_3kEpAFC#hry1U~+psR6wctR7yUQ4sUSnx%6FxalH^kNvPdDsW)G4;kH>qJf@3J;Y z8P30!9&IYu@3jIy3AN)?;}E&q;ES2`zu{Edgd81cl(AdnLdB`r}X1lEJ=ak*@3c%%s|>YHf2dh%!;@nK3)m>-x5|Tg2$*7 zA!E4qccAuP&u{U$C5>y*>)q%%0Rho-0%^hGIaMd|OQA{+315*O9D!vM^fdk6q?(GM zQrKv03?;tsk4%p7@@{j0H_w@l3!(A;xji5o=-5}5?4b8>sUrA2Y5T`ng}a>`wb=qI z|Dj=X!#u5G*Ps7Zc>sR@Wz~4U`FroKDfyGVxw{s&HLVGaum2mQU)u)yez!l#X+mz@ z?E9WmPR%>^MVEURH$2*xG;`8Ueb&(NW8Eg?Z&~iY{-<3z!!zrDhH&M=uNuo@@vYsd z`@j8rwHmFZy)Q2cUw!UHW$K9!R>pobZ_=HAcHBG&D8-8hCMx2iOaVK?70+zua#L61 z70-UWOyv!zsfT}TUU~xz|8PGr9bI1h=mYrcw%bjGUjbj$6?~&JNlm_J{(|~5@bc-4 z|4QK6KZM$MB0ikNtJsNi;Y2;)9Ve~}XF1~_qVp`$HlF^X5bELCYhdZW>VV_;9bs1& z*TY|{ZZ{nRmVR`^{{8TI{URR_+5Q}C`LQrxIV0gD{0w#X6yLIx1>iuuWM_3NZ+CN z>J@rN<9*VJ6veM4`L;XV*9@eF2u*Inhyl2b}Sa^Y1gKvC?H{YlqkoUoz$@?RuGT|IfZ2F@1i(R9Qa&#Aii)E$t_~ zGYU2-=rOP?9^`E~`L0Rn@#@&}j4^%9q?PaYHARZNUB%Ey+rIkKyxXwPiPCB57bX2l%SyeUiE&h8a{r}M`yn;YUCKX-A_+<5QgogZaa1HPxJ}T+6uco*GhG-v@R#@B z*YN~zxS5*hDsV5KkJi8lD!xM=V5w!^fh8J;X0m5#e#XPJVA^n)MstU0-6VlBJijtF zd6AHBT@_~n`nnGqnKH~SY4?@?Q`xmgMOE$L+2_mvk`GGdk+S5GC=ifL$ORo)fP^70 zg+VYx9TIFv6h|I9#H7fA0R@F1YC$Ds(nM%$&A3P^?IKo}nA` zu_p>9 z;Qsnau;_TGx_v|M!V|B;w z`@wMW*5S^)nApo&^XSXFu7BCFrV0LhBH#2%p21*xvp}oqP#2UGcHs4k^zk+`_md~t z_f}f9YmgtiA?f{F2I0*s@XsS4Y|wBesy-h!{MFO(K6tG9C{UdF2!!@+P;ak=w?>Rd zW!$?PeCOel-yf|U8F%)(TDetzGpTwX@biop-X5;_4*pi~-h=jrA7h)8hu438=SV9E zjRU5(w{95Yfy;2?ug5kOttm}h4)2_6><7sF>92#RIA!ZV;r`AUuzciW?2h#bj$iD7 z4AI-S?~4@j-fj1HC`_lK&W@i2$Hp{fi-igUW6*8W!VL5FuTIjXvs~ZQ-QBs3 zH*0lE?YjNs%XZTQoHnK9hY)OG0#R}oGOG-7@@DtZ(y8 z>=i5ne)wwS1zNq>=X&@RG-Ut^?Y@;C?y>lL?Aei3zq~AGc=rqMY*Kp6%4-;s%ih)Q z=xsq7tV@$h*QygMI`dLiZ#Z1LQs|%TiFXj%mFR(wSOJvgG*FdW--f?^@qeN4XPdrj zZP8(*_qh|e6%GFSPl41Yb+xGyOF%L6$cgVU`%W$zubMdE!1#EkD2H;xlkK^k$LG#= zUGg5E$wwaV?+t;sf2q21iccrJv@;>`z!7m)|M+(@&+DIgH}1#7{L)6fUxpGL;P)GY87j2s^&dS%podQ{*U%eL23*fMs$ zTU@Iy#($CO#f?cbvgy%}pU*W1tT5!jsn~m+`OfQ@JcSAOmWya_aY|IK0YPq+k#)}* z8X{6P#hTQJXZ5X_HRtD4dKuRiHb$fs78j;PT))(ER#&<-GH<0-Xlhk;a$wrB;-{iB zcsZ)BLv%7egPvhxzpC)U&%F3YUV)k)lxF4V-0LmomTUAVc8KMBnAOA|b_U_rD6QO@ zAic({QQj(la}M*F1~;BN1x%D`dlY|?Akxt4r>AFquTb(fgbOacSo9y-rjDVr}Ub#es8nc`~>hgY5vAkw_|5Y z<9`~O&a{>u*f(HM7r)m0;B$G*H`n@GjTaZV&F_D4iJ z7WZ>XQ93FJ=}F(nY`e(HNjK@U>XJ*dM&PZ%u%vUZVmax|boq?6Tg7tHhl;uvQqyQ8 zCf(5i&)-FRHX*TSef|!uu7nkno)R!`UDZS}Y2Ryh^yt{rV}bQWJ3UdG4mePwb4f2{ zPL}#l7o}XO$10xt{#CK(MEHuYUgD3L2TO#ao^mZZb$r1tbn57eHkyi1CMA?c9yiS@d1*$Oq3lekSt>}+Qxh(;HDDA@UHdwH0OW*JAyaQp|6hNI4 z0mJ(0LsOOFJpV-h7eAx2muCivflUME0iVY17zE`I923AfWd6jb_k_zZ1+24Nyk+M|Pc-pm8OK%)S5dLOo#}CCeb`BOoh!i;` zl0BZal$TdRT1Byh6va_u=fZ{FnO@JxJJYL~Ua$5L?uZ)_SHv|O;4g5816L&e0Eio$ zI8ohO>)45<0D>Lu^w;(Hs=BMD09+5gM1a|EjNb$YSPHD*78Zif1c!Jx_(5zSP7mB4skd5TyUH3;TORXZ0nlf1zd0a zD0mScgbRX~uoeykFXO%N6Tw%o6@DXlh4DO}ReaaJD|iiC(MN*Uu@rqJcmwZ5-wM8p zx1*o%0)+c87-5PU1&)!!vg`&@+~jo^2|E0b8TT;chtAnGey4fWyq@wq^OpNiIPpA% zw^97hyq)u`c-QB6ghOUAC|Tdgu3)Q@-znoQmW{Y$`W)5q0}o8q{l z{*(@LQ>uoSLYGCFZ_#Mn9~MonGp9Wm*N4-Qj%hNP#AaMuw@D3$eR&s;IFFhIj{K2f z^dXCtKU~TitA+)yyPR?2pDv&A2v7Ko-7}VLVJW@i1%ll;Ns{it(UZfj3$e{1N;RC* z{tbdlyq@{Oy0RHxw)4q7##5Gb&PiM`t-tPyn_;etam#Bd#-^q^b-Vah(k<1AHg*sXi#{91o!j^BB>(o9m-VYg05XPILUJN&$%-*an6dpkR? zHROLn(&KznnH%$avHlAsJmB(YT!AB*3xtRMM4IJ|x9IT{aC5_*)k&@QHo`HhLE~91 zC#Srvi>G9ExZS{~T=|KhJi|XaSdUVk2Chst*Yu#uwvYJhr-wzVt434rxYoMVl_hJ~ zf{WXjft{#YQ>u6#Xd0Mtm65Xazuxn_GkuTYLQ~Vlww`q~z24F@pSktf_;Hr_3;zRo zlmGw#c-n1MRdgK361~@1!D?5M9cE^5;xLorIJV;?w!=J{?OnArJF^;)vz@jgC4KYqZ!a2f_6F^D=m__!7UhR{HW2nk{gV+7x06k}-O2pokY z@hGmtF*q8>;yC<>f8%j{gfH870Pkeje_8aL)9+?1Pfb8f*cxfQqOHr$rmaeMB-9k~;C z=5+4D8QhgKxf^G3Hs^46&gCB5lY4O<=W_w~=04n)`*D9Bzyo;@59T2}l!x(fI_#s% z3I(gIv7eFy9HhrOeFkiBh#@1!OgPLDjF7d6p!XHJeJ4tc%Hx$c@j_NDLj>@ z@pPWSGkF%z<~cl<=ka`Azzca1FXkn@l$Y^xUcoDQ6|d$syq4GTdfvbrc@uBuExeVt z@pj(9J9!uH<~_WZ_wjx{zz6vdALb)`l#lUoKEWsX6rbiZe3sAgc`oD&e338lWxm2! z`5Is68+?;*@$JHlBn(QGAofHQ$*GasT@zv5@hg2^q_mkn}Soq_rkhT7JJkXc94NF6bh+=8dEjXI=Y2s?4b1mrF3RO*Nn&^THx*LT7O$Igb zG|^QS3`(F$Lz5v*LQQnX3b7`MCc~PHXfmovQ8QZW*Frtxq)7)Bm(W!;buxYmA zxJj&~9>fr<&B zWs!p_%FJJ8{&J$f%=x#ASof^xr->DV3?Rq=f{9fGSrtKk>mVJuVv=Db8AdWOi6kG{ zOuahe{vg!NEH`uZHbILe+v{S=N%mLP=Z-i1k@nYHV zET$ZmrcIq=Mr0aNUNo!8z zN|_!?kJD&`!DtpH{i^h3tW)atlX{=J=(47>?^1WZRc((FRqK=16Hx4LHu{BqBm7G1 zP(?kJDo(9tledz3b4(?UYNscvCMBbUt(N!ng^oKY;+CzPBryq}ouB|H)ZtKM>yFsIw?${lQnvAlL zICLta?u3KpeukB*P(x$~yH}}oH4=$u^$vA?950^MKHajJmd&>GHD=_1~aLiNns{MnKYD2?T%$FO;}d5Y{0TX%RFK*_R%h7;lor_kp_V7-US3|{9!kU`5%Dw zwfEFE*1Y>BH#eVKN#wvq4qQwG7k>cnkhW)~XuPIUlEX@JSjj}J-vQP6;OS(BpGS%;CUHNW}J{qB9gci(&WoZq<@1keb>aUQnV_@q&2nwwFWhY+}G9QW?QLk(er zi$)s24GrP`*lQjc8M%e%lNo8xL`-%;MkeBOr%lN~(#*V~8AzR3kd=pV_8FP^NVnS~ zx+BY8lyAp$&15sPSw9zp?gkqebTin{`8*39&vw7m(FI&=|0Sx5xY|C~G;!GAY-(=m-@iAGgoH;?9 z#R9&<_8h@c9LAAc#Km07xy;}a&gUd9n~GZ;ggdyy(VWKVEMhS}<7}4T zbLKFYZ*mIfu#~BMi({F^OipGxU*`LaV>}0Q2!}F(iA-WLQ;@@Te243~fg4fG&3u=e zcz|z<({Qc1w^lm9 zV=)dBu?SnRRs3(q4(vpQbg&D%QH?#)!U>$jDV&xj>ZFPbdXv7`^mx~LWR*VXWU)@K z@{n73I$h1nc$Spw^esQ*T&=bC54+rxd)PQJ^RSPF{)>~P{msb+8MnHnT6X11mKyIUGv2Y>c*hFk8dfz#spkJHkI%xOgZpRQi$b4rH%fCb zXze%u3x~eqFh(4vEBZYldz;1HF~uyLRTRkU&%>^2s#o4ce5l;ZiekfFiD7S{VQ-0H zZ>eE#nPIQYuvczQFW1be#!>rJ-CL&{o5maC7q!FivoJ}c)DC9lf3H5}7XId3UutUX(w6E6Z>Y~?m? z=ML`F{!+;*?&5ClV>J))Fpp}tIl|+t;R&A9zH^GTJj?Su$2!(?FZc6|P7;5e86G$> zP%hd20pI+mYd)K2-d2rxnac2SRzxUc{{;U!@+klSc-qxmd2C$88UH>fBix(*A3;{lf*-ufO@;ylef|UdOv8%%|CR&CL7eo9~)$<}EQ1MQJ@< zMl~%v+ji5;TfctiZPY+hai1)U)N}tifBPG^-$oI2CV48=NQs#>(VE*^{z=RqOZhrl zLM!NUKA$h)6fNODBd2i2bTxI-G&)AD^h?@9$7w$&$lxUH;SJPG8|iT?O;1=I^dyc? zSp)R6wVR%?+UQy2=Wy>B?MKZ+sCkGo)m0j^j$Jo!23+M^0EdZbVMfE5K$yZ?(4aHftYmN4^|+ z2kO6wdUzM(UHl62tH`e*zk&QF@=4S`g|^?*N|&dewv8bOZZNjs0WjcM5Mh zgf|@$il`@h@uX8f>BN&x(9xzyyQWAQ6ltd;R4>8Upr%)Pwv4@{`CrJxeuLd{ez=%U#<(rkiLtcr$C|tqyC@+Gq8G9tN;8T!>g%Ii^r1XSG{%tQISY zl1XX>1~IG8>Iav_!FvYiTHOS>u?m83PTr~SiF^&YrA%NofZh!H>ZwvOIgd%nn7*o7 zg2a%*0ON1tWXd}g7=lF}cL=@k_b#R}Gu(UXj!`XK6_xZ`3_so)^8tAhw+c8jeAP_p zTh7HVW|#M#RUFT(ej6kYT$Z-)A@?ZmQ@DU{ljuz!rF4}hY67qJYwCL=l9jVQt4nJ2 zp_a;-3gI~fT6N>t3tZB^5p?MT-V=URrQBpVJnX9xai2|60`7yJ6sew!t9CAMHCQ2> zG8iv2_zrtS!4U&iuRYS%L5yF@t<(w*ad@NGs|zSNd=rlK1n}&|xL*jI+Mq>~?no=G z39i$eV1gSn!=HfLG(dmi{fhfwYi!MwL_2wrpty&71(SjHd-0o7M`*~LkHaFkuQ(th zda2i=4SHfqskl!=nEIZsuW36@t|_hOL4|^?sX^7W()CK8YrbmMw95LlXB;K^g?mlW z5)P-ta2^+VYnFS8!pTbMD72+OFatm4ZN09q^A3GP8)O6ev*6baK0V;kGgndmRM_=v zyV;|)`;hx=(4(!@1#TP&JSph%g8})D1?f;RdsJ|=H{?1hoCyCIK1UR}O&|)rUIS0b zl(BB6J&>s=APGK6tD_$0wET9!pCPM#_&3Tz41a?2t=6gv@MmE}?_(o0q7kHvXCnhz z-Kd@?qPP>3w58PqWfVPo#QtT#4-s%f78L8U4nThzn(`^otVj6O@HkNOcE3@k_6QlRNZ&JoRLZ6FNnitEZ zXH`->#Nua*pBCdj;<_imyYWfEGbOy(CjOq`>iM3rvq>8FjONKiK*kcI)p9LDGwrpyAc;L{URqH+)1lE_Whdi;XFNW2Jn% zYFH;pF2jYtL<#ujr|qEe5uOLHZ*_6eEeBZ5r#46L4`@tONPkMkd|$= zXFy^euDmym*+Rmj=SV-Q@==5!e`0pot38U$S;6DQF;~N0YZX62@#p?g=+mnGk&*hd z@-%HK@+eIo{Y=5Lw5H!%jOQpZfC=-b&jYh%C?V@Gc7)yp&CJo`V}7ivXpbU+{XovH zp?+7p$H(LuV|35H;`V6V(P=$Hu7+=vfj*2vi$|^Y;g4(&!i%p!f)ct^_wYxunqVfe=roxdv#hCc$lUhTNm=Oazh`ohHV>^)oQR~}|czK5T)`XDPw zhxa_$bau%qIkb6P-$`hXG@z**zqA}Z2wgoczLZ_GUhV5W9uWz(cMqh?_T)^_7V!{% zGt0#~T(h{leHBLW;cq%LmUx1*TPZy*k8^(Ds;ex06vVScR7H&?^kh!$jS26$>^&{V zs-3BqS(e{o)xeUgT^-SpzPfly-KEDP#2%eN94;6qIAfViS6k{`37*jI_L1BvE7~fq zn3ElX71w!V&1g&eO2yg?*yU`WfV{YPAeLRcid7Cj6ltq7umRL^bCmbAvx7 z5u2nPV-w|sCfV<4ob|+QhRtgt`W#^D#8t}1)H*mRXa&}ut$k`wq}D5ivx<7z&yBq2 z#~VTU>?OXKy7Ki#Le>ZEogVi3iT@i%L)|OtU6b!CPeaE$4gIB0t848On(ty0mRhD- zeu>V-+2zPzKvv(sZlP^u)~=yinnF|Q9J!uG)AbreEk%**sGerfOqvBuXVV;-OWWx( zxAt0EM=Nn$MXPB8u2fnh_tleiv>yFzq$Hkgq)oILzn4gvD@tHJ(9?iAoY zMT3)SB|D(bXKI)uW3$!=tAP6|4HW2;1BARm!$zEMBzuKs3To7&XNn$|gkpRtU8vPNd9?|c!>!}Z0&F*nGa>*!1H)xS);=_{ln4Cm4LbO9|!IfEK#K41YY zL_IYlUrbAoO|)kBWE+lX+Mmj952H0si@=ElGrC-i5 zqOa_0m20#_P6Pi=$A}R|*O8e7IIm71D$?n|3_zXEGcmeKVplXI-hUs`xFMB^csB^)=+{W4g^)C&xG{o>U=4z@s&}F93 zV@@c}=K>TDU!{NTG*`IX?u`?l`eKQZUIdy(-76(ON(wK7ob438yBczL4RmY@(npZ6 zILg>N0qx^jePv&(ya+P00`hkeWY5$xy}$?C-4;9`sq4WC4W{!QNk!770wXo>HfXd< zpsP1SW4B4Rty(Z`g)ZA7qvG*Hqm2GSUynB6+&|hgU<)?N$kxj^tMZK~Lnv7n3WOT7 zd{6^fvNe01)K^?zgZpzJG0VW8(=pQPz$J~K>}<&6PSF1<;Iwv_!?j% z-3r)5cL6rjz4Sx$x(je6{g{4^dJofK)O(Dc!&qnNWx9o4rIWOe`T@7nY5IT;&>!fp zbSM2Ca4-FX@^p~?1-Orf=u`S0{f~y}`^-F@e!#VS9(C~rynqh#B3?>Q@^aot&+ulx zl=}DzzJgBj4&Fhh_*=Z6`uPsNm)_?4_&)kAAL2vwJMQ5g`jDUJ=jr$S8oxwc>gDZ>{Nyqc7{XW?fo|heP@?EWt zr8+C9Lyo8E>~VIYD*9{N{AlwI*=wGaudei$k#1QNeagxTU)J3rW@!2ixUCQB)$shd zJzir(|4V@Q)lya4c#yHd5&1?r10S^SmN0@ zUj{J5lW7oNQu&x`;HfqO8f1>u0DHU%m@4n1M*NWZ@~;I`#M_t(uVX7Hto)X9;HPXu z54Hnhu=6dj>Q@39VY#mYrn>+Ma968%*Vp2HO1N@2Ac7gw_3*uJ0Mx?ozY)E@39yj% z02a|#0V}B;un^wD&G06br?4E>{eIy8eL#cw2o3NN9>#AsJpw!r1I~fJ@EG3pI2{2# zN8vj}=olTxofiNRIsrc-0zcwa{Pxisc<-Blh4gDcBfN`~I6n<&ptk`LdI!MtE?@z@ z2RMh`2TX(S@d2><1N{-S{S#mX{TVQu{sLG*Ilyf3N|NwO{sGLDS2BbCP5%K+{tKw5 zPXIIErF;s{=zoCK@K9>WIrt{DEXE=X|A4bdF{0Le*%!g?iKgy5d&SU%p zMfgd6iW>O{AECv3l#kL9eujG~%Fpt%xPOd~p^Wmv8u&OLN1HG33#fa7PoSL_;g?1D zB%egxQ~VCbmuVh9$Uowr00X?2f5DI7osaWV{50Ni6m1_z3n#b_wN7zAzs0Bj59?*J g000000RR910M(=?2mk;80Lc0g{{R300N>me$I*1xTmS$7 literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-NormalItalic.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-NormalItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e36a8c737495070c9a241ff7173be4628b85fda2 GIT binary patch literal 25176 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 XT9DZzZ6>j@uP*g%d|O|x_?A}y;N!{_ literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..cf37107a8a0ed589c295831e501b883fe9bf5f67 GIT binary patch literal 33824 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%0DRV0>a(u(o-2mB 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 M@c;k-0N>me#wt|xApigX literal 0 HcmV?d00001 diff --git a/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff2 b/Resources/views/backend/_resources/assets/fonts/Fakt/Fakt-SemiBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f363f8dcd5db980ca543a2bf3c5d7f5b1865d460 GIT binary patch literal 25240 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