From 46fa42750fcce00793588d809b94088d42aef6c4 Mon Sep 17 00:00:00 2001 From: Bianca Widstam Date: Fri, 28 Nov 2025 14:27:25 +0000 Subject: [PATCH] Merged in feat/BOOK-529-update-GLA-design-mystay (pull request #3230) Feat/BOOK-529 update GLA design mystay * feat(BOOK-529): update gla design on my stay * feat(BOOK-529): open gla modal if error * feat(BOOK-529): add inline accordion to storybook * feat(529): move errormessage below message * feat(529): update infomodal * feat(BOOK-529): update infomodal * feat(BOOK-529): hide guarantee info for adding ancillaries if prepaid * feat(BOOK-529): update width on info dialog * feat(BOOK-529): fix alignment * feat(BOOK-529): check if member price * feat(BOOK-529): refactor msg * feat(BOOK-529): refactor terms and conditions to own component * feat(BOOK-529): clean up confirmation step Approved-by: Christel Westerberg --- .../confirmationStep.module.css | 24 +- .../Steps/ConfirmationStep/index.tsx | 251 +++++++++--------- .../HotelReservation/MyStay/Modal/index.tsx | 16 +- .../GuaranteePaymentFailed/index.tsx} | 50 ++-- .../GuaranteeLateArrival/Form/form.module.css | 13 +- .../GuaranteeLateArrival/Form/index.tsx | 110 ++++---- .../GuaranteeLateArrival/Form/schema.ts | 10 +- .../guaranteeDialog.module.css} | 1 + .../GuaranteeDialog/index.tsx | 48 ++++ .../Actions/GuaranteeLateArrival/index.tsx | 44 +-- .../guaranteeInfoModal.module.css | 34 +++ .../GuaranteeInfoModal/index.tsx | 75 ++++++ .../GuaranteeInfo/guaranteeInfo.module.css | 8 +- .../ReferenceCard/GuaranteeInfo/index.tsx | 39 +-- .../MyStay/ReferenceCard/index.tsx | 5 +- .../ReferenceCard/referenceCard.module.css | 3 +- .../BookingInformation/PriceDetails/index.tsx | 28 +- .../Rooms/SingleRoom/RoomDetailsSidePeek.tsx | 12 +- .../MyStay/Rooms/TotalPrice.tsx | 37 +-- .../MyStay/TermsAndConditions/index.tsx | 84 ++++++ .../termsAndConditions.module.css | 5 + .../MyStay/utils/mapRoomDetails.ts | 2 +- .../BookedRoomSidePeekContent/index.tsx | 34 ++- apps/scandic-web/stores/my-stay/helpers.ts | 16 +- apps/scandic-web/utils/getErrorMessage.ts | 6 +- .../guaranteeDetails.module.css | 22 -- .../Payment/GuaranteeDetails/index.tsx | 68 ----- .../Accordion/Accordion.stories.tsx | 21 +- .../AccordionItem/accordionItem.module.css | 13 + .../Accordion/AccordionItem/index.tsx | 4 + .../Accordion/AccordionItem/variants.ts | 1 + .../lib/components/Accordion/variants.ts | 1 + .../Form/PaymentOption/PaymentOption.tsx | 12 +- .../Form/SelectPaymentMethod/index.tsx | 54 ++-- packages/design-system/lib/fonts.css | 2 +- scripts/material-symbols-update.mts | 9 +- shared/fonts/material-symbols/.auto-generated | 4 +- .../material-symbols/rounded-1b8067b7.woff2 | Bin 35460 -> 0 bytes .../material-symbols/rounded-3e9207ba.woff2 | Bin 0 -> 35684 bytes 39 files changed, 681 insertions(+), 485 deletions(-) rename apps/scandic-web/{hooks/booking/useGuaranteePaymentFailedToast.ts => components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx} (58%) rename apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/{guarantee.module.css => GuaranteeDialog/guaranteeDialog.module.css} (65%) create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/guaranteeInfoModal.module.css create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/termsAndConditions.module.css delete mode 100644 packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css delete mode 100644 packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx delete mode 100644 shared/fonts/material-symbols/rounded-1b8067b7.woff2 create mode 100644 shared/fonts/material-symbols/rounded-3e9207ba.woff2 diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css index 53f4a83d5..8d66a8e9c 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css @@ -4,12 +4,6 @@ gap: var(--Space-x2); } -.termsAndConditions { - display: grid; - gap: var(--Space-x2); - color: var(--Text-Secondary); -} - .totalPointsContainer { display: flex; justify-content: space-between; @@ -17,9 +11,27 @@ padding: var(--Space-x1) var(--Space-x15); border-radius: var(--Corner-radius-md); } +.guarantee { + display: flex; + flex-direction: column; + gap: var(--Space-x2); + background-color: var(--Surface-Secondary-Default); + border-radius: var(--Corner-radius-lg); + padding: var(--Space-x2); +} + +.paymentInfo { + display: flex; + gap: var(--Space-x1); + align-items: flex-start; +} .totalPoints { display: flex; gap: var(--Space-x15); align-items: center; } + +.accordionItem { + border-radius: var(--Corner-radius-md); +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx index 6c6da2638..1c04bcc2d 100755 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx @@ -1,27 +1,23 @@ import { useWatch } from "react-hook-form" import { useIntl } from "react-intl" -import { AlertTypeEnum } from "@scandic-hotels/common/constants/alert" import { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod" -import { bookingTermsAndConditionsRoutes } from "@scandic-hotels/common/constants/routes/bookingTermsAndConditionsRoutes" -import { privacyPolicyRoutes } from "@scandic-hotels/common/constants/routes/privacyPolicyRoutes" import { dt } from "@scandic-hotels/common/dt" +import AccordionItem from "@scandic-hotels/design-system/Accordion/AccordionItem" import { Alert } from "@scandic-hotels/design-system/Alert" -import Checkbox from "@scandic-hotels/design-system/Form/Checkbox" +import { Divider } from "@scandic-hotels/design-system/Divider" import { PaymentOption } from "@scandic-hotels/design-system/Form/PaymentOption" import { PaymentOptionsGroup } from "@scandic-hotels/design-system/Form/PaymentOptionsGroup" import { SelectPaymentMethod } from "@scandic-hotels/design-system/Form/SelectPaymentMethod" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" -import { TextLink } from "@scandic-hotels/design-system/TextLink" import { Typography } from "@scandic-hotels/design-system/Typography" import { useAddAncillaryStore } from "@/stores/my-stay/add-ancillary-flow" +import TermsAndConditions from "@/components/HotelReservation/MyStay/TermsAndConditions" import useLang from "@/hooks/useLang" import { trackUpdatePaymentMethod } from "@/utils/tracking" -import { ancillaryError } from "../../../schema" - import styles from "./confirmationStep.module.css" import type { ConfirmationStepProps } from "@/types/components/myPages/myStay/ancillaries" @@ -33,17 +29,20 @@ export default function ConfirmationStep({ }: ConfirmationStepProps) { const intl = useIntl() const lang = useLang() - const { checkInDate, guaranteeInfo, selectedAncillary } = + + const { checkInDate, guaranteeInfo, selectedAncillary, booking } = useAddAncillaryStore((state) => ({ checkInDate: state.booking.checkInDate, guaranteeInfo: state.booking.guaranteeInfo, selectedAncillary: state.selectedAncillary, + booking: state.booking, })) const refundableDate = dt(checkInDate) .subtract(1, "day") .locale(lang) .format("23:59, dddd, D MMMM YYYY") + const mustBeGuaranteed = !guaranteeInfo && booking.isGuaranteeable const quantityWithCard = useWatch({ name: "quantityWithCard" }) const quantityWithPoints = useWatch({ name: "quantityWithPoints" }) const currentPoints = user?.membership?.currentPoints ?? 0 @@ -51,20 +50,22 @@ export default function ConfirmationStep({ quantityWithPoints && selectedAncillary?.points ? selectedAncillary.points * quantityWithPoints : null + + const accordionTitle = intl.formatMessage({ + id: "myStay.guarantee.guaranteeInformation", + defaultMessage: + "By adding your card, you also guarantee your room booking for late arrival ", + }) + + const accordionContent = intl.formatMessage({ + id: "myStay.guarantee.guaranteeInformation.content", + defaultMessage: + "The hotel will hold your booking, even if you arrive after 18:00. Your card will only be charged in the event of a no-show.", + }) + return (
- -

- {intl.formatMessage( - { - id: "addAncillary.confirmationStep.refundPolicy", - defaultMessage: - "All ancillaries are fully refundable until {date}. Time selection and special requests are also modifiable.", - }, - { date: refundableDate } - )} -

-
+ {error && } {!!quantityWithPoints && ( <> @@ -107,118 +108,118 @@ export default function ConfirmationStep({ )} {!!quantityWithCard && ( <> -
- -

- {intl.formatMessage({ - id: "addAncillary.confirmationStep.reserveWithCard", - defaultMessage: "Reserve with Card", - })} -

-
-
- -

+ +

{intl.formatMessage({ - id: "addAncillary.confirmationStep.paymentAtCheckInInfo", - defaultMessage: - "Payment will be made on check-in. The card will be only used to guarantee the ancillary in case of no-show.", + id: "addAncillary.confirmationStep.reserveWithCard", + defaultMessage: "Reserve with Card", })} +

+
+ +

+ {intl.formatMessage( + { + id: "addAncillary.confirmationStep.refundPolicy", + defaultMessage: + "All ancillaries are fully refundable until {date}. Time selection and special requests are also modifiable.", + }, + { date: refundableDate } + )}

- {guaranteeInfo ? ( - - - - ) : ( - <> - {error ? ( - - ) : ( - +
+ + + +

+ {intl.formatMessage({ + id: "myStay.ancillary.guarantee.headingText", + defaultMessage: "Payment will be made on check-in", + })} +

+
+ +

+ {intl.formatMessage({ + id: "myStay.ancillary.guarantee.infoText", + defaultMessage: + "The card is used to reserve your extras. You will be charged in case of no-show.", + })} +

+
+
+
+ {guaranteeInfo ? ( + <> + + +

+ {intl.formatMessage({ + id: "payment.savedCard", + defaultMessage: "Saved card", + })} +

+
+ + + + + ) : ( + <> +
+ + +

+ {intl.formatMessage({ + id: "myStay.ancillary.guarantee.confirmationText", + defaultMessage: + "Confirm and provide your payment card details in the next step", + })} +

+
+
+ {mustBeGuaranteed && ( + + +

{accordionContent}

+
+
+ )} + {savedCreditCards && } + ({ + ...card, + cardType: card.cardType as PaymentMethodEnum, + }))} + onChange={(method) => { + trackUpdatePaymentMethod({ method }) + }} + formName={"paymentMethod"} /> - )} - - ({ - ...card, - cardType: card.cardType as PaymentMethodEnum, - }))} - onChange={(method) => { - trackUpdatePaymentMethod({ method }) - }} - formName={"paymentMethod"} - /> - - )} + + )} +
)} - -
- -

- {intl.formatMessage( - { - id: "addAncillary.confirmationStep.termsAndConditionsNotice", - defaultMessage: - "Yes, I accept the general Booking & Cancellation Terms, and understand that Scandic will process my personal data in accordance with Scandic's Privacy policy. There you can learn more about what data we process, your rights and where to turn if you have questions.", - }, - { - termsAndConditionsLink: (str) => ( - - {str} - - ), - privacyPolicyLink: (str) => ( - - {str} - - ), - } - )} -

-
- - - - {intl.formatMessage({ - id: "booking.acceptBookingTerms", - defaultMessage: "I accept the booking and cancellation terms", - })} - - - -
+ ) } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx index 82be1e27c..53584dc21 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx @@ -5,9 +5,21 @@ import ModalContent from "./ModalContent" import styles from "./modal.module.css" -export default function Modal({ children }: React.PropsWithChildren) { +export default function Modal({ + children, + isOpen, + onOpenChange, +}: React.PropsWithChildren<{ + isOpen?: boolean + onOpenChange?: (value: boolean) => void +}>) { return ( - + {children} ) diff --git a/apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx similarity index 58% rename from apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts rename to apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx index 45e4c3978..2f5fe3f63 100644 --- a/apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx @@ -1,21 +1,26 @@ -"use client" - import { usePathname, useRouter, useSearchParams } from "next/navigation" -import { useCallback, useEffect, useRef } from "react" +import { useCallback, useEffect, useState } from "react" import { useIntl } from "react-intl" -import { toast } from "@scandic-hotels/design-system/Toast" +import { AlertTypeEnum } from "@scandic-hotels/common/constants/alert" import { BookingErrorCodeEnum } from "@scandic-hotels/trpc/enums/bookingErrorCode" +import Modal from "@/components/HotelReservation/MyStay/Modal" import { isAncillaryError } from "@/components/HotelReservation/MyStay/utils" -export function useGuaranteePaymentFailedToast() { - const hasRunOnce = useRef(false) +import GuaranteeDialog from "../ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog" + +export default function GuaranteePaymentFailed() { const intl = useIntl() const searchParams = useSearchParams() const pathname = usePathname() const router = useRouter() + const [alert, setAlert] = useState<{ + type: AlertTypeEnum + message: string + } | null>(null) + const getErrorMessage = useCallback( (errorCode: string | null) => { switch (errorCode) { @@ -37,33 +42,36 @@ export function useGuaranteePaymentFailedToast() { ) useEffect(() => { - // To prevent multiple toasts in strict mode - if (hasRunOnce.current) { - return - } const errorCode = searchParams.get("errorCode") if (!errorCode) { return } - // Ancillary errors are handled in AddAncillaryFlowModal if (isAncillaryError(searchParams)) { - hasRunOnce.current = true return } - const errorMessage = getErrorMessage(errorCode) - const toastType = + const message = getErrorMessage(errorCode) + const type = errorCode === BookingErrorCodeEnum.TransactionCancelled - ? "warning" - : "error" + ? AlertTypeEnum.Warning + : AlertTypeEnum.Alarm - toast[toastType](errorMessage) + setAlert({ type, message }) - const queryParams = new URLSearchParams(searchParams.toString()) - queryParams.delete("errorCode") + const newParams = new URLSearchParams(searchParams.toString()) + newParams.delete("errorCode") - router.push(`${pathname}?${queryParams.toString()}`) - hasRunOnce.current = true + router.replace(`${pathname}?${newParams.toString()}`) }, [searchParams, pathname, router, getErrorMessage]) + + if (!alert) { + return null + } + + return ( + setAlert(null)}> + + + ) } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css index f1009d584..c07653c6b 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css @@ -13,13 +13,18 @@ gap: var(--Space-x3); } -.termsAndConditions { - color: var(--Text-Secondary); - display: grid; +.guarantee { + display: flex; + flex-direction: column; gap: var(--Space-x2); + background-color: var(--Surface-Secondary-Default); + border-radius: var(--Corner-radius-lg); + padding: var(--Space-x2); } -.termsAndConditions .checkbox span { +.paymentInfo { + display: flex; + gap: var(--Space-x1); align-items: flex-start; } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx index 4416362ba..634c20b48 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx @@ -6,15 +6,13 @@ import { useIntl } from "react-intl" import { writeGlaToSessionStorage } from "@scandic-hotels/booking-flow/components/EnterDetails/Payment/PaymentCallback/helpers" import { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod" -import { bookingTermsAndConditionsRoutes } from "@scandic-hotels/common/constants/routes/bookingTermsAndConditionsRoutes" import { guaranteeCallback } from "@scandic-hotels/common/constants/routes/hotelReservation" -import { privacyPolicyRoutes } from "@scandic-hotels/common/constants/routes/privacyPolicyRoutes" import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting" +import { Alert } from "@scandic-hotels/design-system/Alert" import { Divider } from "@scandic-hotels/design-system/Divider" -import Checkbox from "@scandic-hotels/design-system/Form/Checkbox" import { SelectPaymentMethod } from "@scandic-hotels/design-system/Form/SelectPaymentMethod" +import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { LoadingSpinner } from "@scandic-hotels/design-system/LoadingSpinner" -import Link from "@scandic-hotels/design-system/OldDSLink" import { toast } from "@scandic-hotels/design-system/Toast" import { Typography } from "@scandic-hotels/design-system/Typography" import { trackGlaSaveCardAttempt } from "@scandic-hotels/tracking/payment" @@ -23,6 +21,7 @@ import { isWebview } from "@/constants/routes/webviews" import { env } from "@/env/client" import { useMyStayStore } from "@/stores/my-stay" +import TermsAndConditions from "@/components/HotelReservation/MyStay/TermsAndConditions" import { useGuaranteeBooking } from "@/hooks/booking/useGuaranteeBooking" import useLang from "@/hooks/useLang" import { trackUpdatePaymentMethod } from "@/utils/tracking" @@ -31,7 +30,12 @@ import { type GuaranteeFormData, paymentSchema } from "./schema" import styles from "./form.module.css" -export default function Form() { +import type { AlertTypeEnum } from "@scandic-hotels/common/constants/alert" + +interface FormProps { + error?: { type: AlertTypeEnum; message: string } +} +export default function Form({ error }: FormProps) { const intl = useIntl() const lang = useLang() const pathname = usePathname() @@ -114,38 +118,6 @@ export default function Form() { } } - const guaranteeMsg = intl.formatMessage( - { - id: "myStay.gla.termsAndConditionsMessage", - defaultMessage: - "I accept the terms for this stay and the general Booking & Cancellation Terms, and understand Scandic will process my personal data for this stay in accordance with Scandic's Privacy Policy.", - }, - { - termsAndConditionsLink: (str) => ( - e.stopPropagation()} - > - {str} - - ), - privacyPolicyLink: (str) => ( - e.stopPropagation()} - > - {str} - - ), - } - ) - return (
- ({ - ...card, - cardType: card.cardType as PaymentMethodEnum, - }))} - onChange={(method) => { - trackUpdatePaymentMethod({ method }) - }} - formName="paymentMethod" - /> - -
- - -

{guaranteeMsg}

+ {error && } +
+
+ + + +

+ {intl.formatMessage({ + id: "myStay.guarantee.headingText", + defaultMessage: "Planning to arrive after 18.00?", + })} +

+
+ +

+ {intl.formatMessage({ + id: "myStay.guarantee.infoText", + defaultMessage: + "Guarantee with a credit card is required to secure your booking. Without this guarantee, your room may be released after 18:00 in case of no-show.", + })} +

+
+
+
+
+ + +

+ {intl.formatMessage({ + id: "myStay.guarantee.headingText", + defaultMessage: + "Confirm and provide your payment card details in the next step", + })} +

- +
+ {savedCreditCards && } + ({ + ...card, + cardType: card.cardType as PaymentMethodEnum, + }))} + onChange={(method) => { + trackUpdatePaymentMethod({ method }) + }} + formName="paymentMethod" + />
+ +
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema.ts b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema.ts index c66223238..abcf44d0c 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema.ts +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema.ts @@ -1,10 +1,14 @@ import { z } from "zod" +export const paymentError = { + TERMS_REQUIRED: "TERMS_REQUIRED", +} as const + export const paymentSchema = z.object({ paymentMethod: z.string().nullable(), - termsAndConditions: z.boolean().refine((value) => value === true, { - message: "You must accept the terms and conditions", - }), + termsAndConditions: z + .boolean() + .refine((value) => value === true, paymentError.TERMS_REQUIRED), }) export type GuaranteeFormData = z.output diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/guarantee.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/guaranteeDialog.module.css similarity index 65% rename from apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/guarantee.module.css rename to apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/guaranteeDialog.module.css index 4b01c9a1e..2e13cea40 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/guarantee.module.css +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/guaranteeDialog.module.css @@ -1,3 +1,4 @@ .dialog { max-width: 690px; + outline: none; } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/index.tsx new file mode 100644 index 000000000..93f189fec --- /dev/null +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/index.tsx @@ -0,0 +1,48 @@ +import { Dialog } from "react-aria-components" +import { useIntl } from "react-intl" + +import Modal from "@/components/HotelReservation/MyStay/Modal" + +import Form from "../Form" + +import styles from "./guaranteeDialog.module.css" + +import type { AlertTypeEnum } from "@scandic-hotels/common/constants/alert" + +interface GuaranteeDialogProps { + error?: { type: AlertTypeEnum; message: string } +} + +export default function GuaranteeDialog({ error }: GuaranteeDialogProps) { + const intl = useIntl() + const text = intl.formatMessage({ + id: "myStay.gla.heading", + defaultMessage: "Add late arrival guarantee", + }) + return ( + + {({ close }) => ( + + + + + + + + {intl.formatMessage({ + id: "common.back", + defaultMessage: "Back", + })} + + + {intl.formatMessage({ + id: "common.confirm", + defaultMessage: "Confirm", + })} + + + + )} + + ) +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/index.tsx index 0bde2f589..5b0f4b930 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/index.tsx @@ -1,18 +1,14 @@ "use client" -import { Dialog, DialogTrigger } from "react-aria-components" +import { DialogTrigger } from "react-aria-components" import { useIntl } from "react-intl" -import { Typography } from "@scandic-hotels/design-system/Typography" - import { useMyStayStore } from "@/stores/my-stay" import Modal from "@/components/HotelReservation/MyStay/Modal" import { trackMyStayPageLink } from "@/utils/tracking" import ActionsButton from "../ActionsButton" -import Form from "./Form" - -import styles from "./guarantee.module.css" +import GuaranteeDialog from "./GuaranteeDialog" export default function GuaranteeLateArrival() { const intl = useIntl() @@ -29,14 +25,9 @@ export default function GuaranteeLateArrival() { trackMyStayPageLink("guarantee late arrival") } - const arriveLateMsg = intl.formatMessage({ - id: "myStay.gla.arriveLateMessage", - defaultMessage: - "Planning to arrive after 18.00? Secure your room by guaranteeing it with a credit card. Without the guarantee and in case of no-show, the room might be reallocated after 18:00.", - }) const text = intl.formatMessage({ id: "myStay.gla.heading", - defaultMessage: "Guarantee late arrival", + defaultMessage: "Add late arrival guarantee", }) return ( @@ -47,34 +38,7 @@ export default function GuaranteeLateArrival() { icon="check" /> - - {({ close }) => ( - - - -

{arriveLateMsg}

-
-
- - - - - - {intl.formatMessage({ - id: "common.back", - defaultMessage: "Back", - })} - - - {intl.formatMessage({ - id: "myStay.gla.guarantee", - defaultMessage: "Guarantee", - })} - - -
- )} -
+
) diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/guaranteeInfoModal.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/guaranteeInfoModal.module.css new file mode 100644 index 000000000..046219bd3 --- /dev/null +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/guaranteeInfoModal.module.css @@ -0,0 +1,34 @@ +.content { + display: grid; + gap: var(--Space-x3); + align-content: start; + margin-top: var(--Space-x2); +} + +.infoButton { + background-color: transparent; + border-width: 0; + padding: var(--Space-x025); + color: var(--Icon-Interactive-Default); + cursor: pointer; + flex-shrink: 0; +} + +.closeButton { + justify-self: stretch; +} + +@media screen and (min-width: 768px) { + .content { + max-width: 512px; + } + + .closeButton { + justify-self: end; + min-width: 150px; + } +} + +.textSecondary { + color: var(--Text-Secondary); +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/index.tsx new file mode 100644 index 000000000..f39bd49e3 --- /dev/null +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/index.tsx @@ -0,0 +1,75 @@ +"use client" + +import { useState } from "react" +import { Button as ButtonRAC } from "react-aria-components" +import { useIntl } from "react-intl" + +import { Button } from "@scandic-hotels/design-system/Button" +import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" +import Modal from "@scandic-hotels/design-system/Modal" +import { Typography } from "@scandic-hotels/design-system/Typography" + +import styles from "./guaranteeInfoModal.module.css" + +export function GuaranteeInfoModal() { + const [isOpen, setIsOpen] = useState(false) + const intl = useIntl() + + return ( + <> + setIsOpen(true)} + > + + + +
+ +

+ {intl.formatMessage({ + id: "myStay.guaranteeInfo.description", + defaultMessage: + "The hotel will hold your booking, even if you arrive after 18:00. In case of a no-show, you will be charged for the first night.", + })} +

+
+ +

+ {intl.formatMessage({ + id: "myStay.guaranteeInfoModal.ancillariesInfo", + defaultMessage: + "If you added extras, they'll be charged in case of a no-show, unless cancelled by 23:59 the night before.", + })} +

+
+ + +
+
+ + ) +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/guaranteeInfo.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/guaranteeInfo.module.css index fe9adce2d..b8508ea70 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/guaranteeInfo.module.css +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/guaranteeInfo.module.css @@ -5,7 +5,7 @@ } .label { - align-items: center; + align-items: flex-start; display: flex; gap: var(--Space-x1); } @@ -13,3 +13,9 @@ .textDefault { color: var(--Text-Default); } + +.guaranteeInfo { + display: flex; + align-items: flex-start; + gap: var(--Space-x05); +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/index.tsx index 3cbfb17f4..9b3fe8466 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/index.tsx @@ -6,20 +6,20 @@ import { Typography } from "@scandic-hotels/design-system/Typography" import { useMyStayStore } from "@/stores/my-stay" +import { GuaranteeInfoModal } from "./GuaranteeInfoModal" + import styles from "./guaranteeInfo.module.css" export default function GuaranteeInfo() { const intl = useIntl() - const { allRoomsAreCancelled, guaranteeInfo, priceType } = useMyStayStore( - (state) => ({ - allRoomsAreCancelled: state.allRoomsAreCancelled, + const { isGuaranteeable, guaranteeInfo, allRoomsAreCancelled } = + useMyStayStore((state) => ({ + isGuaranteeable: state.bookedRoom.isGuaranteeable, guaranteeInfo: state.bookedRoom.guaranteeInfo, - priceType: state.bookedRoom.priceType, - }) - ) + allRoomsAreCancelled: state.allRoomsAreCancelled, + })) - const isRewardNight = priceType === "points" - if (allRoomsAreCancelled || (!guaranteeInfo && !isRewardNight)) { + if ((isGuaranteeable && !guaranteeInfo) || allRoomsAreCancelled) { return null } @@ -30,20 +30,23 @@ export default function GuaranteeInfo() {

{intl.formatMessage({ - id: "myStay.lateArrival", - defaultMessage: "Late arrival", + id: "myStay.bookingGuaranteed", + defaultMessage: "Booking guaranteed", + })} +

+
+
+
+ + +

+ {intl.formatMessage({ + id: "myStay.roomHeldAfter18", + defaultMessage: "Room held after 18:00", })}

- -

- {intl.formatMessage({ - id: "myStay.checkInAfter18", - defaultMessage: "Check-in after 18:00", - })} -

-
) } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/index.tsx index 6565e9a99..f7629eba3 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/index.tsx @@ -4,9 +4,8 @@ import { useIntl } from "react-intl" import { Divider } from "@scandic-hotels/design-system/Divider" import { Typography } from "@scandic-hotels/design-system/Typography" -import { useGuaranteePaymentFailedToast } from "@/hooks/booking/useGuaranteePaymentFailedToast" - import TotalPrice from "../Rooms/TotalPrice" +import GuaranteePaymentFailed from "./Actions/Upcoming/GuaranteePaymentFailed" import Actions from "./Actions" import BookingCode from "./BookingCode" import Cancellations from "./Cancellations" @@ -20,7 +19,6 @@ import styles from "./referenceCard.module.css" export function ReferenceCard() { const intl = useIntl() - useGuaranteePaymentFailedToast() return (
@@ -44,6 +42,7 @@ export function ReferenceCard() {
+
) } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/referenceCard.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/referenceCard.module.css index d2e7fe997..c8f5d69d5 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/referenceCard.module.css +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/referenceCard.module.css @@ -12,8 +12,9 @@ } .row { - align-items: center; display: flex; justify-content: space-between; padding-top: var(--Space-x1); + gap: var(--Space-x2); + text-align: end; } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/BookingInformation/PriceDetails/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/BookingInformation/PriceDetails/index.tsx index 5364689a9..69fcf2e8f 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/BookingInformation/PriceDetails/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/BookingInformation/PriceDetails/index.tsx @@ -1,39 +1,15 @@ "use client" import { useIntl } from "react-intl" -import { sumPackages } from "@scandic-hotels/booking-flow/utils/SelectRate" import { Typography } from "@scandic-hotels/design-system/Typography" -import { useMyStayStore } from "@/stores/my-stay" - -import PriceType from "@/components/HotelReservation/MyStay/PriceType" +import TotalPrice from "../../../TotalPrice" import styles from "./details.module.css" export default function PriceDetails() { const intl = useIntl() - const pricing = useMyStayStore((state) => ({ - cheques: state.bookedRoom.cheques, - formattedTotalPrice: state.totalPrice, - isCancelled: state.bookedRoom.isCancelled, - currencyCode: state.bookedRoom.currencyCode, - packages: state.bookedRoom.packages, - priceType: state.bookedRoom.priceType, - rateDefinition: state.bookedRoom.rateDefinition, - totalPoints: state.bookedRoom.totalPoints, - totalPrice: state.bookedRoom.totalPrice, - vouchers: state.bookedRoom.vouchers, - })) - - let totalPrice = pricing.totalPrice - // API returns negative values for totalPrice - // on voucher bookings (╯°□°)╯︵ ┻━┻ - if (pricing.vouchers && totalPrice < 0) { - const pkgsSum = sumPackages(pricing.packages) - totalPrice = pkgsSum.price - } - return (
@@ -45,7 +21,7 @@ export default function PriceDetails() { })}

- +
) diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/RoomDetailsSidePeek.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/RoomDetailsSidePeek.tsx index 8a63efa9d..9dd3c364f 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/RoomDetailsSidePeek.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/SingleRoom/RoomDetailsSidePeek.tsx @@ -23,7 +23,11 @@ export default function RoomDetailsSidePeek({ user, }: RoomDetailsSidePeekProps) { const intl = useIntl() - const bookedRoom = useMyStayStore((state) => state.bookedRoom) + const { bookedRoom, totalPrice } = useMyStayStore((state) => ({ + bookedRoom: state.bookedRoom, + totalPrice: state.totalPrice, + })) + const [isOpen, setIsOpen] = useState(false) return ( @@ -53,7 +57,11 @@ export default function RoomDetailsSidePeek({ isOpen={isOpen} onClose={() => setIsOpen(false)} > - + ) diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/TotalPrice.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/TotalPrice.tsx index 111801834..07c6e7a39 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Rooms/TotalPrice.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Rooms/TotalPrice.tsx @@ -1,41 +1,22 @@ "use client" -import { sumPackages } from "@scandic-hotels/booking-flow/utils/SelectRate" import { useMyStayStore } from "@/stores/my-stay" -import PriceType from "../PriceType" +import Price from "../PriceType/Price" import type { PriceType as _PriceType } from "@/types/components/hotelReservation/myStay/myStay" export default function TotalPrice() { - const { bookedRoom, formattedTotalPrice, rooms } = useMyStayStore( - (state) => ({ - bookedRoom: state.bookedRoom, - formattedTotalPrice: state.totalPrice, - rooms: state.rooms, - }) - ) - - const totalCheques = rooms.reduce((total, room) => total + room.cheques, 0) - const totalPoints = rooms.reduce((total, room) => total + room.totalPoints, 0) - - let totalPrice = rooms.reduce((total, room) => total + room.totalPrice, 0) - if (rooms.some((room) => room.vouchers)) { - const pkgsSum = sumPackages(rooms.flatMap((r) => r.packages || [])) - totalPrice = pkgsSum.price - } - + const { bookedRoom, totalPrice } = useMyStayStore((state) => ({ + bookedRoom: state.bookedRoom, + totalPrice: state.totalPrice, + rooms: state.rooms, + })) return ( - ) } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/index.tsx new file mode 100644 index 000000000..863efe95b --- /dev/null +++ b/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/index.tsx @@ -0,0 +1,84 @@ +import { useFormContext } from "react-hook-form" +import { useIntl } from "react-intl" + +import { bookingTermsAndConditionsRoutes } from "@scandic-hotels/common/constants/routes/bookingTermsAndConditionsRoutes" +import { privacyPolicyRoutes } from "@scandic-hotels/common/constants/routes/privacyPolicyRoutes" +import Checkbox from "@scandic-hotels/design-system/Form/Checkbox" +import { ErrorMessage } from "@scandic-hotels/design-system/Form/ErrorMessage" +import { TextLink } from "@scandic-hotels/design-system/TextLink" +import { Typography } from "@scandic-hotels/design-system/Typography" + +import useLang from "@/hooks/useLang" +import { getErrorMessage } from "@/utils/getErrorMessage" + +import styles from "./termsAndConditions.module.css" + +export default function TermsAndConditions() { + const intl = useIntl() + const lang = useLang() + const { + formState: { errors }, + } = useFormContext() + const termsAndConditionsMsg = intl.formatMessage( + { + id: "myStay.guarantee.termsAndConditions", + defaultMessage: + "Please accept the general Booking & Cancellation Terms and acknowledge that your data will be processed in accordance with Scandic's Privacy policy .", + }, + { + termsAndConditionsLink: (str) => ( + + {str} + + ), + privacyPolicyLink: (str) => ( + + {str} + + ), + } + ) + return ( +
+ + + + {intl.formatMessage({ + id: "booking.acceptBookingTerms", + defaultMessage: "I accept the booking and cancellation terms", + })} + + + + + +

{termsAndConditionsMsg}

+
+ +
+
+ ) +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/termsAndConditions.module.css b/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/termsAndConditions.module.css new file mode 100644 index 000000000..d0ad98cfc --- /dev/null +++ b/apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/termsAndConditions.module.css @@ -0,0 +1,5 @@ +.termsAndConditions { + display: grid; + gap: var(--Space-x1); + color: var(--Text-Secondary); +} diff --git a/apps/scandic-web/components/HotelReservation/MyStay/utils/mapRoomDetails.ts b/apps/scandic-web/components/HotelReservation/MyStay/utils/mapRoomDetails.ts index 5b432dab1..09bf49a5a 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/utils/mapRoomDetails.ts +++ b/apps/scandic-web/components/HotelReservation/MyStay/utils/mapRoomDetails.ts @@ -93,7 +93,7 @@ export function mapRoomDetails({ const priceType = getPriceType( booking.cheques, - booking.totalPoints, + booking.roomPoints, booking.vouchers ) diff --git a/apps/scandic-web/components/SidePeeks/BookedRoomSidePeekContent/index.tsx b/apps/scandic-web/components/SidePeeks/BookedRoomSidePeekContent/index.tsx index 879bbcab8..96a89d674 100644 --- a/apps/scandic-web/components/SidePeeks/BookedRoomSidePeekContent/index.tsx +++ b/apps/scandic-web/components/SidePeeks/BookedRoomSidePeekContent/index.tsx @@ -16,6 +16,7 @@ import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import GuestDetails from "@/components/HotelReservation/MyStay/GuestDetails" import PriceType from "@/components/HotelReservation/MyStay/PriceType" +import Price from "@/components/HotelReservation/MyStay/PriceType/Price" import { hasModifiableRate } from "@/components/HotelReservation/MyStay/utils" import useLang from "@/hooks/useLang" import { mapApiImagesToGalleryImages } from "@/utils/imageGallery" @@ -70,11 +71,13 @@ type Room = Pick< interface BookedRoomSidepeekContentProps { room: Room user: SafeUser + totalPriceBooking?: string } export default function BookedRoomSidePeekContent({ room, user, + totalPriceBooking, }: BookedRoomSidepeekContentProps) { const intl = useIntl() const lang = useLang() @@ -407,18 +410,25 @@ export default function BookedRoomSidePeekContent({ })}

- - + {totalPriceBooking ? ( + + ) : ( + + )} diff --git a/apps/scandic-web/stores/my-stay/helpers.ts b/apps/scandic-web/stores/my-stay/helpers.ts index d8188c0e3..e306b33a3 100644 --- a/apps/scandic-web/stores/my-stay/helpers.ts +++ b/apps/scandic-web/stores/my-stay/helpers.ts @@ -28,7 +28,7 @@ export function calculateTotalPrice( } // room.totalPrice is a negative value when // its a vouchers booking (╯°□°)╯︵ ┻━┻ - if (room.totalPrice && !room.vouchers) { + if (room.totalPrice > 0) { total.cash = total.cash + room.totalPrice } return total @@ -42,13 +42,6 @@ export function calculateTotalPrice( ) let totalPrice = "" - if (totals.cheques) { - totalPrice = `${totals.cheques} ${CurrencyEnum.CC}` - } - if (totals.points) { - const appendTotalPrice = totalPrice ? `${totalPrice} + ` : "" - totalPrice = `${appendTotalPrice}${totals.points} ${CurrencyEnum.POINTS}` - } if (totals.vouchers) { const appendTotalPrice = totalPrice ? `${totalPrice} + ` : "" totalPrice = `${appendTotalPrice}${totals.vouchers} ${intl.formatMessage( @@ -62,6 +55,13 @@ export function calculateTotalPrice( } )}` } + if (totals.cheques) { + totalPrice = `${totals.cheques} ${CurrencyEnum.CC}` + } + if (totals.points) { + const appendTotalPrice = totalPrice ? `${totalPrice} + ` : "" + totalPrice = `${appendTotalPrice}${totals.points} ${CurrencyEnum.POINTS}` + } if (totals.cash) { const appendTotalPrice = totalPrice ? `${totalPrice} + ` : "" const cashPrice = formatPrice(intl, totals.cash, currency) diff --git a/apps/scandic-web/utils/getErrorMessage.ts b/apps/scandic-web/utils/getErrorMessage.ts index 010de0b38..f2aab01ff 100644 --- a/apps/scandic-web/utils/getErrorMessage.ts +++ b/apps/scandic-web/utils/getErrorMessage.ts @@ -9,6 +9,7 @@ import { signupErrors } from "@scandic-hotels/trpc/routers/user/schemas" import { editProfileErrors } from "@/components/Forms/Edit/Profile/schema" import { findMyBookingErrors } from "@/components/HotelReservation/FindMyBooking/schema" import { ancillaryError } from "@/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/schema" +import { paymentError } from "@/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema" import type { IntlShape } from "react-intl" @@ -22,9 +23,10 @@ export function getErrorMessage(intl: IntlShape, errorCode?: string) { defaultMessage: "You must select at least one quantity", }) case ancillaryError.TERMS_NOT_ACCEPTED: + case paymentError.TERMS_REQUIRED: return intl.formatMessage({ - id: "addAncillary.confirmationStep.termsAndConditionsNoticeError", - defaultMessage: "You must accept the terms and conditions to proceed", + id: "common.mustAcceptTermsError", + defaultMessage: "You must accept the terms and conditions", }) case findMyBookingErrors.BOOKING_NUMBER_INVALID: return intl.formatMessage({ diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css b/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css deleted file mode 100644 index 4e8e6c7fe..000000000 --- a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css +++ /dev/null @@ -1,22 +0,0 @@ -.content { - display: flex; - flex-direction: column; - gap: var(--Space-x1); - padding-top: var(--Space-x2); -} - -.content ol { - margin: 0; -} - -.summary { - list-style: none; - display: flex; - align-items: center; - gap: var(--Space-x05); -} - -.summary::-webkit-details-marker, -.summary::marker { - display: none; -} diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx deleted file mode 100644 index ec2a5a739..000000000 --- a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { useIntl } from "react-intl" - -import Body from "@scandic-hotels/design-system/Body" -import Caption from "@scandic-hotels/design-system/Caption" -import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" - -import styles from "./guaranteeDetails.module.css" - -export default function GuaranteeDetails() { - const intl = useIntl() - return ( -
- - - {intl.formatMessage({ - id: "common.howItWorks", - defaultMessage: "How it works", - })} - - - -
- - {intl.formatMessage({ - id: "enterDetails.payment.guaranteeInfoDescription", - defaultMessage: - "When guaranteeing your booking, we will hold the booking until 07:00 until the day after check-in. This will provide you as a guest with added flexibility for check-in times.", - })} - - - {intl.formatMessage({ - id: "enterDetails.payment.guaranteeInfoWhatToDo", - defaultMessage: "What you have to do to guarantee booking:", - })} - -
    - -
  1. - {intl.formatMessage({ - id: "enterDetails.payment.guaranteeInfoCompleteBooking", - defaultMessage: "Complete the booking", - })} -
  2. - - -
  3. - {intl.formatMessage({ - id: "enterDetails.payment.guaranteeInfoProvideCard", - defaultMessage: "Provide a payment card in the next step", - })} -
  4. - -
- - {intl.formatMessage({ - id: "enterDetails.payment.guaranteeInfoMandatoryNote", - defaultMessage: - "Please note that this is mandatory, and that your card will only be charged in the event of a no-show.", - })} - -
-
- ) -} diff --git a/packages/design-system/lib/components/Accordion/Accordion.stories.tsx b/packages/design-system/lib/components/Accordion/Accordion.stories.tsx index e71d132b0..e07224cc5 100644 --- a/packages/design-system/lib/components/Accordion/Accordion.stories.tsx +++ b/packages/design-system/lib/components/Accordion/Accordion.stories.tsx @@ -12,7 +12,7 @@ const meta: Meta = { argTypes: { type: { control: 'select', - options: ['card', 'sidepeek'], + options: ['card', 'sidepeek', 'inline'], }, }, } @@ -137,3 +137,22 @@ export const WithSubtitle: Story = { ), } + +export const Inline: Story = { + args: { + type: 'inline', + }, + render: () => ( + + + +

+ All rooms feature comfortable beds, modern amenities, and + complimentary Wi-Fi. Check-in is available from 3 PM and check-out + is at 12 PM. +

+
+
+
+ ), +} diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css b/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css index fa52eb9bd..18cd315e6 100644 --- a/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css +++ b/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css @@ -18,6 +18,19 @@ } } + &.inline { + list-style: none; + padding: var(--Space-x15); + background-color: var(--Surface-Primary-Default); + .content { + padding: var(--Space-x1) 0 0 0; + } + + .summary:hover { + background-color: transparent; + } + } + .summary:hover { background-color: var(--Surface-Primary-Hover); } diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx b/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx index 04a5e095d..1b2b7ab74 100644 --- a/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx +++ b/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx @@ -93,6 +93,10 @@ export default function AccordionItem({

{title}

+ ) : type === 'inline' ? ( + +

{title}

+
) : (
{subtitle || showAsSubtitle ? ( diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts b/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts index 3bb4f384f..99b4d61c0 100644 --- a/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts +++ b/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts @@ -7,6 +7,7 @@ export const accordionItemVariants = cva(styles.accordionItem, { type: { card: styles.card, sidepeek: styles.sidepeek, + inline: styles.inline, }, }, defaultVariants: { diff --git a/packages/design-system/lib/components/Accordion/variants.ts b/packages/design-system/lib/components/Accordion/variants.ts index 129e2a61b..e8038284a 100644 --- a/packages/design-system/lib/components/Accordion/variants.ts +++ b/packages/design-system/lib/components/Accordion/variants.ts @@ -7,6 +7,7 @@ export const accordionVariants = cva(styles.accordion, { type: { card: styles.card, sidepeek: styles.sidepeek, + inline: styles.inline, }, }, defaultVariants: { diff --git a/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx b/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx index 63083018d..a1e524271 100644 --- a/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx +++ b/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx @@ -12,11 +12,13 @@ export type PaymentOptionProps = { value: PaymentMethodEnum label: string cardNumber?: string + hideRadioButton?: boolean } export function PaymentOption({ value, label, cardNumber, + hideRadioButton = false, }: PaymentOptionProps) { return ( ( <>
- + {!hideRadioButton && ( + + )} diff --git a/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx b/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx index c8b2ca36e..8219bb014 100644 --- a/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx +++ b/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx @@ -31,12 +31,19 @@ export function SelectPaymentMethod({ formName, }: SelectPaymentMethodProps) { const intl = useIntl() + const hasSavedCards = paymentMethods.length > 0 + + if (!hasSavedCards) { + return null + } + const mySavedCardsLabel = paymentMethods.length ? intl.formatMessage({ id: 'payment.mySavedCards', defaultMessage: 'My saved cards', }) : undefined + const otherCardLabel = paymentMethods.length ? intl.formatMessage({ id: 'common.other', @@ -44,8 +51,6 @@ export function SelectPaymentMethod({ }) : undefined - const hasSavedCards = paymentMethods.length > 0 - return (
- {hasSavedCards ? ( - <> - - {mySavedCardsLabel} - - {paymentMethods?.map((paymentMethods) => { - const label = - PAYMENT_METHOD_TITLES[paymentMethods.cardType] || - paymentMethods.alias || - paymentMethods.cardType - - return ( - - ) - })} - - {otherCardLabel} - - - ) : null} + + {mySavedCardsLabel} + + {paymentMethods?.map((paymentMethods) => { + const label = + PAYMENT_METHOD_TITLES[paymentMethods.cardType] || + paymentMethods.alias || + paymentMethods.cardType + return ( + + ) + })} + + {otherCardLabel} + YKT}jeRB$I20FHDoED;C_gv9`Z;cp9tZU8XW3IR3(Bm;$R1Rw>4E(ai6 z7DjREfYd!{wR&hol2+^CjO47=L#C>#o)W^mw(V6w`01D5{`kw^{_(H>{O_NE<9e*~ zhJOGz-#?cI(dQ;Wf{fTgDwK(-ei5;HoceoGPywV8a)8{7oxXDqw(%qK!)hD@Coim87E#k#05AlucU*BrGinNJ32@C`BL%B!ucNgb+Zg#DKKo1{Fc?1QhSV zJ5KQw6DxwHo`A8`OH@uQfc9{$5q!B){r_>(ztf~jJ#DH~#Q1fnSW;8!VWxR=r8D8c zTyuU?nI~U-;_%G~GoOFlwBI^-SXf}4!0rw*B{cnv=0Hof6pmb`I z(hWrIb~hS8b+Z8iAZX+~&yTerHHIsVfy^3z&IGCRF7-IC$u^zv!p-i2AUvOcn|`)) zNA~X5ZV0en062Y$CZ+WTv_sN*MEhqX{as@OOOo}$I0D-vS;rYe{AUSBvOn2>!L&KH zLxdGWm2&%#%alpkCZ|tRbn!Pa-r0_H_f<;hLI^>Eh=@G=$8BhpiHUA0&2yXN#S_mD zgAC%9VNC76BqmMQ-M!BAGL{1bq9zVhP(V;~{r@LU>pdklSJ@`HY&L8R1{16jZ7`zV z{gUgU^0*Ki#-a1*z18+ULQ_i!H%@DPvi7*FsN&+r^C@Di``I&bne@A5t$ z@-d(BC13L$KkyU3;Me??-}6WQ!r%A@|KdOVPpCyv#g$ZAS#?!+^->@8(*O<9Pz~2e zjn#Nf*G$dPJT1^7EzvTq&?>FbPVFTQMAF}pLKq;~2TnggF1y8WP56saYqGu4MZ47Ov^~As=BHw(D!Als!$EBAXgb|%2P=tmY?m3#N^AC zr@Txu{D!x zw>>7qNvKUtmDNgHo3i*L$s;9iQ)sHNTu75_=m)Z>d!new=T zoGP-!dfcKsIkIG`!Fx=myFA0Ll)hBIYpo3hoavdYS<%mqDWa{79dRi}Ss zWW>-RV~+JpUo8;{HZlSz1L@?W)R`MGLXj9xG5$749OY%E5Nk{m_CTDf!?aCpLr( z0bg56^ad?DfyA0vDy0ze53@i{l^%kHX{01)?aGn{>ntTn9in0=t0MH)u4a;!e}q7x zCP{gFTP2Mry__3}JDPl0(h%0jeG7}QOU9FF_TFwG=N&C=BdeOW7$e@1ebH31JarI^ z2kq}!*L1SHge|-?Sl2qTYGojI*3>(tdxmT!*K>7C_475i(B;M|20?*G*X^Xc8f9Zq zP1U7_ec-Kb@%}@qL7LaNgY!57m%XfKA(I(SUknWH1#3)!6@$l8^&wtq$>G!!7RFdV zaucZ_Eql66^g4B26}pp@jSgu%o($yFG} zW{pjjWjnjcSq*AvG+Eo^7xsu^v!2QHC!>DE90PqfTYO5=wV0BWcsNebX=QK8gyVN8 zwanjoG=r6;r39Z17=$3~syk3n zo=r@x*4w^Sjs}saIqAy0T%KBhMSEGhvzBxv*#Ke7szNs4GX$!|D$EKWh0&x2qgzyj z1Dazh=E5e~Ak3oLgzw0>@La>V>0uW05DO+O1_Ogoxz?_9V;CR$MfQmp`b3ZD3LPU` z8#Pk{W$+t5;yLc(D$e34LP~6BrI6f|A4*p>eDTVnYHU}WzEOkENhhoiY$PxBt2&UN z5nCLC`iV^iYOtI5F8)4rs5V04@|-UoQ4MV3XyjOIqmy+Rfhm5hLtb57@IzGjW!y-O(0Zq3fE?uUaCv`{a3cbj^~;bt!W`*W{J&oi{Ej2H6=IPhx>9wg+Y`WpLbk};mp*JaR;xsxi*$k`|^w#9#z`R1v zKdB>&!5C`8R1g0h#4ml-wbgGbG=JqM$)IJc3Y_Z|2|JMo!*)(bfH9v;7}xDkmJH8( z^b(ggE2$L~*!zVW#MsVqW-^-ogE@ihEePZ*eKPMi*Nt^=*uu&f-??U|Yu3@omuWp*ZbZ3mkcTM?NQ#j_z9P zW1^dD4{6COX5$HpNNd~h+FtPbBM-CCC;(y&V&FS_$FCdN?EQxDOM%LFc5}nvOLpplcPSH`C?UqRJ;Twg))%PNJ zQf_)2saZDz!ObBdcmP(zf?^4Ak0iD?J_P=>mI|l|MdCNS#d&PRY>Y%6&rUKmY?kwo&Z6v(CZ1?KN1 z9Q-0c(+FuP;k>bI;AWPV6!1P0s?aaO3s4#b8ftDxgfL={z*tgDB?%-eoteSzb%V)- zQm|pc4qpbDgw)9ylc7~T`W!5U)<|j#J!lOuin+;DT}q%d@mf*&u01k~@z7eY%X}6LHjwSgLtb#u63|S9utYS;GJme43P%lHjpvYL#<_-yenPr34YA&1{+%WYmde zk;f2KZ3tPvHaq;nOHBfTjST^6YAU5-VP08CQIH~q1ds$;3ao@8XOO<|LB>-bte}*iSq`U8nZ9f503VaH z{QP{(q9k}g@+$3Nf$^j=YCgv_)|b(`gsn-54a{y0<-Eg5_^aSk4l~_ykhwEPtRMp> zw4yU^Hf!KId=co_c)&06N3dPuIKj52A$KG$3Vjfzqy11uPt8P&>w~4af%JBY-h2H~ zXdvYQa1pQ5a=2o0Fjt905=PkU2@Xx@qlG;H{&i6lT6S8NzfBEXsF z>%}m5A)JrEe3IS*4h^teAzsJz-gq-K>%er122fN#N-$j9a{$^+#s7Tn*o}B(W1?9w zH!&YKUp3!1KQUV@jV!G#?JS)w-7Nhr11%#gpDq7e{jIUq=GJc3Ue;08vDW?83)b7# zyEe%dWDB*$+R|-1Y{zY9Z5M41Y_Dv;+uiJ*b}xINJ1STGzK;YL23kK|MN96p~f8a!>c}kIDP(~>ml$XjI<-OC}8STt;Hg$G#c6C1f z9;DzaAM2lVUH`q@rMzZ&?Q+{sy@C(Fs(051*T>d3s2^B=p#Dhx z&xX_3sj+M0x5lhSvsG?g+j_0FV*PpmW$cdwYp6}By-<6v_C@X6+Q5K^TAL4SGd;Uc z{`fA%$)7)Lc1B@xqqV`zji7m*@ASpd`+wHh1J0du$xheqcIQqnwpPsbradI7 z?zF+QcRHk+-#>rK{7t4F@AgNsc-kwIJ9qhcmfl;C3GXhRA7vx`B)vABls=vwm7bAq z`X9J^`oXJAho)|_Sz1oMP39(>#cPvyl568N#aEU@@dxqy@fPvX@!|2Pcujm65M31Q z5^o+I8jk>?lcF7?NpU4w82$@Hn@1a{1>u?D={k20PkNtWXZUsal6o}!B%B?d0EC+X z;ZEvZKuuLo-SEEE;?mdZS``ONf_qC-N|S;s{W-z1U`epXzsvu|zn*^p|B}D}{H6ZS zfIr8-JGeDC8Sr=Tw^ba|gjX$B%gf~lazJk2?l+^V<-UcT$%&E7$P-ELncUbM&BpV+Q=Lp%zI&F!Mt!fq>$6;*i6R$bgI z{uZ{_R=jQ9YTa+G5N86`7X07oa7$RP0@f?mll*jk3-9NT@D_i|qI^W#*=#5Cd~=@Z zm`%FEoJFrOZ#Ao?LAz+hXc|8mD+;3um*#iLuLl7DfZPWFz;qjO6S)NtX9$-;F1m1W za?-welyvd~_TPi-h54|uyB&-$ZZo_iJCWTmSxF|5DMQEe33@mRT2(UUyvG>c?HZ_v zs|Fn+NkEjCYR|<;aEr{(fOiO3hFzuWF!Ho+1>gt08WXTBw*E5L5Di6aM|w$#>_m3J z@Aw+G<9i%~Yw#4Fz&hNBi@|UO&cfNanheGnIFsy#4Y6C1ytefvq=KVR5YKlUHb6i& zBpYJ`vJEcys^tYqm28h|F$W9rB|aiO-rUzNP*GkAtnNClUYi8uxOkuPf~zOdJab%<_3L5nI;XMSGYfXl zHg`XI?LKF}z0>fJMV1nnKF1NDuAc)yIV`7A2Cii=VaP)s**ONJH0A0UJN#6Y#HhK(8w5 zVCcDJ{8-^)U`+b_x~6Gb2j!f0aPBiEXMNXWb&sDQ^U~ zZEoA1SHFirMU8Q-$heAZTScxA!WArEDCC8J9}JlPuu0J^x>-kV`vLF9G|}h5+&)iO zlb9vM>QnVnN`){LJJVT>h}s-%)6DPwwNadmO*`*9pl=F)(N!4zkTk2sF13PK2*RYMSg?E$=gPT-U}3{f%+Ls3un z0-bsZ_i3K$x?VgsHTjSs@-4|Z%B}iIcR+ZKFd^6sBw4F0dm2Y+)iQ3$azdv?^jjw_Ew7UGmEEq+Zf%#jGF0j1Y)S zh>*dbAs3;9KDr41fb9H$wvUw{F+i3OY;Y40A=_w%c?X<%b&R@MMnvxf zDj}9|XQwuyT?1W*PaJ_B0f+4XARc9x2pEHhm+j&Wet6mD4kB^~t+KSrQX-Iv5=;wp zo$H;a;Kv1t<5V?}bE8`I6oINn5JJE!jPXjx;*9-}q(CoUf2JCsiU-b{!GZHcbq1vp zur?61$!EYA^T97_Tr2+R>T^1cNT;dh`+>ilqy`XB4ZvUQ^y;Yfy6V*H$QYi%Gtee# z#|(<#bZjH;G4?J!Jlc+Ln!dYb*1*4e$2UyB=9`S2J{`bO2#%`zPgS?J4sTZ~+W~S6 zxZDPS+O{AeiG-lJ+)8IdVC;M`ghgp9453sCp>+-4^u~UJF%2}_@LD9eX^N)jHG{() z3J%{U%e0;^d7JD?7}_Mm5J^V7bjV9)^CbfS zC^%nld1YQ&kHP@x8C;X6$F3*3(1orij*rFp-Uc~>NC3kT`qa=#>`bRRs48RcB;XtA z`*FiYY+$Q=a7PGn@DLY_tykJyRN6=8G;+0B7&h8;ijt&CM~M!iDZQ!DMLI)Qk&={@ z@^iZjp4}d|$RJJzF_606K_qP5eMf~Flw8ia&|MCO4vFTXt7(K_Fj0DX@9vx8a9F;p z+@ojNFQuqtUzPNmVLX3u{-vNi)#x)SF#3T-f;3gi&X4tJ{!LNSub6!<{4x4sZ19(g zhp7} zKJSj--%V5H^#?~G|E;9IF#Ay${e0%pdh+UC^{1IV9yz^9?hR(CJI(C-nP8m7&IIN!xYBz2k zX5I0~ndDv%YqinDUQHowQRRIi{fbB`Ccbe-q^pglQO{8Sgm(wC-04lexp$|TJsf`t z=6HI#k$>|Bv)Lv1;SC3~zum3w_|HON^fOVbh(LXoJL!dD9dRH}GtBGkf7soPe06B{ z$(j6R&*$&hMwjKXpQcK8{8zV7Y@Vjd^dn~T(`l*bL~#@N^ez@YDyhuNi(#%e4Xx(;Q~G=x!oh2zdjvu+dO z54QL1QrxQHx!C1MVLLJh@DVJ(m@E>c)tOS7IkiknGISwrG?Fvto~}woNOU?%rc%6M z)!5besG_dJ3@y|H4A{K%Rs)pf7$q)kiv#LOL3OLU!!={j`lI`rsz<+7z)s$}Nx zE^8hAi)x1dZ7Mfjjg!_3=2ViRRf^}`swCRwM1J8lF<*{_TqC4fk%>f066wkEZfI?C zq@grEYK69u9FHcKhmR%ObwbRh#H;sbz?jnwEQI0+vF;fkqMCh!kX60xG|gNYqfNx^ zhbEw=|EBP9_+A91h#^3`u5sVd(H4LP!14VL%{>6!!G?tpUXE%zLop|;WxLqnX`{2z z=?gqPt9o#z6C81@#0`IJ$LHoA0N8cHQ%&m(12h+St4u8pJeG_~{;u0dYYzd`T1eZ; z09ioVPBw`+5$C60Z98R#XBWbQt`lGOMz_7l{p+JBSrlW;&~GN80`ip8z|N?39i4!h zl8O~4&664;I{}gJMi$Pq|3b`hBY>)EGOF(panGcO!CVM6EYJvu0A;4$2dJlNEu7tu z3)KX81pK;TPz$2K!UJrHt*C?#QN^W)#M?p9o`|kTV~}_%sbXWKS0bt;?K`l#c{OMSQGe8L+AE$gAPD5A$ zIovayJ#%V`kj8eQ7jvyrjg^pTJ8`Z}azk-w&GWeZj8Pyz45Rr9d1Du%p?$Vwupnd# zVl)Z*31rP)g7@HDy4T!a!;l{Hwl1sl-Ibx47B@#!r60Kjt zab#f^iDoSe8%{DGDJ@bnY7YZ^PhCg*BV9w9hFH5J*lfmhCDnC7-yF>58|xKfCTH7n zVX1P$QYJEGtOmmyFQ%x`qGA9UrWF@k?2q>y=-(6bTcmxHt>jYY-KI*X?Ku*MMa(e8 z$tI;b^oOjfjPwsX+z8%QJ`Ra!`fsN1c-UA?GJ#sljEl0JFx_OPvWo>{yEkRo#8lgw z0ccsU6ky6qSD0Plkh2NP+I&E20U%achfhefP@$LqW44@lE+tkFaKGZD;~18l=jD23 zB|ZW?=cPF5tfKk;EApm3%o^(mX&c$YDpq?g2^hA@5iATx?Oc}*1SrL~Z{r=eSgMW0 zeM8m3Ndgz$Wct3^Dl06-5mH@wm#(jPTa^im&gsp;w{PAxQ%OP1P`NJW)&@Dq7j>75 zUO_>cEvc_Tkph!I1c`sflSB|B?Si&IgjR_!w=VJ7B&JBR1i8RrI-^rBdzR&*OfD{3 zTD|i<;?;wmWF4O{on}(uHAlQkm#CL)Xe^QZ((JxUxT=6!<1M~uOAkRpvv;c` zH>@N9jNK^$IBklm1HwKstOh5Lq9?uX9m=Na@rud$!!q|pTO4LlpWX-Jgd%mt#aGnZ@1!Br@wN4oY8H)|EucdxYc@4)$Bybrm|*@)|#8$oT}7Z zBj(CbeMOCnx$yrLYRlMIrKg`SSMg|Q$OID2fMxMv-QB-BP{YidjxaqDf zS+gmqKZ7KzOxxE@PoiCy->a2`t;Mg-IJYF%?84kenb37a}e6k z9YyqA0TIABWR*z=M9yKcXt^Aw8>XWAlEjEzM3xOe zM0X5`q|ELn%9BZ9gIMe&6vA7Pib%61lFBYRiv}AVa+JcB38h-TEfW68PH>P{TaNeE zC*SxaZ!Yz-*3)!ax`)k$0ZDh3mhQz)AW3+t-2R}AdOs`!8=K>;^$(MgjOco-t&{`P zB)=^8)(7CxkrcM5I~W7qVF&803?T?;YLpx``zvgdC@fq7cL_IwgCB=)uj+uumqx-c zTmD-6zFfbDkmen_s!+#ZnVDcL;XYK*kcJOB}Y4UOSw$n&j>w~vFncNNDY9wHO z@V1v*n@n1@_#M6fZmjKaV4#PDA!p@7V5jfP%#z&R=LoqsBHrU)Z6%4=q;TSP>o z+jdzDTwP{HWU2WS3J6-`qPQx9@;uGNpa*SZ(x4(4rz@Qo%gV3_SFxUxWR*=U80)=M zSC(ljTx>mzoCnLE)22a07#DU118QQEBzX~ucHp0iw3d?OL4K>FrTNan?-wAb00dDW z2y>6XHQtSIL=`~@Yr*7jZd-}!A^(3YE_cQM$`Ou|ZlhoGp}B)3Pj$PF_^4|J4f?oBcz#3IDFS8Jlur`rWO{ErTK1VT}g+DuV?cs%@qpO&wt{5HYP8J18 zx(d}2*d~(JoX}V>M&vf*O z^9$zKxjXXxSkrB7^iM5ge3G8KYkQ4hNJ%o63m&XX=Up>#j!#ZN_7(fnY-Ez2n~1aO zxkI&9YQv8vK5puQ6`dBf(es(@UuEBbpgbBAXSBcax8&*3=y4e3_#P5#w#M)5eUHa%)ByW+r*rZ(b2Y2@Tgns)Kzm+nmKl&XXeDHUPBYL zeIB`C8kyNd4BIOCyJ)A*zaAok%#-4mAz8j!h(_Mw=1hOHT>9STz{g=2rZkSKoWmEH z5~PK>-V3E|S>CC-4p;n;mOve|kR7~J5{?nogZ?gU`zw!Kt=6^rLO-L7a96%tsKpB; zV}Z54WhGLa(NbF_iW@PWDA>uEsuI5$9#zk8R{fd~^UFTBo{(4kcVsyo{idU7zuySI zvTDUz&p}U6#s+L1UBAY-T>d7nsQf3(@syB}e|4)T(%IUh0WR|l$+OLNZ;HoIh1LQv zU{yv_&Ub|tyt6iX3HsFf3k>uN1}NvxU_;mGPEuaEoS(4mM30*D~wDLv;L0K(V!_rn?GQ4kA= zxhUTl(r!hc!-zpAx;R^6h?I4hDH5S8iVG$#)LpO&0^;21B=cQpcbz4vauf7h1J3;_ z%Va0^!lTu?E8Dl?pDu)S2bZaQ2Whu^(^F`>#7SDMxLj_17noIxms*B}ey5S76_e57 z92u@~OpCp;+mvX}?u}G$^*rQ_-Rzp}1V>70yIlXWH;T|0EM2#gmFt*F?7D2%6VBGaiJMeFZQh|ex_y( z?^wDS`}Lq;e+8O_k%4w8m-2@Gg^J7sWShPl}U^fI6dz@^-!uc`j9W$yVa>cE9F<-HrCbOC# zw}}e(u0&a7iHPR68Yp z4G#=S^dK>p#^!y2)&YgG%M03qBffCmZJaSWQuTha6C6lY)8nNZiMGF=F_b?9ntqYK zIm^*;rkjQh2Y{7DmMS6!izJ8!y?{hiCm!?K!D z?iY6#hU)EJdgRELMFw$U@(X2(l}sXCkC0DA++x{e83KrTNfwooAc4(nqpC_Ng_G2) zisFOZ67f*=vS5FM0ar>^brvFw7Nk?ufx*j*!?l89h9@`c-BXTj_<>Dvq1(V+xYHq0>!GDql*4M-r2;51JF{#6%iT8?y6>}svm5CYAIElkptoHLWpz_ zR8Z6D0KB;#l6Mf#IRXF!+-=&gW)_p^i9I8`DB?AdJ2%6Ci{UHVynx)@GSJ6K_91`; zFZr-ighfC#wsfRtj{Qo@zL1Q zS02JNW>DP?;y7^p>M1d**aSosmb%vNP36IgV3LE;tC~M2RXjJb5beRDYbwQ_r@`W$ zJm`;(kp0r-2Xhn=1Y;ZJ;+QGCmC%YO*25F4qMevc`G@k43{hOE@LI4{3IS0G%xtpB zeAcqA0S=8S=3HunR{}nr*FRN~S=(HoQZqguQRO*tf`|MH*2*3=K4iGqwC&xvW zkuL!CY>CO~hmdV75rno^0fa}S9;K}*j%v$;aLhI#?%c9SD`_WgJS67hgLN9VPJ_O} z-A&7A<=i=;Kh=T+noF>8)CRiQY1zDSLThD2V{7k4Lk{uMun{-@ywtV3-d5!XBRTa; z;vDiae)HfSKoaoL2Z3rt-&AHvFymG`zFIy=uc2fvtfaEgeqi;Ac{ee`k=YavK4}HA zPgIs{>)Y9g6teg{GmPfYE!`$&$k?(vfx1Sh_+^seuqcbjJW2~ZN^=l_%MgJ;F!cqa zZ^;JO$v9lH=2o$-H;f{ZCB@0YMYfL6^^$XQ@hnUN9fxyuhl}H@&QJcSTL?iH1#4=_ zs5=5YGXqOJuoi&A1)(DclTa8LB&43**ccRP2p3=S5$ZKTMzOFxdi2jl*LQZ@TzUN!sD&0))mBW>}$ zAzyQt>q@u6lWxD4mwNlwOQg&Z?l{TS;9ZFn^tCd~@PJWSSIdfD_l{Xs!nRexfd{{^ zlD~hpomlaIXxq$;F!JDK935Kt(VYnJlb<7tzC2fa^GfxkArcx%Ldf()z~#20HV~m@ zm$^H95Nu7IH?zE)EGouL;z40bTm- z)(}#ofP3VM`TYXj{9*{a$G63WOoxYi1GU>Dqb^C~sYoM-0H09dNPScph!BaJsyR z^MnXk*T%6>pCyUn5iBA2Qok@_b$gi}<9?CLj59{5EcYMdoLRGvx)S#nnV}k-^gc^w z;7=opo{gg6m;j5Uw_CHNR_YsMO#k=wJEN^9!_u4eYtP0z`pDNIH+{K%XiKn#7C)W{ z!}&2y=xzed7~#oCvt+NI^Z(yE_Ia5#sm81E%2K4E z5rZ<1)Y}fV!PJ>G%=%KbxOKtVttMI)r)!(NiSQs@qO_J{`^kuhOuYPFVz=b5v6X>k z8csR5wX1B4T!Qaa4Z1QgA$SE{(fa614@?P9nc-a7U&K?HV>rpeaArz+J}P)tZQKY- z6zjxQ!yDzF`9jF&bqPb+_vp6Ac8bhxpV{^3H{NugQR^ra)_SYTNW4XaR%@zC#~D>F zoU`2^8O#Gcm-r7W>V?Xn6R)*zt8K2++Z&U#gIM;n>KrcT|EXu~K*+WIh~wM_th$EU1H z=iN0T;&#I5Ut?$NA+w0fa9fLziOedaPxbL&-(}*% zNY7mWy^?&D1-?4JvPwuvXFd_}sX~~N9(P7PQM!&$aWEcFEVz03Sleh}VhI9l6k9ZB z=R~NG;OQNxD#ljce9E=j1xOUx#^JAe=#}CW)Z0s226{*h!i_S7;Zzh)E136N(X+%P zx9con_(D{eE()CVlt71$%2@9m!6`$HfK$h94Gg`F=lz=j(De<0^XgIGN0I+q+uz61 zW>jyEcQyx8>3VBEGnNNyjij@1LjcLEvFMG~eXns#T6jDV1Q*a{mco-mhv{F$g-aVr zw(QNc9=zlG#9SLWV~Nj)RwbDa$FtNtTkgYSMKVa|dDGlSE}4JWD9~4vwXa+~Q#5+P zx@S5ck2IglcDc{ChR@ugdi$E;(E;l?^7FtL^3MXPAnR8Q;+_j-W;aROUd_<7I z>Ms%?pL~>wa|fj6NWv+*p`aYMcg!I}8+Cq5TtRq;OPT9eDZ zix_E(gPjYRU5>`*Wl^@M%3CnH24;?FtI@9>+};F`!G&y31{Va-e^!hNn7MEaqyONV za@>{FCP#h1uPi6&xDp@ALGyN-qqS`W5s^a1{eyVMMg_^YLr0h2bdGj$5Di$;^Fe|i zE(n-*yfum~SNyP6%=>xf+b$B2~Ohz%$MRqgE@)8l8da!jP`z zo*%crJPbu2b%?HB4c?87ZUFfsPG^AM`ucD;^XgKo2+1~DvTeolhE&4TvQ!|Ks9^mQ{jlY! zY|7Xi{#OZbTkuOI8~Vsvc$D9IJtT8}pj{SE{Q8y~bK{3nPyJulwLy1T$B5TVLgnFQ zmh)e+{#-lFmEss(tH5pcO*vGnCvLE+lJVQdt+LFA^qx=IHnX>k>my9c{LoOGrJ}bj zw#7NSn43|ZZ5`>jFv}WuCob#eIlf?ywf&GzK~Db1gG}bp&yb7RZICG#xPav59@)oY z4#VpDu~wiR!|Tp65nc6|E8BErMxZ@9t5JP&^5jXxI1_ID+sl>N*;|66#+jLlyR-7c z6B84Gs!G`wyq8r+XM<*EHA6EqGx4e`v$M0o$Nm;HBQpYQ{gTU`%-B^!YsgiV8Vy|y zIkf?eNO1cTM$^eOw7B{?;D->mq;rhmd^&XXs;(Dd~5G?Hj=G@A}N!GH$n zZ_!m7`&wi#=HfX`w>+oz;3^?|x&!1$cA(iqc2p;d9SkUrR6q+TyyG)7xF_u#Ap6ey zO(6Sbr~%M*n$?gKEYhTs{j|peF zb5v>Vnt`0?|EA?MWQx5*a#&^>_(v|5V7anYs# zKR5-F!RUY}c`0To;&=|{iUN@+Uqe|Hv|0^mDxgYrF;v8b{7OEadm*`)N9Ghl6;K7F zC2Q$AvJP4et)@E6o`xq1CW06_nb6cwaV5DZC7X$BhuyNjfqvfRiQhto$2Vf`_b$S<*iDrDsPl7ADN)u0*eWZ zJI}p8CSa}d=V@`9AKs-_6E?H4(Zn%*@x|KDqYtR69SPOd2|HA(gdNq@I}%h6x0;Q1 zO-yvXt==L5i<-d904poD@n@VN`HNmxkU=1*c4%?Hs9PTcoQ1BSswQZMKzg{jIcYm@ zZvI}#uPE#b9C{ntVoVzb83PaLqK;cxoh_`0PslB{j%Ois~uO_9%gojDK} zot^dbJH`szOZZx`>L$~}i3984aaOlSmTq#)j5kv(-1$L6Ow|(cD6kr4MMZn`t>oBc zmbZvg+WC8(M5gWS)q)=64e}q_?|!{#Z5N=sO2CgA?|(x7hRN$zDO~{oD~IyWy&sTh+h$k^QRdgdN}A`V+ug4RkKQ-pW4ti_NIlONRK%4@V)9I+-bZjj0EK0gnkcvUN#t_Y@S+_^h+IDAVnmDG+%-wCY$n!_L zq7wQ&lSE>=M5kZ+YIl#mdEX~(1_J;Cu8 zod7}fGwk@QDo93w)m9|PG;`K8hGzzJf{zWgsul*jTXU3R{r~vURo8*SL$lbQP+W7S%K+o&RjAT3WJ~ zFU^oQF`F{v!nyv!JBS!@2CYsIB1V{@P5?NCG7&KXIkf_3M2ws$dekEko-Tgb>lxt@BhvW6 zlYZ%e#L3PN)BGl3e~n}~%KzF4d_#bPYTSnks8m4R;I{axm^;ti3@zQVWhu0I`mx2Y z7Tq>@I(Z7T}WB`VN7K~Lw3_dehxYW}I7u6)>UuURg6QG*@D{`ysU&(gA zl!d3oY(kuW>|a4hBo?b5O!a6WN?wm#zXgKU_DoHwzab{Vx?mfSgS)l>eVYrnO}|~o z1@ik&aefF7$k~!CR|9hgVZlXM225K$2fpXN{7S<5mQI)|WWhg_RuYTVlWK-q%}|qH zBdF3W_cqgEc-ZEBnjuZm8!KTQ<4#>C2-%Q06I4%9E9QNWJ21FT9VLQqyrzu;B4Zwy1st$1fBEH-|J7c81i0ngG0Y;s;^g1i@(GsiXe8~=Q2mw zbKEyZ8qiotEPKj(7uUE*#c{o8PjRl?l)m~Yv@)gTMdyMpCLVBdI*=H2v7d(Pmart|PK@kCCo!222XG)aS2Ep^ z+b3ObsC9&lV_+}dFHGX_32 zi=&cP1qS!#WyWof%ggKy3|HU@<1YAY_qh-k zEJh|FdmAJ3B$RiZ=+NSo9`P3B@*sk*3W@3Hr48c`lH71Vnw&x{#fVx#Uk8P&# z+KR+D8&6m8WpOa5C~yfl|6h-KhW?EVZby!K@gvT}2qS*f#5EyIECu7;>imB_qre33 z=Mk7#e|U{&i09!oaUZj1*&jO{DF6whAOkN=V93)|LUV$E!HmO$*3n%k6hLVk8EK<{ z?++~N?k)@0RUI z?NcSogXi&D2H_H|1|MaFMaSeD=HmV|3aYkS?XR9Ql*Nk7K{#MF4Z;s%{nJf0xEHx% zu0`$x+<9&vT9&d0Y69f}Qu2vrPk2tUmiXne+~cWdAXEhvVYYG&H!0}|qMOaICNNlMT_%AcU!iV|m~oQ8j60)! z8l%Eyyl>1R=r|n}Sd4PcwFV5s*n3}OaVezjKURTZ7+!&r+lE8b*#0RS@8PE;7Fq<$ zX%*DD0}rU?!iU+G8j5VC_^5!-cp3l%4yYc15d`kt#QuHRau%D-RL5=4v>fxi-w9VVTXa^Y+;hX z`pZG`*oyZVJ~(XXJ$QD2x3>KC@msABmjSnikOF2iG^US#O%Gu9zKqFHSY8fr=WPNE z!}yY=TI6}v*<7^hxfY?I_5-LZwzxfQ5kp-E>@m%|Hk0`1C-eDdBY6tP?atVmAPa~k z%^WKW*qY#4LCj39f8$!Aln~Mbg6*Y*wZcY!%5edLVw@CU+)V-#Y~$R?`ioku|3SpX zx{2J11uTUO<3e>K`Erf26Pp>va{x;>b$NT6UeM_;Or@oxml(eDO?(+IM@vdgC+PI! ztKN9)cSlOgd=~Kb($cc#f2?I|`$a=?Rf4X$_bJxid&7 zUgEpET@KK)y*zq-)p%)HNjVDoT|_vK34hURRjFGxwH9)Z>x@A`X3T63H7CUL12WkFpO9c)xXB@Re+d7G zFmrqYoeYX_%D8J+NBagGS5t=LWi=cJmLFbCzkpG;iudCeJ2m)C4^6vvIWuZ*!Y3h{ zfeQvRu5`9qeKNUi+xH@BwVOOl%z6bjdR1I}RDO(?^Xu1>^MgpM?eo+6dD2 z47pieSXYzydTfY`H7QwKmHia z5s&~$L8F>3Mbw_a%~uhOhpt|wd6bu`RdsWM@RH0 zULBIo1_T!<6a~QnY|7+N~%N9V0 zfaDL9GX;`>#1e~(NW+tq&b>bx#b}&|{Ue>DlBql6pJC3OILHg((NU1ETyD;ahChqw zh2IQaNJf99k=)GDmT`wUUk6I=Ks;0eV55RRdBccQP|s|%ojcFf!a7*H-MFPJeC}41 zyG^>ix(aU@`_91_kNnU%Ay<528@2^@U+4>P@jM^k*1KZB?TV3g z-)&%pTW{3OJuV}DZo5}Bpg!vs)dw-&L*;>6%o%RG{YG3X%C!%mCa%jU4))gHp`8~4D_^jaJow$SuD6M3-gp|KCFQWpXRDXc5+P+Vu2=QVa&MRIrT%RdB z+C!uD9LRaa5X3-n7OA2Q-aK^+kIi)B$0ecL%k4?pS!e({oA$)bv!vJ_DrZ6rqe{xFS#|lH)$SKPASmeYuz0ll*g(0m`}j zCvL!OP&YNH)h$h`%*vJ2Bt&WU(Yj;$y@tLJaZ+FrJryhJQInAv(DK+^t z#Zjufx*!z|Jbsp$+;hsgV}WA1TpS@+=nT=xga_;J;2|X_Rq>}kr^8{mhf@9U#fwL3 zA}_YZJ6@@Rp3|F5>vP`#}?mo^~QX33od^$matDYy!+OR z1Q4M!q?18hbXaUE)E9NgbQC+tmwu#*J4po>b@BSK>+i{{Tk(eHH9J)QdcSXW+72d5~{9UC^&)f=NQ4{*tLaqMx6$VLw1w;Hns5S$ZigDUvTbBtxEQ@@PR?x6HCwRFv@ zh+h6-Ris6WMKndQ8l-V|MQtQEHv;{Lx$Q?36NW!9+z3>vU%#Qc9?TqWNbi`dplL+{ zknY$urAlQ`sg&0+A{-JFH2v&`hV*Z{t@i&$pIH6`$cP(!>V8sn(z6PPeZ0^GUM$jHAc4yZc-+ zb-1Y|5sCW*;-?>=L?oVLSm^jsj6Vzqg#_SX_lWarLH&Xb*6L)258E)i2) zAw;^td^C_H(GRu*H8iYdg^pdZi?OSbm?9aw6}!e>ff0-RLt}aze zSWdv90aC|?XtZMn8dxsK`*zGwNmFx*rq3yQbJ#2al-FGS%M9htp!Mr(+BiS_udi7j zv~z}%T}v(`*Lu8!jfwa;`yJz+8lG9~!2K*Cgo?M4LSjnLTe|(jVj`4omJ6+r#*Eaq*RO#pjC$BZ!o> zmd>Bt8DF1-(I?;$sl$-hJ@+UW3l*D~s*hvRzlKfExe#fV=g=f04qyNSmKP4g;}ieq zz~Ge8{rv>nVI3?Ar39uA4>W}^&9~`8Dh~7m=-AP+M8PO*)>i_tO6?*Qcab)Ci+da5 z)Ijx|yPd+P$KJCA$M-A%(2I`;b)hNcHNB#cYvBqXYD~aVQY0?+4y+&2?u^P4)|8H3 zX)bPWFJ4*{;_O@$vh?sKG>=@ZE=`Iby(9Lq$by7%C>j@;+M=tiDY@-pt|`&grnW@t z{g4pKf-GxdASlM?EKn-<>dON0fmHl8fcNa^0GIrw=d~^g=sG)fNxJ|3(PM-U9##>wb`SBP`Zdm=zid02q9K?M^?`*1W5!Z7-f zO@k)RX@P436&<0CMJky6YoAEhrpG+wRbqI==H#8@bCyB0?j6{oj_HXQ4df!zdV7+Gr} zLVs0g{vgA3z{Fy?|6g8AAz5oCx-Uq{IAQm9SO|@wX>J_{+k3a$Ns70MMqci{<&rdD|W|(G0Ogk4X(er zZiwiQRbs*-_nA^rA-<+f1}{0!h!W;W>R=k{zSpGf2KRLA!buUOlHq?x&O>I-@sOfCA)S$SD(z7edHiK!O+1qu#O=- z0Z@ZT&~rfbJJbmT`8^jHpJ$`0=wLJ^yVSnb?3f@-d8kVGQ4ldB#^1qId&gq2-bE<^tAe$b*ol`l9Jaw9y>umZP*s z(?$BH$VTZ(4Z{L~0GF^6ii%7D6agi`R8+K)jj2f%pJ>j)>4Yk{yb=A@Z;KI1SwwoBVcmpxuh?f9CCzzXPSL{EE#|2gxNPeA|ia?f6wu( z560F$|L^OW_^8R$^`lQpL#7M#ceGdH%;2L8i;s^v^UI?%UP;kpvdfBu|Hbz{{F@z< zogMS^^~|Pz5x=#YqF3@roXc-ixo&QGsyCN8Bq@JV!LKs9xVgC)w>UaP3H$_^uwPnO=5>5Y%v>gWh3yOYvJDkK}!Jhz^(xi zA2W1=GAZ2+bwrNoPq+=G=DtMQF9rGZw2du#-q%O1h5DC8$aQ4cP+{|6VA4db@wp$^ zHfHBLBDl{h;CYG8ZGjzB;~C>KZ1zs|S;8=Q$)|kHVe(dGfq*C|P|91w%)URP9ucf% z%ROQN?A>L6Rsz0iuyd=x9rd+@p6(xN@x5dX?(_VOe1rZ&H+WGAG%=0tOe8wfX<{lW zlF3BEWtuaZZy%*OvrHqLxXJ%M#N~1r_0NQk%&)O$24l9?0|#2ev#=POl@=M+9dVtTU(E@F9QbCL{-73}8!mMY-%a?WJb!*ce@x12)#UvgE6k9;cRw zm-u4s3)GScNjb`4%YP}cvUwUZeP*mZGZQ<9dhk4?AyAZh@CJtEfzB4yJret@V5i5z z`n_{=1Y>4Ps0tr|kZ>di2}hs-JXB@LwYeVmyN0bbO7x$9J?qxLu3OLdjrs2jVA+hH z1wL+Lf5L8i{8^x}Oz7rNaWo2L-y;lY)1Zj=*|)ORpP6x$5efysDJbsNN#`kC(7E^K zIuCNQX+Grj9(!(f3fj>SYQ<1@Rn^{Z=kAH#TZ#gfW{84EuuDeERiVk-70IEVXd`KC zZeiDjWZkAHm-Vi9A}(aWDd|)Uo5T7o3(>8!P)pcvX~BY7aF!7>8u-RJa~WRP9V%|Mo5?RsSEqh$k46{+*LD4=i7lH`%NETK^p zkt?>lseuHfHB_IqMlI63J_-jSg=1G7@s8z;UA7+xbD^BMqRi?pxKpaGU{sr%JyX}5*=RiJ0(edV+rVAigd`obVl z0n>dK4o9oPRp^)p4*R=CiA5ML4BTcybg*;9s@uQ(iu_-TRfnR*6~#3`TD97X|C2B^ zOrv`FV7CLz>5#al)?6fWq+!v&jcuR(uZr@$Qsow#MFD~D*UI$1VvAT@Ao6?uVC@LK zA7VLV_$;%?|JnP7q;ANLF3Nh&*Nem^X%(Wk_{m6lLKMlF1t>}Lk370bXjeY(X9hB) zU&nOXL^lp``)p*D(G3vzjf;-zdHf9J^L+RMG2buHkJqqQ`kPcB5eR$*{Q7+H2fNs+ z?l!hR`j7B8^eFA?m*OjgydQbb6^07=j|&lYv2`}!q}?-4RCUtyWT$MW>B-3|(YO(5 zKLE9^@5Apkdt@yNx$jR~G{dRt>XK(Rt8VeTuS@lCO4H}-D_6)`_ME$P9NmY#3$U+8 ztr)Woyw0Kjgc>51m%=usC|31)v=ez)0I+VsJ>!D46hUzIx~*juYM_zA92A|Y7G&W# zFuOnklwf~3BhF6jA6nq|je2fVrQEQ2jsF*9RNSlV9XnrU$3=ZXuJPY&khL|b=N8RI zc_C@4*&fyGv=AOT`^nIpy~>J;y~;V7eRe!h`q;53AhGUXWpM!b8j-j-C9*n{hAAt^ zh`@G$^twW(i3uv4#L`e;4U?YWgD{_2sWh0%rrJx+cFe1_f@3qcrwD>%l^K`!~HzIFe?j2ptv|A7wDX&rPOh3}zi{mZPvM;*$2z85&Xd zmGzce-8xYFe9Lq}t-%2ny}&N8>n#DntwUbc#eUWL{Qk?quh>s*$$ z;L_oCd=$GrpkzeCITh|y)o%C72kxFIFZk;yS88pR|J=<^!0YvRk46QZom)WQumJPq z@p0KOP7{^-`G;1Y(n4-s@Gl^4VX4)}f|MijVRE@rF8KyrNv}4&(^G1y@zx&>vdvL* z>qha3wL&40@%`2C@T=cv=!C-76E}))IUQN;jz4ZSUV0u@s&B0}sm*I_h0|lBqo>Cf zuC9qvmp6>qSM?n7| zKTpYkV$49vYM=axAg?|_d}K-gnCJWC6@vWv$q1$!B)`V%{c3gn(#rxl!7t}8nfg~& z$avW+;N_Iv`rSdcJDj(k)mu1wIOtW}9_8%eSf172avC>3e^Ig||M*oVy)K=rsvnXR zs5n**zRXUHj?PZ}5*#ZJRCv~KeTr8F);9S<*cN7oD)VpsKI9K%pFZ<%RR`0;hIM!Q zTH-S){s=fswYk|>3tsJA!PbZN;8xh>Zxm^H>y-|Tg0xJ1pT4aBm|6VNY}SP=3T~Y3YQ*sbAfiNXWWQAY9Kf_#NG~VA>EhZHvPB z&+*W)J9y|c&L5+LX&`~XG{B<*YrMwihW44b(>NZzZ)ncHZ|LM9L;HGjz7jB-W4gL} zy1Mv1%UUj!acT6A-!I-{FkT$1xOjrjIBxp=_tATd-;@9cIomJYre>Pl1(~|g6*`XN z^I%@96Em7lPhmQ~oD=gsI{iJS)96?g2}s3J?02rwm|oBs_e}a@m*{lvjnZgFCmCh1 zZmu8TAg?d_yYEc*zWvtW?mckN#0B~)NXly?)2F^0@22nivLHvAcUsz#-4hd|ml&hm zdF}|~-sr`PyR#1+dPtM);N0^iGpt(;Z_4^i_w5wi7aAuQMkZ%2xgVG^mA`|>Gvr?l zN}XDgoEa&MlZP%_120>)W}frAL_fvOzu9;Ouqq!<`kf9sox34-!|9;YlYWmYS)lRE z&3yKhzVm|3f?L91-TO~>d}2##KbNePmzmKI8jc^&zx`a&C$>FF8#gBHDXB=SS8hz& zvjjB)j8`v zMQp+PAYf+~Bv_Asd6ki#z8n=Mq2Vn~n7yNY z5%q&o@GSd;$GxZ2i{w(Z+G)oH_U-S;Cy1r1)z0>Ut8vxX%K{3`R`V(xQr!Y1b0d8nhW14O(K_TA4OZ)zYHE zj22i2!xN!2+_q34{G{>krS2#yOpFT+O^hon+ClC0k5DK^%n5ez#+-lq0_%qK&?Chm zuDMCEgZc+~&b+L2B%PO)=lnoFm=x=p8&Z5E=42Ijo?DfXnT#7R9m~jkt7T?fTsZht zU(C!nqXq9RUn=>!Eic~=0N8#gwyi|4oC*6dfMHae!AD9vijJjZf10$CPS1xtL0 znQlm$g*ntX6ZX{FNY7{izNLWlwk*w)I|u(y2emOj!oHT%F=*L`vg{**EaBa)r9~wQ z%r2Bxc#}yB1G7b{mX>v6m_Q&9JaZ{CD8Xmur5MEud4!0b_ZZ)|SZx?6znP{v*P<4U zzej+h7J@+E`(o$n&sUp~1P9}XoF-e#0Ja@YfWmYkS2~`oZ~~r;3g<9$h~w6c4h}P# zWbX44**{u6Z`=9yRWVI8vOk-5cDIo~%@KXtx6nrxL9KK1H%B$jT8p?Woo+yg_3d+- z`W-uv*I)ri4C8z88{7yMT zhx<@^5ORI*H#?Kb?nwp}@%%UA3HOHx|JLkB>g6Z9&pfjmHF56rmHS0Um;3eI;h0A4 zp3Nk?zt+?q8LdE){xz+*AEH2LSp21hRfUADm*RT(gwj_g78R|$_-^?+f`U;A!)q9X z+?1WWckfKeCD`qR;VwG`p)FQw-0hdB=B$R{JjUvd~_?sOiIeXx-dSz@oM?|I&T)M<*St*>rt&G zgyPH~d$8y+Mzjj8!Z4r_TKd|%&ue}sdlY`9s#}Mw;~r2Sc&r3vKJDr48Jxblk{y(o z?wGC}l)BPFA;FhE+&GvV8~g9W>x{HB>FE%Zo}PB*I^*HLv9Za6A8ri3 z6f)4&)p+D^NM$gn6q`SMa8OLVND`4Q674_j@0Z6oJIBcT`+2LtdUapKfn(`i!Zis1 z28{UpmEL0UO7Hx57}$j;tmz6%v$em>(xi!C7%(Kt*t1ft_N-JHD`5Z_7HQI6W&zjD zIk$<#-_*SUE5%FPvJh#d7s7k~uezQ{EL5n!ArfbD#)I-B{FoU-y}sUlUeX7OA|kQa zgZ?;Gmn=bdO(WDY8^iER7Y{ zzbhzs!Aee1Dp@b`^WW8r4>$i}V9mc{@B8`PCoHLC9@$s6c&&0zLuBYw`fT>$GI2oz zR>|NGWI}5F}bXFI6>I*TiVubUMFZSlPH!E~>U7M2Rhzt`%C9%J?OSlEizf%H)`T>RO*RfsaQ}6O zPhw(+&+GdF9;e6PClbn;<3Ri0FQ`SLqid0Z_xD3K-*lb3d!$cXPyv4i%w4mBHA_>d z4g05GdC0WVW<5CmZ{Oy*MlQ{BefyTl@p!1Hl_8(s++Rvb(L{zMyvo^V6!@sXJ1VNc z`@KUEaO1pRxV%?9?(5=%TE>rULi=&EFN-3QrU`DcWRHC97ypdO?`A)|pMdoc{NLs9 z+HG5DB%U&D;GmLqpQSvQHlXB@Xj`|1*Ixdw{`r;Vc(UUo=yfRh75Q}^TD6=p|AJLR zc-3;e>Q7>Q>)e`$6xOkQ`2$0FL-`*qpUOUbP{|s)`*5n_;SfuC5LhJ(dbTJ-=R+TV zghH-%z3h{;rX-Tdi7ArSmwjEw)-Ayyvay$qm)3@B!?l;zHtze?@#%r$rb#4q89j$i zm(x?<0r2J!UGe?xr%FZ2B(4#z_NP#k`hV?L?5$t+EpLkwkw}~$e^5t1}rd_Jmvp`AOAy-RhNn`pRm(|m&bANu4GRD8$&)}=OlfJ>uGjqu zBy2fC=^rMWe3kVIMRgH@aZxmv-Z`}9n;(jGfOoy?{Uw!O9G_RKXq0r)r+ z=IxJ{#pG5>$<441-u&z9E>^~#h%YWa5wDCDe=yrzS!}i zC{y-C8<@ZQzg)dq{w;BM2@BU&G+v9$igeJ+KnwKnYnU>ClH!#Gm!02&Y(b6PBUmiQ zDgZuYCyu&69)ImLhG(tTXHq?mru4|5>hxJFu&;xRe*UM65fas^`Jo(>VeB_J0LlaG zgA~=xuc_mlD`0F7OXa(gvKz!gEpUAM4LgOcMGPZ#Ex!17IR|f0g!`ae;jwsMioRIX zc>hj1P6EHAa;jUpes77=A~#L0sG)#W3yJpbwViGClzZ9{Z1E|Mo`yb#}cyh>eVaxlz-F*kXTKOrfhxmdkUD3`YhOLF3y ziAjEfBxWHqNf5rUM^@>)L+cL@k9S`4!LF+Ot_G^601TE0vgoL81F%jFlnH9)e)}2w zI*etG1wRB#nVnXOhArrO!_(9oz?xs%z} z$GM?Jnuf~hl6e{y&Y?H984{aLKRY4>L%pwFZoc|>`Jy6?R6hr1@=&4K%G46G6 z{6`(m4dLMp&Ng?yt7=!bX>tv3aMo#ZZU}b;s@8Yc22`i1m2XN2Oz(pMr= zNF<`I%T0nVn3&!VNQ`ylXfy`DOu4qEzczC{n?2e}A4HF4knZG0Dbu@ktFr6}A;~2- z#7Z)lp}uviju{t+2?^r;ObxmgA;n?$H)g6|-RdAP<1qHvh*!J6pE-B$*Ixt zz5t7tS%WD7!Okapu}N9r+9kYJbMxG(3hUi;k0L;x|9VmJ54PXckoqCPr?tCof3>o= zX=P8kA`I+ZPS|(pd52z$BML@6nyH5`lMPHChHIs>n>OkTTCXp9d>I9l9t`dy1nkai z$_P!~_5Jqkie02tR7=B)*hM_14l!&9nFPa}FAW({k7Cw0Wk~iI-bLA1YDf3!Ez&}1 zyE#|VTz!IYw-4_~b|~}+5;T2w_~-zi#^9Nom9D__-`-vvgFF3yDrI8#e!0PNV$q!nKBksFlj&`#lt$Ft{<^O*QZAflM*2nIP?H6MS zha(SPKXqdM;@Ls#LA(l!f$X+E*6NaYDcT9k(Kj|Qtq10H88H*ZaSJgCz#9UWgFd0D!u0l$uT=Ehqa{A%*h8GjM^=%F79;Hhy)V?d`T&v%;%H&C8be(tU&a~(Q;tbLVliU ziDf(=JgD76l}f3WDGvbOWlymQQ0-GH8@inKfJ2LaVp9+i7qL&F*dG}eQDBRHhNLMJ z3I!eM!{W@JE5YW;j5d7*V2$v>qs}CE2Ko%pYDF)1=M*|HHyO*5CT4~Sn*adc_9>Mz zM;X?)*CmF6j)=nXbZ!S{I$#t1)5$q?d`-++_mxl*B{~VY%6%tjt%Q$|ofL`$R3=Ih7zKrW{N@yj%KntDJw?@J7wFrTQDsh9`stn*uaY}Kq%+B`n&SvJe)rc;OJs=F`Z5qn~UjS z4o$4H7Lj8M;~_3YSQ?+E9LXv?%>cRbO`kDbi2fO~NuIobht|AQ$G=i%LVgQCD9;EWLQ%*hd8Tg^WTyd- z(Sxeq8F)t3J2;@~pN6MZ{r#~LMOhtOrzn?5|0=78>lLLyDAx|mH(~n)GjX^eX1rg% zNub=2Bd1gbCL~k`kmTSonzi3!9fwk#0;f=_*KziHuvq&%*KsJ-$#4p#Y8_{vCo{JE zc=dL8`|+CcisMx~;ho1TzZ4`t!6rWjLOGmXpDkFmD=TZ(JZm;85l8x5t4x=UuJVsNuxvq{Qir6LGlA1~3hIP|xs!CEy z*aXq)xUH^W5}F+2;}(_{K=^{lh3uIz@BmVdrSC!*`x9lL6pOQrJu}h~y)- zw`stK%gAE@Mbg^3WIqz|UmjMG5ct3%6`r7B1-76cO6vLcT1dw>G~f{a!*x8TR89mM zb_f6oOz^M*66`@cMsXD9={HWK7li13`V{gX<#7?xMf`iH~py9o1Z=v`gpu83@t4q;sF`>v(Fo{X0#sxcT_w=Rd|);RFVY#Y#-(=#sf4CL&EXP)B#Zr`qWm3n0R&qu z2B(jmzENxU;qjyEx6XWR_&43CAJDa-Ow^x@VIY zBeYlbRF-rG^+sZ;l4T7@JC|F^)Ya=2unziA$%f&(J6j6z~^w2-KF zR@e&BX1Ck+;zNUxStg2{dzNlEGIL2*whF_}Z!qTi|mdY}C-_e-ApM#Ot6_&!I&M+Hd!sARrV(Ni{w?kq-tcP{5ws2(! zgf@a%_z`I)%;l?tlG3;DDipR{{3HYhxOn^#W!uN5JeMFp&%Z7F`6-`5U4q=O@U~z> zp-Exet>`XcoOzn`JJ5Pg9Hg2u!Uj?`b6UflbSuq6x@XlLRLmr6tgU#Sb9Up;C~*cpo0IplrGm911iEAKHd?@2qQ*M0tBh3x`_by*)P zBnmSH`v>36I3Zq0OvH%h4)oVKE#@Uz#7H}H#RivAZvjoh?L%W>Z9pI58f>^QVwm?b z8A+Of{jP`e7yKE2$nWw?{1~^n5?)4)s2iMxBGh4RZsul;#4!8@LogV&(1`WSHI#Z$ zcZyP9-9{2PAqUQ9=75tVvYkoqPQB3MS??91-!-{SqFdC_H*Ou;01S~GTGa6t9(w%0 zxA4yWm!Mv{_V|B&W5v^WUl5X4xf%!B7uqH{E_TjUwD?-i^N}}2-09tq&0{-DZ!Vfw zWwS*vP(IdeotE5~`WdU*mb3W;59BO>YW~Gkoh=+5+r*MP=8dU?l#RKrhp(%`78)r^ zR8@l^Ch2F027{_b#}ucUlp?Dg+sqX7c&r7TN}iXi0FN^o>kAf#^+-y#MaK=3H2`CX zqS6PaipqJpCF}(};*B^m=#$f5Zi4fWDMZ308%?Ds{))e%C>rClD^MweEU*F2dw-1+ z;Zk3k=BAdRi8N>H3+r@@#Kp(qE>&^kPsJ`+D%kCI3oM0QPykMGNUwHbvKZE`*ANpp zp+Lrlons(d{rdQKZU{Se+=TD?fg!@;-ax z8(7^hDX@O14g}5H*A?)<6-PnB$5|we00DNuS$GMhVpza~2P`*D>k|~LuL7~+;fqf$ z?fd^feAYGa6MX~y%=|fjO9|qYs)4^6G1%|dks)8de!aY%fK7ic4jNt0vnzcepUl`7U&w|u|#&z3@5MwoFEcI^ew&y<(Ycf*Q@#*ro3M? zW%|hi>~{M^$&=-FyOo_jdQ+W}V|fLP!W!!1U=*)7#_!OjLNR&ikdas5MZeJIm~xd9 zN-Oz_=GknqO!#_nl<2WI${z8?vL^_R*fm)i+dK|~bCa&Euop&RD25zAJOo1zsu#BL zh9N7#g)BqM&R#LmG@2t^gw7^NhYW=|HIa6^J<`e1SN;H!sw40!s`~Wy&YA08qE!6w zc@rYaNTk5A;WRqXmaQ!mq^FFQ2uIb?K-U zZw69;943mVc-&SJ1AC=ggeBYJC>{((q7~i6C&$xFZMJx3^|Qfn#h-v}Yoxi64tI7# z6Fy_koEhQJ$WlQS9?Gg{%$q9T@46i@IUYK!cxyeco)8jL`pi_c z_m}C3V8B>$4x2e3W?D(dz2)>Gyrh$>HIpRCtjfL*UK6jZ ztXgQ~6%eJEXbOKj-$cD>yl@_(OppU7lx_I=gCYiqUn>`9{K;htl;I@7Uud~N6D~@}tN9R>)E0y<@Be#v|Dh^AJQBGX_cVr#)R7nRe7=V7;6wNT9?QMG6s1*RA!z#*78bURFj?dJ_OTWg zTI1s5tmcTeg@ygJ@T{<~S9BE5B)XRjUu6(v6i5b?0hJfBttb$bJAf2K=wEwn#GkN0>AavS1fnh1+l!ZbL;0_ohJw+=hE_8?M4GSR)KFBw8tf z#?c^Z&R?Y}gv430Ux`{Xo`WGsVaY)bQnAu(3!;HV%m)4P*9PzCNL_h zWnI6g=brl2Z5g%LaVZV(%~=n?P8+?i4_5ZqcY2^pl~HvW+r4zCy0m(E<=RSirKzLB zmUNHz90u-WaGPitDjj(vX?G|-NjLl|QAsh1HIedXD(C--1`;CZ!=~Se=6*0uN=(~#qElr~;zC}K- z5>Sb&mK_5!US*ePx4Yf$!z8-j4J^?FYheZSaln2PeNU4TO*EN)fc*~WV}cd1R%yA? zfnrwEswo??lTRJiZ;&8pgfxLy@sz#fLjAfcY%QPzC709!xZ2b&SO7!bHe2^SAsGe+ya4p1>YGf+1OEm=z4UYU%sw>TDXDKwjD)&JyNV^&QIM3xP)nqO| z&Tr%oToG`5J2c`zMx->b;waKIXnnl0@;K>Ae%Q`C$c8h}sHBMHs;VZ7s;ZXn5b6g9 zCkw&B^<|LyfdaeXB<0PQNJq4St;0#!4GKsOtY?UZGDJ*Q6QK+x=|nTslUe8Y)B$cm zHcC<~WWz0N!-#4)1=(^El}{aW(S~D@gMOv?RXi)eKFH8Dk)iH#+h~fII-2JA&G&dp z!Hn59NQaHt+_!p(rFGS3CGTB+fwe=V4u&A-MihkP7S{~@K~=$D%nF(Jb3|=btsU|6 zyqS@;OP@$>k7uVw&CL8;il-lO{_130y~s>IQaqiN*}xDD>9D*UyoBYDj)s#^16S+^ zlB{J$j|9Gw$!tEb4STW-w!}zLvXRAtnTuSmsrm{&VwQzJ1X<$rnE;EvvWE4IlwPVyd3mHH;1O%4?&mp{kWSaahLka z^Z8OhyirTVL(a}co;3wG4i+Qn9oXyQ+fPo?7+6Dd&?<>z)AYj%5F+~#I=CJq^)OfH(Z7b-4K6U{1{z!Yo5BeBF_xXu=b zR0Hvx0%$&dYqFOM-N!eFf*ge{wpi(ghB^+cV~9TQz!e9uiv|J(5H)HS5cL&qB@7Qy1{wg>p!#S6US5gCqk?Jcc;;W)EG2KTG74QB1oUvF8 z=6hk9FLn*>fjPutYSva^&>8MyI?`viiwE06p7esZO2*;(@bx;s-%kDP#W79*jVRv zy~>R`-iC4jMUr{kcoP^~XMrqO1@j>_;MXvq$}hI~F;lIuqD?#ZEwx@=zIf)$xzK(i zr%s(ZepIACe0h@*OS9X*cRGZ|(p37D<~3Y!7v5Zr@8P{0@;0r`%*fev=@aSY!+OYo1&~_LA166;rk;o7n-u-!QNw6l zZ9tcOo3l(bllnxGWD3-=a-P=UQPwaRlEIMK{=QnM7AsiHC|5^{d4%0eBbnw{c0AZ^ zu&pDk>Ne3nwtbVux+d+%mUPK!z9qM?Uy!$!_BJRPvK903Li?=&4F;t$pHAu0nn4DS z=T=GWwvr^ZtzB}`FUtUAUlT5n8?{=KDM?diSYPlRe+(Zn>|&)+fybNvM@k z=kLI9lL9|Dsi{AZ-RM|vqzK_GbTh(b9Q(I(w~^umwQIByt_Zd$)kv|hymHWvX`eJo zMQD$Va%BOoHlmcdSQ^b+QZo27Dg3R`N@X%q&-&a%`^rI%hz)ys=mY*ZOKZN@=k^~;l%G6jOtc&5;0?M!jhGSiz^=3E*E8v(TmXN>ZxA*BNAO&(gQ5nJF$FYj-P1hQZnuv$_iWuX z!qIJ-Y`dAJ&=mSfI8U9;uoyBSGf~@!)4ZVHZcJf2HMKi->{we4JPm_aB?lX;CJOov zJ%{2iXh&I{>EHMpw#62};UzU7fj{Oqc`|q8c6IQ!aP!5%r>=Ru`ez|p?ZOYUK71J; z+p|7i&GGF>uTJGF797aU$&3-2vxjq*ruL--`h`E>XZbGf?Ru6!pkF9Kle#qL@L4lP zpcw~>A3jKukrGg=HBv%Nt@gu*mQj)<>Di^ImN%gm;DLo^ev@bOo5DhvWyZER0o%f? zg}Ekrh8@o&K2kdfQz6qxEf)$n{GUJ3ubQU3xZ*STC)M(+=|_*x-hKxkp51@N@vZmM z7oMU;jYg>YTv>Ae<=1UMNl0X)!LSo9xy*+K%cl=N@adQft?3@$`%cr@E-I{J$emDpKpXM>6U1h-`pgGrE3=j1J`h)! z&n!0^!WIx6;z3;0Pac0H>sQ_q|MUEYwa3oh`6H#StbnJd+~R}vjMRCboH_Z_C@_-& z98Yhq+g_HFBI@{^kK^tkCGp&BxK>+n?rwlxepitcp1XzOV_ zR;qm|H&o@%2wp&-R4wGRRZcDN#)AKewV{5(AJLR5 zY$b}|iXxS0D;=P>d3Xsj6t7Lf7A8oWji?KO_dXLIL7Ri7sbuo-Yyx`{|7;G3kichiA|79!%>{p~dNwx{F#K#Dc*5T-hGPffBKb3&iaY;o z0s+`Qn*(y7VNM9$nmua7i)=9R3aE9C`S>}P>2|0ArCpoMI}Pc=y}L6 zd^knKUDYECJ}5^TG6lh#7YaAAAf%ykqn9HOZQTgep$O?H`QEVt;V3~BijlpU9GOXcj1RQ6JNr>FtncX|i-AOs=sfdk<= zj{1q%bPtrE6m_=P7$C;$n!+4bpzx7nCCEV`KN&?J0^tE;P*AwZ1SfBY^+3-;1qo91 Qcggr}O&OHjDH#9&0Fv$o4E(ai6 z!AEh4fQGAGQ=(fMmQ0d7Z?9OHtp{ls;s*tsitxYD`t*l(h1o;z&EuJ zr!^ZpU|E&rfb7VWBBi}20!$A%IiMq*mh~EYwWIOwTH-aFlE@I&0YM2sO(V5ZYdeqK z0aafgG>zl@-#4|su4M0fud3U6ATR_5Y@V4%0dy8APIZ;6&cw1>wkC1b*)y5N{B-?x z|B@g)VmtAG2|_T#4F|k#{t>{$yoB%|G2uag2MA#(k$?-D04A_~uY?d{%M2uO!hVm| z5j#W+E!g6!(nKsG=thkg$7+)*ejI?iN!Lo~^#86uM7q@gLP}i-Y!X@$NnfD@ccG=B4Q!q z8--mMGf+tC8^3|6Af-p4|ZUyij)tKsaDhiA}{L zDjA_fRQ}#ns}zt~XU{krWYnCG!pkls-v7T__}#yI^cw(=4S*^FAXN*3(y2*`Hz2j! z-Dm*6n+*^IK_g?w@%&f|avWD0gO%2qb0$cgcd5sDO}6QT7jAYJ1mXGo+w`-YJF<6I zO9AG70pRp0nv~X?H=`Yr)+5?KBkBKdjNy~ugK-45N3xGIhWO7Ckl_=UHpg~|uwtlE zZXa@)GAY~5>C+Tl{7sB^wjp3yb*t*E z-dVg(FDUUuU=NkYT*zKpKo0Q|-+jKY-*34xL-;%avF$Z2+P@eg%U7=7PR_Tw19BMu zwdVi-C-Um)BdvC9v{bD7UV7PE{MtYQu8*uZACvYnmmW-t3GVp66`CpIoV z0U<5A>E$Rc=29-_O0MQQZr~p&f>!_}ebnyEROrv+N1C0eExTBSAGslCL3Ncu;l5Qb>)JN+2B^v=`;iM{cB z?7Em4?J$<>Uwn`ExP-~%o8Ic77%C``NtBgLW*kGv@I>W#GzmjBl~rRHae8)FHMy$r zAt@CU$|@&ptE{GM*=3GwPwg_{s7SAZ2&0H;87bA&P)$YpzHHSLsz)oxRR-JgR92bg zr+X$b`LgAyAd?Kg;R7Dx3Qi$lKkHe@WDaBm_h2Y^Q8?U3^fy?9J;Zk3qF`&z>G3@I zs;Wna6JMa&_Ne4ZsHL_lYSPZ8EdEULNXgq2+A1y=vLqYwKo+$<5%%CZGO8}^8^lUy+O;)Ah9NvN-2c=3l_+!(nGK?jg;i9Us={*lchANLsSeERfXQ! z)lAazj}R!-B&qCftE>*v%ejHLqsfP54S`1HBP_zM=pfVVz1>32ds^B?R&{MLMywL7pz?eE^ubh5mJEvz%x&^oeeGLSoK>z&fwL$;FZxvHhc`RZHfdt+5VP+-wb zI~ky!vbChP8d3uvSgTXI|A6Wt%{$!3B^-y%Zq_oNiR2lEfx*4c8Yr-0@K~xo#49X0 zoO{B;80!z-L@G$jL1q)ZPT5eE0VHLa0mq;#lkbtbfzZ}8#@3MUkP!`>VIsCna#u^s z$juTPhI%@dGp*YH1*&A5u+urv&Fi-H!A-5{6qGRI5YRqKwOvk**3do&lwRjLo8ei9;# zA;wvz!Z5aLY_lx7*i8;KsG;6ut;x^t5v7y0Ok@NZjU;9m=)2wGTau>5l%&k#;{=^n zv6f6YZnr|NB-;uY;IC8cTjn_W_9R7?#rD>|Y!LrYoL5E2ti7ye?#>4@Mt$j1g3pE+ zgdiNCJEEYtn3$UA?cS85u_S6vx}qSLmlj|NFY7WE@YV(hyQ!v-4I4aybzcRnuu(Xa z)L?XriZDR^u!^~1lWY)XQEkFc$e8dPL%-=^7V{z&OjvRT2Cj0A1L)5%KJ@b(8Zq>h zp3-$XNu64+=^7=2-|z*m@BlY(0Vfb(vX$jRa#MaNT-EW#D@v-fU2*!L2A{J|SRb*G zyp`8Wib;OLqEQBMTQFni|6!Y2q8MT!vnGFN>}{{i4Y#NWO5??eZ3U3Z2uIywcC+- z+c}AW_cZtW?s5WyTDpP13@79yLDxwW`R>Bd6|_Hh_zWq0#cw!*jcj@*+zN zQVAtsSNO0SS^Mabq7>Cd1~o!f*?kgm++ayuOB6f~&@tkjsJ6Www~U?0HcGSI3K`k> zM#JE$`;m82raq3;tlJ8Ln?gq30ay(S3KC)-No=p*i=4EU5~w*9#&39w^Vo>l7>T$* zAFPk6C=J_L5aj&zccPFyy{Ts(QiAkHJyoHrG^+f4guL1+B!8^?DvfA)B%GU*F0RC8a;4=h9(mp_D3hma0nGnZsVP zvuq=q$`V*-R+HtYf5@Qwbez`Hbn;VAYE0!RH~zzSe8hcR#9?g3a?Hkfq{EB;7>fuV z$$waoWA=S4yh%d%C4kfsERppPB}%@O z2lSDctnG}XCJuYSesUFWL@CG|hl}t93Jrdxi5G~fJWGjeUBTvSZHZiQcf}hi ztlb9{QOFbN*pLrxkjG=ZYVK7&z*N>MCE4p1g}k;RIp(=!+{ZyI#YhZ9d(`L1tB@bR zDL6aP1kxbt!(?mbX9OwGdIX9Jkz`q71fc~mBpW<44Nxmq^gt~f5E_G zoW*u5#AtZYy=1xy)v;J1{-GA6u!U$uQ%>nCg^&v|5r+FIAVV%&hFDWqEd#xWdCTA zAbqE@x*%e3J1GOBR zIDmFj^*>)UcB3Rbn5Z$WxprK;s@>O~Xu951Z>M+EyXigkLHZDVg#KCo-^ghcH(D7z zjlRYxW2~{?xM18i?wYch$INdQH!GSu%;V-+^P>5{d}aO~hzi68vIKGm3IvLB#$}$B z=i=3Q9bS*O;%#|n-h=nz{rC{>;R!s6r}GhfBA?Bd@!R|ff5YE%J=i$dJlHk(Ftc!G z>r6NE-^~9-B~e#26pcl9kuFp*QcM+d#C)+(EEQ|SISKAWI4jBWTcfNE)=TS+^*)?6 zTr^xc+#=jH+#~$>dvUvmJ;|P9udr9yTkM_oE&GH0#r|d+_7B^&f3g2^ayYr1dd?8X z=P1rBXMwZaS?6qWt~#$B!_Dsc-L39+cc**6ee8a6UHA8&cxcWanLlp+gaz{!epPR; z_tjUgZ%{w5{y_ba`k#$_W2eThjo%uR8;cfK7GJygwZ#iptpZTN{y4CP+IqDYYVXy) zsC`=-8;j8B=40E;&+fB7KD9La^9M{%%*}3%ZZK)%xowx6F!|!iUmUvsC$Bz!?$k>r zUpxKI$uEvBoK~E7e^Q;i!Mu0cub$C8W4#%h%sra^M>1#LOOiXM{=7)f;itYq^~;Ed#>SC|YXrFgTXCH_915pNN#ir$qHvdJ%ka=>1PD(FcMjK!`ocNE|3J89xRIV2oE@BLb4GB=dkorx zZ-ZC#qrqpvwBRHl*a8T4(eDF#ef>;}_pIlYzt-35#GmWmU*4d+o`1DB)nDk(_g8v% zdEa=~%lF}3;@g0?!21>Orh9k$xBI68-VWZjhQpS?D^|hU?+q&TG!o;&gGF=oXKO zrQ#iji;<>t`7ZW__Ds8IFJTMqsq7m2c6-#eSqJO0mRP@7jofOv%d@-W2m}BC-3I`` zW*54NZUNNk!llqfZ(Nj4y48=;&VIni9<prNr9PjJOHZZD*&X!GA0#}S_d1JK4g*J zVNOO=u9`yDUc|1xq9r=0QE$=(hM{hFjM$+0n%Rp;Umz&3WohbErwvn{>BUmNSCYpS z9L!0vkQ=Z-{50Ep_1EWswuy$4on`$OGb}LUnskB5vNs8rW!jWHEqSje(TYWQW0qk> z3M?)f4QS9~W?0nPavq5tGup^pf`k_Of-dl?YR-)XOXAF&fR=QE#0FkzMC+;E;i+ZP zPXzo?KQklf&}C-m5H^FO=ah6u3IcN@1nP4aAB0V(4p(;a|Pf)=Oy$Sz;;=h9~50@b^K$a0KNed7mTk3~} zcbtVyoF+L&M7wDC@OvFc@6`&uG)% z<;yFHV-n%&nna4V#DXP$$ZD=g8i);CTU%Jr>j3BAlP16u5U>{j+&{!R5ikZ1&v|!m z@xybT@DWk?=r)zxR0@F{RN%P4x!|iO5QikmL)5lW2)pg{lz?d_pdl75#zbr63dWKG z{rdWI%ot7FeaeYzVeHtk z7!E*uz}!6AURl|<+G?%FC@>ak6#zP`lB6P%l9tLKoehG~Q*{li@`2XSXlNMR!neJ* zX)|Vlg-hXpq;MSB55s=EZ$$CFYvela^98Sw*V5V}r8SaD1d}Kz=7}|p%bI)?srdQp zLr0NLY|~u85so~HqAbgjL`xwS2Vqk*784x+J%elV^zhw`OD;Lj{0QsI!)@{)w!#QkJ#p z0MQ;aBbncva4gV#ltwYx!(+W0HI0GPwD9cC*?siaD0E zTE6{kXLD0G%8$W(KKK6Gv)T3W`@2P9y!_y(Rlkkm7nVP2`Ojw_?Po9T)y-+?jdTCT zqzZ3s6~VOh?w6kF&b_*Q?;u6I7g8+tz8zzdV@N4uSaUoc~s! zX5PV9qd9$*1Tlx*Oa|?G+&sXpk8^)gg*UL)8cqDw9MTpw-o}fsh@@iTn`cM5)@Yjb z4E0a=^;=t&e`E43xH~Pq+v6|6T+dInt8d}0t*vYD!yDe(`a4*;KK`>-%YP*K$!7mDqR!kB)YF{Wee`z^-XRz)}d}X0H%{jbefd zaS4vMg(5`vJZF?s+-)R$U$Kig%bZGTFC^v)h2MZ_%b-R*>6Af)KXJ{(q+P`6AYe{~ z$Yv={t*TDP@>b&9o## z7blH+a`w_Ql~e%|or#jA7|&Z(b~8S@AOy_Pd_BN`%}cL!Kv{`V(tN#P6?-IR?x0$t z>wHWI=oA9Fgs5D0bV`-X!kuNUtAA0;@V`yv#;Z}%e8HS@QnrfmoLfoBb}5ltcumZg zBO%ubsa{|ra!DdR+1^aOMNTx8#z(!-Hk0GgmGbc66uU-<*+}uq{RJ@QOdU(1xI%1r z)`zHN-!Np;C_7IxH^yuc`TPA7P}6@?`Z)X`f>Oi~pdGik@91a?Km*|T{)fgMfN-#3 zA%xc>`p!Vi32WIdet6#OY;^hpPtTeN#@oRW$4cDrM|ON}?g4;ZBRtiV_8>rGfw#(5 z6Hic$qR z#!PWD2^Em1ojP_#tn26u)Ra`NIBAa52-y#ad^IzFnf(`Ho*MyFRTELMN8|$&9tLwE z)Tl%wAO_UgdLN*kt2c3WN6A+c;1Tc}hCwZe0*eo@CAOjwK17q(J`!(7MY|$GL}QS6 z8mh7qXc`fA?3;mdqx5{uXn3}1_$o%bW#wXXsuUp`x&D^ zei%mc6>`QdL__-=$v{cS6ht`*`V0fV`eQLYXO)P|)e~V%D&X-5pt;)wWfu)6$()<1MvB4Rmd!ELvcf=D z>}O$ln2zpxr<&fob`fV#4AL$I>|f(8L|soW`G^pII=QzDqK{{cENl_;VSdv;Bs-u3 zn>kp2*4S&2P+Wz(f*^37QYbVOwZd=%@j$7G)x_i5nLRr+1VR(_NTOa**r7yd&^aM!&`2 zL|%)DWOG9?Am~!-6hbcrdcsM@tzts4?Ud$Ll1{zx!JYVis5EvxQYF?TF6x8>=hyG+ z(varX5_U13m2smg`Fmx458^v)e1r6FGgXaroq#nc(RWX98p!z;uC^Va4d>j+QR7Mf zZBT1%nT_qi`m=ErYEYV`Ib%$X#F2x!_DeXfrD-CXEzOd-NNJIt)w;^!R|tV-BcUT* zN41PA*lyNzQ=037*zC{d>g#oLcG|WT)KWc()m>!HSY?WLo<~vpNy7j#%u-yC9z5E2 zAigK&w@CjcTi>S7xefVJ+p{DNOPFDblTAu>=r7sS80jB&xDmXqejF0n^xvGk<6&bp z$s}qmGcGH3!gQ0F@-CK)?e4T?6H{yUhM;A^N`OgDJz@5QL&+vAYY8Oj1%Oy(ZGk1( zM1@}YkHu=@`IJ~iz*&U}$1yC0(~CrTEj|J~H%MW^Sw-{xSKtjX$m;6|=^NSO8kWJX z2pG2N5iAZz?OvDe3Q&q~-@}sE2M^UE@yaR;T%< z*`$4Qr~m|IkkRuMvnI<);p_a{_(LFJ2ubQyQf6F5OeGg7IVnbx&B&39O{SyCbumyQ zax_l>%YZ?`cY`1=gCwhGU^`WaqDn+EK~pnPxSE7*X@pV{PD?rsZkV)oYZ>`f{j8tt z=q!N& z9PWq~WC16y<*h2#$>8>^^sHnxJOu02FasQ&;yxu7VD1rxIPa$~Fy$5QR?g(thufRy zX{o-f0RbUqe1aTq6Uda8NX)#~omP%~66cdGq zJ*90ab6VdX?E1`IGXl0o`2uN5t@NIMyyYL)yc&vK+0YO5zl`PW88`fy4gYXr!GVBT z0Wx5Qm#iA~m3#%iPnFx@_9yw1<)*u}V%?^o@eGojI%8kAf|2#88a7n@C=8o2q<7kENt|6mtY5!nJ_!L?2bE5xN=(}#r3?T8^~AT5@!x@%gI zG7(&g99`4~PB2nVhrnDOxIP*KMvMT4S5esvoZS7s#4lJXsWS`ah(17ub6vWOT^`UG zI1MCvnVCvTV{~*nkL_)Oi3mX~YRbYRyyIHdya5lWS~_gI`NI@Y?3yBRZ{Z0EzL{flMN4fDy&Rptct*5E9cn_NkeUk1RE#8ZrL6Y!vsrBbJ z>OHUwY;2A;*WWEhG9pB*t&|7TB)@I<_6Ok6krcKh9E^ePr~`FYmJkGVElRF725W4S zC@fwccNsT=gCB=)uXaX{Ee(ZXw*0mBeWi8}A>BK4$A9yNhyN-E!NfP-w7CaZ-@zZf zOp=eox1D;@TJOK@DdcYORy_d={kOg8t%;;njo-0AIEeKf4h-~|FyyR!5bXDTg_)8y z>+(iep2_69BD|__C-s9P{w*bmcypLyyy&({v&l-b{OW^FdfXL{%-Q6Im8tuGW8T;< z4vhVl*2pQ`(!)N({MjTXN6puL3Wr-@6ceSFJU1;==u{vd0UAkRGKkfyv_%H7c0eZO zbCdP`G1~q-T@s&mu0j}=@TT#8k_n{)*^M5hTFV&$!zO^KuMeI`-u%jfc?PL0_2FqL ztuFLZ`RoU;bfyX;G|Fq{DqBQGW7u|C3|w7yR%WUB90~|p3v1F`wQ(alMrE;GfsIE2ysv`D^4oY`5+AfB`V6pwR zEg9vMO3=J1!yA^{0j0|`RPVHS$n1_yG?xHT3xi|$e)ckQvf8cD$-rdTO1(mAH1AKl z(tv9auO$`}B~dlQFqQbq6}5DK6F@WN&xd%BAI_E9r`_q|I>yFkXx<MGRjq)CWrcCFVj>}tY-!Ce}2lBf5iYBMOcsu%8eg>&Cm`lq(S z0c6TM%41RK4I>R9v446*nY}hK)+T&r!xLi*{)p1jhx1Kil(og!*xBI)z#SVqTR5js zRR5^x4$AL7KI0Q~vT2OYw#C@F1#{%=9r=2=nU+5M$EGnlLC@Z`y~Z%4Qwo<09xYPm zTr+W&Ps~8}760R6c!HjtiF4|?WA$cwCx|9KZt8+TpB^c^uO}s z3vzUJEoBfNIB~MP^(hY@cwTSohPZhQ5uIxcK+})LD3g$%ABSO>);MZP4qs+Uk{0H>&lk64dFKiNm;I2IKm&7-UA$8gju{ofz?-(c z<;Sj8^IC18mr+KzE8i_v<9U*?z}noh5^2t8v855!jTlel?PM&K6u%iBRnKo%`I->( z%O1CuP*(hR6geIJrlV=ruccpF)k3Z3q9>?e1Gb3}*BDny-{e%4|3oRCmNN3MZneZ@ zw)&`#D?CH;OtaOU<}p;EEdl5~tDrgOyFv@z+ZfTkQ%L$wJ0+RM!sq(()Tbka)e+U% z99AEl{2~tynPP$POWLH4e&@`rrJ7f>WGPj?3F20tbHB>6*onRHXr=DT^{n`(3nAUXWhvc3`t9!Y6xl9wl2$XW zl$u{fW>w?GmSM5isV8a0WVSg+hASM)Vz=TpQncsxhAOv)K=S%-cFnbeBSp1czIWLh zMrigIuiMEgHB4o8O|ff<%2uPN;5JgM!_?7^75~5H`?okEPKKc5IDE-y6qyu}PKG0* zQbgY=7*nKhz8TRd_N}XaCg%+A*km*I>p{iFv!Bn`i)4;2jkWGM3a$6l_c%Z>jvn)=j4`+( zpqGNVd$p<2kn{v1NoQM~pvF5WA>A)%XM#T}r%|5u5;VlLADa@vrZv(eyCJC96J!$> z&W|bYm{BE>EAGV0`Ks+SS=0r&LsYnHHOk6ML^i+GK*3vHGIlv1!=)b?b;((w$c$|i z87>yzo3+{fAeL;+Bd;)PfX2{31B|mIboffFakpfVxirbK2}8A>6wStAr|iOFCo_ag z7Zq=bTB0mgc1S&5ME9(ma03+a=Lnedv4B5d)AH#mTn5h#Dk-C?7Uajkh25+K|j^br&BDJN4v2(5RFYgD@;N4pyVsz^-Dw0 zTi!sRYe{e8`9UrUXgZ1{>UroI4F{~lQIz5#mC{Mlsr*7iVtgH(3&rVU<0a?-mHR&} zY0~LW%=odT8&@3)?My+I_em#ypR`Ok{@^_W9da*ePeG!xM|9R8U{Mr?t#vx7zsZLo z50u%xXxR4^5TXM-k6r>@M_Me=4m>ow?FpSAPLqqw(1MCE-2JpUeFO7@r9diqTD}S3hRk)HFHN;>^yFNNGCzJJq!QYbK_ptGG1( z-cJ$fJh1Y@klRWq1}u{Cu%cy@d&J#^fm*AZo;dL(nL%8f+)ABdB@;-92>DRuZ!DWE zg8(rv$)ZvcB(RyStg4h!I7z*lEIuer5f4=_i}p7daHAAWXCcD0MFvG37`(Jt-h)a# zS}m$(cyhDeJ?Gel&!=~(g%DbOJzn<@-FJ{nub%0rmuEULLd90!hHBP~Z2n}BH2+R$6QseD)wOmZ-K z(Q=oh$(JVPqdideOr_ZMG*CX21M%nx*)LdrFi(|1GPcol95a=-5}NVEx_Dwuwi9zG z|4{x>Ac|`hUJJHPB_Jw+nN2R4%Uaeoz@bsqoJ*_oO2DV{+NVk~dz%YXYUbxdnp_8% z&wch~k6lay0hpmC1B8y_$#a=ySw(bZU1~`IYj{t<)dJ{V^2V zZkqnVinMq={@dmY!J0DaZ)Q3ETdU4JeQs(ytL_9wzWtoOSE_8_>UIDU%Tw+n6;4b| zH)>5D0^t(knnkV;3_B?*oWbo2+xQkxW%`oP-&#Qe%_Z14>V4hpv}E2mt~WEXv9q2+m~pEe->d+n*HAN8 zR#I8$Kd^emyqlQe$Q+7?fJp^%Kvb6O=-b(hG_u4MW*E((Q@Tyekg;WT5_L?K@yjH` zVNn)Qc$DUOlukngE0np?xR-Y}g>jua;HSJ^&Q*z?cM$8#_N zbQI3k9Ue}vJ2&yiZXpC+l&q;GqwW~+%?>Q_!Bz+g7le*HOhA5$l8AQQMn<4OL$vVx zk5I1(GMyft>FNb!$^^!S5iIlBQgy5 zvfZCeje%`u5I?18V{hVI{K)?CF#Jiy?0M)bTOrSjCgY?=E0r5&Q}=DQolI+|r?NM8 zH~6v8;en@={QYZT7;>S5=V{aPX{ibQy2Pz&rW_pkIQ&VN-R#6e|IKx8@^0{Bd(J6# z!nWgH;y~glzmYj4m6ys&7rB_ihiVre9XWB}W`Y*??K`&opi@zVp*^fz-IirpBw z(kv(0ic>lrzy!5wDQc{MM!_&DDWw=A38p9lfvRLEg{s{Uk8aeH8~z! z+jfFC8kI5qMy78mZw^{k9O)9@8}c=exo+xKc+&0n@&a$)W{I>p#2qKO8oVcwg1%O! z86Gey>uOo?>)tWTO4zn0IPl=-R`U1Ewi7G>dQ;T zBWY?U4Uy1D5<;dY0xq{zt$_$F!*obuLOYQdgLyvY6Uop}+?ry@XcpPuYWQ?3LN$S& z{*8rLToR%d7`j}FyF!qGl}F4ko01&UQ)+pUm>|};q1BR&kv<(5#ko>*osIpgt35u| z^z6E|u{3Qo?BSRo^_oC!7tp2OVjUqZ3b=K8>rnLnf^%{ zPemFz1o(t1rwpX(K)lFmUsqeUUCtS=1DeIN2h$vC~=^OUBy@7SmLI6Si#{z6|K zWwrtm$}1jHI;G^yG(Py-+?moM&JiMET^q+zeU>7sN3ew8OTEH~-R(uXjQa(yFwPjI ziqe0Kb7svx;-!u^qtMZBV z{vw_#9K%@_hVeP+`KaPWt#KnLGS=~{hBwSV^M#Pl>k@{F@6m0K?G%}tAK&%pH{ML2 zQTr$q_Ij(vNc;tac5A9?Cp=ZpU$WC68O#HH7x)i5>cz^S6R)*zlq_JsK(I-t*cwo3 zdOwX!zC1&NXTf_xH?LIkGmx~Lk1l#Y<^w++sB|-D_}b&`04nv;=DcdtC!3kZ zrcF&qv}F_{eSMJ8>L!4`<5O2s=iD_S<95QxUt{C;kU7K^nARdA8y_%E?z*;H&dXtBBNe77!7is)Q-&ai`T1#p?(a z2lMgRf}0nOw9F8MwXc5cAX;(pN~p21&NcM66n}T8SC96IAy63aO$|NfuXnY zydOLOUEd(MK|SjGC<=dT`TJPfw93uV_GW)7-E7Tg#&UnPo^%!_1dzO%i{5bE_d2&y z3y=GP;5@qQQh0LcF#U_TaA70Kmc7~LgLizNm}^7hmiT;ZC8hA;c#*!smizG7kqi(# zXPWycMe`2_1;%Q!_EjnuibgNkbiDoXP~*8`mwIe#_{^=UwXPW+9k7lgzW_{TZwZ3G z8=IpOAs$G%YXgJAb9!^|h#-O0UnD@*!PsDp7IJXYBiIr-tMa`3@B>nD6lWSwib=lkM0FO>sc^P`%H;bGpSGb=c&1?-Bjk) z!pGaMj?}#s2cG(;mFBmyd)TNK7#Zp&FuyO*hKYGIr3$QxkNc7Yv5DMq=p8Yrc;|Jp=M}vStyGL=VsCF%pp6Erq@SE}f(&q;N z%;!U{nW#M_YZY>d2G&3FyCYBK(#GcCk2b&<rOEdLw%ns+je+LQg>)ttA793 zv16EZYJv4{FPEmLZ%7VVr>2ZIr{7u1)gr>7GS z|0`;TrzGU|1s6V;@>z|nWUn%5wLA^t-v%^O;iC^2O%I7ADUQ!NpytO@@*4IB)8Y%8 z{O@GuJ$Mj-OioTtB9Vim#Z<%}g#h5a%9}QfwaA`_<0UP$Jf{qBi3o$|i}_UFw1C1pF*SvI!p9e3nD4hi7%fO6@C@2|#2@j)XF)0!AhIe1mmkfRma|u+ zuyF?BkF+6C{)ivDosBbUy5KS4tZa!YtpihtKko-)&co&~e3Qer(BUU#Y{Bw1wd$In zv87{~Z(E_&;Zu>Q-jvVg>FMd%v;X-ONCxErQA!$SDdKnumx=f$3Gq4RvJyOs0T|9#q5w#JiV<0|MfDa0-JkZ=d zwDXGeitE*r`jhoNpWM9b*|ELuq<+QmnraYIxCdteYCur~YF)&wiv(D|bp;mg!OMGD z0MPs6$t40cprXU)icrJJoyl1?V8P#N5q2uHpg9s=Rjl2)bM5OjlR}F(xLhMqBhL5M z<$6#Ynn)CyOoiZ~!8O*=&~`R=?OSiv*WW$ewYhC)J1zx`4QHn7o3d9$)y~^_<>aPK zcR!k)^P+0ASLvHF(}%~nH()hR;vW3|l)$yhpRd(zVQ7~|L)i4DCVQm)v(L7E9=**~ zZ7K%+KTYE21_9>J3Z~^cZ^2wQ}jxu`Z_t~$_zvQhcnhMQmh=Gq`3c2&Xm zTJe95|CTA&)#e5Rz)StQ(Ki<8=IGw}9RT*fh-5b{7+aP!G8=OJz$g80bnRk6&ay{x zeE|R~`gPZlQ2)vP2)9Ek`oS?-%vXI-KyiXK3*c`ry(Qb_Yu3oOm#F2vYu0R+m#BMp zKdM(&^A8)5`Fb>%vq;*8--c)WrG@+t00W*}RmKcVAz95Z4L+ z+l_={*lbiGSwD1Cym2T-cO6L%&5BsNHdIw~FCYgQ)ipcUQ#(TgqORV3Z}o=}x-eba z_^SNJcVCH{cz-xncO7{i_y*Z{@Rd86(83JxFFF%m5f~EdyA_15VX1GEhY!_+Q@_zq~vQu@W!OW4hT;l#&Wf44j-Ez-Ncel&_x^ z=y7$Y26XHxF1AP7i;MSk1f-rm*_BZ6ZrK$I`vo5F!e_f%yxqG$=CxP=K%w{@oO%7~ zh~dOAG*n^Th_|^|`d-TJ^yOS0r~r9&Y_?#nMsJY_vu(4| zPbn9N8I0=IR`oodx%}Bwx3-p~rxhui`OQU2_A=aqn_s_}O@tW$g5a}nNjffof|#FI zP~qSLcV?GJyqjfbvFxn6@VfPHe|L*TyJooX4;Q#@UW_Vv$>PGq#Knb6l4DdnHy5l_ z^!g0nU(UhhkVb3K@xthL&Eu^2n1XS%EGGFAOoq*ZHh%<@Vf=ai0RHp%m<&Vw+h7(Z z!_JgK8nBd57r*QcO$k{d)kdS^(S`A>ar3(c(c@^0RxuRif9(XmCE%+*7tRGP7r5&M zzdftOJ@{)#+M92tA+OCpuJYM$g7w{3NKgZ6LJg>7PZ!AopfRIoe68+3w<6w`Sj)gm zq^MLWl4`Z+#sE-2ufIL`xwa+jZ9}34v>X7=0f1X{>Hun(Z)*&~$5J7+J!Vsw$Tleu zV4y<6VSc3mhAcP;R;5V5xB-=9uKkh{a$c{r7r-qgAF@D_Ul~6%(MA{;P7U?%yarztx$i<-Ex_|JdKi%w|<;?o4deBAoKAO8QL%Y2P|Aq4|oH zjT#cYpoE*=Sh^z!@1VO4I4JKsrQ$-kSF@ZsN)0$R5f)yGWtV+t=&o;hL|i3df6d4z zUS`2RlwM+0YQ{Bz8cm>v{5nC+3^_=*VaU&$amC>t+>LdQ8Rp!yx-+lYi(KwK-TjB< zasj>dM9bG^YdZ$Ha_(S9^+qjUE0&{>Ub8O3O$q_r;#Fi}2jpAiU)DGQ=cV7(!(M)q z1yL4^-jmEU&l(96$`B?RcJ;RNdYuYzmS(Px8W^dg;zYd`fJhJ8ovcOjiH-49@K;Smg~guKMWggljD<@naB zh(p_1pk=Fb3jWrLpp`2qY<(5Q@Lt-VvEFf$wTFfH=Vg70d+^hV`7vecqPYpDXY+4o z>1MH5_PKh&3B8D$HeYLJ^|X_wbS)21c>Zwoz+NRhj$h5%+?YF$NIP9qs{7(cx%}7{ zH6eXn%6m1L_l8%0cYqY#om5S8$5DOpnP4HlevBbQriWK1M~aI_CMEPFEsr8HivTQf z340P=M%onasv$|zlmf+y=>JB`GqRPqC>TkY;2(FiX(Fn%z5V+(d7djNz&A%oCMX|@Kh zWS7Mi-GG@#S2r3B<9Oim)d#f}5Z5fZ@(DrT-x~#oe?mvlpAHK)CiL`yJYpn|7;rpf z-1=bnGX`fIvPC(y@rhmK#Tnfh<;7j`iM5MzWCFQIrwi2SJaRuxQxnD8JSOB-gROiidSY>EXn0zB%f6h)6r8e#vdeQ3!(#*0RhT@kXaH4 zw`$~Ln+dA6A~DX+r7QTfIT%zGxC~DJyHzvA`$|2yuT-=85oc^T@P!dOZpZj!9!B%@ zzgq=`8o~Q{1Y@rbt_)2I9bB2QLo_Yg;eW6IB(0JRyfTR;PuB>|83Ky~hmWYEyKp$b z=@=gF;K0`h)pT~&MAsB@_4?fX4@%C;O7@Ix)d>n(m5N3;=bZwA=;fU0So^M)uQk4v zU#sP7iB%nEa)lvLAukmWuFz%iQGu6rO}-(V@~3l9wcWx+Gu)J7QxL=9fHh8{2G=?TmVAY@E^+HD zNm}_!VolA?pVogRg>*)}6dl9Ul8_YQ@qi~Lg&-s4Xw zoU{ne^BUB-yY5i!m5+*SH5B=ljw2*|#*+X@dA>LKL>efJCHZG&FJzdkjvq znOTzTEeFZtQmV%)!)3?VN@WLlZ5#J${MIVORiIoUq`~2U#_0IhX#k7&3mhMT^~C`9 zcqJrB#wpV3u*a(|<`GvtuERJ4qmKwCfBQb=Hfh&AK!zcAGrdNX&FRrl~zSlNr*zLK&IN_T;7*%5edLVw{qY+)a{{e8;(y^%k{w z?}JE*b>n5m88U?oQOVL!^6436Cte4PX8>uNw}{2|Cp_L0dv*25g}{jAHW7hON2;pr zM|r#>wLgoyo`TGcp3~DQWU1z?D`=St&VufFP6IV@I<76NG)&0?5DW>A7 zKPSQB$d)$Vw4LrON09PP+v)KH)zAwu_wLPX*)kkCJTyEM8C4=JTG62r8UHU9XWutr zorhkyu%Fit2Ze?F!0D+Ese-~?rx)!J2yf=@y;txXTs(K+tQuF#?fj(qdq!vZ~Ep3DaZhFJ7YxH`(e$B5Nf~cT@fReC~t_TfPU6Z;{$@45r)l^h$ zb>7_;dY{i72%_Y!tSkTstN;KV0OX-Wdv`S%{2Bn113*O(033>n<97A+NnTTo&oTI& zps*b+Q1R|7Asm(dQ=(aRrsE%asVQ}k9n6v z_TdQYBjY_OGTI1AaNMWvZ&&6kwg=IoRrXLBR-q*pA!Zd54@_Pmg^@ZrM@N z(xb_Of?!+2V%zoWcAowGjGf86erUe@2Az8>=slR=y9yo-et!<-tAT`vo`D~()+wUY^W(Iu}9kN zxP4uNJ<@)d<`_tVS3#q>uZ3*v;N`OfuA%GKDIWx$?+eglw1y3_p*by5GL*%9L^UUr z)+=t&nOAvz6IRmdCCJ}PEZ(g>dUhw9Ksg{?%$gi{VT3X$4b;emzzHj~jZ)l0L^?jN zfAmd;aWz4Jx7~yZy+Y1`okiab88{rnP|RGA*mm4Pgi0&N=jaRXOW_yWARt#%7SGm=^C1vY+1_;PS>UN?$_7 zgkjHrZ9`G|8&+xDQYtz&H$6Q!Hkw)*R|HZ-jmunn)y8qGg{(iql@+~Q>uQVegxT0b92%Ho(5u{Ra_$sAc z{$E3Bug(BX6Og(~IFsOY(9RNzJL%4+ly~&)p$MZX*ynriD6x>ZGr#u<)-fS3ghxj~ zzH;27m=AxKu{i!P`bskLGehGZj<$k3%=x-daw|*#UM~DCScWqt^~_e?xCgI84QO4r z^_x2LaZsffj0;{og|~`5qcFx&-<>7Tm0!>DI#Jfy_|A^ap-G{QZ^d_>?THNvJsm6P zTHYtPWEK8L(6?OBwdnfZpy6o2p5+aw&;F+R?Iq%Vef*o&BEg>M;b3Fg_SRupzKqb# zGW0$c`UUE99TR_nD$N+fAIAWsC*M-=^=Dx5g4qHQ7Qht=`K+MiP_9TQn9Yw5W%&Bv zWe&uVJ%s7Z3`qvd&LZC&7a4@ekbG86VyK_Ow3eL;zx9b=;f-Tj$&ZV?GfeQH;1tq_oGN%A z2(2o%C;6rjhnkQ?bKb_}C8~LWIjGTACyFB${6ECTuf0A@ z@IW`p>En#*9tgl;(KI(}G_B3*V$)09Wmv8we9$H5_u$HsmKbU9Su?S&&Shhf&EU%^ zZD}jbTcZn59pWliugE9jkDOvA_nbF+I9{ey%2JdngJp3J^Ufgn&lKdTZhlU9gRlqwiFy~@(7yXkxfI6)uR%OGw(F4t^y{%iG&Lh6)yv1%bkzyqY-M-loQkBdZ?$m!9_=_S3A zr}HZ_OpvyZ>c?WRekyIBAdLAdH&$W{C3@Gsl2GEOComrItDp|hy|m}=4K{^q9BdOL zF2l(b3*y_Ue(XoApNel6h?x}T9DXJrHOxuOG#zE#WO5hKFe*4kRq#JX8OzY5exa~u zA7R z?(`lLhGO0BZVbJ}+)@~J{@O(%#Jg5StSi4*PkY_88!YPeY3p>6&FqZqR(4rrc$(Fx zoVBV(6n@2BJEzL)q@4#G*iRiKoV0V)$U?`jV#;x7Zd?c+aJOBJdft_wS}$*FVvdt` z3MuDJNOahpyI#Gg=-`p}^2>xD=*$G$dfp^&z0L1kzuF^0TyPX)`JcMXvc_QjmEgwU z%DAegpew>AR|u9~5T6Vvy!38KQDB?d9qi2>uV7mYI*#38+*9*A6U{2f!B&CoQBuT~wwfIM{!v>} zfVT3!J>NvqUrkNjlFt5aYEJ-xj9DB0_M%NqO?{Liqf>hV@MPOxIRlW<|K0TSfTH@s z)Pp&?{v(|ble&Ph^^2m`0{|lXAEf;-3~zuL5fK1@uFK1JeYbGI^n!)$)mnu%B0{Us zuGgk&Cl@aK_-iyWQk%LtOrafHxNs6~9f(8Im@rjdh2vtiQy5S*zP|&VVmIV-GLoiUe}Q# zvO=8AA=UQquL4^8M2A58DDWR`UMky}XR+`&?AYw=pL$A6$LyuH-{PJlad&6+?HJO> z1Kl`ABvE6-lm4nz|3QQ|0>W1+0{`-12#Fdi-aWQ(1b^MBx7E~ovOgv*;5ptSW1KK< zUov6N0dpe8_OZW(^B!TUy!k@V`@b&Vb|kc7)XrJr`)?A!82qP>7Z+E@`{#R8WTh7> zj8_?>mwWu?u{_$CphATeUL&=livP@5Og`HJJyuvOXY``7NRQ1UzhT8_klxL_~U zBleOmhRm??e6=@Aai-H34#)f$mrV4^Ei#n?&H|3tvwJ6p5r4gZj;Ff6R85Jv89^%8H+sGO>W?ZI004mU zT^}R*=L>GmPX$Mx#4;j7Tm0&$Y63^r3ZUKU@PtLDJbtoUEg8pnSfG0y9#eSr# z7`{&(D50)7K)pX)p?kz$A-$odet|%MNth`W6_#MKfE;Y8s93>7l@!d!n!^~KPy?6O zLLzi;5|~VNV4@1^7it_p@z&e%74l2S$8S&@<-p6=$2 zO2I9@l)(A=mwS<-Nbh`(N=H?M?5jPw`?))*+84j_^bRU*|CyPo%qTWf%w&5o*-%eW z_;*0qlE6B$YnO-*n)*SRlTIlUn(_9K{@{1#tt1f7^t;~aaDv|M}|zb zHjf4tb?iL9+aaw}cD^IR3_ih6s@Fwe@n==U%$ZoeW0T z)_@&8tEzfY#yS=x4)RC47hFe%k!lEsEx!m~*E9?O#U|~*BJypeHb3Bg|IqjX74px&-izAC z7Pax6WBdmKV7vKh$b(kqE@tb4t0Cq(p^Z!Jfmnoj12>{gCq=Je-zpk^rYF@!E0qAF zp!i28E$?80j;}8*V-ed;(;>F8dMwy58f!-m>0*o>M@ zeDj2PVnS z;U#9qNroZ+X7#FlhqE~FTn@Dj9hr6T@xmB#ZeZk-V!tL7^{9nFLZ(f_M z(bct4*2eYr<{nd{?m2&M<9VB*<_Gq_5QM>RjPd_}*y*Q!EU3-38Ar+7iQf@3BQOgb zl1DWc6*Wi6<;_t=MUWsr1hN7dy*>e<{i*sHnh_IfMlr@Qfa}*)!Z`XY{0opM>P^O)h>9fM|!zuT3rlX$H^nckew7X`)|w zde*bMPCEgt?rSM;z=i*KCX37ql&3+`xKBA{c_>rM^nE-(<@u@s-8c{odDK5By}~K3z&{n)c(76<5&Od!ky#>kJFVjSGUP- zrp%e1MyD6iTwafMvt=$&+Hu`yD`_)cO;)5BP{-t=jQ3oFNHk4rDB}@7nJ7=NA|K>|my zEp@26kw&Wds7ejhK-v&6yFdn%U{^UKRj2k3FL1ff|DtmlOTN2n#%*L)!n@pW`rqaz z%({(q&DbqxZtUcL(OAtOd1nS!PXt$IdXpH{FLus3#BFUo#GRu$s}q6T$&SSV0`~{2 zbs-QML{eQwq#BHnt1HNaz$O5(+q}!@4WUjp!wpnw1I!SwX`q*Rucg4Zwc~@RW56IH zL4G}w4|hPM>5;U4?ZS`qLCd;HaZ`Ue8mIn!BFPdB_w3Aq=&Uc8c_vV!F?y{*<5$dNI2g=g zKg~#{ZSf^W_hOocFhC#-5H!ZUK`YMfz!f@n=2JgB^tX$&pmv?e0;81<;Vd7(mXeCF z#<=JBG*c3%Tb&n(Ve-`7oFrh9oYfU~eUL9;J=k>i;Z46e8c91-LLHXs&eF{I*9yfe z2D1Tnv&_)tdP#TaT#Z?E*LuxEgA_DA-#RI71Ku@FM!_hUEX@_aVW-_;bKKqV`q`q) z2nsh=f@@Qc!&iU_q&7>Nut^1&z}L~^+Qd#eAB;LN_~7`W(Q#v(=ly+e*1JiNN(+iogVls$4uEWR|7Eu~U7e0z1tLw)<~P3?a?T>Jg& z=w{i5}2A06>|ruj1^-sX`)AsqAc5wW6G_7>~PY8N<-Q=U1w)?-p^>+~T=k);;S8;x= zSGM!{tLNV0M!>(-%q#tCws$D=9k3Hx9{%2rY--m(e6>1_FhF1w;-(D303q$w>W6y$ z>ep|Y=9M46&WPP6wY8;&C=bAisKRJ0lx?~>1iX=CW~bN<%# zvHxKA>2m(g*E4KPNPFGToSaMXN66()mz#dtu=(EQZN2Y$%nDtbN0rvMe(BgKNPDOo z(pPl1xs^Gs=C}MruNywyvjfG^y-;81pcX5YUe31aGLLt8l`V|fn>GAfL<#G2)tAbd zMXWkhJJv?47BI(I_Cp`Uu9(rc{f^hV(>oHhKlvcJV%H2$x344jhXYn?d}rtS&QAXNH8*EUKR@ut??X4}^rwevhmO$bhb_PVK5&Enn+jl{ zVDtIM)Lff8FGH8PK*KO>9?a`>WyH~F>5Lh#;L2D{qpfDR4i2tOK^lf2zi+kL@{~ru zVbL8rPor^fl3G1*lRgL1P8b0OiVbmZ-dJwDe(iGo2DoA2LWWwLa@t7uTf7ciNBipA zjAl@MGc$v_&z&1MPaoh;au3pP3=9o*=k42fkGge&Q%{!6ux~J(^ysSQJ1EQ$k)#mD zq~!$N4oSaLvX#d(m0S$XxD%9?6C+GgM9i88&6+iDp7Xm!cZXSWsqqAW>mJ+;I39Yu zXnE1{y{cvApBl@TmHW<=2W5D1wNcz{7~6}stV%P-wF#C6L97}8yGa1(fsD-{3MxXDL%77 zlbzk5!DlX&X_E4roAXh#4bno;lTbQlcT@;JZ2~t@wpNtOlOiJIN#zw=DVqYLmCA$G z6x(})&c9>9`0}iXZz{t*ic%B0ba#v0c)3~ZEM9K0+g)8(YJx{mc;z?oN9(zh-1_XC zbXs4Rw4hU)3kh1K=q>|pjBQ|srtzJ_v2wV|HO_kRLwBlbvZ{3JctDJqzuG$JAi|YC!lrC)1m|kiautnuH&qulafi zn)}Sm`i??ZR&KHH`l}icU=A`8zd7}L0=4FGZKp+sj^BFTN!Di+qn8iv(w1}Sf znJ;U`?I@_fxwbjqp_a^l#sN<)gn@4G#mUv3CY!Mo7xPVCRmST8+6^bbpoWkuolcfN z22VkR6R0)Zar+7vhdEWY4tYt;-)gu?Y7$T!90TK#o zP-o$Vl6$1p3<=SpeO}exFhhAG96(|^3viI;F9)VbrDf94Zr5=itW~?jQ%aCY#QBX4 zJpO{NYEx=1W?p`$C%wm=sNPHRSpA!m#p3iZo5J?~H~S&?#|Zt_6hPR-PxBgi>@;BE zTr<=J#KqMF7_Mf{v_ zWkb`6%Wz719R$szvfu4CHD~m+R%E~

c;_=lqaxnTEnZx|5_w?E5OXNn*Q&?TyblTwZ5q*Rq4 zp#umKsWYGD0*_S%SMd1X3O5CpiGw_I+0r^6Ht)&5g^Tg{a%JHwJbt9$Y-mYz03*A1 zlfQ3(kMypx0*|k>xE5Tog3{^aAFK0b^Pc@vSc%7HD+_+7D_%MngxP7Xf1fVzyX!L{o2K`*1D+_%>U(6V^z_rdP@tj__ zZc%{uY-i`BS9x`Uc=2>;=~Fl@U8RDbmXu5{7VmHRXo4rFnSKAC-UUk~lkC1ZQ$>}3 z>mx&+rO#v^&J!1OFfJMWVSekc85w_C;5=zE^Z7(8!Uw$6>xk1+Mf%D8-j|PS&SiCL z?OlcupBIR}*EKH2*umFqisZtwfYLc@Gp~b-;=e1ek1jn>R9`rwG1QN{DH04?mlLy- zd^7QyhHL~}Bf{k%=)T@;O+zN$H#>>AT<4n3S9LWq8U(@TKWrwHJV_)?^!h*bN#}#- z3|s(etpRcvrdbJ}A{!Wb`?%-Tz^Xq>95;GaHw_oX&yAiN9bW`bV>n^cpQ#%*`W&IU z-*l%Q@!7b6`guhjO-*mih&Q)W_#buw;UoMDbvgio8CoqPc-1Dqi1>BHwsS2eb@7bA z_;^a1#7aAdC%8SP_mj)@eq*-;J63tr=I|4n(0=^v%Yx{%X@S}-nG;{T#6Lsw zyVVaLATYiU`tQ4_g&Q|e2|QKij=d`QHmus4xkJSxP&aIhTKL_6i=SLb#L{NmCyhlA zM~Pzwq&|@`|HAdXSbZW^|7US=%f!5UWcW~D$&TLQ-jeN!ck=e{Rl&X2@7<}r*9)um zf^o@$o;9k7$%xk#N`kpnOUmB%}(wtw~c<55c z#|J8x++=6Wq7~3+3R=cA0H5~Jlt15b`5Ejv5|3yP=VJ&$`9<@Bx#77Xu{BmiAaG*g z809}hpL=^bLrYsGF_>Bdu5;8VX;I0E#HjSxm~`K~{6m0?CthNZD-x2do>pgztj zWF3>21)g3VDHCQt`;*z|XFunjvEciFt47B~WouiNFPiW~gBZ-9DC~Dqp1Pfx%UVIa z@%?qY-RYr)>TT==^@%#FXnIdjeIe}`wrEkRwy+&8>;7O=5c77t)Hi2>tI3%DqflnwftG;8Z%JMobnH6CHZ15H?KYf67KxKxcldpI_Y)?K9!p>-pO zF}0**E8M-Cmpw~}Fi&#REjk?g65?&4v3r%H^h~7>B8@kNffVZX1Cagf_x> zzCHN!yh#I(qr;^Yot+#Xz-oU?8jSM^hV}{T)U%zpd2^e!w35bi^$yals{m!?`{hNy zLL6^I)Q<={C)aUrN!LifIb_TNretJ(%BVxZF7j$jkP!0KN}1+AEb`1O<&cXg zg&x0=4HS@7>)J!W9*k>(<*{yQ3C ziw-G2K09T#&K-@_JnPomF+Z5%vJFS9x~+w>)F*BI_$Kn( zu{3>>l`9tx>m9}~V-S%2)`y$T!>{_8Vpxi5N*WbFt2`$r zLL$(A3GLnNy=~(!#@^^l{kVsV1r75lDG%8lg-?mneAm0Vw9Y30td)zInB;!d-Ae#$6+C|09%02mod+__r~oTgnlW>? znj~U$YJjjC0I*s$Ki_ZCkMtdNl_90Wd~saFJ=Zv6Ot@1FIkB9#=D*Eq6Fh?A7a_aZ zY8!Pe@uge;AGRj%5{X=FxSndP(_MK028L4lhc@p?6Q;S3*fMPF7(gIdjc%i+dg3Wp zWpXw!$*FCTu@dS)NEq3}GYlUxKyL{N@^V=p|PCQJdr!JkR0fEGUaqE31Ez<$WpdvafvsnyrT$EqY zuE=`ZFt>bYw_{Z3T-*_=D_1{G$)s?8Us?VA>{3n%x~a{YUaTDGe8n6HBpeGT3$BEV zbHV`}U8E(V)9E5D5gp8-h~;`ha$s60oC7ELgvL6gL0FfqYFuX=i*z9NKv=*I;f4xB zAdql6XzlxMtxO4|Tm0?T>cQ68__T8jkR;i?fabvI3+UYv_D?)~>zf~;Z-2zW9e)CW zBo<4A`^rX0;v9V8hHKy%>hN;+6g0KmeYkJAcLJJN?(GdMl4h4f<0fDJ`b^0%|9Y?y&LCko1-vJ-_lxhL}XL;FwUEvB-cW7yAtKmx^7B=9#Mh>xGv zil6ok$CF4bZ=dP7_~)i^=ufWT6>8!KYbSz(z#qo-cMrI^nDd>*M%k)Kchl8Utr-k_ z@L25qrM|QXL^Og}y}rMz+}=Ys&}xgp4t2kChG!!A+{YX+5ns$mWE94OXDDi^#g-tV zFeHvF)adPpufMs+`$0u zVBwI_-w%KtNvc22Ad+Vd?$Llfhmp(xvMjUnY=g3he0Dhg~s!$y>#7xT=k zJ!E8ErKrOsPU99{G0Sck3WmUf1SYuHh$0+9D~50sm!9CWEV&hRfd!Gtb1T8%jR3?jC2nO$kX#W+g$Rexhhw;dRd#I;q$)6v z@Iq1%i3EsT1vrcm%(|}Q2|hAE+$yE`#QfX?1qT6}kcD|>l}3O0IvsFrV`|)JIk-G4 z2px?+$9#4}xY7V5?pFp5xFop1thiP6;foq(%&n#l`~f>za^q-Hw^a!LV=-+ZBLL?1 zQe-M1S~6Fo3+IGRASSJ$;YDFhAcX`L)|FA-LHt+t?-y+J$8|GU%8yaPzhC9H;Fd5> zS4464F%YZ|Nc$11 zYI{Rhh1o3we`wQEbR{wA)WBepjftY7qLPxbvZ;-+nkqaW|M%zT*PqWRDk>^2yt{aO za%5y=;E3et$lTqh-@pI(ad~cZYI+L%MJQ-u)PMe5UVeP%*_VZXYPuc-MsRR&IGZI; z_W04m-@JJPW1^r86L1kO!bO+>Wzrbf6-BK@fk+ZbB1sfbYuNRtOWUY@hwhQX2X%Mp z5fQr&j32d3>_;+jYNDyHyJ62^!+Lelg2vFYA)GsQ?jKLPXZP=2_xU!h-Fos$U0q$> zwX;Qqg}$pNPhGwH7Ha*Esy$Z3XDaOi?@KK5pRtHWTQ4+;zf(-ugB4mtEoww<)?oWG zsU?%E#4%>wl)-hR@l+E{K94Z#eQFO)FQ6z|>ZKSNJoOHm4a74f+ZvGeFUyjPc)#-= zRlrxW-G4;O;i8p(r+JV8E{MoANhxVjQi{@&@fEV&>9p@bhZY0#95YJ6UAEQ0+#}if zDg^t#!CGAXq_5*kgPR#0vf>7W+78;n(!eu0&)gQ%>joJwKuXWzXVScnRd8E@TOJer z0BsaVV>}mbUNC94ROWrb0#BUF_!i7+@@#ltaWcL&Ic#asx|DZh@N7PCB>F$L!OR40n_y$*y7o)mB#ZPlf{AcXpdKnJpTDSKe7XEa3JLb` z_$AJ_Psqp~L3vmo*u=wYA;WtFr4=!-VJo4E@$EMA9$}Punyi1I>)cq#Fl2^xWN7Ag zg@3YaG|wcTFr4=XU)srWl&6&(Wv3oBi$38)z2A%WC(aa9BBJGWdhp?uBetB9#^nBO zURG2TYW=&)ZXN6HtXO3(%$2`WPuiN|Ky6zL$wooRpG+{W`iZNbj~9mlYA8 zJGmz&yqt0;Xew_1I0n{+bZ^fXQ^1IB&R}wqJRAA_e<~h{2jaH4Aufue+{P+I6}6^8 za0bdykBzyBTQCB<;0M?STf!FlY(4jUOv7j}MJlgpCkMD8AI_!cgPR;=zmq(ehM~{5 z-YZ1CdkWe`b!uX0+cmre7$bUjYT_?Fc=tbl=|49ggL?7m-Tw@2nXm03FH?S2xVzgM z*%l=!_RmwWxN698%bzapcj4oT_|D>+tNMj`d=Ye4jC5DGtsuI&M-|6%J|E-m+!b2M zpO|6rg`XxivE)s7bLJp*ZMNd@4P|_xi6UiHH5#MSewu7Fs%lh1@rs2}piTH@&d}$x zRh%06KCTCR?kH?7*j%<6mxubC4rN zz(qUFph)pVJfTP$AFwM_38SsB0nT}Uqf_AGNSf)Uo~?;6<`@atHfv8994+^FDtv-P&}SgQ z4mbmkp;GP=eCrl3$kYXdwlvg%Tyy);8;|bgf3M!^TWICL5UoW#6wfJHzFe2^y$M@t zzyG|=`}glJZRZ7m5ClmTsiwhik6~JTfviSYRdN%(VU_Ux45A_bWf*iC*>031Z=i)U zhVbMh{KY)fVzF2xo6TnH)vH%8RaMp7)y&I-c&mRaP27^N;Td2XjK)*= z0Sg?*7H}L(j5W3d8s%phlt8~4aGA?~$(-vq7wmL8r#O7MUayz!3@{jKkrpFrAQ2lV zkB3B2vsioZVyW18@t{f6phbLSb9BAR3&mNvqWd;mEfc<6P85AsN9mcMulT~?idmIs z^34;mWogp7GY-QD497O-k7$G8$2APQ`Ma1_TUN3hZ9I8qrkONXx&ZynkOkR{yEPF` zr!&IMv6ue{QtKm#I;wl~{GZeR^Aly@tGAmFQ9&XGM?a;>O6Hdpx6qex2-vnt{WzWf z@Fua|Ov&^~*}q6~1tI)eynpvr*H)i}YWZd$2IMkR9L3?bifGs)-6^ct7E5tp)RS!H zJ$&ONO48+t=T+YtjRk%=zOA+9uPnH)zck%v&z(EFJM?vOFV`1@sNKERTYs7HZLKd( zz2b#tdsSnc)9bx*zYMNt{Kz(N#f#=Z9X{}fq0_dR$)sa9&rO~j6jRy)z8k$>kV9+` zq7&mDPHC|nVjBx=W%ds@k>)BEnoEfknJF2K4HOJ9t~7OcTXte2WAHVMG4{h7w@5-j zZ?;kFU>c(_5!v?IMze`VX(x;^*Jah4V2q_sQO0CIHoB!-K6dQbF)NKwUJTC+vckS{ z*(BDi;chGWDVKi-&MEHT)w8a_uqj_dv0uSL=*XZXn&yy>Tx?cPar6ru zVa0K91d3p*^1?-M1RkMb3ve7fm~bbWzNH4j&y7h9=v%y#Ucc-N-`dQpC$F#hix??0^A^Bu)*Uo4e+EG+A`Os)=UoU{DqOl~s zd-?C}o3~Z@{waP{kwQa*6wT{rl^}bNYTbyn3Tns=lqx?5LWU@RCbo$~;)W=tmQaQr zu?Jf4Bm5SNl@G>l+<{|pCfczrT!CY-0aieooY?=urjO_+`jWc&~t@ zphOCw0?0ndZdi$++6BZA;iJZDrKk`!omitrRGhy>PpB!4riqj+xw<$KAQyJQ6}S#J z;5yXQaBm*ez;*aPT!$;L3)V=ZjVU%trinC~I*KQm3T^6nnzll17*D|%%6OX8WaMl! ztb=vZ?2%1Ouij4s+&Q=;-O`{%$o35jRR2L$@@%@zPxo{dL5)V^05fI}84d ztFV}PIJ>pF1|2(gG=RUPq@*TyO-N*9SX1r&v-h=4!y*?uE@uKhIRAdwX{Yy%F>GIR zryY7!1yzr!+slS)OY7HHo}KKJtNJj$q`$rWC*Vy3ubDnE%SPNr<_MZgb19AtbLYd& zWju3)sD=NbhE0biOi2%EA^FuRvunO#f~ ztZgxiHg^Gw{4ZlaY;^@{^?H5%kp5<1uBnd9R)mIZI|qHdcEF5B);DRJjD!aVFiqE z!9Fv6NmEnIG>yK3eJ&Vbh83`ubzIpHDYtD^l?Qog*Dl*PNs=^DrX=b_`a$-X{f0BX z7SIKh4wU&#UVw%TT4m)jn8{tZrt=+q9XcEy!8pevm}0^D7=iVrDUfRs&&5UY9CF$2 zkRd}_LfUq;9Ku+SO_y*tIFvxgld- z$j&>-j+?O zW{iR=L_{|bp$Z+2E8W;kVa0E+H(Y}}bU0!l53XT1MpVT~$Wzj&a`K#yHyn)}&{mdL z^|`^$(Z;@sG-}Y;)s*U@7J1;4saqSap?DOrl$fVrAsW|!?=dVt~ z)r&0jHO0|c=`D;=kOj-@!7Et~S!le9wD2T;DAiVHv`ZE%xx(iI+ps;)=1WWzshC(S zNSftxP2GD4kaMl#fjCHG>1*jc42XqgumkPb#`$rrfu*nz(ltNL(LVmuM&HtxG`%}A zo1M!+>jG`Ad@1y+K`zapuR<>w;)PeF3Xk%t^Tkq8Njmy~^s^`i78XX_&mlWa7G>ff z&E%yYYwXuYLndTH1x8_OH}9J!vqKIjgm0h-n?VT5y0UWF*?NlL8z>azqMTJ{Q}dbO zAVq22Znyi_Uw{3T`GQxko-R`p$j}akB(LyRJeDz$5J{0*uUB7pI%AVIJFBzdpb4s! zs)_$#Vso_7?1~vIF?xb2iVZ$B_~JHXpgz9@I!@YIob^K6NgbgipYg?3D{au&#Dz_a zap(P#+E7YE^*jG!v;H|w7KK-a=K1I_GnUupN)}%s;XG=HC|6p(w*Xv;Qy;&`%4Ula2~Q@VL*JlM$i5&ilaF+lLm;3Vx?FnJPqRiVg=OHkbVDIqt2Zh-@UlQ zS9GqnUiad&u4WN2*3Ru3RouUERMV=famc7oMmrJ)goOn&E4ncm2f*pzHe2(TDvF}y z?2V?c#8t6K{2~4ji^Ns>DtK>>qA1FWja%E;;WQ4wWOQRHrW)@&>=@pq;rsG~g$3tF z#D|B6$BwW~ochC$(J7du` z=$~Z5~*kDDMcIsOiJ-&3|^y#zV@t@C_F=J9f= z4MMe?VL78*`&=#~oEG|=X^v&fz-fnVJz*nmlbsWKwOg!j*K0yWpPU|8aSi#Ud2Q)% zqnxJLuo%yG-zv~(WW;F2L|Z^GR=^RItBGXF6?e*@RggI`Xebs*LoB6lg_{(6I{Xxzq<=f z6f3C%qfBsFvPY^WihFju@Rl?!5g zsac~^8Us7)QZJQWd@)t8EMl=8&XQ9PKefcf^N9N}?$bCN;Pb7_hylW;*d04T6?Vez z*c52J1&+cBIO>Wa6i>x9ahLSsuDB+i5-QQ;-mCZ-i7hxBUe%t%>swJ6C6Zf`yQ6pD z;kFD4TExZ{pncb&mI+R$bAn}P*Y+`vLF44xEi|2`(>KyN>TiL?kOMg>x>lU-2g7cC zjPKMm?$f7FV;wWHQwx&BUGcX_6Ry&( z4Bj4IvAE^QtA4-XK^vWJ;j1~X-c5=b+8nRs2lk;SCySXC6Syf^u%G74q5P#8BPp4_ z6Su?}v5R|$o)Nd`J4)7MEX_Z3#)AFOf(i1gR}P1Xl2NBKQF23_?$xWXNQc9r<#a@b zJ%pNp4;EU)-y%=^EiHsO7VLqOu?NgqSYW1S==3P*j?zq;0XZfLTPWbrLw}04o~F9I z<}C!JHqtiK(%m!HU%;yeH=hW6?tk-6r0Y4sy`P^cie{1(KuNSra)J z074Lal+elR)@&o86YR5iiX!0A*c zyfY`HPMiJb{VS{zAOA;Osxx)*ec{=xXP#K57=1+Lf6SV^kHIz8)>YHT6srBzPHH0` zTcTbYl-q2YtktY-*131Os1$v~GM$V)u1%LmXsnp9*(fyCX~AI^V9W?IcD$vhQwrNvLcFtnO>9At&buQxPl*rH@q$Zm>{j@644$ zrMdb@J*@6mZ!?F@{Buu;Q+_|Xac9%AL)ToRQ{olz^6A45dOqPsYsSvp`_3~tuBvR* zlysr+fe|A2PmydZ{nZcZR&}e&eK4-5pQW}ek)4E($Pg*+Cyzg}&FeX={^$7(Ymc41 z^T*2F*@360(&~%-g4}hVoH_Y4C^VY`jpwfYA8EdBW}5h2Pvd`ase$L2f48d-&obQ< zlFR>hmsFkqyPc?j{{bdylE0H7Hweu`oT6#v{vSOpRfIcY77!@bAF|r&Nq-RZd#e;s zQ0kk3n(*o=>;*mbl#+2RE&v)r>Y;MOO_7!j~28TCPJME5m#)c z5Fv&ep-+(dkl{G;5K4K)7Wz_6E<^jo(>di{tcEV6(#0eGf&~2ZBf8N_&C(6AgwWzD zN5cr+KZ1CQK&9x<$N!a>$L}C|MN{^miO|xIH5aqv=Lq6O{c|)h5rxmuq@FL&(ITH! z&(X$#sn5|NlYFaLJ@#QPiRXW+>Eby817e?}fgMUz6QlnmZt2C61^%7gJ0z z#rPGoUy7-I-|Z8~p@b50NNDpcsV-{U