{"version":3,"sources":["base/defaultText.js","base/utils/i18n.js","skins/SN/text.js","text.js","base/components/Logo.js","base/assets/images/no-image.png","base/redux/constants.js","base/components/SearchBox/ChannelSelect.js","base/redux/search/form/actions.js","base/components/SearchBox/RegionSelect.js","base/components/SearchBox/DateDurationSelect.js","base/components/SearchBox/GuestsSelect.js","base/redux/search/form/selectors.js","base/utils/date.js","skins/SN/images/logo-dark.svg","skins/SN/images/logo-light.svg","base/pages/Content/TravelHooks/useFetchData.js","base/redux/apiRequest.js","base/redux/requests/selectors.js","base/redux/data/regions/selectors.js","base/components/SearchBox/NoPopupSearchBox.js","base/utils/string.js","base/redux/search/form/action-types.js","base/assets/images/payment-methods.png","base/assets/images/visa.png","base/assets/images/mastercard.png","base/assets/images/no-image-640-320.png","base/assets/images/white-star.svg","base/redux/init/action-types.js","base/components/Common/ColumnSlider.js","base/components/Common/ColumnComponent.js","base/utils/utils.js","base/redux/appState/actions.js","base/redux/selfCancellingAction.js","base/redux/data/channels/selectors.js","base/redux/data/regions/utils.js","base/components/RedEye/RedEye.js","base/redux/search/results/selectors/data.js","base/redux/search/results/action-types.js","base/components/SearchBox/SearchBox.js","base/components/Icon.js","base/redux/data/regions/action-types.js","base/defaultConfig.js","skins/SN/config.js","base/redux/pages/browseParks/action-types.js","base/redux/appState/reducer.js","base/redux/header/action-types.js","base/redux/header/reducer.js","base/redux/homepage/reducer.js","base/redux/init/reducer.js","base/redux/requests/apiReducerFactory.js","base/redux/booking/booking/action-types.js","base/redux/booking/extras/action-types.js","base/redux/booking/form/action-types.js","base/redux/booking/payment/action-types.js","base/redux/data/filters/action-types.js","base/redux/data/operators/action-types.js","base/redux/data/parks/action-types.js","base/redux/data/park/details/action-types.js","base/redux/data/park/results/action-types.js","base/redux/data/park/reviews/action-types.js","base/redux/data/unitTypes/action-types.js","base/redux/user/action-types.js","base/redux/requests/reducer.js","base/redux/booking/booking/reducer.js","base/redux/booking/form/reducer.js","base/redux/booking/extras/reducer.js","base/redux/booking/payment/reducer.js","base/redux/data/channels/reducer.js","base/redux/data/regions/reducer.js","base/redux/data/filters/reducer.js","base/redux/data/operators/reducer.js","base/redux/data/parks/utils.js","base/redux/data/park/details/reducer.js","base/redux/data/park/results/reducer.js","base/redux/data/park/reviews/reducer.js","base/redux/data/parks/reducer.js","base/redux/data/unitTypes/reducer.js","base/redux/pages/browseOperatorRegions/action-types.js","base/redux/pages/browseOperatorRegions/reducer.js","base/redux/pages/browseOperators/reducer.js","base/redux/pages/browseOperators/action-types.js","base/redux/pages/browseParks/reducer.js","base/redux/pages/browseRegions/reducer.js","base/redux/pages/browseRegions/action-types.js","base/redux/park/action-types.js","base/redux/park/reducer.js","base/redux/search/form/reducer.js","base/redux/search/results/reducer.js","base/redux/user/reducer.js","base/redux/store.js","base/components/ScrollToTop.js","base/pages/Home/Home.js","base/redux/homepage/selectors.js","base/pages/Home/container.js","base/components/PageTitle.js","base/pages/ContactUs/ContactUs.js","base/pages/404.js","base/components/CardPanel.js","base/components/FormElements/TextInput.js","base/utils/validation.js","base/components/RequestErrors.js","base/components/Forms/User/ChangePasswordForm/ChangePasswordForm.js","base/redux/user/selectors.js","base/redux/user/actions.js","base/hooks/useLocalFormState.js","base/components/Forms/User/ChangePasswordForm/useChangePasswordForm.js","base/pages/ChangePassword/ChangePassword.js","base/components/FormElements/InputRadioButton.js","base/components/FormElements/InputRadioGroup.js","base/components/FormElements/InputCheckbox.js","base/components/Forms/User/ContactPreferencesForm/ContactPreferencesInputs.js","base/components/FormElements/DateInput.js","base/components/FormElements/SelectInput.js","base/components/Forms/User/ContactPreferencesForm/ContactPreferencesForm.js","base/components/Forms/User/CreateUserForm/CreateUserForm.js","base/components/RedEye/RedEyeUserRegistrationTag.js","base/components/Forms/User/CreateUserForm/useCreateUserForm.js","base/components/Login/views/CreateUserFormView.js","base/components/Login/views/LoggedInView.js","base/components/Forms/User/LoginForm/LoginForm.js","base/components/Forms/User/LoginForm/useLoginForm.js","base/components/Login/views/LoginFormView.js","base/components/Forms/User/PasswordResetForm/PasswordResetForm.js","base/components/Forms/User/PasswordResetForm/usePasswordResetForm.js","base/components/Login/views/PasswordResetFormView.js","base/components/Login/Login.js","base/pages/Login/Login.js","base/pages/Login/container.js","base/components/MyAccount/BookingCard.js","base/components/Spinner.js","base/components/HOC/WithLoadingStates.js","base/hooks/useDataLoader.js","base/components/MyAccount/WithUserBookings.js","base/redux/booking/booking/actions.js","base/pages/MyAccount/Bookings.js","base/components/Forms/User/ContactPreferencesForm/useContactPreferencesForm.js","base/pages/MyAccount/PreferencesCentre.js","base/components/HOC/WithLogin.js","base/components/Forms/User/UpdateUserForm/UpdateUserForm.js","base/components/Forms/User/UpdateUserForm/useUpdateUserForm.js","base/pages/MyAccount/YourDetails.js","base/components/Common/TabNavigation.js","base/pages/MyAccount/MyAccount.js","base/components/ParkCard/ParkImage.js","base/components/ParkCard/ParkLink.js","base/components/ParkCard/ParkResultCountPrice.js","base/components/Browse/SearchPopup.js","base/components/ParkCard/ParkCard.js","base/components/FilterPanel.js","base/components/ParksListFilterView/AppStateFilterPanel.js","base/components/SortPanel.js","base/components/ParksListFilterView/AppStateSortPanel.js","base/Data/GoogleMapStyle.js","base/components/Maps/MapMarker.js","base/components/Maps/MultipleLocationsInfoWindow.js","base/components/Maps/MultipleLocationsOperatorKey.js","base/components/Maps/MultipleLocations.js","base/redux/appState/selectors.js","base/components/ParksListFilterView/useFilters.js","base/components/TruncatedTextAlt.js","base/components/SearchResults/FetchSeoSearchText.js","base/redux/data/filters/selectors.js","base/redux/data/parks/selectors.js","base/components/ParksListFilterView/TownsList.js","base/components/ParksListFilterView/ParksListFilterView.js","base/redux/search/results/selectors/selectors.js","base/redux/data/operators/selectors.js","base/redux/data/operators/utils.js","base/redux/search/results/selectors/results.js","base/components/RedEye/RedEyeSearchResultsTag.js","base/components/RedEye/RedEyeStartSearchTag.js","base/components/SearchResults/WithAutoSearchFromParams.js","base/components/HOC/WithOperators.js","base/redux/data/operators/actions.js","base/redux/data/parks/actions.js","base/components/HOC/WithParks.js","base/components/Forms/Search/PartyMembersForm/PartyMembersForm.js","base/components/Forms/Search/PartyMembersForm/usePartyMembersForm.js","base/components/SearchResults/PartyMembersModal.js","base/components/SearchResults/WithPartyMembersModal.js","base/components/HOC/WithRegions.js","base/components/SearchResults/WithSearchResults.js","base/components/Loading.js","base/components/SearchResults/WithSearchResultsLoadingStates.js","base/redux/park/actions.js","base/pages/SearchResults/SearchResults.js","base/redux/data/park/details/selectors.js","base/redux/data/park/results/selectors.js","base/redux/data/park/reviews/selectors.js","base/redux/data/unitTypes/selectors.js","base/redux/data/park/details/utils.js","base/redux/data/unitTypes/utils.js","base/redux/park/selectors.js","base/redux/data/park/reviews/utils.js","base/redux/data/park/results/utils.js","base/components/ParkPage/DealOfTheWeekBanner/DealOfTheWeekBanner.js","base/components/ParkPage/ParkInformation/AccommodationModal.js","base/components/ParkPage/ParkInformation/AccommodationListing.js","base/components/ParkPage/ParkInformation/Accommodation.js","base/components/ParkPage/AlternativeDates/HolidayDateCard.js","base/components/ParkPage/AlternativeDates/AlternativeDates.js","base/components/HOC/WithParkResults.js","base/redux/data/park/results/actions.js","base/pages/HolidayPark/AlternativeDatesSection.js","base/components/ParkPage/ParkInformation/Facilities.js","base/components/ParkPage/ParkInformation/ImportantInfo.js","base/utils/tracking.js","base/components/RedEye/RedEyeParkResultsTag.js","base/components/ParkPage/ParkInformation/Review.js","base/components/ParkPage/ParkInformation/Reviews.js","base/components/Booking/WithLoadingStates.js","base/components/HOC/WithParkReviews.js","base/redux/data/park/reviews/actions.js","base/redux/data/unitTypes/actions.js","base/components/HOC/WithUnitTypesExtraData.js","base/components/HOC/WithUpdatedSearchParams.js","base/components/ParkPage/ParkInformation/ThingsToDo.js","base/components/ParkPage/ParkInformation/Videos.js","base/components/ParkPage/ParkInformation/QandA.js","base/components/Maps/SingleLocation.js","base/components/ParkPage/ParkInformation/Location.js","base/components/ParkPage/ParkInformation/AltAccommodation.js","base/components/ParkPage/ParkInformation/ChannelExtra.js","base/components/ParkPage/ParkInformation/ParkInformationTabs.js","base/pages/HolidayPark/ParkInformation.js","base/components/ParkPage/ToolsModal.js","base/components/HOC/WithParkDetails.js","base/redux/data/park/details/actions.js","base/components/ParkPage/WithParkSelected.js","base/components/ParkPage/ParkTitle.js","base/components/ParkPage/ParkGallery.js","base/pages/HolidayPark/ParkTitleAndGallery.js","base/pages/HolidayPark/ParkPage.js","base/components/SearchResults/WithAutoSearch.js","base/pages/ParkFromSearch.js","base/redux/booking/booking/selectors.js","base/redux/booking/extras/selectors.js","base/redux/booking/form/selectors.js","base/components/RedEye/RedEyeBookingConfirmationTag.js","base/components/Booking/HolidaySummary.js","base/components/Booking/PriceBreakdown.js","base/components/Booking/RemainingBalanceBreakdown.js","base/components/Booking/WithHolidaySummary.js","base/pages/Booking/Confirmation/Confirmation.js","base/pages/Booking/Confirmation/container.js","base/Constants.js","base/components/Booking/useNextStep.js","base/components/Forms/Booking/PaymentOptionsForm/PaymentOptionsForm.js","base/redux/booking/form/actions.js","base/hooks/useReduxFormState.js","base/components/Forms/Booking/PaymentOptionsForm/usePaymentOptionsForm.js","base/components/Booking/useDiscountCode.js","base/components/Booking/DiscountCode.js","base/pages/Booking/Details/Details.js","base/pages/Booking/Details/container.js","base/components/Forms/Booking/ExtrasForm/ExtrasFormOption.js","base/components/Forms/Booking/ExtrasForm/ExtrasForm.js","base/redux/booking/extras/actions.js","base/components/Forms/Booking/ExtrasForm/useExtrasForm.js","base/components/Forms/Booking/PartyDetailsForm/PartyDetailsFormRow.js","base/components/Forms/Booking/PartyDetailsForm/PartyDetailsForm.js","base/components/Forms/Booking/PartyDetailsForm/usePartyDetailsForm.js","base/pages/Booking/Extras/Extras.js","base/pages/Booking/Extras/container.js","base/components/FormElements/PaypalFieldContainer.js","base/components/Forms/Booking/PaypalCardPaymentForm/PaypalCardPaymentForm.js","base/redux/booking/payment/actions.js","base/redux/booking/payment/selectors.js","base/components/Forms/Booking/PaypalCardPaymentForm/usePaypalCardPaymentForm.js","base/pages/Booking/Payment/CardPayment.js","base/components/Forms/Booking/PaypalPaymentForm/PaypalPaymentForm.js","base/components/Forms/Booking/PaypalPaymentForm/usePaypalPaymentForm.js","base/pages/Booking/Payment/PaypalPayment.js","base/pages/Booking/Payment/PayItPayment.js","base/pages/Booking/Payment/Payment.js","base/pages/Booking/PaymentAction/PaymentAction.js","base/components/Booking/WithBooking.js","base/components/Booking/WithBookingLoadingStates.js","base/components/Booking/WithBookingStepOrder.js","base/components/Booking/WithDeposit.js","base/components/Booking/ProgressBar.js","base/pages/Booking/Booking.js","base/pages/Content/FAQ.js","base/pages/Content/FetchContent.js","base/pages/Content/TermsConditions.js","base/pages/Content/TravelGuideChildren/PopularHolidays.js","base/pages/Content/TravelGuideChildren/PopularLocations.js","base/pages/Content/TravelGuide.js","base/redux/pages/browseParks/selectors.js","base/pages/Browse/Parks.js","base/redux/pages/browseParks/actions.js","base/components/Browse/RegionCard.js","base/components/HOC/WithOperatorRegions.js","base/redux/pages/browseOperatorRegions/selectors.js","base/hooks/useSeoText.js","base/hooks/useOfferCols.js","base/pages/Browse/OperatorRegions.js","base/redux/pages/browseOperatorRegions/actions.js","base/components/Browse/OperatorCard.js","base/pages/Browse/OperatorRow.js","base/pages/Browse/Operators.js","base/redux/pages/browseRegions/selectors.js","base/pages/Browse/Regions.js","base/redux/pages/browseRegions/actions.js","base/pages/TravelGuideHome/TravelGuideHome.js","base/pages/Reset.js","base/Routes.js","base/components/Header/HeaderBar.js","base/components/Login/LoginModal.js","base/components/Header/HeaderNavLoginButtons.js","base/components/Header/MegaMenuColumn.js","base/components/Header/HeaderNavLink.js","base/components/Header/MegaMenu.js","base/components/Header/Header.js","base/redux/init/selectors.js","base/redux/init/actions.js","base/redux/header/selectors.js","base/redux/header/actions.js","base/components/HOC/WithInit.js","base/components/HOC/WithUrlParams.js","base/components/OnRouteChange.js","base/App.js","base/ErrorBoundary.js","base/serviceWorker.js","base/assets/js/aws-config.js","base/Reducers/Reducer.js","index.js","base/components/A.js","base/redux/search/results/actions.js","base/components/FormElements/InputNumber.js","base/redux/data/channels/utils.js","base/redux/data/regions/actions.js","base/redux/appState/action-types.js","base/redux/data/channels/action-types.js"],"names":["text","btnText","termsAndConditionsUrl","privacyPolicyUrl","A","href","x","to","y","prevPath","replace","dateStr","amount","operatorName","parkName","config","isNewBooking","className","duration","channelName","isPetFriendly","regionName","channel","accommodationType","price","isLoggedIn","name","count","shouldItPluralize","isPreferred","isBoat","people","val","dateMatch","singleResult","forceSingular","total","channelId","minPrice","parkMatcher","getTranslation","key","textPack","params","console","warn","defaultText","t","Logo","props","src","variant","logoDark","logoLight","height","alt","defaultProps","images","size","module","exports","CANCELLED","FAILURE","REQUEST","RESET","SUCCESS","ChannelSelect","useState","selectedChannel","setSelectedChannel","isIOS","includes","navigator","platform","useEffect","channels","find","code","selectedValue","Group","controlId","id","Label","textStyle","label","Control","as","tabIndex","onChange","map","value","disabled","whitelist","length","selected","show","onToggle","Toggle","type","role","Menu","filter","Check","checked","selectChannel","dispatch","SELECT_CHANNEL","payload","selectRegion","regionId","SELECT_REGION","selectDate","date","SELECT_DATE","selectDuration","SELECT_DURATION","selectGuestsAdults","guests","SELECT_GUESTS_ADULTS","selectGuestsChildren","SELECT_GUESTS_CHILDREN","selectGuestsUnder5s","SELECT_GUESTS_UNDER5S","selectPetFriendly","petFriendly","SELECT_PET_FRIENDLY","storeAllCottageDates","dates","ttl","Date","setHours","getHours","STORE_COTTAGE_DATES","resetArrival","RESET_ARRIVAL","selfCancellingAction","requestParams","parkId","GET_RESULTS","START_SEARCH","apiRequest","urls","search","park","startSearch","cancelSearch","RegionSelect","regionOptions","RegionNames","useSelector","state","data","regions","RegionName","setRegionName","channelSelected","regionsLoading","region","DateDurationSelect","useDispatch","disabledDaysObject","setDisabledDaysObject","disabledDatesArray","setDisabledDatesArray","firstRun","setFirstRun","_channelId","_regionId","_duration","_currentCottageDates","currentCottageDates","_cottageTTL","cottageTTL","getDateAndDurationText","arrivalDate","fetchCottageDataAndUpdateUnavailableDates","useCallback","timeNow","fetch","cottageDates","then","response","json","JSON","parse","today","getFullYear","getMonth","getDate","Object","entries","dateSplit","split","setUnavailableDaysAndDates","undefined","unavailableDays","getUnavailableDaysDefault","daysOfWeek","getShortDateFormat","drop","parseInt","onDurationChange","getNightsOptions","fromMonth","onDayClick","onDateChange","initialMonth","selectedDays","disabledDays","before","GuestsSelect","guestTotal","adults","children","under5s","handleGuestUpdate","num","param","setterFunc","maxGuests","xs","onAdultsChange","min","max","icon","Divider","onChildrenChange","onUnder5sChange","form","cottageDatesFound","dateToDDMMYYYY","partysize","nights","infants","dogs","getRegionsIsLoading","regionsNeedToBeLoaded","getRegionsIsLoaded","getRegionsHasFailed","currentRegions","getRegionsByChannelId","channelRegionIds","calculateAge","dob","ageDiffInMs","now","getTime","ageDate","Math","abs","getUTCFullYear","datesAreEqual","date1","date2","d1","d2","setUTCHours","padFigure","getUTCDate","getUTCMonth","DDMMYYYYToDate","dateString","test","setUTCFullYear","getDayAndMonthNameFromDate","short","nth","getDayMonthYearFromDate","getDayNameFromDate","getDay","getDepartureDate","departureDate","setTime","delimiter","monthNames","day","monthIndex","monthName","year","number","numString","toString","useFetchData","destination","returnData","setReturnData","url","cms","forEach","pl","controller","AbortController","signal","abort","getRequestConfig","method","cancelTokenSource","toUpperCase","FormData","keys","set","headers","cancelToken","token","handleSuccess","actionType","requestId","success","action","handleFailure","throwOnError","axios","isCancel","errors","status","handleCancel","cancel","makeRequest","CancelToken","source","requestActive","request","catch","finally","callbackApiRequest","checkRequestNeeded","isReady","isLoading","isLoaded","hasFailed","force","getRequestReducerById","requests","getIsFetching","reducer","fetching","getRequestStatus","getHasError","getError","operatorChannelRegionIds","GET_REGIONS","GET_OPERATOR_REGIONS","getOperatorRegionsIsLoading","getOperatorRegionsHasFailed","getOperatorRegionsIsLoaded","operatorId","NoPopupSearchBox","history","useHistory","location","useLocation","selectedChannelId","selectedRegionId","_regionsLoading","_regionsNeedToBeLoaded","_currentRegions","sortedRegions","sort","a","b","localeCompare","_params","_requestParams","_petFriendly","useParams","_nFilterArray","appState","nFiltersStateArray","_bFilterArray","bFiltersStateArray","allowSearchAll","setAllowSearchAll","dealOfTheWeek","pathname","doFullSearch","submitAndCloseDropdown","func","selectFunc","setTimeout","showChannelSelect","setShowChannelSelect","showRegionSelect","setShowRegionSelect","showDatePanel","setShowDatePanel","getRegions","calculateShouldResetArrival","previousChannel","lg","isInPopup","md","event","channelChosen","target","e","modifiers","htmlFor","block","onClick","searchQuery","encodeURIComponent","join","push","updateRoute","cancelGetResults","resetNFilters","resetBFilters","setState","bg","decodeHtml","html","txt","document","createElement","innerHTML","slugify","string","toLowerCase","trim","stripProtocol","to2dp","stringNum","parseFloat","toFixed","namespace","APP_INIT","GET_INIT_DATA","ColumnSlider","settings","dots","arrows","infinite","lazyLoad","speed","slidesToShow","parent","slidesToScroll","responsive","breakpoint","sliderItems","items","item","index","cardImage","Card","Img","extraClasses","image","title","loading","overlay_text","Body","BREAKPOINTS","ColumnComponent","heading","columns","background","window","innerWidth","width","setWidth","noOfItems","imageClasses","regionPage","sliderComponent","Col","columnComponent","c","sm","handleWindowResize","_debounce","addEventListener","removeEventListener","getComponent","Row","Container","fluid","dangerouslySetInnerHTML","__html","arrayToObject","arr","valueKey","output","isSingleResult","altDate","ynToBool","input","word","boolean","arrayFromXtoY","Array","_","i","SET_STATE","RESET_N_FILTERS","RESET_B_FILTERS","actionFunc","lastRequest","cancelLastRequest","GET_CHANNELS","getRegionById","getOperatorRegionsById","getUrlWithParams","combinedParams","fromEntries","URLSearchParams","encodedParamString","k","RedEye","isFetching","hasError","isSearchRequestPending","isSearching","results","isWaiting","SearchBox","showSearchModal","setShowSearchModal","toggleSearchModal","hideSearchModalOnResize","timeout","outerWidth","clearInterval","Icon","theme","defaultConfig","googleMapsApiKey","siteCode","contentRoutes","path","footerData","findAHoliday1","links","findAHoliday2","holidays","external","information","getFooterLinks","footerLinks","headerLogoDark","headerLogoLight","init","channelregions","parkDetails","parkResults","parkReviews","parks","login","logout","operators","filters","searchResults","booking","bookingGetDeposit","bookingGetExtras","bookingSetExtras","bookingSetPartyDetails","bookingPrePayment","bookingPostPayment","userSetDetails","passwordReset","bookingSetDiscount","userGetBookings","newsletterSignup","contact","nav","unitTypesExtraData","unitTypesExtraDataPID","parkID","getApi","order","hideOffers","linkOptions","1","2","3","4","5","6","7","linksToReturn","numb","getHeaderLinks","defaultState","deleteFromState","GET_NAV","navExpiryTime","initialState","content","homepageLayout","feefo","ready","apiReducerFactory","passwd","COMPLETE_BOOKING","CREATE_BOOKING","GET_DEPOSIT","SET_DISCOUNT_CODE","LOAD_BOOKING","STEP_COMPLETED","GET_EXTRAS","SET_EXTRAS","CHANGE_DETAIL","SELECT_ARE_YOU_GOING","SELECT_EXTRA","SET_PARTY_DETAILS","PRE_PAYMENT","POST_PAYMENT","SET_PAYMENT_USED","GET_FILTERS","GET_OPERATORS","GET_PARKS","GET_PARK_DETAILS","GET_PARK_RESULTS","GET_PARK_REVIEWS","GET_EXTRA_DATA","CREATE_USER","GET_BOOKINGS","LOGIN","LOGOUT","UPDATE_USER","combineReducers","bookingExtras","bookingForm","bookingPayment","dataChannels","dataFilters","dataOperators","dataParks","dataParkDetails","dataParkResults","dataParkReviews","dataRegions","dataUnitTypes","header","searchForm","user","pendingParams","unitId","unitTypeId","unitPrice","totalCost","amountPaid","bookingId","message","deposit","compulsoryDeposit","depositText","discountApplied","discountCode","discountValue","dueDate","stepsCompleted","confirmationId","bookId","bookID","depositMsg","details","extras","offers","emailOpt","smsOpt","postOpt","thirdOpt","party","areYouGoing","values","payment","paymentOption","showDiscountBox","paypal","postPayment","paymntRecId","paymntUsed","cardinal","payit","initRegionData","getRegionsFromChannel","getChannelRegionIds","opId","getFilters","f","fixFilterGroups","fg","Filters","bFilters","nFilters","filterGroups","channelOperatorIds","operator","op","getParksByRegionId","regionParkIds","processPark","pos","lat","lng","lon","processResults","timeLoaded","bubbles","reviews","townList","forceToArray","flat","extraData","parkExtraDataIds","unitTypes","convertExtraData","unitType","convertUnitTypes","getExtraDataIds","Set","add","SELECT_OPERATOR","operatorFilters","SELECT_PARK","selectedDate","searchNeeded","partySizeModal","requestPayload","wait","loggedIn","bookings","selectedContactPreferencesInBooking","account","dobMnth","localStorage","setItem","indexOf","rootReducer","appStateReducer","bookingReducer","bookingFormReducer","bookingExtrasReducer","bookingPaymentReducer","channelsReducer","filtersReducer","operatorsReducer","parksReducer","parkDetailsReducer","parkResultsReducer","parkReviewsReducer","regionsReducer","unitTypesReducer","headerReducer","homepage","homepageReducer","initReducer","pages","browseOperatorRegions","pageBrowseOperatorRegionsReducer","browseOperators","pageBrowseOperatorsReducer","browseParks","pageBrowseParksReducer","browseRegions","pageBrowseRegionsReducer","parkReducer","requestsReducer","searchFormReducer","searchResultsReducer","userReducer","store","createStore","composeWithDevTools","persistState","applyMiddleware","thunk","ScrollToTop","scrollTo","Hero","lazy","Banner","DealOfTheWeek","Countdown","Home","components","fallback","headingImage","heading_image","subheading","heroImage","hero_image","mobileHeroImage","mobile_hero_image","datetime","linktext","background_colour","text_colour","HomeConnected","connect","PageTitle","subTitle","viewMode","onChangeViewMode","ButtonGroup","ContactUs","validated","setValidated","isValid","setIsValid","hideText","setHideText","apiFeedback","setFeedback","apiFeedbackStatus","setFeedbackStatus","ticketNumber","setTicketNumber","bookingReference","setBookingReference","email","setEmail","enquiry","setEnquiry","setTitle","initials","setFirstName","lastName","setSurname","address","setAddress","postcode","setPostcode","comment","setComment","checkbox","setCheckbox","contactForm","useRef","resetState","resp","infoMsg","current","reset","error","rel","Form","noValidate","onSubmit","preventDefault","stopPropagation","currentTarget","checkValidity","ref","required","Feedback","defaultValue","Text","placeholder","rows","maxLength","resize","Button","Alert","onClose","dismissible","NotFound","aria-label","CardPanel","accordion","Accordion","defaultActiveKey","opened","accordionId","Header","eventKey","noTitle","Collapse","TextInput","groupClassName","labelClassName","hideLabel","invalid","attrs","validationMessage","EMAIL_REGEX","PASSWORD_REGEX","POSTCODE_REGEX","DATE_REGEX","password","telephone","dateValidator","RequestErrors","noGutters","requestError","classes","isArray","showCodes","redText","validateFields","passwd2","resetCode","ChangePasswordForm","busy","autoComplete","failure","changePasswordPending","changePasswordFailed","changePasswordError","createUserPending","createUserFailed","createUserError","getBookingsLoaded","getBookingsPending","getBookingsFailed","loggingIn","loginFailed","loginError","requestPasswordResetPending","requestPasswordResetFailed","requestPasswordResetError","updateUserPending","updateUserFailed","updateUserError","changePassword","createUser","d","getState","getBookings","requestPasswordReset","updateUser","useLocalFormState","validator","initialValues","initialErrors","setErrors","setValues","_errors","validate","useChangePasswordFormState","ChangePasswordPage","setSuccess","useChangePasswordFormActions","span","offset","xl","InputRadioButton","InputGroup","Prepend","Radio","ariaLabel","InputRadioGroup","options","option","isLast","noSpacing","InputCheckbox","handleChange","Checkbox","ContactPreferencesInputs","hideTitle","currentYear","toMonth","YearMonthForm","localeUtils","ageGroup","months","getMonths","minusYears","years","month","DateInput","setMonth","handleYearMonthChange","newMonth","inputProps","onDayChange","parseDate","formatDate","keepFocus","dayPickerProps","captionElement","after","SelectInput","custom","useAriaLabel","ContactPreferencesForm","firstName","tel","addrLn1","town","postCode","county","country","assign","validateContactPrefsFields","CreateUserForm","titles","field","dobParts","countries","onBack","RedEyeUserRegistrationTag","nourl","rg_confirm","firstname","lastname","emailpermit","newsletter","phone","useCreateUserFormState","Login","useCreateUserFormActions","doTagging","setDoTagging","LoggedInView","redEyeUrl","redeyeUrl","login_location","login_url","LoginForm","isBookingPage","onLogin","onViewReset","onViewRegister","useLoginFormState","LoginFormView","useLoginFormActions","reload","PasswordResetForm","handleClose","format","usePasswordResetFormState","loggedInEmail","lfs","PasswordResetFormView","usePasswordResetFormActions","query","has","setViewMode","_loggedIn","redirectOnLogin","redirect","get","CreateUserFormView","LoginPage","LoginConnected","checkout","BookingCard","outstandingPayment","onError","onerror","NoImage","accomodation","holidayDate","onPayBalance","Spinner","center","Wrap","useContainer","WithLoadingStates","scrollToTop","spinnerMessage","hasErrorFetching","loadingErrorMessage","onRetry","useDataLoader","getData","extraProps","allowFailure","load","ignoreFail","retry","Children","child","cloneElement","WithUserBookings","_hasFailed","_isLoaded","_isLoading","createBooking","getDeposit","stepCompleted","step","dCode","obj","setDiscount","Bookings","loadBooking","useContactPreferencesFormActions","useContactPreferencesFormState","_details","initialFormValues","PreferencesCentre","preferences","WithLogin","redirectPath","propTypes","PropTypes","dobDay","dobYr","age","UpdateUserForm","end","generateYearOptions","useUpdateUserFormState","city","YourDetails","useUpdateUserFormActions","TabNavigation","itemClasses","active","Tabs","activeTab","setActiveTab","handleMenuClick","Tab","Nav","Link","Dropdown","Item","MyAccount","allBookings","futureBookings","future","pastBookings","past","availableTabs","Content","Pane","ParkImage","parkRoute","isSticky","isPremium","boatBgImage","internalUrl","linkUrl","imgs","img","SliderItems","Badge","pill","ParkLink","specialButtonClass","smallText","setShow","fName","setFName","setMessage","displayRedEye","setDisplayRedEye","extLinkText","Modal","centered","onHide","closeButton","ReactGa","category","Footer","email_signup_url","ParkResultCountPrice","dateMatchCount","altDateCount","altDateMinPrice","specialTextClass","priceOnly","countOnly","SearchPopup","handleModal","Title","ParkCard","pri","specialClass","availableDates","linkPrice","sAdd","features","feature","memo","FilterPanel","idKey","onToggleFilter","selectedFilters","arrPos","onClearFilters","evaluateChecked","data-filter-id","AppStateFilterPanel","urlKey","urlFilterValues","stateKey","nFiltLength","nFilt","arrayPosIsKey","newValue","SortPanel","FormControl","appliedSort","direction","sortOptions","opt","AppStateSortPanel","selectedSortOption","MapStyle","elementType","stylers","color","visibility","featureType","MapMarker","position","fillColor","colour","fillOpacity","strokeWeight","strokeColor","google","maps","Size","origin","Point","anchor","scaledSize","onLoad","MultipleLocationsInfoWindow","result","onCloseClick","removeMapCardMid","MultipleLocationsOperatorKey","uniqueOpIds","oid","operatorData","style","operatorPin","containerStyle","0","8","119","MultipleLocations","mapRef","setMapRef","selectedResult","setSelectedResult","markerMap","setMarkerMap","infoOpen","setInfoOpen","useLoadScript","loadError","fitBounds","bounds","LatLngBounds","extend","loadHandler","closeInfoWindow","mapContainerStyle","zoom","styles","streetViewControl","maxZoom","mapTypeControlOptions","mapTypeIds","mapContainerClassName","marker","prevState","markerLoadHandler","markerClickHandler","altField","applyOperatorFilters","applyPetFriendlyFilters","applyNFilters","compareTypes","compareArray","filt","compare","nFiltersFixed","parkFilts","n","fixNFilt","relevantNFilt","compareTwoNumbers","every","applyBFilters","selectedBFilters","bFilt","applyTownFilter","townId","towns","num1","num2","applySort","selectedSort","cleanSelectedOperatorsFilters","operatorIds","getOperatorFilters","selectedOperators","getPetFriendlyFilters","useFilters","selectedOperatorFilters","selectedPetFriendlyFilters","selectedNFilters","sortByName","isTown","_selectedOperatorFilters","_operatorFilters","_petFriendlyFilters","newResults","TruncatedTextAlt","disableTruncate","setDisableTruncate","copyBox","removeTruncate","classList","remove","useLayoutEffect","scrollHeight","getClientRects","isHTML","WebkitLineClamp","lines","FetchSeoSearchText","hasText","setHasText","seoText","setSeoText","isArea","acf","area_seo_text","some","area_id","area_text","seo_text","getIsLoading","getHasFailed","getIsLoaded","TownsList","forwardClassNames","ParksListFilterView","filtersColumn","activeFilters","setActiveFilters","maxNFiltValues","setMaxNFiltValues","Boolean","collapseFilters","setCollapseFilters","channelsData","townsList","correctChannel","filterGroup","filterSet","allFilters","chanFilterSet","getNFilters","o","fill","updateFilters","idx","splice","arrLength","maxValues","getMaxValues","appliedSortStateKey","operatorFiltersStateKey","petFriendlyFiltersStateKey","allowSorting","petFriendlyFilters","filteredResults","petSearch","URL","searchParams","showFiltersForLarge","getTowns","fr","temp","uniq","stringify","res","from","fa","fb","in","fontSize","aria-controls","aria-expanded","minHeight","generateOutput","noResults","getOperatorById","currentRegion","createSelector","_parks","_regionParkIds","_regions","processedResults","_channels","_operators","_results","parkUrn","getChannelById","regn","RedEyeSearchResultsTag","slice","resultsTags","RedEyeStartSearchTag","_pendingParams","_region","search_event","search_type","search_url","search_destinationb","search_datea","search_nights","search_pax","search_adults","search_children","search_under5","last_search","WithAutoSearchFromParams","_formParams","formParams","_formRequestParams","formRequestParams","_isSearchRequestPending","_searchParams","_pendingSearchParams","pendingSearchParams","parkParam","allFieldsPresent","p","autoSearchNeeded","WithOperators","_isReady","getOperators","getParks","WithParks","oneOfType","PartyMembersForm","InputNumber","onChangeAdults","onChangeChildren","onChangeUnder5s","usePartyMembersFormState","PartyMembersModal","actions","usePartyMembersFormActions","WithPartyMembersModal","showPartySizeModal","setShowPartySizeModal","partySizeModalNeeded","WithRegions","WithSearchResults","_hasError","_isFetching","_isSearching","_isWaiting","getResults","Loading","_criteria","_date","getCriteria","data-status","WithSearchResultsLoadingStates","_count","FetchTravelGuide","SearchResults","originalDate","parkBubbles","getExtraDataIsLoading","getExtraDataHasFailed","getExtraDataIsLoaded","getParkDetailsById","getAllUnitTypeDataById","_extraData","getExtraDataById","_unitTypeData","getUnitTypeById","getParkReviewsById","getParkResultsById","_parkResults","_selectedDateStr","_unitTypes","_selectedDate","all","alternativeDates","dateKey","units","unit","lowestPrice","getResultsData","isNaN","DealOfTheWeekBanner","AccommodationModal","holiday","description","floorPlan","sleeps","unitDesc","bedrooms","kitchen","livingRoom","showerRoom","outdoor","other","cleaning","floorPlanImages","useMemo","imgUrl","startsWith","ACCOM_BASE_URL","renderItems","unitFeatures","unitBedrooms","unitKitchen","unitLivingRoom","unitShowerRoom","unitOutdoor","unitOther","unitCleaning","hasAnyImages","SLIDER_SETTINGS","adaptiveHeight","AccommodationListing","onBook","unitImages","lowUnitCountRemaining","unitQuantity","isDiscounted","unitPriceSave","desc","processedDescriptionListing","sentence","processedDescriptionModal","unitMaxOccupancy","unitDisabled","unitAdultsOnly","Accommodation","sortOption","setSortOption","reduce","prev","curr","correctOption","accomodations","isItAscending","sortResults","HolidayDateCard","clicked","preferred","AlternativeDates","searchDate","preferredDate","filteredDates","onSelect","WithParkResults","getParkResults","AlternativeDatesSection","_parkId","_processedResults","showAlternativeDates","changeSelectedResultHandler","Facilities","facilities","facility","overview","importantInfo","ImportantInfo","getOperatorParkNameString","opName","parts","RedEyeParkResultsTag","_operator","_searchResult","facilitiesTags","String","fromCharCode","unitInfoTags","unitInfo","select_event","select_url","select_destinationa","select_destinationb","select_destinationc","select_val","select_image","select_nights","select_datea","select_dateb","last_select","Review","rating","review","Reviews","renderedReviews","rev","time","toLocaleDateString","body","score","errorResponse","additional","isExtras","isPayment","isSaving","hasErrorSaving","savingErrorMessage","WithParkReviews","getParkReviews","getExtraDataUrl","WithUnitTypesExtraData","getExtraData","bool","WithUpdatedSearchParams","_selectedChannelId","_selectedRegionId","ThingsToDo","ttdPosts","ttd","rendered","Videos","video","QandA","SingleLocation","isInfowWindowOpen","setIsInfoWindowOpen","Location","opid","directions","AltAccommodation","ChannelExtra","ParkInformationTabs","tab","ParkInformation","forwardRef","onNext","searchResult","_parkDetails","_reviews","showAccommodation","parkObject","showImportantInfo","videos","vid","videoCount","showQA","qa","qaContent","showLocation","showAltAccommodation","accommodation","showReviewsTab","setShowReviewsTab","ttdData","setTtdData","setTtdPosts","unshift","wpData","ttdUrl","getElementsByTagName","pid","covidDets","facilOverview","getContent","ToolsModal","onKeyPress","keyCode","altKey","getParkFromSearchLink","internal","DOTWParams","route","WithParkDetails","getParkDetails","WithParkSelected","_selectedParkId","selectedParkId","_channelNeedsSelecting","_parkNeedsSelecting","selectPark","ParkTitle","mapAvailable","locationFix","charAt","_bubbles","scrollToParkInfo","showReviewsBadge","Slider","React","ParkGallery","videoUrl","setVideoUrl","setImages","parkname","centerMode","centerPadding","ParkTitleAndGallery","_parkName","structuredJSON","addressLocality","addressRegion","geo","latitude","longitude","brand","sku","ParkPage","parkInfoSection","top","getBoundingClientRect","pageYOffset","behavior","WithAutoSearch","_oldParams","oldParams","_oldPendingParams","oldPendingParams","_newParams","newParams","_newRequestParams","ParkFromSearch","bookingIsFetching","bookingHasError","bookingErrorData","depositIsFetching","depositHasError","_park","_unitTypeId","unitPriceNum","_unitPrice","depositAvailable","depositIsCompulsorySelector","compulsoryDepositSelector","settingDiscount","settingDiscountFailed","setDiscountError","errorDataSaving","extrasWithValues","extrasData","cost","totalDepcost","depcost","selectedExtrasWithValues","extra","partyAreYouGoing","partyValues","partyIsSaving","partyHasSaveError","partySaveError","remainingBalance","existingTotalCost","totalCostDeposit","_deposit","selectedExtrasDepositTotal","totalCostFull","_discountValue","selectedExtrasTotal","_depositAvailable","_paymentOption","totalCostRemaining","paymentAmount","RedEyeBookingConfirmationTag","_adults","_arrivalDate","_children","_confirmationId","_selectedExtras","_totalCostFull","_under5s","_unit","_insuranceExtra","sale_conf","sale_destinationa","sale_destinationb","sale_destinationc","sale_accomodation","total_val","order_ref","sale_image","sale_datea","sale_dateb","sale_nights","sale_adults","sale_children","sale_under5s","sale_pax","sale_extras","sale_extras_val","last_sale","HolidaySummary","bookingType","setDate","confirmation","print","PriceBreakdown","totalRemaining","useDeposit","discValue","WithHolidaySummary","_depositAvailble","_dueDate","_useDeposit","_selectedExtrasWithValues","_totalCost","_totalCostRemaining","_type","_amountPaid","_remainingBalance","_existingTotalCost","RemainingBalanceBreakdown","nextButtonTerms","disableNext","nextButtonText","Confirmation","CheckForAWIN","setInterval","AWIN","info","Tracking","Sale","orderRef","currency","voucher","run","border","cookie","match","pop","display","ConfirmationConnected","BOOKING_STEPS","EXTRAS","DETAILS","PAYMENT","PAYMENT_ACTION","CONFIRMATION","standardSequence","euroSequence","existingBookingSequence","useNextStep","_stepsCompleted","_bookingType","PaymentOptionsForm","depositIsCompulsory","compulsoryDepositText","selectedOption","changePartyDetail","selectExtra","selectPaymentOption","setPartyDetails","useReduxFormState","selector","updateAction","usePaymentOptionsFormState","useDiscountCodeState","validateField","DiscountCode","showDiscountCodeSuccess","setShowDiscountCodeSuccess","discountAppliedState","setDiscountAppliedState","useDiscountCodeActions","reduxDiscountCode","_discountApplied","queryDiscountCode","setQueryDiscountCode","checkApplyButtton","defaultDiscountCode","handleApplyDiscountCode","storeDiscountCode","storeDiscountValue","Details","nextStep","_selectedContactPreferencesInBooking","_showDiscountBox","emailOptedOut","buttonText","open","DetailsConnected","detailsData","offersData","ExtrasFormOption","parsedCost","group","Number","ExtrasForm","groupedExtras","setGroupedExtras","extrasWithOrders","groupOrders","Map","addOrdersToExtras","sortedExtras","currentValue","groupExtras","getExtras","dApplied","setExtras","useExtrasFormState","infantAges","childAges","adultAges","PartyDetailsFormRow","ages","suffix","locked","PartyDetailsForm","onChangePartyDetail","onSelectAreYouGoing","showAreYouGoing","usePartyDetailsFormActions","selectAreYouGoing","userInfo","stepComplete","PARTY","usePartyDetailsFormState","setFullYear","pt1","pi1","pn1","pa1","dob1","Extras","useExtrasFormActions","extrasValues","partyForm","handleNext","partySize","removeFields","extrasObject","theExtras","ExtrasConnected","PaypalFieldContainer","aria-hidden","containerId","CardPaymentForm","expirationDate","cvv","billingAddress","iso2","visa","mastercard","prePayment","orderId","prePaymentNeedsLoading","prePaymentIsFetching","prePaymentHasError","prePaymentErrorData","postPaymentIsFetching","postPaymentHasError","postPaymentErrorData","usePaypalCardPaymentFormState","paypalForm","paypalFormState","ppFields","fields","CardPayment","onSuccess","paymentError","setPaymentError","setPaypalForm","processing","setProcessing","userDetails","usePayPalScriptReducer","isResolved","handlePaypalInit","neededComponents","checkPaypalComponentsAreLoaded","HostedFields","render","createOrder","internalLabel","maskInput","hf","submitPaypalForm","submit","cardholderName","streetAddress","locality","postalCode","countryCodeAlpha2","contingencies","passed3DSecure","authenticationReason","authenticationStatus","liabilityShifted","currentState","lShifted","authStatus","authReason","get3DSecureOutcome","err","PaypalCardPaymentForm","detail","issue","msg","getErrorMessage","PaypalPaymentForm","onCreateOrder","maxWidth","layout","onApprove","shippingPreference","prevProps","nextProps","clientId","usePaypalPaymentFormState","PaypalPayment","paypalError","setPaypalError","PayItPayment","redirectUrl","Payment","_amount","_bookingId","_paypal","_payit","_prePaymentHasError","_prePaymentErrorData","_prePaymentIsFetching","prepaymentLoaded","setPrepaymentLoaded","paypalProviderOptions","clientToken","loadPrePaymentData","round","onPaypalPaymentMethodAdded","service","setPaymentUsed","redirectLink","PaymentAction","_paymntRecId","_paymntUsed","_postPaymentErrorData","_postPaymentHasError","_postPaymentIsFetching","_postPaymentData","postPaymentData","loadPostPaymentData","stepNotCompleted","completeBooking","TagManager","dataLayer","ecommerce","purchase","actionField","affiliation","revenue","products","quantity","WithBooking","_isNewBooking","bookingIsLoaded","isBooking","hasBookingError","wrap","WithBookingLoadingStates","_errorData","WithBookingStepOrder","matches","useRouteMatch","requestedStep","requiredStep","needRedirect","WithDeposit","depositIsLoaded","ProgressBar","steps","currentStep","getStepTitle","stepStatus","BookingRoutes","component","exact","Booking","FAQ","termData","setTermData","setActive","activeKey","term","data-order","FetchContent","post","contentData","theData","setTheData","postData","setPostData","titleData","setTitleData","metaTitle","setMetaTitle","metaDesc","setMetaDesc","showSearchBox","setShowSearchBox","contentType","contentId","Axios","document_title","meta_description","show_search_box","replaceAll","overflowWrap","TermsConditions","PopularHolidays","PopularLocations","popLocData","posts","TravelGuide","descriptionData","setDescriptionData","setPopLocData","popHolsData","setPopHolsData","blogData","setBlogData","expertInsight","setExpertInsight","sliderItemsRaw","setSliderItemsRaw","bottomText","setBottomText","ExpertInsight","channelCodes","parkIds","channel_id","park_id","_parksData","idArr","getSpecificParks","parkChannels","mergedData","image_url","Parks","isTownPage","townName","RegionCard","channelCode","showPetFriendly","WithOperatorRegions","getOperatorRegions","_operatorChannelRegionIds","_operatorId","useSeoText","topText","setTopText","currentURLPath","top_text","bottom_text","useOfferCols","setOffers","OperatorRegions","operatorRegions","thisChannel","thisOperator","topSeoText","bottomSeoText","selectOperator","offersExist","OperatorRow","allChannelOperatorIds","sortedResults","list","seq","sortAndFilterResults","getOperatorsByChannelId","allOperators","Operators","_allChannels","_allChannelOperatorIds","_allOperators","channelsToShow","sortAlphabetically","nameA","nameB","channelRegions","_channelRegionIds","Regions","_channel","_channelRegions","search_selectChannel","r","view_category","TravelGuideHome","travelGuides","setTravelGuides","removeLastTwoWords","str","guide","travel_guide_images","Reset","runDelete","sessionStorage","getItem","removeItem","Routes","strict","ChangePassword","HeaderBar","onLogout","onShowLogin","starWhite","LoginModal","HeaderNavLoginButtons","showBackground","MegaMenuColumn","section","setExpanded","link","regionIdFromUrl","getLink","HeaderNavLink","activeClassName","HeaderNav","menuData","setShowBackground","expanded","backgroundStatus","theNavBar","Channels","menuItems","sortOrder","handleScroll","scrollY","click","Navbar","collapseOnSelect","expand","sticky","data-style","Brand","NavDropdown","col","isChannel","hasMenuData","setHasMenuData","setMenuData","showLoginForm","setShowLoginForm","handleLogout","handleShowLoginForm","menuJSON","MegaMenu","getInitData","getNav","navLoaded","Init","appIsReady","appIsFetching","appHasError","appInit","ev","WithUrlParams","OnRouteChange","AWINExclusionList","App","awin","initialize","defer","WithInit","ErrorBoundary","this","onClearCache","Component","hostname","REGION","BUCKET","USER_POOL_ID","APP_CLIENT_ID","IDENTITY_POOL_ID","initState","Reducer","siteConfig","gtmId","Amplify","configure","Auth","mandatorySignIn","userPoolId","identityPoolId","userPoolWebClientId","Storage","bucket","API","endpoints","endpoint","ReactDOM","StrictMode","getElementById","serviceWorker","registration","unregister","resultsInterval","lastGetResultsRequest","clearTimeout","Append"],"mappings":"2MAOaA,EAAO,CAChB,+BAAgC,SAACC,EAASC,EAAuBC,GAAjC,OAAsD,sDAAkBF,EAAlB,4CAAmE,kBAACG,EAAA,EAAD,CAAGC,KAAMH,GAAT,wBAAnE,QAAgI,kBAACE,EAAA,EAAD,CAAGC,KAAMF,GAAT,kBAAhI,MACtF,kCAAmC,SAACG,GAAD,iCAA2BA,IAC9D,mCAAoC,uEACpC,yBAA0B,iBAC1B,0BAA2B,uCAC3B,sCAAuC,kBAAM,uGAAkE,kBAAC,IAAD,CAAMC,GAAG,KAAT,eAAlE,4CAC7C,2BAA4B,SAACD,EAAGE,GAAJ,qBAAkBF,EAAlB,eAA0BE,IACtD,sCAAuC,SAACC,GAAD,OAAc,kHAA6E,kBAAC,IAAD,CAAMF,GAAIE,EAAUC,SAAO,GAA3B,aAA7E,oBACrD,uCAAwC,sBACxC,+BAAgC,eAChC,qCAAsC,uBACtC,0CAA2C,0BAC3C,sCAAuC,SAACC,EAASC,GAAV,iDAAyDD,EAAzD,iBAAsEC,IAC7G,mCAAoC,kBACpC,8BAA+B,qCAC/B,8BAA+B,cAC/B,uCAAwC,4BACxC,iCAAkC,uBAClC,wCAAyC,qBACzC,4CAA6C,iGAC7C,qCAAsC,2CACtC,qCAAsC,SAACC,EAAcC,GAAf,OAA4B,wFAA8C,2BAAID,EAAJ,MAAqBC,KACrI,iCAAkC,oCAClC,qCAAsC,6YACtC,iCAAiC,MAAjC,OAAwCC,IAAO,qBAC/C,qCAAqC,cAArC,OAAoDA,IAAO,oBAA3D,8EACA,6CAA8C,8DAC9C,uCAAwC,iCACxC,mCAAoC,SAACC,GAAD,8BAAmCA,EAAe,UAAY,iBAClG,sCAAuC,mBACvC,8CAA+C,qCAC/C,+BAAgC,mEAChC,8BAA+B,kEAC/B,8BAA+B,wIAC/B,6BAA8B,0EAC9B,gCAAiC,oBACjC,6BAA8B,yEAC9B,4BAA6B,wEAC7B,iCAAkC,qBAClC,4CAA6C,8BAC7C,6BAA8B,cAC9B,qCAAsC,uBACtC,oCAAqC,uBACrC,gCAAiC,oEACjC,uCAAwC,uHACxC,+BAAgC,oGAChC,yCAA0C,0HAC1C,sCAAuC,kEACvC,iCAAkC,kBAClC,uCAAwC,iDACxC,qCAAsC,sCACtC,0BAA2B,4CAC3B,kCAAmC,oBACnC,wBAAyB,QACzB,yBAA0B,SAC1B,6BAA8B,qCAC9B,iCAAkC,SAACA,GAAD,qCAA0CA,EAAe,kBAAoB,UAA7E,8BAClC,4BAA6B,SAACL,GAAD,OAAa,iDAAY,0BAAMM,UAAU,sBAAsBN,KAC5F,6BAA8B,SAACA,GAAD,OAAa,kDAAa,0BAAMM,UAAU,sBAAsBN,KAC9F,kCAAmC,0BACnC,6BAA8B,SAACO,GAAD,gBAAiBA,EAAjB,gBAC9B,+BAAgC,SAACC,EAAaN,GAAd,gBAAkCM,EAAlC,iBAAsDN,IACtF,gCAAiC,yEACjC,8BAA+B,uEAC/B,uBAAwB,SAACO,EAAeD,GAAhB,gBAAmCC,EAAa,uBAAmBD,GAAnB,iBAA6CA,EAA7C,gBACxE,4BAA6B,0BAC7B,qBAAsB,SAACE,EAAYC,GAAb,uBAAmCD,EAAnC,eAAoDE,YAAkBD,KAC5F,eAAgB,OAChB,eAAgB,SAACE,GAAD,8BAAyBA,IACzC,mBAAoB,WACpB,0BAA2B,oBAC3B,eAAgB,OAChB,gBAAiB,QACjB,cAAe,MACf,mBAAoB,YACpB,mBAAoB,WACpB,wBAAyB,iBACzB,gBAAiB,QACjB,iBAAkB,SAClB,iBAAkB,SAClB,gBAAiB,SAAClB,GAAD,qBAAeA,IAChC,0BAA2B,4LAC3B,qBAAsB,mBACtB,iBAAiB,sBAAjB,OAAwCS,IAAO,oBAA/C,aACA,aAAc,aACd,+BAAgC,4BAChC,4BAA6B,oHAC7B,yBAAyB,GAAzB,OAA6BA,IAAO,oBAApC,aACA,0BAA2B,iBAC3B,yBAA0B,eAC1B,yBAA0B,cAC1B,qBAAqB,GAArB,OAAyBA,IAAO,oBAAhC,6EAAqHA,IAAO,oBAA5H,0BACA,0BAA2B,QAC3B,iCAAkC,gBAClC,8BAA+B,aAC/B,qCAAsC,8BACtC,iCAAkC,uCAClC,8BAA+B,YAC/B,4BAA6B,mGAC7B,uCAAwC,qBACxC,0BAA2B,8GAC3B,uCAAwC,2BACxC,oCAAqC,uBACrC,+BAAgC,kBAChC,0CAA2C,gEAC3C,gCAAiC,mBACjC,gCAAiC,0CACjC,oCAAqC,yBACrC,wCAAyC,kEACzC,oCAAqC,yBACrC,wCAAyC,oEACzC,qBAAqB,mCACrB,sBAAuB,iDACvB,2BAA4B,wBAC5B,+BAAgC,mDAChC,wBAAyB,UACzB,6BAA8B,4BAC9B,4BAA6B,2BAC7B,0BAA2B,yBAC3B,wBAAyB,UACzB,uBAAwB,SACxB,6BAA8B,gCAC9B,gCAAiC,gCACjC,yBAA0B,WAC1B,8BAA+B,iBAC/B,qBAAsB,OACtB,kCAAmC,6BACnC,sCAAuC,8DACvC,+BAAgC,cAChC,wBAAyB,MACzB,+BAAgC,cAChC,kCAAmC,oBACnC,oCAAqC,sBACrC,gCAAiC,eACjC,0BAA2B,QAC3B,+BAAgC,eAChC,iCAAkC,sBAClC,qCAAsC,0BACtC,sCAAuC,mDACvC,0CAA2C,uBAC3C,uCAAwC,+BACxC,wCAAyC,qBACzC,mCAAoC,eACpC,wCAAyC,yBACzC,iCAAkC,aAClC,2BAA4B,2BAC5B,0CAA2C,oKAC3C,4BAA6B,kHAC7B,8BAA+B,QAC/B,4BAA6B,QAC7B,6BAA8B,OAC9B,iCAAkC,eAClC,iBAAkB,KAClB,8BAA+B,wBAC/B,kBAAmB,MACnB,yBAA0B,8DAC1B,4BAA6B,6BAC7B,iCAAkC,wBAClC,8BAA+B,gCAC/B,yBAA0B,uBAC1B,qBAAsB,eACtB,kBAAmB,MACnB,0BAA2B,iCAC3B,uBAAwB,kBACxB,oCAAqC,kFACrC,iCAAkC,wBAClC,kBAAmB,gBACnB,sBAAuB,WACvB,sBAAuB,UACvB,wCAAyC,mCACzC,kCAAmC,0DACnC,sBAAuB,UACvB,oBAAqB,QACrB,sCAAuC,SAACH,GAAD,qCAAiCA,IACxE,0CAA2C,4EAC3C,mCAAoC,SAACA,GAAD,kCAA8BA,IAClE,iCAAkC,2DAClC,8CAA+C,SAACD,EAASC,GAAV,iDAAyDD,EAAzD,iBAAsEC,IACrH,yBAA0B,wDAC1B,8BAA+B,cAC/B,oCAAqC,SAACA,GAAD,uCAAmCA,IACxE,2CAA4C,uDAC5C,8BAA+B,kBAC/B,8BAA+B,eAC/B,6BAA8B,8DAC9B,kCAAmC,4BACnC,mCAAoC,kDACpC,qCAAsC,mCACtC,kCAAmC,wBACnC,iCAAkC,2BAClC,qCAAsC,uCACtC,mCAAoC,gCACpC,yCAA0C,uCAC1C,+BAAgC,yBAChC,8BAA+B,6BAC/B,gCAAiC,uBACjC,gCAAiC,0FACjC,wCAAyC,sBACzC,8BAA+B,SAACa,GAAD,wDAA4DA,EAAqE,WAAxD,qDAAzE,+GAC/B,sBAAuB,kCACvB,wBAAyB,kCACzB,4BAA6B,6BAC7B,2BAA4B,0BAC5B,0BAA2B,4BAC3B,iBAAkB,MAClB,iBAAkB,gBAClB,oBAAqB,eACrB,sBAAuB,iBACvB,qBAAsB,gBACtB,0BAA2B,gBAC3B,uBAAwB,WACxB,0BAA2B,qCAC3B,6BAA8B,yKAC9B,8BAA+B,gDAC/B,mBAAoB,QACpB,0BAA2B,mCAC3B,sBAAuB,WACvB,qBAAsB,UACtB,uBAAwB,2BACxB,mBAAoB,QACpB,kBAAmB,OACnB,8BAA+B,0HAC/B,sBAAuB,sDACvB,qBAAsB,qDACtB,iBAAkB,aAClB,oBAAqB,iBACrB,8BAA+B,WAC/B,+BAAgC,YAChC,6BAA8B,UAC9B,6BAA8B,UAC9B,cAAc,GAAd,OAAkBV,IAAO,oBAAzB,SACA,kBAAmB,WACnB,iBAAkB,UAClB,gBAAiB,SACjB,qBAAsB,cACtB,gBAAiB,eACjB,kBAAmB,oCACnB,eAAgB,QAChB,qBAAsB,iBACtB,gBAAiB,SACjB,mBAAoB,aACpB,gBAAiB,SACjB,gBAAiB,aACjB,uBAAwB,iBACxB,kBAAmB,+CACnB,oBAAqB,uHACrB,6BAA8B,WAC9B,8BAA+B,YAC/B,uCAAwC,uBACxC,4BAA6B,SAC7B,sCAAuC,yCACvC,qCAAsC,kBAAM,qFAAgD,kBAAC,IAAD,CAAMR,GAAG,WAAT,eAAhD,MAC5C,uCAAwC,qBACxC,0BAA2B,QAC3B,uCAAwC,sBACxC,uBAAwB,aACxB,0BAA2B,SAACmB,GAAD,8BAA2BA,EAA3B,MAC3B,8BAA+B,qBAC/B,sCAAuC,mDACvC,mCAAoC,wEACpC,yBAA0B,eAC1B,uBAAwB,qBACxB,gCAAiC,kBACjC,iCAAkC,mBAClC,8BAA+B,gBAC/B,2BAA4B,uBAC5B,0BAA2B,wDAC3B,8BAA+B,eAC/B,6BAA8B,kBAAM,yEAAoC,2DAApC,MACpC,2BAA4B,2BAC5B,uBAAwB,2BACxB,mCAAoC,gBACpC,iCAAkC,cAClC,oCAAqC,kBACrC,8BAA+B,WAC/B,+BAAgC,8GAChC,+BAAgC,SAACd,GAAD,qBAAoBA,EAApB,UAChC,2BAA4B,SAACA,GAAD,yBAAqBA,IACjD,0BAA2B,SAACA,GAAD,wBAAoBA,IAC/C,4BAA6B,SAC7B,6BAA8B,SAACA,GAAD,uBAAsBA,IACpD,6BAA8B,SAACe,EAAOhB,EAASO,GAAjB,gBAAiCS,EAAjC,YAA0CC,YAAkB,UAAWD,GAAvE,oBAAyFhB,EAAzF,gBAAwGO,EAAxG,YAC9B,8BAA+B,+BAC/B,sBAAuB,SAACW,GAAD,gBAAoBA,EAAc,YAAc,cAAhD,UACvB,mBAAoB,SAACjB,GAAD,yBAAqBA,IACzC,0BAA2B,gBAC3B,+BAAgC,uBAChC,oBAAqB,SAACkB,GAAD,oBAAmBA,EAAS,UAAY,OAAxC,iBACrB,0BAA2B,gBAC3B,uBAAwB,aACxB,0BAA2B,iBAC3B,iCAAkC,gDAClC,2BAA4B,kCAC5B,4BAA6B,SAAChB,EAAUO,GAAX,wBAAqCP,EAArC,yFAA8HO,EAA9H,MAC7B,oBAAqB,UACrB,eAAgB,SAACS,GAAD,wBAAuBA,EAAS,UAAY,GAA5C,0BAChB,iBAAkB,aAClB,yBAA0B,YAC1B,yBAA0B,+HAC1B,uBAAwB,mBACxB,mBAAoB,QACpB,+BAAgC,yBAChC,gCAAiC,yBACjC,iCAAkC,qBAClC,iCAAkC,qBAClC,oCAAqC,eACrC,0BAA2B,mCAC3B,uBAAwB,WACxB,yBAA0B,2GAC1B,gBAAiB,eACjB,kBAAmB,kBACnB,oBAAqB,SAACnB,EAASO,GAAV,gBAA0BP,EAA1B,cAAuCO,EAAvC,YAAmDU,YAAkB,QAASV,KACnG,gCAAiC,0BACjC,qBAAsB,eACtB,iBAAkB,YAClB,qBAAsB,uCACtB,wBAAyB,qBACzB,wBAAyB,mBACzB,gBAAiB,SACjB,eAAgB,QAChB,gBAAiB,SACjB,mBAAoB,aACpB,qBAAsB,gBACtB,6BAA8B,yBAC9B,2BAA4B,qCAC5B,2BAA4B,wBAC5B,uBAAwB,SAACa,GAAD,sCAAqCA,EAArC,MACxB,iBAAkB,SAACC,GAAD,gBAAYA,EAAZ,YAAmBA,EAAM,EAAI,SAAW,UAC1D,sCAAuC,2BACvC,oCAAqC,yEACrC,uBAAwB,iBACxB,qBAAsB,OACtB,gCAAiC,SAACC,EAAWC,GAAZ,gBAAgCC,YAAc,UAAWD,GAAzD,qBAAmFD,EAAY,YAAc,sBAC9I,iCAAkC,SAACC,GAAD,8BAAmCC,YAAc,OAAQD,GAAzD,UAClC,wBAAyB,aACzB,2BAA4B,SAACb,GAAD,4BAA+BA,GAAc,SAA7C,cAA2DN,IAAO,oBAAlE,cAC5B,+BAAgC,iBAChC,wBAAyB,cACzB,yBAA0B,cAC1B,sBAAuB,SAACqB,EAAOf,GAAR,gBAA0Be,EAA1B,YAAmCR,YAAkB,UAAWQ,GAAhE,qBAAmFf,IAC1G,yBAA0B,SAACgB,EAAWC,GAAZ,OAAyBA,EAAW,iDAAY,uCAAgBA,IAA/B,eAA+DC,YAAYF,KACtI,+BAAgC,+CAChC,4BAA4B,0CAA5B,OAAuEtB,IAAO,oBAA9E,4dACA,gCAAiC,6BACjC,6BAA6B,0EAA7B,OAAwGA,IAAO,qBAC/G,qCAAsC,+BACtC,wBAAyB,SAACM,GAAD,uCAA0CA,EAA1C,mB,QC1VtB,SAASmB,EAAeC,EAAKC,EAAUC,GAC1C,MAA6B,qBAAlBD,EAASD,IAChBG,QAAQC,KAAR,uCAA6CJ,EAA7C,MACOA,GAEkB,oBAAlBC,EAASD,GACTC,EAASD,GAAT,MAAAC,EAAQ,YAASC,IAErBD,EAASD,GCVpB,IAAMzC,EAAI,2BACH8C,GADG,IAEN,yBAA0B,qBAC1B,qBAAqB,GAArB,OAAyB/B,IAAO,oBAAhC,oEAA4GA,IAAO,oBAAnH,0BACA,4BAA6B,mSAC7B,8BAA+B,GAC/B,0CACI,iQACJ,gBAAiB,kBAQRgC,EAAI,SAACN,GAAD,2BAASE,EAAT,iCAASA,EAAT,yBAAoBH,EAAeC,EAAKzC,EAAM2C,IAChDI,ICrBAA,O,iCCFf,2BAGA,SAASC,EAAKC,GACV,OACI,yBACIC,IAAuB,SAAlBD,EAAME,QAAqBF,EAAMG,SAAWH,EAAMI,UACvDC,OAAQL,EAAMK,OACdrC,UAAWgC,EAAMhC,UACjBsC,IAAKN,EAAMM,MAKvBP,EAAKQ,aAAe,CAChBD,IAAKxC,IAAO,oBACZoC,QAAS,QACTE,UAAWI,IAAOJ,UAClBD,SAAUK,IAAOL,SACjBM,KAAM,KACNJ,OAAQ,GACRrC,UAAW,IAGA+B,O,kBCxBfW,EAAOC,QAAU,kqI,gCCAjB,0KAAO,IAAMC,EAAY,aACZC,EAAU,WACVC,EAAU,WACVC,EAAQ,SACRC,EAAU,Y,4ECAVC,EAAgB,SAACjB,GAC1B,MAA8CkB,mBAAS,CAAEzC,KAAM,KAA/D,mBAAO0C,EAAP,KAAwBC,EAAxB,KAEMC,EAAQ,CACV,iBACA,mBACA,iBACA,OACA,SACA,QACFC,SAASC,UAAUC,UAMrB,OAJAC,qBAAU,WACNL,EAAmBpB,EAAM0B,SAASC,MAAK,SAACtD,GAAD,OAAaA,EAAQuD,OAAS5B,EAAM6B,oBAC5E,CAAC7B,EAAM0B,SAAU1B,EAAM6B,gBAGtB,oCACI,kBAAC,IAAKC,MAAN,CAAYC,UAAW/B,EAAMgC,IACzB,kBAAC,IAAKC,MAAN,CAAYjE,UAAS,eAAUgC,EAAMkC,YACjC,8BAAOlC,EAAMmC,QAEhBd,EACG,kBAAC,IAAKe,QAAN,CACIC,GAAG,SACHrE,UAAU,mBACVsE,SAAS,IACTC,SAAUvC,EAAMuC,UAEfvC,EAAM0B,SAASc,KAAI,SAACnE,GAAD,OAChB,4BACImB,IAAKnB,EAAQuD,KACba,MAAOpE,EAAQuD,KACf5D,UAAU,YACV0E,SAAU1C,EAAM2C,UAAUC,SAAW5C,EAAM2C,UAAUrB,SAASjD,EAAQuD,MACtEiB,UAAyB,OAAf1B,QAAe,IAAfA,OAAA,EAAAA,EAAiBS,QAASvD,EAAQuD,MAE3CvD,EAAQI,UAKrB,kBAAC,IAAD,CAAUqE,KAAM9C,EAAM8C,KAAMC,SAAU/C,EAAM+C,SAAUL,SAAU1C,EAAM0C,UAClE,kBAAC,IAASM,OAAV,CACIX,GAAG,SACHY,KAAK,SACLjF,UAAU,2BACVkF,KAAK,SACLZ,SAAS,IACTI,SAAU1C,EAAM0C,UAEhB,qCAAOvB,QAAP,IAAOA,OAAP,EAAOA,EAAiB1C,OAE5B,kBAAC,IAAS0E,KAAV,CAAenF,UAAU,mBAAmBsE,SAAS,MAChDtC,EAAM0B,SACF0B,QAAO,SAAC/E,GAAD,OAAa2B,EAAM2C,UAAUrB,SAASjD,EAAQuD,SACrDY,KAAI,SAACnE,GAAD,OACD,kBAAC,IAAKgF,MAAN,CACI7D,IAAKnB,EAAQuD,KACbI,GAAI3D,EAAQuD,KACZqB,KAAK,QACLd,MAAO9D,EAAQI,KACfA,KAAK,oBACLgE,MAAOpE,EAAQuD,KACfW,SAAUvC,EAAMuC,SAChBG,SAAU1C,EAAM2C,UAAUC,SAAW5C,EAAM2C,UAAUrB,SAASjD,EAAQuD,MACtE5D,UAAU,WACVsF,SAAwB,OAAfnC,QAAe,IAAfA,OAAA,EAAAA,EAAiBS,QAASvD,EAAQuD,eAWnFX,EAAcV,aAAe,CACzB2B,UAAW,QACXS,UAAW,IAcA1B,O,yfC9EFsC,EAAgB,SAACC,EAAUpE,GACpCoE,EAAS,CAAEP,KAAMQ,IAAgBC,QAAStE,KAEjCuE,EAAe,SAACH,EAAUI,GACnCJ,EAAS,CAAEP,KAAMY,IAAeH,QAASE,KAEhCE,EAAa,SAACN,EAAUO,GACjCP,EAAS,CAAEP,KAAMe,IAAaN,QAASK,KAE9BE,EAAiB,SAACT,EAAUvF,GACrCuF,EAAS,CAAEP,KAAMiB,IAAiBR,QAASzF,KAElCkG,EAAqB,SAACX,EAAUY,GACzCZ,EAAS,CAAEP,KAAMoB,IAAsBX,QAASU,KAEvCE,EAAuB,SAACd,EAAUY,GAC3CZ,EAAS,CAAEP,KAAMsB,IAAwBb,QAASU,KAEzCI,EAAsB,SAAChB,EAAUY,GAC1CZ,EAAS,CAAEP,KAAMwB,IAAuBf,QAASU,KAExCM,EAAoB,SAAClB,EAAUmB,GACxCnB,EAAS,CAAEP,KAAM2B,IAAqBlB,QAASiB,KAEtCE,EAAuB,SAACrB,EAAUsB,GAC3C,IAAMC,EAAM,IAAIC,MAAK,IAAIA,MAAOC,UAAS,IAAID,MAAOE,WAAa,IACjEJ,EAAK,IAAUC,EACfvB,EAAS,CAAEP,KAAMkC,IAAqBzB,QAASoB,KAEtCM,EAAe,SAAC5B,GACzBA,EAAS,CAAEP,KAAMoC,OAGd,EAAoCC,aAAqB,SAAC9B,EAAU9D,EAAQ6F,EAAeC,GAG9F,OAFAhC,EAAS,CAAEP,KAAMwC,IAAc1E,MAC/ByC,EAAS,CAAEP,KAAMyC,IAAchC,QAAQ,2BAAMhE,GAAP,IAAe8F,aAC9CG,YAAWnC,EAAUkC,IAAcE,IAAKC,OAA9B,YAAC,eAA0CN,GAA3C,IAA0DO,KAAMN,QAH9E,mBAAOO,EAAP,KAAoBC,EAApB,M,0FC/CMC,EAAe,SAACjG,GACzB,IAkBIkG,EAlBEC,EAAcC,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAKC,QAAQA,WAE9D,EAAoCrF,mBAAS,IAA7C,mBAAOsF,EAAP,KAAmBC,EAAnB,KAEMpF,EAAQ,CACV,iBACA,mBACA,iBACA,OACA,SACA,QACFC,SAASC,UAAUC,UAqCrB,OAnCAC,qBAAU,WAAO,IAAD,EACPzB,EAAM6B,cACN4E,EAAa,UAACN,EAAYnG,EAAM6B,sBAAnB,aAAC,EAAkCpD,MAD3BgI,EAAc,gBAEzC,CAACN,EAAanG,EAAM6B,gBAGlB7B,EAAM0G,gBAEA1G,EAAM2G,eACbT,EACI,4BAAQzD,MAAM,IAAIC,UAAQ,GACrB5C,YAAE,0BAGJE,EAAMuG,UACbL,EAAgBlG,EAAMuG,QAAQ/D,KAAI,SAACoE,GAAD,OAK9B,kBAAC,IAAKvD,MAAN,CACI7D,IAAKoH,EAAO5E,GACZA,GAAI4E,EAAO5E,GACXiB,KAAK,QACLd,MAAOyE,EAAOnI,KACdA,KAAK,mBACLgE,MAAOmE,EAAO5E,GACdO,SAAUvC,EAAMuC,SAChBG,UAAW1C,EAAM0G,gBACjB1I,UAAU,WACVsF,QAAStD,EAAM6B,gBAAkB+E,EAAO5E,SAvBhDkE,EAAgB,KA6BhB,kBAAC,IAAKpE,MAAN,CAAYC,UAAW/B,EAAMgC,IACzB,kBAAC,IAAKC,MAAN,CAAYjE,UAAS,eAAUgC,EAAMkC,YACjC,8BAAOlC,EAAMmC,QAEhBd,EACG,kBAAC,IAAKe,QAAN,CACIC,GAAG,SACHrE,UAAU,mBACVyE,MAAOzC,EAAM2G,eAAiB,GAAK3G,EAAM6B,cACzCU,SAAUvC,EAAMuC,SAChBG,UAAW1C,EAAM0G,gBACjBpE,SAAS,KAERtC,EAAMuG,QAAQ/D,KAAI,SAACoE,GAAD,OACf,4BAAQpH,IAAKoH,EAAO5E,GAAIS,MAAOmE,EAAO5E,GAAIhE,UAAU,aAC/C4I,EAAOnI,UAKpB,kBAAC,IAAD,CAAUqE,KAAM9C,EAAM8C,KAAMC,SAAU/C,EAAM+C,UACxC,kBAAC,IAASC,OAAV,CACIX,GAAG,SACHY,KAAK,SACLjF,UAAU,2BACVkF,KAAK,SACLZ,SAAS,IACTI,SAAU1C,EAAM0C,UAEhB,8BAAO1C,EAAM2G,eAAiB,GAAKH,IAEvC,kBAAC,IAASrD,KAAV,CAAenF,UAAU,oBACpBkI,MAQzBD,EAAa1F,aAAe,CACxBxD,KAAM,QACN4F,UAAW,IAeAsD,O,mJCpDFY,EAAqB,SAAC7G,GACjC,IAAMwD,EAAWsD,cAEjB,EAAoD5F,mBAAS,IAA7D,mBAAO6F,EAAP,KAA2BC,EAA3B,KACA,EAAoD9F,mBAAS,IAA7D,mBAAO+F,EAAP,KAA2BC,EAA3B,KACA,EAAgChG,oBAAS,GAAzC,mBAAOiG,EAAP,KAAiBC,EAAjB,KAEMC,EAAajB,YAAYhH,KACzBkI,EAAYlB,YAAYxC,KACxB2D,EAAYnB,YAAYnI,KACxBuJ,EAAuBpB,YAAYqB,KACnCC,EAActB,YAAYuB,KAEhClG,qBAAU,WACRmG,MACC,CAAC5H,EAAM6H,YAAa7H,EAAM/B,WAE7B,IAAM6J,EAA4CC,uBAAY,WAC5D,IAAMC,EAAU,IAAIhD,KAEhBwC,GAAwBA,EAAqB5E,QAAU8E,EAAcM,EACvEd,EAAsBM,GAGtBS,MAAMrC,IAAKsC,cACRC,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACL,IAAM4B,EAAeI,KAAKC,MAAMjC,EAAKA,MAC/BkC,EAAQ,IAAIxD,KAEdsC,KAAaY,KAAiB,IAChCA,EAAaZ,GAAa,CACxBkB,EAAMC,cACJ,KACCD,EAAME,WAAa,GAAK,EAAI,KAAOF,EAAME,WAAa,GAAKF,EAAME,WAAa,GAC/E,IACAF,EAAMG,YAEZ,cAA2BC,OAAOC,QAAQX,GAA1C,eAAyD,CAApD,0BAAO1I,EAAP,KAAYiD,EAAZ,KACHyF,EAAa1I,GAAmCiD,EAjE7CD,KAAI,SAACuB,GAChB,IAAM+E,EAAY/E,EAAKgF,MAAM,KAC7B,OAAO,IAAI/D,MAAM8D,EAAU,IAAKA,EAAU,GAAK,GAAIA,EAAU,OAiEvDjE,YAAqBrB,EAAU0E,GAC/BhB,EAAsBgB,EAAaZ,SAGxC,CAACI,EAAaF,EAAsBF,EAAW9D,IAE5CwF,EAA6BjB,uBAAY,WAC7C,QAAkBkB,IAAd3B,EAAJ,CAEA,IAAI4B,EAAkB,GAItB,OAHAlC,EAAsB,IACtBE,EAAsB,IAEdG,GACN,IAAK,QACL,IAAK,YACL,IAAK,cACH,MACF,IAAK,aACHS,IACA,MACF,QACEoB,EAnF0B,WAAmB,IAAlBjL,EAAiB,uDAAN,EAC5C,OAAQA,GACN,KAAK,EACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACzB,KAAK,EACL,KAAK,GACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACzB,KAAK,EACL,KAAK,GACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACzB,KAAK,EACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,GACtB,KAAK,EACL,KAAK,GACH,MAAO,CAAC,EAAG,EAAG,EAAG,GACnB,QACE,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAmENkL,CAA0B5B,GAC5CP,EAAsB,CAAEoC,WAAYF,QAEvC,CAAC7B,EAAYE,EAAWD,EAAWQ,IAEtCrG,qBAAU,WACRuH,MACC,CAAC3B,EAAYC,EAAWC,EAAWyB,IAElC7B,IACFC,GAAY,GACZ4B,KAGF,IAAMpB,EAAyB,SAACC,EAAa5J,GAC3C,OAAIA,GAAY4J,EACP/H,YAAE,oBAAqBuJ,YAAmB,IAAIrE,KAAK6C,IAAe5J,GAElE6B,YAAE,uBAIb,OACE,kBAAC,IAAKgC,MAAN,CAAYC,UAAW/B,EAAMgC,IAC3B,kBAAC,IAAKC,MAAN,CAAYjE,UAAS,eAAUgC,EAAMkC,YAAclC,EAAMmC,OACzD,kBAAC,IAAD,CAAUW,KAAM9C,EAAM8C,KAAMC,SAAU/C,EAAM+C,SAAUuG,KAAK,QACzD,kBAAC,IAAStG,OAAV,CACEX,GAAG,SACHY,KAAK,SACLjF,UAAU,2BACVkF,KAAK,SACLZ,SAAS,IACTI,SAAU1C,EAAM0C,UAEhB,8BAAOkF,EAAuB5H,EAAM6H,YAAa7H,EAAM/B,YAEzD,kBAAC,IAASkF,KAAV,CAAenF,UAAU,6BACvB,yBAAKA,UAAU,8BACb,4BAAK8B,YAAE,6BACP,kBAAC,IAAKgC,MAAN,CAAYC,UAAW/B,EAAMgC,GAAK,UAAWhE,UAAU,QACrD,kBAAC,IAAKoE,QAAN,CAAcC,GAAG,SAASI,MAAO8G,SAASvJ,EAAM/B,UAAWsE,SAAUvC,EAAMwJ,kBACzE,4BAAQ/G,MAAM,GAAGC,UAAQ,GACtB5C,YAAE,0BAxJI,SAACV,GACxB,OAAQA,GACN,IAAK,YACH,OAAItB,IAAO,2BAAmC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAC1D,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACnC,IAAK,YACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IACjF,IAAK,QACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IACvC,IAAK,cACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAC/C,IAAK,aACH,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IACzD,QACE,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,KA4IjB2L,CAAiBzJ,EAAMZ,WAAWoD,KAAI,SAACzD,GAAD,OACrC,4BAAQS,IAAKT,EAAK0D,MAAO1D,GACtBe,YAAE,iBAAkBf,UAM/B,yBAAKf,UAAU,OACb,4BAAK8B,YAAE,+BACP,kBAAC,IAAD,CACE4J,UAAW,IAAI1E,KACf2E,WAAY3J,EAAM4J,aAClBC,aAAc7J,EAAM6H,YAAc,IAAI7C,KAAKhF,EAAM6H,kBAAeoB,EAChEa,aAAc,IAAI9E,KAAKhF,EAAM6H,aAC7BkC,aAAY,CAAG,CAAEC,OAAQ,IAAIhF,MAAU+B,GAA3B,mBAAkDE,WAS5EJ,EAAmBtG,aAAe,GAgBnBsG,O,iCChNf,oFAQaoD,EAAe,SAACjK,GACzB,IAAMkK,EAAalK,EAAMmK,OAASnK,EAAMoK,SAAWpK,EAAMqK,QAEnDC,EAAoB,SAACC,EAAKC,EAAOC,GACnC,IAAItL,EAAQ,EAEZ,OAAQqL,GACJ,IAAK,SACDrL,EAAQa,EAAMoK,SAAWpK,EAAMqK,QAAUE,EACzC,MACJ,IAAK,WACDpL,EAAQa,EAAMmK,OAASnK,EAAMqK,QAAUE,EACvC,MACJ,IAAK,UACDpL,EAAQa,EAAMmK,OAASnK,EAAMoK,SAAWG,EACxC,MACJ,QACIpL,EAAQ,EAGZA,GAASa,EAAM0K,WAAWD,EAAWF,IAG7C,OACI,kBAAC,IAAKzI,MAAN,KACI,kBAAC,IAAKG,MAAN,CAAYjE,UAAS,eAAUgC,EAAMkC,YACjC,8BAAOpC,YAAE,uBAAwBE,EAAM0K,aAE3C,kBAAC,IAAD,KACI,kBAAC,IAAS1H,OAAV,CACIX,GAAG,SACHY,KAAK,SACLjF,UAAU,2BACVkF,KAAK,SACLZ,SAAS,IACTI,SAAU1C,EAAM0C,UAEhB,8BAAsB,IAAfwH,EAAmB,aAAnB,UAAqCA,EAArC,YAAmDvL,YAAkB,QAASuL,MAEzF,kBAAC,IAAS/G,KAAV,CAAenF,UAAU,WACrB,kBAAC,IAAD,CAAKA,UAAU,iCACX,kBAAC,IAAD,CAAK2M,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,YAAE,mBAE1B,kBAAC,IAAD,CAAK6K,GAAI,GACL,kBAAC,IAAD,CACI3I,GAAIhC,EAAMgC,GAAK,UACfS,MAC8B,UAA1BzC,EAAMmB,iBAA+BnB,EAAMmK,OAAS,EAC9CG,EAAkB,EAAG,SAAUtK,EAAM4K,gBACrC5K,EAAMmK,OAEhBU,IAA+B,UAA1B7K,EAAMmB,gBAA8B,EAAI,EAC7C2J,IAAK9K,EAAM0K,WAAa1K,EAAMoK,SAAWpK,EAAMqK,SAC/C9H,SAAU,SAACgI,GAAD,OAASD,EAAkBC,EAAK,SAAUvK,EAAM4K,oBAGvC,UAA1B5K,EAAMmB,iBACH,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAM4J,KAAK,YAAYtK,KAAK,UAAUzC,UAAU,SAChD,wEAIZ,kBAAC,IAASgN,QAAV,MACA,kBAAC,IAAD,CAAKhN,UAAU,iCACX,kBAAC,IAAD,CAAK2M,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,YAAE,qBAE1B,kBAAC,IAAD,CAAK6K,GAAI,GACL,kBAAC,IAAD,CACI3I,GAAIhC,EAAMgC,GAAK,YACfS,MAAOzC,EAAMoK,SACbU,IAAK9K,EAAM0K,WAAa1K,EAAMmK,OAASnK,EAAMqK,SAC7C9H,SAAU,SAACgI,GAAD,OAASD,EAAkBC,EAAK,WAAYvK,EAAMiL,uBAIxE,kBAAC,IAASD,QAAV,MACA,kBAAC,IAAD,CAAKhN,UAAU,iCACX,kBAAC,IAAD,CAAK2M,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,YAAE,oBAE1B,kBAAC,IAAD,CAAK6K,GAAI,GACL,kBAAC,IAAD,CACI3I,GAAIhC,EAAMgC,GAAK,WACfS,MAAOzC,EAAMqK,QACbS,IAAK9K,EAAM0K,WAAa1K,EAAMmK,OAASnK,EAAMoK,UAC7C7H,SAAU,SAACgI,GAAD,OAASD,EAAkBC,EAAK,UAAWvK,EAAMkL,0BAU3FjB,EAAa1J,aAAe,CACxBmK,UAAW,IAkBAT,O,gCC7Hf,sjBAWa7K,EAAY,SAACiH,GAAD,OAAWA,EAAMR,OAAOsF,KAAK/L,WACzCwE,EAAW,SAACyC,GAAD,OAAWA,EAAMR,OAAOsF,KAAKvH,UACxCiE,EAAc,SAACxB,GAAD,OAAWA,EAAMR,OAAOsF,KAAKtD,aAC3C5J,EAAW,SAACoI,GAAD,OAAWA,EAAMR,OAAOsF,KAAKlN,UACxCkM,EAAS,SAAC9D,GAAD,OAAWA,EAAMR,OAAOsF,KAAKhB,QACtCC,EAAW,SAAC/D,GAAD,OAAWA,EAAMR,OAAOsF,KAAKf,UACxCC,EAAU,SAAChE,GAAD,OAAWA,EAAMR,OAAOsF,KAAKd,SACvCnC,EAAe,SAAC7B,GAAD,OAAWA,EAAMR,OAAOsF,KAAKjD,cAC5CT,EAAsB,SAACpB,GAChC,IAAM+E,EAAoBlD,EAAa7B,GACvC,GAAI+E,EAAmB,OAAOA,EAAkBxH,EAASyC,KAEhDsB,EAAa,SAACtB,GACvB,IAAM+E,EAAoBlD,EAAa7B,GACvC,GAAI+E,EAAmB,OAAOA,EAAkBrG,KAEvCJ,EAAc,SAAC0B,GACxB,MAA4B,gBAArBjH,EAAUiH,QAA2B4C,EAAY5C,EAAMR,OAAOsF,KAAKxG,aAGjEjF,EAAS,SAAC2G,GAAD,MAAY,CAC9BjH,UAAWA,EAAUiH,GACrBzC,SAAUA,EAASyC,GACnBwB,YAAaA,EAAYxB,GACzBpI,SAAUA,EAASoI,GACnB8D,OAAQA,EAAO9D,GACf+D,SAAUA,EAAS/D,GACnBgE,QAASA,EAAQhE,GACjB1B,YAAaA,EAAY0B,KAGhBd,EAAgB,SAACc,GAAD,MAAY,CACrChI,QAASe,EAAUiH,GACnBO,OAAQhD,EAASyC,GACjBtC,KAAMsH,YAAe,IAAIrG,KAAK6C,EAAYxB,KAC1CiF,UAAWnB,EAAO9D,GAAS+D,EAAS/D,GAASgE,EAAQhE,GACrDkF,OAAQtN,EAASoI,GACjB8D,OAAQA,EAAO9D,GACf+D,SAAUA,EAAS/D,GACnBmF,QAASnB,EAAQhE,GACjBoF,KAAM9G,EAAY0B,GAAS,IAAM,KAIxBM,EAAiB,SAACN,GAAD,OAAWqF,YAAoBrF,EAAOjH,EAAUiH,KACjEsF,EAAwB,SAACtF,GAClC,IAAMgB,EAAajI,EAAUiH,GAE7B,OACIgB,IACCqE,YAAoBrF,EAAOgB,KAC3BuE,YAAmBvF,EAAOgB,KAC1BwE,YAAoBxF,EAAOgB,IAOvByE,EAAiB,SAACzF,GAC3B,OAAO0F,YAAsBxF,YAAQF,GAAQ2F,YAAiB3F,GAAQjH,EAAUiH,M,gCCnE7E,SAAS4F,EAAaC,GACzB,IAAMC,EAAcnH,KAAKoH,MAAQF,EAAIG,UAC/BC,EAAU,IAAItH,KAAKmH,GAEzB,OAAOI,KAAKC,IAAIF,EAAQG,iBAAmB,MAQxC,SAASC,EAAcC,EAAOC,GACjC,IAAMC,EAAK,IAAI7H,KAAK2H,GACdG,EAAK,IAAI9H,KAAK4H,GAKpB,OAHAC,EAAGE,YAAY,EAAG,EAAG,EAAG,GACxBD,EAAGC,YAAY,EAAG,EAAG,EAAG,GAEjBF,EAAGR,YAAcS,EAAGT,UAOxB,SAAShB,EAAetH,GAC3B,GAAIA,aAAgBiB,KAChB,MAAM,GAAN,OAAUgI,EAAUjJ,EAAKkJ,cAAzB,YAA0CD,EAAUjJ,EAAKmJ,cAAgB,GAAzE,YAA+EnJ,EAAK0I,kBASrF,SAASU,EAAeC,GAC3B,GAAI,mCAAmCC,KAAKD,GAAa,CACrD,IAAMtE,EAAYsE,EAAWrE,MAAM,KAC7BhF,EAAO,IAAIiB,KAGjB,OAFAjB,EAAKuJ,eAAe/D,SAAST,EAAU,IAAKS,SAAST,EAAU,GAAK,GAAIS,SAAST,EAAU,KAC3F/E,EAAKgJ,YAAY,EAAG,EAAG,EAAG,GACnBhJ,GASR,SAASwJ,EAA2BxJ,EAAMyJ,GAgB7C,OAAIA,EACM,GAAN,OAAUzJ,EAAK4E,WAAf,OAA2B8E,EAAI1J,EAAK4E,WAApC,YAFoB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEhC5E,EAAK2E,aAEjE,GAAN,OAAU3E,EAAK4E,WAAf,OAA2B8E,EAAI1J,EAAK4E,WAApC,YAlBe,CACf,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAM6D5E,EAAK2E,aAQnE,SAASgF,EAAwB3J,GACpC,MAAM,GAAN,OAAUwJ,EAA2BxJ,GAArC,YAA8CA,EAAK0E,eAOhD,SAASkF,EAAmB5J,EAAMyJ,GACrC,OAAIA,EACO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAOzJ,EAAK6J,UAEvD,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAAY7J,EAAK6J,UA/FnG,kTAwGO,IAAMC,EAAmB,SAAChG,EAAa5J,GAC1C,IAAM6P,EAAgB,IAAI9I,KAAK6C,GAE/B,OADAiG,EAAcC,QAAQD,EAAczB,UAAqC,MAAzB9C,SAAStL,EAAU,KAC5D6P,GAQEzE,EAAqB,SAACtF,GAA2B,IAArBiK,EAAoB,uDAAR,IAC7CC,EAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAE3FC,EAAMnK,EAAK4E,UAEXwF,EAAapK,EAAK2E,WAClB0F,EAAYH,EAAWE,GAEvBE,EAAOtK,EAAK0E,cAEhB,MAAM,GAAN,OAAUyF,GAAV,OAAgBF,GAAhB,OAA4BI,GAA5B,OAAwCJ,GAAxC,OAAoDK,IAOjD,SAASZ,EAAIa,GAChB,GAAIA,EAAS,GAAKA,EAAS,GAAI,MAAO,KACtC,OAAQA,EAAS,IACb,KAAK,EACD,MAAO,KACX,KAAK,EACD,MAAO,KACX,KAAK,EACD,MAAO,KACX,QACI,MAAO,MAQZ,SAAStB,EAAUzC,GACtB,IAAMgE,EAAYhE,EAAIiE,WACtB,OAA4B,IAArBD,EAAU3L,OAAe,IAAM2L,EAAYA,I,oBCxJtD7N,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,0DC0B5B8N,IAvBa,SAACnI,EAAMoI,GAC/B,MAAkCxN,mBAAS,IAA3C,mBAAKyN,EAAL,KAAiBC,EAAjB,KAmBA,OAjBAnN,qBAAU,WACN,GAAoB,mBAAhBiN,IAAoCpI,GAAwB,IAAhBA,EAAK1D,OAArD,CACA,IAAIiM,EAAG,UAAMjJ,IAAKkJ,IAAX,YAAkBJ,EAAlB,uBACPpI,EAAKyI,SAAQ,SAACC,GACVH,GAAO,cAAgBG,KAE3B,IAAMC,EAAa,IAAIC,gBAMvB,OALAjH,MAAM4G,EAAK,CAAEM,OAAQF,EAAWE,SAC3BhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACHsI,EAActI,MAEf,WACH2I,EAAWG,YAEhB,CAAC9I,EAAMoI,IAEHC,GAAc,K,gCCvBzB,oIAGMU,EAAmB,SAACC,EAAQT,EAAKnP,EAAQ6P,GAC3C,GAAI,CAAC,MAAO,OAAQ,SAAU,SAASjO,SAASgO,EAAOE,eAAgB,CACnE,IAAMlJ,EAAO,IAAImJ,SAIjB,OAHA7G,OAAO8G,KAAKhQ,GAAQqP,SAAQ,SAACvP,GACzB8G,EAAKqJ,IAAInQ,EAAKE,EAAOF,OAElB,CACH8P,SACAM,QAAS,CAAE,eAAgB,uBAC3Bf,MACAvI,OACAuJ,YAAaN,EAAkBO,OAGvC,MAAO,CACHR,SACAT,MACAnP,SACAmQ,YAAaN,EAAkBO,QAIjCC,EAAgB,SAAC3H,EAAU5E,EAAUwM,EAAYtQ,EAAQuQ,GAE3D,GAAI7H,GAAYA,EAAS9B,MAAkC,IAA1B8B,EAAS9B,KAAK4J,QAC3C,MAAM9H,EAGV,IAAM+H,EAAS,CACXlN,KAAM+M,EAAahP,IACnB0C,QAAS,CACLhE,SACAuQ,YACA7H,aAIR,OADA5E,EAAS2M,GACFA,GAGLC,EAAgB,SAAChI,EAAU5E,EAAUwM,EAAYtQ,EAAQuQ,EAAWI,GACtE,IAAIC,IAAMC,SAASnI,GAAnB,CAEA,IAAM+H,EAAS,CACXlN,KAAM+M,EAAanP,IACnB6C,QAAS,CACL8M,OAAQpI,GAAYA,EAAS9B,MAAQ8B,EAAS9B,KAAKkK,OACnD9Q,SACAuQ,YACA7H,WACAqI,OAAQrI,EAASqI,QAAU,IAKnC,GAFAjN,EAAS2M,GAELE,EACA,MAAMF,EAEN,OAAOA,IAITO,EAAe,SAAClN,EAAUwM,EAAYtQ,EAAQuQ,EAAWV,EAAmBc,GAC9E,IAAMF,EAAS,CACXlN,KAAM+M,EAAapP,IACnB8C,QAAS,CACLhE,SACAuQ,YACAQ,QAAS,IAOjB,GAJAjN,EAAS2M,GAETZ,EAAkBoB,SAEdN,EACA,MAAMF,EAEN,OAAOA,GAITS,EAAc,SAACpN,EAAUwM,EAAYnB,GAA4E,IAAvEnP,EAAsE,uDAA7D,GAAIuQ,EAAyD,uDAA7C,IAAKX,EAAwC,uDAA/B,MAAOe,IAAwB,yDAClH7M,EAAS,CACLP,KAAM+M,EAAalP,IACnB4C,QAAS,CAAE4L,SAAQT,MAAKnP,SAAQuQ,eAGpC,IAAMV,EAAoBe,IAAMO,YAAYC,SACxCC,GAAgB,EAEdjT,EAASuR,EAAiBC,EAAQT,EAAKnP,EAAQ6P,GAC/CyB,EAAUV,IACXU,QAAQlT,GACRqK,MAAK,SAACC,GAAD,OAAc2H,EAAc3H,EAAU5E,EAAUwM,EAAYtQ,EAAQuQ,MACzEgB,OAAM,SAAC7I,GAAD,OAAcgI,EAAchI,EAAU5E,EAAUwM,EAAYtQ,EAAQuQ,EAAWI,MACrFa,SAAQ,WACLH,GAAgB,KAExB,MAAO,CACHC,UACAL,OAAQ,WACAI,IACAL,EAAalN,EAAUwM,EAAYtQ,EAAQuQ,EAAWV,EAAmBc,GACzEU,GAAgB,MAMnBpL,EAAa,SAACnC,EAAUwM,EAAYnB,GAAuD,IAAlDnP,EAAiD,uDAAxC,GAAIuQ,EAAoC,uDAAxB,IAAKX,EAAmB,uDAAV,MACzF,OAAOsB,EAAYpN,EAAUwM,EAAYnB,EAAKnP,EAAQuQ,EAAWX,GAAQ,IAGhE6B,EAAqB,SAAC3N,EAAUwM,EAAYnB,GAAuD,IAAlDnP,EAAiD,uDAAxC,GAAIuQ,EAAoC,uDAAxB,IAAKX,EAAmB,uDAAV,MACjG,OAAOsB,EAAYpN,EAAUwM,EAAYnB,EAAKnP,EAAQuQ,EAAWX,GAAQ,IAWhE8B,EAAqB,SAACC,EAASC,EAAWC,EAAUC,EAAWC,GACxE,OAAOJ,IAAYC,IAAcC,KAAcC,GAAaC,K,gCClIhE,oEAAO,IAAMC,EAAwB,SAACrL,EAAO2J,GAAR,OAAuB3J,EAAMsL,SAAS3B,IAiB9D4B,EAAgB,SAACvL,EAAO2J,GAAiC,IAArBC,EAAoB,uDAAR,IACnD4B,EAAUH,EAAsBrL,EAAO2J,GAC7C,QAAO6B,GAAUA,EAAQC,SAASxQ,SAAS2O,IAGlC8B,EAAmB,SAAC/B,GAC7B,MAAO,CACH,SAAC3J,EAAO4J,GAAR,OAAsB2B,EAAcvL,EAAO2J,EAAYC,IACvD,SAAC5J,EAAO4J,GAAR,OAlBmB,SAAC5J,EAAO2J,GAAiC,IAArBC,EAAoB,uDAAR,IACjD4B,EAAUH,EAAsBrL,EAAO2J,GAC7C,QAAO6B,KAAYA,EAAQrB,OAAOP,GAgBR+B,CAAY3L,EAAO2J,EAAYC,IACrD,SAAC5J,EAAO4J,GAAR,OAxBgB,SAAC5J,EAAO2J,GAAiC,IAArBC,EAAoB,uDAAR,IAC9C4B,EAAUH,EAAsBrL,EAAO2J,GAC7C,OAAO6B,EAAUA,EAAQrB,OAAOP,QAAahH,EAsBnBgJ,CAAS5L,EAAO2J,EAAYC,O,6WCvB7C1J,EAAU,SAACF,GAAD,OAAWA,EAAMC,KAAKC,QAAQA,SACxCyF,EAAmB,SAAC3F,GAAD,OAAWA,EAAMC,KAAKC,QAAQyF,kBACjDkG,EAA2B,SAAC7L,GAAD,OAAWA,EAAMC,KAAKC,QAAQ2L,0BAG/D,EAAoEH,YAAiBI,KAArF,mBAAOzG,EAAP,KAA4BG,EAA5B,KACMD,GADN,KAC2B,SAACvF,EAAOjH,GAAR,QAAwB4M,EAAiB3F,GAAOjH,KAE3E,EAA4F2S,YAC/FK,KADG,mBAAOC,EAAP,KAAoCC,EAApC,KAGMC,GAHN,KAGmC,SAAClM,EAAOjH,EAAWoT,GAAgB,IAAD,EACxE,SAAQ,UAACN,EAAyB7L,GAAOmM,UAAjC,aAAC,EAA8CpT,O,iNC2BrDqT,EAAmB,SAACzS,GACtB,IAAMwD,EAAWsD,cACX4L,EAAUC,cACVC,EAAWC,cAEXC,EAAoB1M,YAAYhH,KAChC2T,EAAmB3M,YAAYxC,KAE/BoP,EAAkB5M,YAAYO,KAC9BsM,EAAyB7M,YAAYuF,KACrCuH,EAAkB9M,YAAY0F,MAAmB,GAEjDqH,EAAgBD,EAAgBE,MAAK,SAACC,EAAGC,GAC3C,OAAOD,EAAE5U,KAAK8U,cAAcD,EAAE7U,SAG5B+U,EAAUpN,YAAY1G,KACtB+T,EAAiBrN,YAAYb,KAC7BmO,EAAetN,YAAYzB,KACzBa,EAAWmO,cAAXnO,OAEFoO,EAAgBxN,aAAY,SAACC,GAAD,OAAWA,EAAMwN,SAASC,sBACtDC,EAAgB3N,aAAY,SAACC,GAAD,OAAWA,EAAMwN,SAASG,sBAE5D,EAA4C9S,oBAAS,GAArD,mBAAO+S,EAAP,KAAuBC,EAAvB,KAEMC,GAAoE,IAApDvB,EAASwB,SAASvO,OAAO,sBACzCwO,GAAgBF,GAAiBF,EAkCjCK,EAAyB,SAAC7R,EAAO8R,EAAMC,GACzCD,EAAK/Q,EAAUf,GACfgS,YAAW,WACPD,GAAW,KACZ,MAIP,EAAkDtT,oBAAS,GAA3D,mBAAOwT,EAAP,KAA0BC,EAA1B,KAUA,EAAgDzT,oBAAS,GAAzD,mBAAO0T,EAAP,KAAyBC,EAAzB,KASA,EAA0C3T,oBAAS,GAAnD,mBAAO4T,GAAP,KAAsBC,GAAtB,KAyBAtT,qBAAU,WACFwR,GACA+B,YAAWxR,EAAUsP,KAE1B,CAACtP,EAAUyP,EAAwBH,IAGtCrR,qBAAU,WAEDwR,GACAD,IACDpK,OAAO8G,KAAKwD,GAAiBtQ,SAC7BkQ,GACCC,GAEDpP,YAAaH,EAAU2P,EAAc,GAAGnR,OAIhD,IAAMiT,GAA8B,SAACC,GAA6C,IAA5BxO,EAA2B,uDAAT,KAEpE,MAAwB,eAApBA,GAGsB,eAAtBoM,GAGoB,eAApBoC,EANyC9P,YAAa5B,QAM1D,GAGJ,OACI,oCAGI,kBAAC,IAAD,CAAWxF,UAAU,aAAagE,GAAG,gBACjC,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAK2I,GAAI,GACL,kBAAC,IAAD,CAAKwK,GAAInV,EAAMoV,UAAY,GAAK,IAC5B,kBAAC,IAAD,KACI,kBAAC,IAAD,CACIC,GAAIrV,EAAMoV,UAAY,GAAK,EAC3BD,GAAInV,EAAMoV,UAAY,GAAK,GAE3B,kBAAC,IAAD,CACIpT,GAAG,oBACHE,UAAWlC,EAAMjD,KACjBoF,MAAOrC,YAAE,sBACT4B,SAAU0E,YAAY1E,KACtBG,cAAeiR,EACfnQ,UAAW,CACP,YACA,cACA,YACA,UACA,QACA,cAEJJ,SAnGR,SAAC+S,GACzB,IAAMC,EAAgBD,EAAME,OAAO/S,MAC7ByS,EAAkBpC,EACxBwB,EAAuBiB,EAAehS,IAAeoR,GACrDM,GAA4BC,EAAiBK,IAgGbxS,SArGR,kBAAM4R,GAAsBD,IAsGpB5R,KAAM4R,EACNhS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,mBACHE,UAAWlC,EAAMjD,KACjBoF,MArJN,UAAtB2Q,EAAsChT,YAAE,gBACrCA,YAAE,iBAqJuB4G,kBAAmBoM,EACnBvM,QAAS4M,EACTxM,eAAgBsM,GAA0BD,EAC1CnR,cAAekR,EACfxQ,SAxGT,SAAC+S,GACxB,IAAMJ,EAAkBpC,EACxBwB,EAAuBgB,EAAME,OAAO/S,MAAOkB,IAAckR,GACzDI,GAA4BC,IAsGInS,SA1GT,kBAAM8R,GAAqBD,IA2GlB9R,KAAM8R,EACNlS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,0BACH5C,UAAW0T,EACX5Q,UAAWlC,EAAMjD,KACjBoF,MAAOrC,YAAE,iCACT7B,SAAUsL,SAASnD,YAAYnI,MAC/B4J,YAAazB,YAAYyB,KACzB2B,iBAAkB,SAACiM,GAAD,OAAOxR,YAAeT,EAAU+F,SAASkM,EAAED,OAAO/S,SACpEmH,aA9GX,SAAC7F,EAAM2R,GACxBA,EAAUhT,UACd4R,EAAuBvQ,EAAMD,IAAYiR,KA6GThS,SAhHX,kBAAMgS,IAAkBD,KAiHbhS,KAAMgS,GACNpS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,mBACHE,UAAWlC,EAAMjD,KACjBoN,OAAQ/D,YAAY+D,KACpBC,SAAUhE,YAAYgE,KACtBC,QAASjE,YAAYiE,KACrBO,eAAgB,SAACL,GAAD,OAASpG,YAAmBX,EAAU+G,IACtDU,iBAAkB,SAACV,GAAD,OAASjG,YAAqBd,EAAU+G,IAC1DW,gBAAiB,SAACX,GAAD,OAAS/F,YAAoBhB,EAAU+G,IACxDpJ,gBAAiB2R,KAGF,gBAAtBU,EAAQpU,WACL,kBAAC,IAAD,CACIuL,GAAI,GACJ3M,UAAU,6EAETmW,EACG,yBAAKnW,UAAU,uGACX,2BACI2X,QAAQ,iBACR3X,UAAU,+CAET8B,YAAE,uBAEP,2BACImD,KAAK,WACLxE,KAAK,iBACLuD,GAAG,iBACHhE,UAAU,2DACVsF,QAAS2Q,EACT1R,SAAU,kBAAM2R,GAAmBD,OAI3C,8BAGJ,yBAAKjW,UAAS,oDAA+CgC,EAAMoV,UAAY,QAAU,MAA3E,qBACV,2BACIO,QAAQ,cACR3X,UAAS,+CAA0CgC,EAAMoV,UAAY,kCAAoC,KAExGtV,YAAE,6BAEP,2BACImD,KAAK,WACLxE,KAAK,cACLuD,GAAG,cACHhE,UAAU,8BACVsF,QAASoQ,EACTnR,SAlKZ,SAAC+S,GAC7B5Q,YAAkBlB,EAAU8R,EAAME,OAAOlS,gBAyKzB,kBAAC,IAAD,KACI,kBAAC,IAAKrB,MAAN,aACA,kBAAC,IAAD,CACI2T,OAAK,EACL1V,QAAQ,YACR2V,QA3KP,YAvDD,WAChB,IAAIC,EAAclN,OAAO8G,KAAK+D,GACzBrQ,QAAO,SAAC5D,GAAD,MAAwC,qBAAxBiU,EAAejU,MACtC4D,QAAO,SAAC5D,GAAD,MAAiB,cAARA,KAChB4D,QAAO,SAAC5D,GAAD,OAAS6U,GAAyB,YAAR7U,GAA6B,WAARA,KACtDgD,KAAI,SAAChD,GAAD,gBAAYuW,mBAAmBvW,GAA/B,YAAuCuW,mBAAmBtC,EAAejU,QAC7EwW,KAAK,KACNhW,EAAMwF,SAAQsQ,EAAcA,EAAc,SAAW9V,EAAMwF,QAE3D6O,EACA3B,EAAQuD,KAAK,CAAE7B,SAAU,WAAYvO,OAAQiQ,IAE7CpD,EAAQuD,KAAK,CAAE7B,SAAUxB,EAASwB,SAAUvO,OAAQiQ,IA4CxDI,GAjEAC,cACAnQ,cACIhG,EAAMwF,OACNO,YAAYvC,EAAUgQ,EAASC,EAAgBzT,EAAMwF,QAErDO,YAAYvC,EAAUgQ,EAASC,EAAgBY,OAAepL,EAAYzD,GA8D9E4Q,YAAc5S,EAAUoQ,GACxByC,YAAc7S,EAAUuQ,GACxBuC,YACI9S,EACA,kCACAkQ,EAAe,CAAC,KAAO,CAAC,OAoKJhR,UACK8Q,EAAQpU,YAAcoU,EAAQ5P,WAAa4P,EAAQ3L,cAAgB2L,EAAQvV,UAA+B,IAAnBuV,EAAQrJ,QAGnGrK,YAAE,wBAUnC2S,EAAiBlS,aAAe,CAC5BxD,KAAM,QACNwZ,GAAI,OACJnB,WAAW,GAGA3C,O,gCC1UR,SAAS+D,EAAWC,GACvB,IAAIC,EAAMC,SAASC,cAAc,YAEjC,OADAF,EAAIG,UAAYJ,EACTC,EAAIjU,MAOR,SAASqU,EAAQC,GACpB,OAAOA,EACFvI,WACAwI,cACAC,OACAxZ,QAAQ,OAAQ,KAChBA,QAAQ,KAAM,SACdA,QAAQ,WAAY,IACpBA,QAAQ,OAAQ,KAChBA,QAAQ,MAAO,IACfA,QAAQ,MAAO,IACfA,QAAQ,QAAS,KAOnB,SAASyZ,EAAcrI,GAC1B,MAAmB,kBAARA,EAAyBA,EAC7BA,EAAI9F,MAAM,MAAM,IAAM8F,EAO1B,SAASsI,EAAMC,GAClB,OAAOC,WAAWD,GAAWE,QAAQ,GA1CzC,yI,gCCAA,0XAAMC,EAAY,eAEL9T,EAAiB8T,EAAY,iBAC7B1T,EAAgB0T,EAAY,gBAC5BvT,EAAcuT,EAAY,cAC1BrT,EAAkBqT,EAAY,kBAC9BlT,EAAuBkT,EAAY,uBACnChT,EAAyBgT,EAAY,yBACrC9S,EAAwB8S,EAAY,wBACpC3S,EAAsB2S,EAAY,sBAClC7R,EAAe6R,EAAY,eAC3BpS,EAAsBoS,EAAY,sBAClClS,EAAgBkS,EAAY,iB,4aCZzC7W,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,kC,kBCA3CD,EAAOC,QAAU,0wW,kBCAjBD,EAAOC,QAAU,81F,oBCAjBD,EAAOC,QAAU,IAA0B,wC,gCCA3C,wEAEa6W,EAAWD,gBACXE,EAAgBF,sB,gKCwEdG,MApEf,SAAsB1X,GAClB,IACM2X,EAAW,CACbC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,UAAU,EACVC,MAAO,IACPC,aAP+B,cAAjBjY,EAAMkY,OAAyB,EAAI,EAQjDC,eAAgB,EAChBna,UAAW,iBACXoa,WAAY,CACR,CACIC,WAAY,IACZV,SAAU,CACNM,aAAc,IAGtB,CACII,WAAY,IACZV,SAAU,CACNM,aAAc,IAGtB,CACII,WAAY,IACZV,SAAU,CACNM,aAAc,MAMxBK,EAActY,EAAMuY,MAAM/V,KAAI,SAACgW,EAAMC,GACvC,IAAMC,EACF,yBAAK1a,UAAU,qBACX,kBAAC2a,EAAA,EAAKC,IAAN,CAAU5a,UAAS,oBAAegC,EAAM6Y,cAAgB5Y,IAAKuY,EAAKM,MAAOxY,IAAKkY,EAAKO,MAAOC,QAAQ,cAC3E/P,IAAtBuP,EAAKS,cAA8BT,EAAKS,aAAarW,OAAS,GAC3D,yBAAK5E,UAAU,4EAA4Ewa,EAAKS,eAI5G,OACI,kBAACN,EAAA,EAAD,CAAMnZ,IAAKiZ,GACN,QAAQpL,KAAKmL,EAAK3J,KACf,kBAAC1R,EAAA,EAAD,CAAGC,KAAMob,EAAK3J,IAAK7Q,UAAU,4CAA4C+a,MAAOP,EAAKO,OAChFL,EACD,kBAACC,EAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,wBAAIA,UAAS,kBAAaF,IAAO,0BAA4B0a,EAAKO,OAClE,uBAAG/a,UAAU,mBAAmBwa,EAAKzb,QAI7C,kBAAC,IAAD,CAAMO,GAAIkb,EAAK3J,IAAK7Q,UAAU,6CACzB0a,EACD,kBAACC,EAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,wBAAIA,UAAS,kBAAaF,IAAO,0BAA4B0a,EAAKO,OAClE,uBAAG/a,UAAU,mBAAmBwa,EAAKzb,YAQ7D,OAAO,kBAAC,IAAW4a,EAAWW,IChE5Ba,EACE,IADFA,EAEE,IAFFA,EAGE,IAIR,SAASC,EAAT,GAAoE,IAAzCC,EAAwC,EAAxCA,QAASC,EAA+B,EAA/BA,QAASC,EAAsB,EAAtBA,WAAYrB,EAAU,EAAVA,OACrD,EAA0BhX,mBAASsY,OAAOC,YAA1C,mBAAOC,EAAP,KAAcC,EAAd,KACMC,EAAYN,EAAQ1W,OAEtBiX,EAAe,CAAC,eAAgB,sBAE9BC,EAAwB,cAAX5B,EACf4B,GAAYD,EAAa5D,KAAK,kBAElC,IAAM4C,EAAegB,EAAa7D,KAAK,KAEjC+D,EACF,kBAACC,EAAA,EAAD,CAAKhc,UAAS,UAAK8b,EAAa,UAAY,KACxC,kBAAC,EAAD,CAAcvB,MAAOe,EAASpB,OAAQA,EAAQW,aAAcA,KAG9DoB,EAAkBX,EAAQ9W,KAAI,SAAC0X,EAAGzB,GACpC,IAAMC,EACF,yBAAK1a,UAAU,qBACX,kBAAC2a,EAAA,EAAKC,IAAN,CAAU5a,UAAW6a,EAAc5Y,IAAKia,EAAEpB,MAAOxY,IAAK4Z,EAAEnB,MAAOC,QAAQ,cACnD/P,IAAnBiR,EAAEjB,cAA8BiB,EAAEjB,aAAarW,OAAS,GACrD,yBAAK5E,UAAU,4EAA4Ekc,EAAEjB,eAIzG,OACI,kBAACe,EAAA,EAAD,CAAKxa,IAAKiZ,EAAO0B,GAAI,GAAKP,EAAW5b,UAAU,UAC3C,kBAAC2a,EAAA,EAAD,CAAM3a,UAAU,2BACX,QAAQqP,KAAK6M,EAAErL,KACZ,kBAAC1R,EAAA,EAAD,CAAGC,KAAM8c,EAAErL,IAAK7Q,UAAU,gCACrB0a,EACD,kBAACC,EAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,wBAAIA,UAAS,sBAAiBF,IAAO,0BAA4Boc,EAAEnB,OACnE,uBAAG/a,UAAU,mBAAmBkc,EAAEnd,QAI1C,kBAAC,IAAD,CAAMO,GAAI4c,EAAErL,IAAK7Q,UAAU,wBACtB0a,EACD,kBAACC,EAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,wBAAIA,UAAS,sBAAiBF,IAAO,0BAA4Boc,EAAEnB,OACnE,uBAAG/a,UAAU,mBAAmBkc,EAAEnd,aAS9D0E,qBAAU,WACN,IAAM2Y,EAAqBC,KAAU,kBAAMV,EAASH,OAAOC,cAAa,KAIxE,OAHAD,OAAOc,iBAAiB,SAAUF,GAG3B,kBAAMZ,OAAOe,oBAAoB,SAAUH,MACnD,IAEH,IAAMI,EAAe,WAEjB,OACIZ,GAFQE,EAAa,EAAI,IAGV,IAAdF,GAAmBF,EAAQP,GACb,IAAdS,GAAmBF,EAAQP,GACb,IAAdS,GAAmBF,EAAQP,EAErBY,EAEAE,GAIf,OAAIH,EAAmB,kBAACW,EAAA,EAAD,KAAMD,KAGzB,kBAACE,EAAA,EAAD,CAAW1c,UAAS,sBAAiBub,GAAcoB,OAAK,GACpD,kBAACD,EAAA,EAAD,KACI,kBAACD,EAAA,EAAD,KACgB,cAAXvC,GACG,kBAAC8B,EAAA,EAAD,CAAKrP,GAAI,IACL,wBAAI3M,UAAS,6CAAuD,YAAfub,EAA2B,QAAU,UAAYqB,wBAAyB,CAAEC,OAAQxB,MAGhJmB,OAOrBpB,EAAgB7Y,aAAe,CAC3B8Y,QAAS,eACTC,QAAS,CACL,CACIR,MAAO,sCACPC,MAAO,mBACPhc,KAAM,sBACN8R,IAAK,KAET,CACIiK,MAAO,sCACPC,MAAO,mBACPhc,KAAM,sBACN8R,IAAK,OAKFuK,a,oaCrHF0B,EAAgB,SAACC,EAAKvb,EAAKwb,GACpC,IAAMC,EAAS,GAIf,OAHAF,EAAIhM,SAAQ,SAACyJ,GACTyC,EAAOzC,EAAKhZ,IAAQwb,EAAWxC,EAAKwC,GAAYxC,KAE7CyC,GAsBEC,EAAiB,SAAClc,EAAWmc,GAEtC,OAAyB,KADH5R,SAASvK,EAAW,KAAOuK,SAAS4R,EAAS,MAQ1DC,EAAW,SAACC,GACrB,MAAc,MAAVA,GAGU,MAAVA,GAGGA,GAQE/b,EAAc,SAACjB,GACxB,OAAQA,GACJ,IAAK,QACD,MAAO,QACX,IAAK,aACD,MAAO,UACX,QACI,MAAO,SAUNM,EAAoB,SAAC2c,EAAM5c,GACpC,OAAiB,IAAVA,EAAc4c,EAAOA,EAAO,KAS1Bpc,EAAgB,SAACoc,EAAMC,GAChC,OAAOA,EAAUD,EAAOA,EAAO,KAQtBhd,EAAoB,SAACD,GAC9B,OAAQA,GACJ,IAAK,QACD,MAAO,mBACX,IAAK,aACD,MAAO,WACX,QACI,MAAO,kBAUNmd,EAAgB,SAAC3Q,EAAKC,GAC/B,OAAO,YAAI,IAAI2Q,MAAM3Q,EAAMD,EAAM,IAAIrI,KAAI,SAACkZ,EAAGC,GAAJ,OAAUA,EAAI9Q,O,gCC/G3D,kHAEayL,EAAW,SAAC9S,EAAUhE,EAAK8G,GACpC9C,EAAS,CACLP,KAAM2Y,IACNlY,QAAS,CAAElE,MAAK8G,WAIX8P,EAAgB,SAAC5S,GAC1BA,EAAS,CAAEP,KAAM4Y,OAGRxF,EAAgB,SAAC7S,GAC1BA,EAAS,CAAEP,KAAM6Y,Q,gCCENxW,IAhBqB,SAACyW,GACjC,IAAIC,EAEEC,EAAoB,WAClBD,GAAaA,EAAYrL,UASjC,MAAO,CANmB,WAGtB,OAFAsL,IACAD,EAAcD,EAAU,WAAV,cAISE,K,6FCVlBva,EAAW,SAAC2E,GAAD,OAAWA,EAAMC,KAAK5E,SAASA,UAChD,EAA0CqQ,YAAiBmK,KAA3D,mC,gCCJP,sGAAO,IAAMC,EAAgB,SAAC5V,EAAS3C,GACnC,OAAO2C,EAAQ3C,IAGNmI,EAAwB,SAACxF,EAASyF,EAAkB5M,GAAe,IAAD,EAC3E,iBAAO4M,EAAiB5M,UAAxB,aAAO,EAA6BoD,KAAI,SAACoB,GAAD,OAAc2C,EAAQ3C,OAGrDwY,EAAyB,SAAC7V,EAAS2L,EAA0B9S,EAAWoT,GAAgB,IAAD,IAChG,iBAAON,EAAyBM,UAAhC,iBAAO,EAAuCpT,UAA9C,aAAO,EAAmDoD,KAAI,SAACoB,GAAD,OAAc2C,EAAQ3C,Q,2DCNxF,SAASyY,EAAiBpc,EAAKP,GAC3B,IAAMtC,EAAO6C,EAAI8I,MAAM,KAAK,GACtBuT,EAAc,2BACb1T,OAAO2T,YAAY,IAAIC,gBAAgBvc,EAAI8I,MAAM,KAAK,IAAM,MAC5DrJ,GAIPkJ,OAAO8G,KAAK4M,GAAgBvN,SAAQ,SAACvP,GACL,OAAxB8c,EAAe9c,SAAyCyJ,IAAxBqT,EAAe9c,IAA8C,KAAxB8c,EAAe9c,WAC7E8c,EAAe9c,MAK9B,IAAMid,EAAqB7T,OAAO8G,KAAK4M,GAClC9Z,KAAI,SAACka,GAAD,gBAAU3G,mBAAmB2G,GAA7B,YAAmC3G,mBAAmBuG,EAAeI,QACzE1G,KAAK,KAEV,MAAM,GAAN,OAAU5Y,EAAV,YAAkBqf,GAGtB,IAAME,EAAS,SAAC,GAAD,IAAG1c,EAAH,EAAGA,IAAKP,EAAR,EAAQA,OAAR,OAAqB,yBAAKO,IAAKoc,EAAiBpc,EAAKP,GAASga,MAAM,IAAIrZ,OAAO,IAAIC,IAAI,MAOtGqc,EAAOpc,aAAe,CAClBN,IAAK,iEACLP,OAAQ,IAGGid,O,6OChCR,EAA0C5K,YAAiBtM,KAA3D,mBAAOmX,EAAP,KAAmBC,EAAnB,KACMC,GADN,KAC+B,SAACzW,GAAD,OAAWuL,YAAcvL,EAAOX,OACzDqX,EAAc,SAAC1W,GAAD,OAAWA,EAAMR,OAAOmX,QAAQD,aAC9CE,EAAY,SAAC5W,GAAD,OAAWA,EAAMR,OAAOmX,QAAQC,Y,gCCRzD,sCAEaxX,EAAc8R,8B,uNC0CrB2F,EAAY,SAACld,GACf,IAAMwD,EAAWsD,cACX4L,EAAUC,cACVC,EAAWC,cAEXC,EAAoB1M,YAAYhH,KAChC2T,EAAmB3M,YAAYxC,KAE/BoP,EAAkB5M,YAAYO,KAC9BsM,EAAyB7M,YAAYuF,KACrCuH,EAAkB9M,YAAY0F,MAAmB,GAEjDqH,EAAgBD,EAAgBE,MAAK,SAACC,EAAGC,GAC3C,OAAOD,EAAE5U,KAAK8U,cAAcD,EAAE7U,SAG5B+U,EAAUpN,YAAY1G,KACtB+T,EAAiBrN,YAAYb,KAC7BmO,EAAetN,YAAYzB,KACzBa,EAAWmO,cAAXnO,OAEFoO,EAAgBxN,aAAY,SAACC,GAAD,OAAWA,EAAMwN,SAASC,sBACtDC,EAAgB3N,aAAY,SAACC,GAAD,OAAWA,EAAMwN,SAASG,sBAE5D,EAA4C9S,oBAAS,GAArD,mBAAO+S,EAAP,KAAuBC,EAAvB,KACA,EAA8ChT,oBAAS,GAAvD,mBAAOic,EAAP,KAAwBC,EAAxB,KACMC,EAAoB,kBAAMD,GAAoBD,IAE9ChJ,GAAoE,IAApDvB,EAASwB,SAASvO,OAAO,sBACzCwO,GAAgBF,GAAiBF,EAkCjCK,EAAyB,SAAC7R,EAAO8R,EAAMC,GACzCD,EAAK/Q,EAAUf,GACfgS,YAAW,WACPD,GAAW,KACZ,MAIP,EAAkDtT,oBAAS,GAA3D,mBAAOwT,EAAP,KAA0BC,EAA1B,KAUA,GAAgDzT,oBAAS,GAAzD,qBAAO0T,GAAP,MAAyBC,GAAzB,MASA,GAA0C3T,oBAAS,GAAnD,qBAAO4T,GAAP,MAAsBC,GAAtB,MA0BAtT,qBAAU,WACFwR,GACA+B,YAAWxR,EAAUsP,KAE1B,CAACtP,EAAUyP,EAAwBH,IAGtCrR,qBAAU,WAEDwR,GACAD,IACDpK,OAAO8G,KAAKwD,GAAiBtQ,SAC7BkQ,GACCC,GAEDpP,YAAaH,EAAU2P,EAAc,GAAGnR,OAIhDP,qBAAU,WAC2B,MAA7B+X,OAAO5G,SAASwB,UAChB7Q,YAAcC,EAAU,eAE7B,IAEH,IAAMyR,GAA8B,SAACC,GAA6C,IAA5BxO,EAA2B,uDAAT,KAEpE,MAAwB,eAApBA,GAGsB,eAAtBoM,GAGoB,eAApBoC,EANyC9P,YAAa5B,QAM1D,GAgBJ,OAbA/B,qBAAU,WACN,IAAM6b,EAA0B,WAE5B,IAAIC,EADD/D,OAAOgE,WAAa,MAEvBhE,OAAOiE,cAAcF,GACrBA,EAAU9I,YAAW,kBAAM2I,GAAmB,KAAQ,OAG1D,OADA5D,OAAOc,iBAAiB,SAAUgD,GAC3B,WACH9D,OAAOe,oBAAoB,SAAU+C,OAKzC,oCACI,kBAAC,IAAD,CAAQtf,UAAU,YAAY4X,OAAK,EAAC1V,QAAQ,UAAU2V,QAASwH,GAC1Dvd,YAAE,kBAGP,kBAAC,IAAD,CAAW9B,UAAS,uCAAkCmf,EAAkB,UAAY,IAAMnb,GAAG,gBACzF,uBACIhE,UAAU,4DACV6X,QAASwH,IAGb,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAK1S,GAAI,GACL,kBAAC,IAAD,CAAKwK,GAAInV,EAAMoV,UAAY,GAAK,IAC5B,kBAAC,IAAD,KACI,kBAAC,IAAD,CACIC,GAAIrV,EAAMoV,UAAY,GAAK,EAC3BD,GAAInV,EAAMoV,UAAY,GAAK,GAE3B,kBAAC,IAAD,CACIpT,GAAG,oBACHE,UAAWlC,EAAMjD,KACjBoF,MAAOrC,YAAE,sBACT4B,SAAU0E,YAAY1E,KACtBG,cAAeiR,EACfnQ,UAAW,CACP,YACA,cACA,YACA,UACA,QACA,cAEJJ,SA9HR,SAAC+S,GACzB,IAAMC,EAAgBD,EAAME,OAAO/S,MAC7ByS,EAAkBpC,EACxBwB,EAAuBiB,EAAehS,IAAeoR,GACrDM,GAA4BC,EAAiBK,IA2HbxS,SAhIR,kBAAM4R,GAAsBD,IAiIpB5R,KAAM4R,EACNhS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,mBACHE,UAAWlC,EAAMjD,KACjBoF,MAhLN,UAAtB2Q,EAAsChT,YAAE,gBACrCA,YAAE,iBAgLuB4G,kBAAmBoM,EACnBvM,QAAS4M,EACTxM,eAAgBsM,GAA0BD,EAC1CnR,cAAekR,EACfxQ,SAnIT,SAAC+S,GACxB,IAAMJ,EAAkBpC,EACxBwB,EAAuBgB,EAAME,OAAO/S,MAAOkB,IAAckR,IACzDI,GAA4BC,IAiIInS,SArIT,kBAAM8R,IAAqBD,KAsIlB9R,KAAM8R,GACNlS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,0BACH5C,UAAW0T,EACX5Q,UAAWlC,EAAMjD,KACjBoF,MAAOrC,YAAE,iCACT7B,SAAUsL,SAASnD,YAAYnI,MAC/B4J,YAAazB,YAAYyB,KACzB2B,iBAAkB,SAACiM,GAAD,OAAOxR,YAAeT,EAAU+F,SAASkM,EAAED,OAAO/S,SACpEmH,aAzIX,SAAC7F,EAAM2R,GACxBA,EAAUhT,UACd4R,EAAuBvQ,EAAMD,IAAYiR,KAwIThS,SA3IX,kBAAMgS,IAAkBD,KA4IbhS,KAAMgS,GACNpS,UAAW2R,KAGnB,kBAAC,IAAD,CAAKgB,GAAIrV,EAAMoV,UAAY,GAAK,EAAGD,GAAInV,EAAMoV,UAAY,GAAK,GAC1D,kBAAC,IAAD,CACIpT,GAAG,mBACHE,UAAWlC,EAAMjD,KACjBoN,OAAQ/D,YAAY+D,KACpBC,SAAUhE,YAAYgE,KACtBC,QAASjE,YAAYiE,KACrBO,eAAgB,SAACL,GAAD,OAASpG,YAAmBX,EAAU+G,IACtDU,iBAAkB,SAACV,GAAD,OAASjG,YAAqBd,EAAU+G,IAC1DW,gBAAiB,SAACX,GAAD,OAAS/F,YAAoBhB,EAAU+G,IACxDpJ,gBAAiB2R,KAGF,gBAAtBU,EAAQpU,WACL,kBAAC,IAAD,CACIuL,GAAI,GACJ3M,UAAU,6EAETmW,EACG,yBAAKnW,UAAU,uGACX,2BACI2X,QAAQ,iBACR3X,UAAU,+CAET8B,YAAE,uBAEP,2BACImD,KAAK,WACLxE,KAAK,iBACLuD,GAAG,iBACHhE,UAAU,2DACVsF,QAAS2Q,EACT1R,SAAU,kBAAM2R,GAAmBD,OAI3C,8BAGJ,yBAAKjW,UAAS,oDAA+CgC,EAAMoV,UAAY,QAAU,MAA3E,qBACV,2BACIO,QAAQ,cACR3X,UAAS,+CAA0CgC,EAAMoV,UAAY,kCAAoC,KAExGtV,YAAE,6BAEP,2BACImD,KAAK,WACLxE,KAAK,cACLuD,GAAG,cACHhE,UAAU,8BACVsF,QAASoQ,EACTnR,SA7LZ,SAAC+S,GAC7B5Q,YAAkBlB,EAAU8R,EAAME,OAAOlS,gBAoMzB,kBAAC,IAAD,CAAK6R,GAAInV,EAAMoV,UAAY,GAAK,GAC5B,kBAAC,IAAKnT,MAAN,aACA,kBAAC,IAAD,CACI2T,OAAK,EACL1V,QAASpC,IAAO,0BAChB+X,QAtMP,WACjBuH,GAAmB,GAxDH,WAChB,IAAItH,EAAclN,OAAO8G,KAAK+D,GACzBrQ,QAAO,SAAC5D,GAAD,MAAwC,qBAAxBiU,EAAejU,MACtC4D,QAAO,SAAC5D,GAAD,MAAiB,cAARA,KAChB4D,QAAO,SAAC5D,GAAD,OAAS6U,GAAyB,YAAR7U,GAA6B,WAARA,KACtDgD,KAAI,SAAChD,GAAD,gBAAYuW,mBAAmBvW,GAA/B,YAAuCuW,mBAAmBtC,EAAejU,QAC7EwW,KAAK,KACNhW,EAAMwF,SAAQsQ,EAAcA,EAAc,SAAW9V,EAAMwF,QAE3D6O,EACA3B,EAAQuD,KAAK,CAAE7B,SAAU,WAAYvO,OAAQiQ,IAE7CpD,EAAQuD,KAAK,CAAE7B,SAAUxB,EAASwB,SAAUvO,OAAQiQ,IA6CxDI,GAlEAC,cACAnQ,cACIhG,EAAMwF,OACNO,YAAYvC,EAAUgQ,EAASC,EAAgBzT,EAAMwF,QAErDO,YAAYvC,EAAUgQ,EAASC,EAAgBY,OAAepL,EAAYzD,GA+D9E4Q,YAAc5S,EAAUoQ,GACxByC,YAAc7S,EAAUuQ,GACxBuC,YACI9S,EACA,kCACAkQ,EAAe,CAAC,KAAO,CAAC,OA8LJhR,UACK8Q,EAAQpU,YAAcoU,EAAQ5P,WAAa4P,EAAQ3L,cAAgB2L,EAAQvV,UAA+B,IAAnBuV,EAAQrJ,QAGnGrK,YAAE,wBAUnCod,EAAU3c,aAAe,CACrBxD,KAAM,QACNwZ,GAAI,OACJnB,WAAW,GAGA8H,O,gCC7Wf,oBAkBeQ,IAfF,SAAC1d,GAAD,OACT,uBACIhC,UAAS,UAAKgC,EAAMhC,UAAYgC,EAAMhC,UAAY,IAAM,GAA/C,gBAAyDgC,EAAM+K,KAA/D,YAAuE/K,EAAMS,MAAQ,GAArF,iBACLT,EAAM2d,OAAS,Q,gCCN3B,wEAEaxL,EAAcoF,2BACdnF,EAAuBmF,qC,4NCgNvBqG,EAAgB,CACzB,eAAe,EACf,kBAAmB,OACnB,eAAW3U,EACX,sBAAsB,EACtB,oBAAoB,EACpB,6BAA8B,YAC9B,0BAA2B,GAC3B,gCAAgC,EAChC4U,iBAAkB,0CAClB,kBAAc5U,EACd,wBAAoBA,EACpB,uBAAuB,EACvB,qBAAsB,iBACtB,sBAAuB,UACvB,sBAAkBA,EAClB,oBAAgBA,EAChB,uBAAwB,cACxB,qBAAsB,GACtB,iBAAiB,EACjB,eAAgB,OAChB,kBAAmB,4BACnB,yBAAyB,EACzB,uBAAwB,UACxB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB6U,SAAU,KACV,yBAA0B,YAC1B,2BAA2B,EAC3B,6BAAyB7U,EACzB,4BAAwBA,EACxB,6BAAyBA,EACzB,2BAAuBA,EACvB,2BAAuBA,EACvB,qBAAsB,kBACtB,0BAA2B,SAC3B,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,G,4CCzPdnL,EAAM,2BACZ8f,GADY,IAEf,UAAW,iBACX,0BAA2B,GAC3B,mBAAoB,qBACpB,iBAAkB,sCAClB,eAAgB,oCAChB,aAAc,cACd,qBAAsB,GAEtBE,SAAU,KACV,wBAAyB,GACzB,uBAAwB,8CACxB,wBAAyB,uDACzB,sBAAuB,oCACvB,sBAAuB,iDACvB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,UAAW,KAGFC,EAAa,sBD0Gf,CACH,CAAEC,KAAM,aAAcnP,IAAK,UAC3B,CAAEmP,KAAM,eAAgBnP,IAAK,WAC7B,CAAEmP,KAAM,eAAgBnP,IAAK,WAC7B,CAAEmP,KAAM,kBAAmBnP,IAAK,YAChC,CAAEmP,KAAM,sBAAuBnP,IAAK,YACpC,CAAEmP,KAAM,iBAAkBnP,IAAK,YAC/B,CAAEmP,KAAM,iBAAkBnP,IAAK,cCjHb,CAEtB,CAAEmP,KAAM,kBAAmBnP,IAAK,SAChC,CAAEmP,KAAM,oBAAqBnP,IAAK,UAClC,CAAEmP,KAAM,UAAWnP,IAAK,YACxB,CAAEmP,KAAK,IAAD,OAAMlH,YAAQhZ,EAAO,qBAArB,WAAoD+Q,IAAK,WAC/D,CAAEmP,KAAM,YAAanP,IAAK,YAC1B,CAAEmP,KAAM,0BAA2BnP,IAAK,YACxC,CAAEmP,KAAM,UAAWnP,IAAK,YACxB,CAAEmP,KAAM,oCAAqCnP,IAAK,aAGhDoP,ED6GwB,SAACngB,GAAD,MAAa,CACvCogB,cAAe,CACXnF,MAAO,yBACPoF,MAAO,CACH,CAAEnc,GAAI,iBAAkB+W,MAAO,mBAAoBiF,KAAM,sBACzD,CAAEhc,GAAI,iBAAkB+W,MAAO,oBAAqBiF,KAAM,sBAC1D,CAAEhc,GAAI,SAAU+W,MAAO,SAAUiF,KAAM,WACvC,CAAEhc,GAAI,SAAU+W,MAAO,SAAUiF,KAAM,oBACvC,CAAEhc,GAAI,QAAS+W,MAAO,mBAAoBiF,KAAM,iBAChD,CAAEhc,GAAI,mBAAoB+W,MAAO,oBAAqBiF,KAAM,wBAC5D,CAAEhc,GAAI,aAAc+W,MAAO,cAAeiF,KAAM,gBAChD,CAAEhc,GAAI,iBAAkB+W,MAAO,yBAA0BiF,KAAM,qCAC/D,CACIhc,GAAI,SACJ+W,MAAO,iBACPiF,KAAM,aAIlBI,cAAe,CACXrF,MAAO,0BACPoF,MAAO,CACH,CAAEnc,GAAI,UAAW+W,MAAO,oBAAqBiF,KAAM,kBACnD,CAAEhc,GAAI,kBAAmB+W,MAAO,sBAAuBiF,KAAM,mCAGrEK,SAAU,CACNtF,MAAO,yBACPoF,MAAO,CACH,CAAEnc,GAAI,UAAW+W,MAAO,aAAciF,KAAM,eAC5C,CAAEhc,GAAI,OAAQ+W,MAAO,OAAQiF,KAAM,QACnC,CACIhc,GAAI,OACJ+W,MAAO,eACPiF,KAAK,GAAD,OAAKlgB,EAAO,kBAAZ,SACJwgB,UAAU,GAEd,CAAEtc,GAAI,QAAS+W,MAAO,WAAYiF,KAAM,aACxC,CAAEhc,GAAI,kBAAmB+W,MAAO,sBAAuBiF,KAAM,4CAA6CM,UAAU,KAG5HC,YAAa,CACTxF,MAAO,yBACPoF,MAAO,CACH,CAAEnc,GAAI,YAAa+W,MAAO,YAAaiF,KAAM,cAC7C,CAAEhc,GAAI,QAAS+W,MAAO,qBAAsBiF,KAAM,UAClD,CAAEhc,GAAI,UAAW+W,MAAO,0BAA2BiF,KAAM,mBACzD,CAAEhc,GAAI,UAAW+W,MAAO,mCAAoCiF,KAAM,wBC5J3DQ,CAAe1gB,GAClCmgB,EAAWC,cAAcC,MAAM,GAAGH,KAAO,0BAClC,IAAMS,EAAW,2BACjBR,GADiB,IAEpBC,cAAc,2BACPD,EAAWC,eADL,IAETC,MAAOF,EAAWC,cAAcC,QAEpCE,SAAU,CACNtF,MAAO,yBACPoF,MAAO,CACH,CAAEnc,GAAI,UAAW+W,MAAO,aAAciF,KAAM,eAC5C,CAAEhc,GAAI,OAAQ+W,MAAO,OAAQiF,KAAM,QACnC,CAAEhc,GAAI,QAAS+W,MAAO,WAAYiF,KAAM,aACxC,CAAEhc,GAAI,kBAAmB+W,MAAO,sBAAuBiF,KAAM,4CAA6CM,UAAU,OAKnH9d,EAAS,CAClBke,eAAgBve,IAChBwe,gBAAiBve,IACjBD,SAAUA,IACVC,UAAWA,KAGFwF,EAAI,eDFK,SAAC9H,GAA4B,IAApBgT,EAAmB,uDAAV,MACpC,OAAQA,GACJ,IAAK,QACD,MAAO,CACH8N,KAAM,mBACNld,SAAU,4BACV6E,QAAS,2BACTsY,eAAgB,kCAChBC,YAAa,+BACbC,YAAa,+BACbC,YAAa,+BACbC,MAAO,yBACPC,MAAO,yBACPC,OAAQ,0BACRC,UAAW,6BACXC,QAAS,2BACTxZ,OAAQ,4BACRyZ,cAAe,mCACfC,QAAS,8BACTC,kBAAmB,iCACnBC,iBAAkB,gCAClBC,iBAAkB,gCAClBC,uBAAwB,sCACxBC,kBAAmB,iCACnBC,mBAAoB,kCACpBC,eAAgB,kCAChBC,cAAe,yCAEvB,QACI,MAAO,CACHnB,KAAK,GAAD,OAAK9gB,EAAO,WAAZ,gBACJyI,QAAS,sBACTuY,YAAa,mBACbC,YAAa,mBACbC,YAAa,mBACbC,MAAO,aACPC,MAAO,aACPC,OAAQ,cACRC,UAAW,iBACXvZ,OAAQ,cACRyZ,cAAe,qBACfC,QAAS,YACTC,kBAAmB,kBACnBC,iBAAkB,iBAClBC,iBAAkB,iBAClBC,uBAAwB,uBACxBC,kBAAmB,kBACnBC,mBAAoB,mBACpBG,mBAAoB,mBACpBC,gBAAiB,kBACjBH,eAAgB,sBAChBC,cAAe,qBACfG,iBAAkB,kBAClBC,QAAS,eACTjY,aAAc,uBACd4G,IAAI,GAAD,OAAKhR,EAAO,YACfsiB,IAAK,YACLC,mBAAoB,SAACziB,EAAcC,GAAf,yEAC4CD,EAD5C,YAC4DC,EAD5D,UAEpByiB,sBAAuB,SAACC,GAAD,6EAC6CA,EAD7C,YCxDhCC,CAAO1iB,EAAQ,SD5DQ,SAAC2iB,EAAOC,GAClC,IAAMC,EAAc,CAChBC,EAAG,CACCze,MAAO,UACP/E,KAAM,gBAEVyjB,EAAG,CACC1e,MAAO,SACP/E,KAAM,WAEV0jB,EAAG,CACC3e,MAAO,iBACP/E,KAAM,gBAEV2jB,EAAG,CACC5e,MAAO,cACP/E,KAAM,gBAEV4jB,EAAG,CACC7e,MAAO,gBACP/E,KAAM,kBAEV6jB,EAAG,CACC9e,MAAO,gBACP/E,KAAM,uBAEV8jB,EAAG,CACC/e,MAAO,iBACP/E,KAAM,8CAIR+jB,EAAgB,GACtBV,EAAM1R,SAAQ,SAACqS,GACXD,EAAclL,KAAK0K,EAAYS,OAW/BD,EAAcve,OCkBKye,CAAe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,K,wMCrE7C5d,EAAiB8T,oCACjB1T,EAAgB0T,mC,QCEvB+J,EAAe,CACjBtN,mBAAoB,GACpBF,mBAAoB,IAGxB,SAASyN,EAAgBlb,EAAO7G,GAE5B,cADO6G,EAAM7G,GACN6G,EAQJ,I,EA2BQwL,EA3BQ,WAAmC,IAAlCxL,EAAiC,uDAAzBib,EAAcnR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAK2Y,IACD,OAAO,2BACAvV,GADP,kBAEK8J,EAAOzM,QAAQlE,IAAM2Q,EAAOzM,QAAQ4C,OAE7C,KAAKuV,IACD,OAAO,2BACAxV,GADP,IAEIyN,mBAAoB,KAE5B,KAAKgI,IACD,OAAO,2BACAzV,GADP,IAEI2N,mBAAoB,KAE5B,KAAKvO,IAAczE,IACf,OAAOugB,EAAgB,eAAKlb,GAAS,gCACzC,KAAK5C,EACL,KAAKI,EACD,OAAO0d,EAAgB,eAAKlb,GAAS,wBACzC,QACI,OAAOA,ICzCNmb,EAAUjK,iBCCjB+J,EAAe,CACjBlB,IAAK,GACLqB,cAAe,GAgBJ5P,EAbQ,WAAmC,IAAlCxL,EAAiC,uDAAzBib,EAAcnR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKue,EAAUxgB,IACX,OAAO,2BACAqF,GADP,IAEI+Z,IAAKjQ,EAAOzM,QAAQ0E,SAAS9B,KAC7Bmb,cAAezc,KAAKoH,QAE5B,QACI,OAAO/F,I,QCdbqb,EAAe,CACjBC,QAAS,IAgBE9P,EAbQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,EAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACjB,OAAO,2BACAqF,GADP,IAEIsb,QAASxR,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKsb,eAC3CC,MAAO1R,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKub,QAEjD,QACI,OAAOxb,ICbbqb,EAAe,CACjBI,OAAO,GAcIjQ,EAXQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,EAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACjB,MAAO,CACH8gB,OAAO,GAEf,QACI,OAAOzb,I,QCXbqb,EAAe,CACjB5P,SAAU,GACVtB,OAAQ,IAqCGuR,EAlCkB,SAAC/R,GAAD,OAAgB,WAAmC,IAAlC3J,EAAiC,uDAAzBqb,EAAcvR,EAAW,uCAC/E,OAAQA,EAAOlN,MACX,KAAKuU,IACL,KAAKxH,EAAajP,IACd,OAAO2gB,EACX,KAAK1R,EAAalP,IACd,IAAM0P,EAAM,eAAQnK,EAAMmK,QAG1B,cAFOA,EAAOL,EAAOzM,QAAQuM,WAEtB,CACH6B,SAAS,GAAD,mBAAMzL,EAAMyL,UAAZ,CAAsB3B,EAAOzM,QAAQuM,YAC7CO,UAER,KAAKR,EAAahP,IAClB,KAAKgP,EAAapP,IACd,OAAO,2BACAyF,GADP,IAEIyL,SAAUzL,EAAMyL,SAAS1O,QAAO,SAACpB,GAAD,OAAQA,IAAOmO,EAAOzM,QAAQuM,eAEtE,KAAKD,EAAanP,IACd,IAAMoa,EAAS,CACXnJ,SAAUzL,EAAMyL,SAAS1O,QAAO,SAACpB,GAAD,OAAQA,IAAOmO,EAAOzM,QAAQuM,aAC9DO,OAAO,2BACAnK,EAAMmK,QADP,kBAEDL,EAAOzM,QAAQuM,UAAYE,EAAOzM,WAI3C,cADOuX,EAAOzK,OAAOL,EAAOzM,QAAQuM,WAAWvQ,OAAOsiB,OAC/C/G,EACX,QACI,OAAO5U,KCpCN4b,EAAmB1K,mCACnB2K,EAAiB3K,iCACjB4K,EAAc5K,8BACd6K,EAAoB7K,oCAEpB8K,EAAe9K,+BACf+K,EAAiB/K,iCCNjBgL,EAAahL,4BACbiL,EAAajL,4BCDbkL,EAAgBlL,6BAEhBmL,EAAuBnL,oCACvBoL,EAAepL,4BAGfqL,EAAoBrL,iCCNpBsL,EAActL,8BACduL,EAAevL,+BACfwL,EAAmBxL,mC,SCFnByL,GAAczL,2BCAd0L,GAAgB1L,+BCAhB2L,GAAY3L,uBCAZ4L,GAAmB5L,gCCAnB6L,GAAmB7L,gCCAnB8L,GAAmB9L,gC,SCAnB+L,GAAiB/L,4B,SCCjBgM,GAAchM,mBACdiM,GAAejM,oBACfkM,GAAQlM,aACRmM,GAASnM,cAEToM,GAAcpM,mBCkDZ1F,GAhCQ+R,2BAAe,mBACjCrE,EAAyBwC,EAAkBxC,IADV,cAEjCA,EAAsBwC,EAAkBxC,IAFP,cAGjCA,EAA4BwC,EAAkBxC,IAHb,cAIjCsE,EAA2B9B,EAAkB8B,IAJZ,cAKjCA,EAA2B9B,EAAkB8B,IALZ,cAMjCC,EAAgC/B,EAAkB+B,IANjB,cAOjCC,EAA6BhC,EAAkBgC,IAPd,cAQjCA,EAA8BhC,EAAkBgC,IARf,cASjCC,KAA4BjC,EAAkBiC,OATb,cAUjCC,GAA0BlC,EAAkBkC,KAVX,cAWjCC,GAA8BnC,EAAkBmC,KAXf,cAYjCC,GAAsBpC,EAAkBoC,KAZP,cAajCC,GAAmCrC,EAAkBqC,KAbpB,cAcjCC,GAAmCtC,EAAkBsC,KAdpB,cAejCC,GAAmCvC,EAAkBuC,KAfpB,cAgBjCC,KAAmCxC,EAAkBwC,OAhBpB,cAiBjCA,KAA0BxC,EAAkBwC,OAjBX,cAkBjCC,GAA+BzC,EAAkByC,KAlBhB,cAmBjCC,EAAiB1C,EAAkB0C,IAnBF,cAoBjC7F,IAAqBmD,EAAkBnD,MApBN,cAqBjC8F,KAA0B3C,EAAkB2C,OArBX,cAsBjCpF,IAA4ByC,EAAkBzC,MAtBb,cDxBP/H,uBC+CHwK,ED/CGxK,yBCwBO,cAwBjCoN,GAAmB5C,EAAkB4C,KAxBJ,cAyBjCA,GAAoB5C,EAAkB4C,KAzBL,cA0BjCA,GAAa5C,EAAkB4C,KA1BE,cA2BjCA,GAAc5C,EAAkB4C,KA3BC,cDnBApN,8BC+CHwK,ED/CGxK,gCCmBA,cA6BjCoN,GAAmB5C,EAAkB4C,KA7BJ,ICdhCjD,GAAe,CACjBkD,cAAe,GACf3hB,UAAMgG,EACN7J,eAAW6J,EACX4b,YAAQ5b,EACR6b,gBAAY7b,EACZ8b,eAAW9b,EACX+b,eAAW/b,EACXgc,gBAAYhc,EACZzD,YAAQyD,EACRpB,iBAAaoB,EACbhL,cAAUgL,EACVic,eAAWjc,EACXkc,aAASlc,EACTmc,aAASnc,EACToc,uBAAmBpc,EACnBqc,iBAAarc,EACbsc,iBAAiB,EACjBC,aAAc,GACdC,cAAe,EACfC,aAASzc,EACT0c,eAAgB,GAChBC,oBAAgB3c,GAiEL4I,GA9DQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKif,EACD,OAAO,2BACAR,IADP,IAEIkD,cAAezU,EAAOzM,UAE9B,KAAKwe,EAAiBlhB,IAClB,OAAO,uCACAqF,GADP,IAEIue,cAAe,IACZve,EAAMue,eAHb,IAIIO,QAAShV,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKiZ,QAAQ4F,QACnDD,UACI/U,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKiZ,QAAQsG,QAC1C1V,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKiZ,QAAQuG,SAEtD,KAAKzD,EACD,OAAO,2BACAX,IACAvR,EAAOzM,SAElB,KAAKye,EAAcnhB,IACf,OAAO,2BACAqF,GADP,IAEI+e,QAAS/N,WAAWlH,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8e,UAAY,KAClEE,YAAanV,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKyf,WAC/CL,QAASvV,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKof,QAC3CL,kBAAmBlV,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK+e,oBAE7D,KAAKjD,EACD,OAAO,2BACA/b,GADP,IAEImf,aAAcrV,EAAOzM,UAE7B,IblE0B6T,qCamEtB,OAAO,2BACAlR,GADP,IAEIof,cAAetV,EAAOzM,QACtB6hB,gBAAiBpV,EAAOzM,QAAU,IAE1C,KAAK4e,EACD,OAAO,2BACAjc,GADP,IAEIsf,eAAe,GAAD,mBAAMtf,EAAMsf,gBAAZ,CAA4BxV,EAAOzM,YAEzD,Ib1E0B6T,qCa2EtB,OAAO,2BACAlR,GADP,IAEIsf,eAAgBtf,EAAMsf,eAAeviB,QAAO,SAACoV,GAAD,OAAUA,IAASrI,EAAOzM,aAE9E,KAAKue,EACD,OAAO,2BACA5b,GADP,IAEI6e,eAAWjc,EACX2c,eAAgBvf,EAAM6e,YAE9B,QACI,OAAO7e,ICpFbqb,GAAe,CACjBsE,QAAS,GACTC,OAAQ,GACRC,OAAQ,CACJC,SAAU,IACVC,OAAQ,IACRC,QAAS,IACTC,SAAU,KAEdC,MAAO,CACHC,iBAAavd,EACbwd,OAAQ,IAEZC,QAAS,CACLC,cAAe,YAuFR9U,GAnFQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwf,EACD,OAAO,2BACApc,GADP,IAEI2f,QAAQ,2BACD3f,EAAM2f,SADN,kBAEF7V,EAAOzM,QAAQlE,IAAM2Q,EAAOzM,QAAQjB,UAGjD,IZpC2B8U,mCYqCvB,OAAO,2BACAlR,GADP,IAEIkgB,MAAM,2BACClgB,EAAMkgB,OADR,IAEDE,OAAO,2BACApgB,EAAMkgB,MAAME,QADb,kBAEDtW,EAAOzM,QAAQlE,IAAM2Q,EAAOzM,QAAQjB,YAIrD,KAAKyf,EAAiBlhB,IACtB,KAAKqhB,EACD,OAAO,2BACAhc,GADP,IAEI4f,OAAQ,KAEhB,KAAK9D,EAAcnhB,IACf,MAAkD,KAA9CmP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8e,QAC3B/e,EAEA,2BACAA,GADP,IAEIqgB,QAAQ,2BACDrgB,EAAMqgB,SADN,IAEHC,cAAe,WAI/B,KAAKjE,EACD,OAAO,2BACArc,GADP,IAEIkgB,MAAM,2BACClgB,EAAMkgB,OADR,IAEDC,YAAarW,EAAOzM,QAAQjB,MAC5BgkB,OAC6B,MAAzBtW,EAAOzM,QAAQjB,MAAf,2BAEW4D,EAAMkgB,MAAME,QACZtW,EAAOzM,QAAQihB,MAEpBte,EAAMkgB,MAAME,WAGlC,KAAK9D,EACD,OAAO,2BACAtc,GADP,IAEI4f,OAAO,2BACA5f,EAAM4f,QADP,kBAED9V,EAAOzM,QAAQlE,IAAM2Q,EAAOzM,QAAQjB,UAGjD,IZpF4B8U,oCYqFxB,OAAO,2BACAlR,GADP,IAEI6f,OAAO,2BACA7f,EAAM6f,QADP,kBAED/V,EAAOzM,QAAQlE,IAAM2Q,EAAOzM,QAAQjB,UAGjD,IZ7F6B8U,qCY8FzB,OAAO,2BACAlR,GADP,IAEIqgB,QAAQ,2BACDrgB,EAAMqgB,SADN,IAEHC,cAAexW,EAAOzM,YAGlC,QACI,OAAO2C,ICzGbqb,GAAe,CACnBuE,OAAQ,GACRW,qBAAiB3d,GAgBJ4I,GAbQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACvD,OAAQA,EAAOlN,MACb,KAAKsf,EAAavhB,IAChB,OAAO,2BACF0gB,IADL,IAEEuE,OAAQ9V,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2f,QAAU,GACpDW,gBAAiBzW,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKsgB,kBAEvD,QACE,OAAOvgB,ICbPqb,GAAe,CACjBmF,OAAQ,GACRC,iBAAa7d,EACb8d,iBAAa9d,EACb+d,gBAAY/d,EACZge,SAAU,GACVC,MAAO,IAwCIrV,GArCQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKif,EACL,KAAKG,EACD,OAAO,eACAX,IAEX,KAAKmB,EACL,KAAKC,EACD,OAAO,2BACAzc,GADP,IAEIygB,iBAAa7d,IAErB,KAAK4Z,EAAc7hB,IACf,OAAO,2BACAqF,GADP,IAEIygB,iBAAa7d,EACb8d,YACI5W,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKygB,aAClC5W,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKugB,OAAOE,aAC1C5W,EAAOzM,QAAQ0E,SAAS9B,KAAKA,MAExC,KAAKyc,EACD,OAAO,2BACA1c,GADP,IAEI2gB,WAAY7W,EAAOzM,UAE3B,KAAKof,EAAe9hB,IAChB,OAAO,2BACAqF,GADP,IAEIygB,YAAa3W,EAAOzM,QAAQ0E,SAAS9B,KAAKA,MAAQ,KAE1D,QACI,OAAOD,IC1Cbqb,GAAe,CACjBhgB,SAAU,IAkBCmQ,GAfQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACrB,KAAKkb,KAAelb,IAChB,OAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK5E,SAC3B,CACHA,SAAS,YAAKyO,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK5E,WAGjD2E,EACX,QACI,OAAOA,ICfbqb,GAAe,CACjBnb,QAAS,GACTyF,iBAAkB,GAClBkG,yBAA0B,IAcxB8C,GAAa,SAACmS,GAChB,IAAIlM,EAAS,GAOb,OANArS,OAAO8G,KAAKyX,GAAgBpY,SAAQ,SAAC3P,GACjC6b,EAAM,2BACCA,GAfe,SAAC1U,GAC3B,IAAM0U,EAAS,GAOf,OANArS,OAAO8G,KAAKnJ,GAASwI,SAAQ,SAACnL,GAC1BqX,EAAOrX,GAAP,aACI5B,GAAI4B,GACD2C,EAAQ3C,OAGZqX,EAQImM,CAAsBD,EAAe/nB,QAGzC6b,GAGLoM,GAAsB,SAAC9gB,GACzB,IAAM0U,EAAS,GAIf,OAHArS,OAAO8G,KAAKnJ,GAASwI,SAAQ,SAAC3P,GAC1B6b,EAAO7b,GAAawJ,OAAO8G,KAAKnJ,EAAQnH,OAErC6b,GA4CIpJ,GAzCQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACrB,KAAKmR,KAAcnR,IACf,OAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,QAC3B,2BACAF,GADP,IAEIE,QAAQ,2BACDF,EAAME,SACNyO,GAAW7E,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,UAEpDyF,iBAAiB,2BACV3F,EAAM2F,kBACNqb,GAAoBlX,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,YAI9DF,EACX,KAAK+L,KAAuBpR,IACxB,OAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,QAC3B,2BACAF,GADP,IAEIE,QAAQ,2BACDF,EAAME,SACNyO,GAAW7E,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,UAEpD2L,yBAAyB,2BAClB7L,EAAM6L,0BADW,kBAEnB/B,EAAOzM,QAAQhE,OAAO4nB,KAFH,2BAGZjhB,EAAM6L,yBAAyB/B,EAAOzM,QAAQhE,OAAO4nB,OAAS,IAC/DD,GAAoBlX,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKC,cAKlEF,EACX,QACI,OAAOA,ICzEbqb,GAAe,CACjBrC,QAAS,IAGPkI,GAAa,SAAClI,GAIhB,OAHiBA,EAAQ7c,KAAI,SAACglB,EAAE7L,GAC5B,OAAO,YAAC,eAAI6L,GAAZ,IAAexlB,GAAI2Z,EAAG1Y,KAAM,YAAaukB,EAAI,QAAU,cAKzDC,GAAkB,SAACC,GAErB,OADK9e,OAAO8G,KAAKgY,GAAIpmB,SAAS,OAAMomB,EAAG,GAAO,IACvCA,GAkCI7V,GA/BQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACrB,KAAKgiB,GAAchiB,IACf,OAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKqhB,QAE3B,CACHtI,QAAQ,2BACDhZ,EAAMgZ,SACNkI,GAAWpX,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKqhB,UAEpDC,SAAS,2BACFvhB,EAAMuhB,UACNzX,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKshB,UAEzCC,SAAS,2BACFxhB,EAAMwhB,UACN1X,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKuhB,UAEzCC,aAAa,2BACNzhB,EAAMyhB,cACNL,GAAgBtX,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKwhB,gBAI1DzhB,EACX,QACI,OAAOA,I,SC1Cbqb,GAAe,CACjBtC,UAAW,GACX2I,mBAAoB,IA0CTlW,GAvCQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACjB,GAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8Y,UAAW,CAC7C,IAAIA,EAAS,eAAQ/Y,EAAM+Y,WACvB2I,EAAkB,eAAQ1hB,EAAM0hB,oBAUpC,OARAnf,OAAO8G,KAAKS,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8Y,WAAWrQ,SAAQ,SAAC1Q,GAC9D0pB,EAAmB1pB,GAAW,GAC9B8R,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8Y,UAAU/gB,GAAS0Q,SAAQ,SAACiZ,GAC1D5I,EAAU4I,EAASV,MAAQU,EAC3BD,EAAmB1pB,GAAS4X,KAAK+R,EAASV,YAI3C,2BACAjhB,GADP,IAEI+Y,YACA2I,uBAGR,OAAO1hB,EACX,KAAK4c,GAAgBjiB,IACjB,OAAO,2BACAqF,GADP,IAEI+Y,UAAU,2BACH/Y,EAAM+Y,WACNtE,aAAc3K,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8Y,UAAW,SAElE2I,mBAAmB,2BACZ1hB,EAAM0hB,oBADK,kBAEb5X,EAAOzM,QAAQhE,OAAOrB,QAAU8R,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8Y,UAAU5c,KAAI,SAACylB,GAAD,OAAQA,EAAGX,YAGxG,QACI,OAAOjhB,ICzCN6hB,GAAqB,SAACjJ,EAAOkJ,EAAevkB,GAAc,IAAD,EAClE,iBAAOukB,EAAcvkB,UAArB,aAAO,EAAyBpB,KAAI,SAACR,GAAD,OAAQid,EAAMjd,OAGzComB,GAAc,SAACtiB,GAAD,mBAAC,eACrBA,GADoB,IAEvBuiB,IAAK,CACDC,IAAKjR,WAAWvR,EAAKwiB,KACrBC,IAAKlR,WAAWvR,EAAK0iB,SCRvB9G,GAAe,CACjB5C,YAAa,IAkBFjN,GAfQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKkgB,GAAmBniB,IACpB,OAAO,2BACAqF,GADP,IAEIyY,YAAY,2BACLzY,EAAMyY,aADF,kBAEN3O,EAAOzM,QAAQhE,OAAO8F,OAAS4iB,GAAYjY,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKR,UAG1F,QACI,OAAOO,ICfbqb,GAAe,CACjB3C,YAAa,IAGjB,SAAS0J,GAAeniB,GACpB,IAAM2U,EAAM,eAAQ3U,GAGpB,cAFO2U,EAAM,UACbA,EAAOyN,WAAa1jB,KAAKoH,MAClB6O,EAGJ,IAiBQpJ,GAjBQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwC,IAAczE,IACf,OAAO0gB,GACX,KAAK0B,GAAmBpiB,IACpB,OAAO,2BACAqF,GADP,IAEI0Y,YAAY,2BACL1Y,EAAM0Y,aADF,kBAEN5O,EAAOzM,QAAQhE,OAAO8F,OAASijB,GAAetY,EAAOzM,QAAQ0E,SAAS9B,KAAKA,UAGxF,QACI,OAAOD,ICzBbqb,GAAe,CACjB1C,YAAa,GACb2J,QAAS,IAmBE9W,GAhBQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKogB,GAAmBriB,IACpB,OAAO,2BACAqF,GADP,IAEI2Y,YAAY,2BACL3Y,EAAM2Y,aADF,kBAEN7O,EAAOzM,QAAQhE,OAAO8F,OAAS2K,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKsiB,UAEtED,QAASxY,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKqiB,UAEnD,QACI,OAAOtiB,ICdbqb,GAAe,CACjBzC,MAAO,GACPkJ,cAAe,GACfU,SAAU,IAiDChX,GA9CQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACjB,GAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2Y,MAAO,CACzC,IAAIA,EAAK,eAAQ5Y,EAAM4Y,OACnBkJ,EAAa,eAAQ9hB,EAAM8hB,eAU/B,OARAvf,OAAO8G,KAAKS,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2Y,OAAOlQ,SAAQ,SAACnI,GAC1DuhB,EAAcvhB,GAAU,GACxBuJ,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2Y,MAAMrY,GAAQmI,SAAQ,SAACjJ,GACrDmZ,EAAMnZ,EAAKN,QAAU4iB,GAAYtiB,GACjCqiB,EAAcvhB,GAAQqP,KAAKnQ,EAAKN,cAIjC,2BACAa,GADP,IAEI4Y,QACAkJ,kBAGR,OAAO9hB,EACX,KAAK6c,GAAYliB,IACb,OAAO,2BACAqF,GADP,IAEI4Y,MAAM,2BACC5Y,EAAM4Y,OACNnE,aACC3K,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2Y,MAAMzc,KAAI,SAACsD,GAAD,OAAUsiB,GAAYtiB,MAClE,WAGRqiB,cAAc,2BACP9hB,EAAM8hB,eADA,kBAERhY,EAAOzM,QAAQhE,OAAOkH,OAASuJ,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK2Y,MAAMzc,KAAI,SAACsD,GAAD,OAAUA,EAAKN,YAE/FqjB,SAAS,2BACFxiB,EAAMwiB,UACN1Y,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAKuiB,YAGjD,QACI,OAAOxiB,IChDbyiB,GAAe,SAAC/N,GAAD,MAAS,CAACA,GAAKgO,QAE9BrH,GAAe,CACnBsH,UAAW,GACXC,iBAAkB,GAClBC,UAAW,IAGb,SAASC,GAAiB7iB,GACxB,IAAM2U,EAAS,GAUf,OATA3U,EAAKyI,SAAQ,SAACyJ,GACZsQ,GAAatQ,EAAK5W,MAAMmN,SAAQ,SAACqa,GAC/BnO,EAAOmO,GAAP,2BACK5Q,GADL,IAEE5W,KAAMwnB,EACNtQ,MAAON,EAAKM,cAIXmC,EAGT,SAASoO,GAAiB/iB,GACxB,IAAM2U,EAAS,GAMf,OALA3U,EAAKyI,SAAQ,SAACyJ,GACZyC,EAAOzC,EAAK4Q,UAAZ,eACK5Q,MAGAyC,EAGT,SAASqO,GAAgBhjB,GACvB,IAAM2U,EAAS,IAAIsO,IAMnB,OALAjjB,EAAKyI,SAAQ,SAACyJ,GACZsQ,GAAatQ,EAAK5W,MAAMmN,SAAQ,SAACqa,GAC/BnO,EAAOuO,IAAIJ,SAGR,YAAInO,GAGN,IA6BQpJ,GA7BQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACvD,OAAQA,EAAOlN,MACb,KAAKqgB,GAAiBtiB,IACpB,OAAO,2BACFqF,GADL,IAEE2iB,UAAU,2BACL3iB,EAAM2iB,WACNG,GAAiBhZ,EAAOzM,QAAQ0E,SAAS9B,OAE9C2iB,iBAAiB,2BACZ5iB,EAAM4iB,kBADK,kBAEb9Y,EAAOzM,QAAQhE,OAAO8F,OAAS8jB,GAAgBnZ,EAAOzM,QAAQ0E,SAAS9B,UAG9E,KAAK8c,GAAmBpiB,IACxB,KAAKwiB,GAAexiB,IAClB,OAAO,2BACFqF,GADL,IAEE6iB,UAAU,2BACL7iB,EAAM6iB,WAENG,GAAiBlZ,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK4iB,cAG5D,QACE,OAAO7iB,ICtEAojB,GAAkBlS,gDCDzBmK,GAAe,CACjBtiB,eAAW6J,EACXuJ,gBAAYvJ,GAoBD4I,GAjBQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,IDPsBsU,+CCQlB,OAAO,2BACAlR,GADP,IAEIjH,UAAW+Q,EAAOzM,UAE1B,KAAK+lB,GACD,OAAO,2BACApjB,GADP,IAEImM,WAAYrC,EAAOzM,UAE3B,QACI,OAAO2C,IClBNqb,GAAe,CACxBtiB,eAAW6J,GAeA4I,GAZQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,ICNsBsU,wCDOlB,OAAO,2BACAlR,GADP,IAEIjH,UAAW+Q,EAAOzM,UAE1B,QACI,OAAO2C,IEZbqb,GAAe,CACjBtiB,eAAW6J,EACXrF,cAAUqF,EACVygB,gBAAiB,IAoBN7X,GAjBQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKQ,EACD,OAAO,2BACA4C,GADP,IAEIjH,UAAW+Q,EAAOzM,UAE1B,KAAKG,EACD,OAAO,2BACAwC,GADP,IAEIzC,SAAUuM,EAAOzM,UAEzB,QACI,OAAO2C,ICnBNqb,GAAe,CACxBtiB,eAAW6J,GAeA4I,GAZQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,ICNsBsU,sCDOlB,OAAO,2BACAlR,GADP,IAEIjH,UAAW+Q,EAAOzM,UAE1B,QACI,OAAO2C,IEXNrC,GAAcuT,gCACdoS,GAAcpS,gCCDrBmK,GAAe,CACjBtiB,eAAW6J,EACXzD,YAAQyD,EACR2gB,kBAAc3gB,GA8BH4I,GA3BQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,IDTsBsU,mCCUlB,OAAO,2BACAlR,GADP,IAEIjH,UAAW+Q,EAAOzM,UAE1B,KAAKimB,GACD,OAAO,2BACAtjB,GADP,IAEIb,OAAQ2K,EAAOzM,UAEvB,KAAKM,GACD,OAAO,2BACAqC,GADP,IAEIujB,aAAczZ,EAAOzM,UAE7B,KAAKgC,KACD,OAAO,2BACAW,GADP,IAEIujB,aAAczZ,EAAOzM,QAAQmE,cAErC,QACI,OAAOxB,ICnBbqb,GAAe,CACjBtiB,UAAW,YACXwE,cAAUqF,EACVpB,iBAAaoB,EACbhL,SAAU,EACVkM,OAAQ,EACRC,SAAU,EACVC,QAAS,EACT1F,aAAa,EACbklB,cAAc,EACdC,gBAAgB,EAChB5hB,aAAc,IA8DH2J,GA3DQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKQ,KACD,OAAO,2BACA4C,GADP,IAEIjH,UAAW+Q,EAAOzM,QAClBE,cAAUqF,IAElB,KAAKpF,KACD,OAAO,2BACAwC,GADP,IAEIzC,SAAUuM,EAAOzM,UAEzB,KAAKM,KACD,OAAO,2BACAqC,GADP,IAEIwB,YAAasI,EAAOzM,UAE5B,KAAKQ,KACD,OAAO,2BACAmC,GADP,IAEIwB,iBAAaoB,EACbhL,SAAUkS,EAAOzM,UAEzB,KAAKW,KACD,OAAO,2BACAgC,GADP,IAEI8D,OAAQgG,EAAOzM,UAEvB,KAAKa,KACD,OAAO,2BACA8B,GADP,IAEI+D,SAAU+F,EAAOzM,UAEzB,KAAKe,KACD,OAAO,2BACA4B,GADP,IAEIgE,QAAS8F,EAAOzM,UAExB,KAAKkB,KACD,OAAO,2BACAyB,GADP,IAEI1B,YAAawL,EAAOzM,UAE5B,KAAKyB,KACD,OAAO,2BACAkB,GADP,IAEI6B,aAAciI,EAAOzM,UAE7B,KAAK2B,KACD,OAAO,2BACAgB,GADP,IAEIwB,iBAAaoB,IAErB,QACI,OAAO5C,IC9Ebqb,GAAe,CACjBkD,cAAe,GACfllB,OAAQ,GACRqqB,eAAgB,GAChBrrB,MAAO,EACPse,QAAS,GACTD,aAAa,EACbE,WAAW,GAkDApL,GA/CQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKyC,KACD,OAAO,2BACAW,GADP,IAEIue,cAAc,eAAMzU,EAAOzM,SAC3BhF,MAAO,EACPse,QAAS,GACT+M,eAAgB,KAExB,KAAKrkB,KAAe1E,IAChB,OAAO,2BACAqF,GADP,IAEIue,cAAe,GACfmF,eAAe,eAAM5Z,EAAOzM,QAAQhE,QACpCA,OAAO,eAAM2G,EAAMue,eACnB7H,aAAa,IAErB,KAAKrX,KAAe7E,IAChB,OAAO,2BACAwF,GADP,IAEIue,cAAe,GACf7H,aAAa,IAErB,KAAKtX,IAAczE,IACf,OAAKmP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK0jB,KAS5B,2BACA3jB,GADP,IAEI3H,MAAOyR,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK5H,MACzCue,WAAW,IAXR,2BACA5W,GADP,IAEI3H,MAAOyR,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK5H,MACzCse,QAAQ,YAAK7M,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK0W,SAC/CD,aAAa,EACbE,WAAW,IAUvB,QACI,OAAO5W,ICnDbqb,GAAe,CACjBuI,UAAU,EACVC,cAAUjhB,EACV+c,QAAS,GACTmE,qCAAqC,GA2D1BtY,GAxDQ,WAAmC,IAAlCxL,EAAiC,uDAAzBqb,GAAcvR,EAAW,uCACrD,OAAQA,EAAOlN,MACX,KAAKwU,IAAgBzW,IACjB,OAAImP,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8jB,QAC3B,2BACA/jB,GADP,IAEI4jB,UAAU,EACVjE,QAAQ,2BACD7V,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8jB,SADlC,IAEHC,QAAS9gB,SAAS4G,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK8jB,QAAQC,SAAS7b,eAItEkT,GAEf,KAAK6B,GAAcviB,IACnB,KAAK2iB,GAAc3iB,IAEf,OADAspB,aAAaC,QAAQ,kBAAkB,GAChC,2BACAlkB,GADP,IAEI4jB,UAAU,EACVE,oCAAqC3Q,OAAO5G,SAASxV,KAAKotB,QAAQ,YAAc,EAChFxE,QAAQ,2BACD7V,EAAOzM,QAAQ0E,SAAS9B,KAAKA,MAD7B,IAEH+jB,QAAS9gB,SAAS4G,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK+jB,SAAS7b,eAGzE,KAAKiV,GAAQziB,IAET,OADAspB,aAAaC,QAAQ,kBAAkB,GAChC,2BACAlkB,GADP,IAEI4jB,UAAU,EACVE,qCAAqC,EACrCnE,QAAQ,2BACD7V,EAAOzM,QAAQ0E,SAAS9B,KAAKA,MAD7B,IAEH+jB,QAAS9gB,SAAS4G,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK+jB,SAAS7b,eAGzE,KAAKkV,GAAS1iB,IAEV,OADAspB,aAAaC,QAAQ,kBAAkB,GAChC7I,GACX,KAAK8B,GAAexiB,IAChB,OAAO,2BACAqF,GADP,IAEI6jB,SAAU/Z,EAAOzM,QAAQ0E,SAAS9B,KAAKA,KAAK4jB,WAEpD,KAAKjI,EACD,OAAO,2BACA5b,GADP,IAEI6jB,cAAUjhB,IAElB,QACI,OAAO5C,IC1BbokB,GAAc7G,0BAAgB,CAChC/P,SAAU6W,EACVnL,QAASqE,0BAAgB,CACrBrE,QAASoL,GACTxf,KAAMyf,GACN3E,OAAQ4E,GACRnE,QAASoE,KAEbxkB,KAAMsd,0BAAgB,CAClBliB,SAAUqpB,GACV1L,QAAS2L,GACT5L,UAAW6L,GACXhM,MAAOiM,GACPplB,KAAM8d,0BAAgB,CAClBoC,QAASmF,GACTnO,QAASoO,GACTxC,QAASyC,KAEb9kB,QAAS+kB,GACTpC,UAAWqC,KAEf9G,OAAQ+G,EACRC,SAAUC,EACV9M,KAAM+M,EACNC,MAAOhI,0BAAgB,CACnBiI,sBAAuBC,GACvBC,gBAAiBC,GACjBC,YAAaC,GACbC,cAAeC,KAEnBtmB,KAAMumB,GACN1a,SAAU2a,GACVzmB,OAAQ+d,0BAAgB,CACpBzY,KAAMohB,GACNvP,QAASwP,KAEb7H,KAAM8H,KAGGC,GAAQC,sBAAYlC,GAAamC,8BAAoBC,MAAgBC,0BAAgBC,O,yBC1EnF,SAASC,KACpB,IAAQ5Y,EAAavB,eAAbuB,SAMR,OAJA3S,qBAAU,WACN+X,OAAOyT,SAAS,EAAG,KACpB,CAAC7Y,IAEG,K,YCLL8Y,GAAOC,gBAAK,kBAAM,iCAClBC,GAASD,gBAAK,kBAAM,iCACpBE,GAAgBF,gBAAK,kBAAM,iCAC3B/T,GAAkB+T,gBAAK,kBAAM,4CAC7BG,GAAYH,gBAAK,kBAAM,iCAwFdI,OAtFf,YAA4B,IAClBC,EADiB,EAAX7L,QACenf,KAAI,SAACoT,EAAO6C,GACnC,GAAmB,cAAf7C,EAAM3S,OAA8C,IAAtB2S,EAAMtP,KAAKmK,OAAkB,OAAO,yBAAKjR,IAAKiZ,IAChF,OAAQ7C,EAAM3S,MACV,IAAK,WACD,OACI,kBAAC,WAAD,CAAUwqB,SAAU,yBAAKzvB,UAAU,qBAA2BwB,IAAG,mBAAciZ,IAC3E,kBAACyU,GAAD,CACI1tB,IAAKiZ,EACLY,QAASzD,EAAMtP,KAAK+S,QACpBqU,aAAc9X,EAAMtP,KAAKqnB,cACzBC,WAAYhY,EAAMtP,KAAKsnB,WACvBC,UAAWjY,EAAMtP,KAAKwnB,WACtBC,gBAAiBnY,EAAMtP,KAAK0nB,qBAI5C,IAAK,SACD,OACI,kBAAC,WAAD,CAAUP,SAAU,8BAAajuB,IAAG,mBAAciZ,IAC9C,kBAAC2U,GAAD,CACI5tB,IAAKiZ,EACLkC,MAAO/E,EAAMtP,KAAKqU,MAClBpE,GAAIX,EAAMtP,KAAKiQ,GACfxZ,KAAM6Y,EAAMtP,KAAKvJ,KACjB4kB,QAAS/L,EAAMtP,KAAKqb,QACpB9S,IAAK+G,EAAMtP,KAAKuI,OAIhC,IAAK,YACD,OACI,kBAAC,WAAD,CAAU4e,SAAU,8BAAajuB,IAAG,mBAAciZ,IAC9C,kBAAC6U,GAAD,CACI9tB,IAAKiZ,EACLwV,SAAUrY,EAAMtP,KAAK2nB,SACrBlV,MAAOnD,EAAMtP,KAAKyS,MAClBhc,KAAM6Y,EAAMtP,KAAKvJ,KACjBmxB,SAAUtY,EAAMtP,KAAK4nB,SACrBrf,IAAK+G,EAAMtP,KAAKuI,IAChBsf,kBAAmBvY,EAAMtP,KAAK6nB,kBAC9BC,YAAaxY,EAAMtP,KAAK8nB,eAIxC,IAAK,cACD,OACI,kBAAC,WAAD,CAAUX,SAAU,8BAAajuB,IAAG,mBAAciZ,IAC9C,kBAACW,GAAD,CACI5Z,IAAKiZ,EACLY,QAASzD,EAAMtP,KAAK+S,QACpBC,QAAS1D,EAAMtP,KAAKgT,QACpBC,WAAY3D,EAAMtP,KAAK6nB,kBAAoBvY,EAAMtP,KAAK6nB,kBAAoB,WAI1F,IAAK,gBACD,OACI,kBAAC,WAAD,CAAUV,SAAU,8BAAajuB,IAAG,mBAAciZ,IAC9C,kBAAC4U,GAAD,CACI7tB,IAAKiZ,EACL3S,KAAM8P,EAAMtP,KAAKR,KACjB/B,KAAM6R,EAAMtP,KAAKvC,KACjBwH,OAAQqK,EAAMtP,KAAKiF,OACnBhN,MAAOqX,EAAMtP,KAAK/H,MAClB8a,QAASzD,EAAMtP,KAAK+S,QACpBnZ,QAAS0V,EAAMtP,KAAKpG,WAIpC,QACI,OAAO,yBAAKV,IAAKiZ,QAI7B,OACI,oCACI,kBAAC,IAAD,KACI,2BAAOjZ,IAAI,SAASM,aAAE,qBAE1B,kBAACktB,GAAD,MACCQ,IC5FA7L,GAAU,SAACtb,GAAD,OAAWA,EAAMolB,SAAS9J,SCWlC0M,GADcC,aANL,SAACjoB,GAAD,MAAY,CAChCsb,QAASA,GAAQtb,OAGM,iBAAO,KAELioB,CAA6Cf,I,qFCJ7DgB,GAAY,SAAC,GAAD,IAAGxV,EAAH,EAAGA,MAAOyV,EAAV,EAAUA,SAAUC,EAApB,EAAoBA,SAAUC,EAA9B,EAA8BA,iBAA9B,OACrB,kBAAChU,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,2CACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,sBACX,kBAACgc,GAAA,EAAD,CAAKhc,UAAU,4BACX,wBAAIA,UAAU,UAAU+a,GACvByV,GAAY,uBAAGxwB,UAAU,OAAOwwB,IAEpCC,GAAYC,GACT,kBAAC1U,GAAA,EAAD,CAAKhc,UAAU,+CACX,kBAAC2wB,GAAA,EAAD,CAAaluB,KAAK,MACd,4BACIwC,KAAK,SACLjF,UAAS,cAAsB,SAAbywB,EAAsB,cAAgB,YAA/C,gBACT5Y,QAAS,kBAAM6Y,EAAiB,UAEhC,kBAAChR,GAAA,EAAD,CAAM3S,KAAK,OAAO/M,UAAU,cALhC,SAOA,4BACIiF,KAAK,SACLjF,UAAS,cAAsB,SAAbywB,EAAsB,cAAgB,YAA/C,gBACT5Y,QAAS,kBAAM6Y,EAAiB,UAEhC,kBAAChR,GAAA,EAAD,CAAM3S,KAAK,OAAO/M,UAAU,cALhC,SAOA,4BACIiF,KAAK,SACLjF,UAAS,cAAsB,QAAbywB,EAAqB,cAAgB,YAA9C,gBACT5Y,QAAS,kBAAM6Y,EAAiB,SAEhC,kBAAChR,GAAA,EAAD,CAAM3S,KAAK,aAAa/M,UAAU,cALtC,cAsB5BuwB,GAAUhuB,aAAe,CACrBwY,MAAO,oCAGIwV,UC0TAK,OA1Wf,WACI,MAAkC1tB,oBAAS,GAA3C,oBAAO2tB,EAAP,KAAkBC,EAAlB,KACA,EAA8B5tB,oBAAS,GAAvC,oBAAO6tB,EAAP,KAAgBC,EAAhB,KACA,EAAgC9tB,oBAAS,GAAzC,oBAAO+tB,EAAP,KAAiBC,EAAjB,KAEA,EAAmChuB,mBAAS,IAA5C,oBAAOiuB,EAAP,KAAoBC,EAApB,KACA,EAA+CluB,mBAAS,IAAxD,oBAAOmuB,EAAP,KAA0BC,EAA1B,KACA,EAAwCpuB,mBAAS,IAAjD,oBAAOquB,EAAP,KAAqBC,EAArB,KACA,EAAgDtuB,mBAAS,IAAzD,oBAAOuuB,EAAP,KAAyBC,EAAzB,KACA,EAA0BxuB,mBAAS,IAAnC,oBAAOyuB,EAAP,KAAcC,EAAd,KACA,EAA8B1uB,mBAAS,IAAvC,oBAAO2uB,EAAP,KAAgBC,EAAhB,KACA,EAA0B5uB,mBAAS,IAAnC,oBAAO6X,EAAP,KAAcgX,EAAd,KACA,EAAiC7uB,mBAAS,IAA1C,oBAAO8uB,EAAP,KAAiBC,EAAjB,KACA,EAA+B/uB,mBAAS,IAAxC,oBAAOgvB,EAAP,KAAiBC,EAAjB,KACA,GAA8BjvB,mBAAS,IAAvC,sBAAOkvB,GAAP,MAAgBC,GAAhB,MACA,GAAgCnvB,mBAAS,IAAzC,sBAAOovB,GAAP,MAAiBC,GAAjB,MACA,GAA8BrvB,mBAAS,IAAvC,sBAAOsvB,GAAP,MAAgBC,GAAhB,MACA,GAAgCvvB,oBAAS,GAAzC,sBAAOwvB,GAAP,MAAiBC,GAAjB,MAGMC,GAAcC,iBAAO,MAErBC,GAAa,WACftB,EAAgB,IAChBE,EAAoB,IACpBE,EAAS,IACTE,EAAW,IACXC,EAAS,IACTE,EAAa,IACbE,EAAW,IACXE,GAAW,IACXE,GAAY,IACZE,GAAW,IACXE,IAAY,GACZ7B,GAAa,GACbI,GAAY,IAmEhB,OAdAztB,qBA9CqB,WACjB,GAAIotB,EAAW,CACX,IAAIhgB,EAAMjJ,IAAKua,QAEftR,GAAO,YAAckH,mBAAmBwZ,GACxC1gB,GAAO,YAAckH,mBAAmB0Z,GACxC5gB,GAAO,UAAYkH,mBAAmB4Z,GACtC9gB,GAAO,cAAgBkH,mBAAmB8Z,GAC1ChhB,GAAO,UAAYkH,mBAAmBgD,GACtClK,GAAO,aAAekH,mBAAmBia,GACzCnhB,GAAO,aAAekH,mBAAmBma,GACzCrhB,GAAO,YAAckH,mBAAmBqa,IACxCvhB,GAAO,aAAekH,mBAAmBua,IACzCzhB,GAAO,aAAekH,mBAAmBya,IAEzCvoB,MAAM4G,GACD1G,MAAK,SAAC4oB,GAAD,OAAUA,EAAK1oB,UACpBF,MAAK,SAAC7B,GACkB,IAAjBA,EAAK4J,SACL5J,EAAKkK,OAAOhO,KAAI,SAACiT,GAAD,OAAO2Z,EAAY,GAAD,mBAAKD,GAAL,CAAkB1Z,EAAE0P,cACtDmK,EAAkB,WAEdhpB,EAAKA,KAAK0qB,SACV5B,EAAY,CACR,mFAEJE,EAAkB,aAClBsB,GAAYK,QAAQC,QACpBJ,OAEAxB,EAAkB,WAClBF,EAAY,CAAC,wDACbwB,GAAYK,QAAQC,QACpBJ,SAIX7f,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,sBAAuB1b,MAG5CoZ,GACDK,GAAY,KAII,CAACH,IAerB,oCACI,kBAAC,IAAD,KACI,6CACA,0BAAMqC,IAAI,YAAYh0B,KAAI,UAAKU,IAAO,kBAAZ,kBAE9B,kBAACkvB,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAM,eAEjB,kBAAC2B,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,6DAKZ,kBAACU,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KAEI,kBAACT,GAAA,EAAD,CAAK7E,GAAI,GACL,kBAACkc,GAAA,EAAD,CACIC,YAAU,EACVzC,UAAWA,EACX7wB,UAAU,wBACVuzB,SArCH,SAACjc,GAClBA,EAAMkc,iBACNlc,EAAMmc,kBACNrC,EAAY,IACZN,GAAa,GACbE,EAAW1Z,EAAMoc,cAAcC,kBAiCXC,IAAKhB,IAEL,wDACA,uBAAG5yB,UAAU,OAAb,wEACA,uBAAGA,UAAU,QAAb,yDAEA,kBAACqzB,GAAA,EAAK5W,IAAN,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,GACb,kBAACgc,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,cAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,iCACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,SACLV,SAAU,SAACkT,GAAD,OAAO+Z,EAAgB/Z,EAAED,OAAO/S,QAC1CA,MAAO8sB,MAInB,kBAACvV,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,GACb,kBAACgc,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,kBAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,0BACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,OACLV,SAAU,SAACkT,GAAD,OAAOia,EAAoBja,EAAED,OAAO/S,QAC9CA,MAAOgtB,OAMvB,kBAAC4B,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,aAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,sBACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,QACLV,SAAU,SAACkT,GAAD,OAAOma,EAASna,EAAED,OAAO/S,QACnCA,MAAOktB,EACPkC,UAAQ,IAEZ,kBAACR,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,qBAEJ,kBAACouB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,eAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,wBACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIC,GAAG,SACH0vB,aAAclC,EACdttB,SAAyB,SAACkT,GAAD,OAAOqa,EAAWra,EAAED,OAAO/S,QACpDovB,UAAQ,GAER,4BAAQpvB,MAAM,GAAGC,UAAQ,GAAzB,qBAGA,4BAAQD,MAAM,QAAd,mBACA,4BAAQA,MAAM,WAAd,0BACA,4BAAQA,MAAM,WAAd,0BACA,4BAAQA,MAAM,WAAd,wBACA,4BAAQA,MAAM,UAAd,oBACA,4BAAQA,MAAM,SAAd,UAEJ,kBAAC4uB,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,oCAGEgsB,GACE,kBAACoC,GAAA,EAAKW,KAAN,oHAMR,kBAACX,GAAA,EAAK5W,IAAN,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAI,GACL,kBAAC0mB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,aAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIC,GAAG,SACH4vB,YAAY,QACZJ,UAAQ,EACRE,aAAchZ,EACdxW,SAAU,SAACkT,GAAD,OAAOsa,EAASta,EAAED,OAAO/S,SAEnC,4BAAQA,MAAM,GAAGC,UAAQ,GAAzB,SAGA,4BAAQD,MAAM,MAAd,MACA,4BAAQA,MAAM,QAAd,QACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,OAAd,OACA,4BAAQA,MAAM,MAAd,OAEJ,kBAAC4uB,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,qBAGR,kBAAC+W,GAAA,EAAD,CAAKrP,GAAI,GACL,kBAAC0mB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,iBAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,OACLgvB,YAAY,aACZxvB,MAAOutB,EACPztB,SAAU,SAACkT,GAAD,OAAOwa,EAAaxa,EAAED,OAAO/S,aAKvD,kBAAC4uB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,eAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,OACLgvB,YAAY,UACZxvB,MAAOytB,EACP3tB,SAAU,SAACkT,GAAD,OAAO0a,EAAW1a,EAAED,OAAO/S,QACrCovB,UAAQ,IAEZ,kBAACR,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,uBAEJ,kBAACouB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,eAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,OACLgvB,YAAY,UACZxvB,MAAO2tB,GACP7tB,SAAU,SAACkT,GAAD,OAAO4a,GAAW5a,EAAED,OAAO/S,WAG7C,kBAAC4uB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,gBAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,OACLgvB,YAAY,WACZxvB,MAAO6tB,GACP/tB,SAAU,SAACkT,GAAD,OAAO8a,GAAY9a,EAAED,OAAO/S,WAG9C,kBAAC4uB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,eAClB,kBAACsvB,GAAA,EAAKjvB,QAAN,CACIC,GAAG,WACH6vB,KAAM,EACND,YAAY,gCACZE,UAAU,MACVC,OAAO,OACP3vB,MAAO+tB,GACPjuB,SAAU,SAACkT,GAAD,OAAOgb,GAAWhb,EAAED,OAAO/S,WAG7C,kBAAC4uB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,qBAClB,kBAACsvB,GAAA,EAAKhuB,MAAN,CACIJ,KAAK,WACLV,SAAU,kBAAMouB,IAAaD,KAC7BvuB,MAAM,+CAGd,kBAACkwB,GAAA,EAAD,CAAQnyB,QAAQ,UAAUlC,UAAU,OAAO4X,OAAK,EAAC3S,KAAK,UAAtD,UAGCksB,GAAeE,GACZ,kBAACiD,GAAA,EAAD,CACIt0B,UAAS,cAA+B,cAAtBqxB,GAAqC,eACvDnvB,QAASmvB,EACTvsB,KAAMqsB,EAAYvsB,OAAS,EAC3B2vB,QAlPZ,WAChBnD,EAAY,KAkPgBoD,aAAW,GAEY,YAAtBnD,GAAmC,uBAAGrxB,UAAU,oBAChDmxB,KAQjB,kBAACnV,GAAA,EAAD,CAAK7E,GAAI,EAAGnX,UAAU,gBAClB,wDACA,sSAMA,wBAAIA,UAAU,QAAd,QACA,sKAIA,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK7E,GAAI,GACL,kBAAC,IAAD,CAAM7X,GAAG,OAAOU,UAAU,6BAA1B,cAKR,wBAAIA,UAAU,QAAd,SACA,sKAIA,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK7E,GAAI,GACL,uBAAGnX,UAAU,4BAA4BZ,KAAI,iBAAYU,IAAO,kBAAhE,cAKR,wBAAIE,UAAU,QAAd,kBACA,4HAEO,uBAAGZ,KAAMU,IAAO,0BAA2BgC,aAAE,mBAEpD,wBAAI9B,UAAU,QAAd,eACA,8MAKA,iCACI,kDACwB,6BADxB,qBAEsB,6BAFtB,iBAGkB,6BAHlB,eAIgB,6BAJhB,YASJ,wBAAIA,UAAU,QAAd,aACA,uEACA,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK7E,GAAI,GACL,kBAAC,IAAD,CAAM7X,GAAG,cAAcU,UAAU,6BAAjC,8BChUjBy0B,OA/Bf,WACI,OACI,oCACI,kBAAC,IAAD,KACI,kDAEJ,kBAACzF,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAM,iCACjB,kBAAC2B,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,4BACI,0BAAM9W,KAAK,MAAMwvB,aAAW,UAA5B,gBAEQ,IAHZ,SAMA,qHAGA,oGACA,kBAAC,IAAD,CAAMp1B,GAAG,IAAIU,UAAU,mBAAvB,2B,oBCxBX20B,GAAY,SAAC3yB,GAAD,OACrB,oCACKA,EAAM4yB,UACH,kBAACC,GAAA,EAAD,CAAWC,iBAAkB9yB,EAAM+yB,OAAS/yB,EAAMgzB,YAAc,MAC5D,kBAACra,GAAA,EAAD,CAAM3a,UAAS,oBAAegC,EAAMhC,YAChC,kBAAC60B,GAAA,EAAU7vB,OAAX,CAAkBX,GAAIsW,KAAKsa,OAAQj1B,UAAU,OAAOk1B,SAAUlzB,EAAMgzB,aAChE,wBAAIh1B,UAAU,wBAAwBgC,EAAMmzB,SAAWnzB,EAAM+Y,QAEjE,kBAAC8Z,GAAA,EAAUO,SAAX,CAAoBF,SAAUlzB,EAAMgzB,aAChC,kBAACra,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OAAOgC,EAAMoK,aAK9C,kBAACuO,GAAA,EAAD,CAAM3a,UAAS,oBAAegC,EAAMhC,aAC9BgC,EAAMmzB,SAAW,kBAACxa,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,WAAWgC,EAAM+Y,OAE3D,kBAACJ,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OAAOgC,EAAMoK,aAMlDuoB,GAAUpyB,aAAe,CACrBvC,UAAW,GACX+a,MAAO,GACPoa,SAAS,GASER,UCnCFU,GAAY,SAACrzB,GAAD,OACrB,kBAACqxB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAWgC,EAAMszB,eAAgBvxB,UAAW/B,EAAM+B,WAAa/B,EAAMvB,MAC5EuB,EAAMmC,OACH,kBAACkvB,GAAA,EAAKpvB,MAAN,CAAYjE,UAAS,UAAKgC,EAAMuzB,eAAX,YAA6BvzB,EAAMwzB,UAAY,YAAc,KAC7ExzB,EAAMmC,OAIf,kBAACkvB,GAAA,EAAKjvB,QAAN,eACIpE,UAAS,UAAKgC,EAAMhC,UAAX,YAAwBgC,EAAMyzB,QAAU,aAAe,IAChExwB,KAAMjD,EAAMiD,KACZxE,KAAMuB,EAAMvB,KACZgE,MAAOzC,EAAMyC,MACbwvB,YAAajyB,EAAMiyB,YACnB1vB,SAAUvC,EAAMuC,SAChBG,SAAU1C,EAAM0C,UACZ1C,EAAM0zB,QAGb1zB,EAAMyzB,SAAW,kBAACpC,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAAWjD,EAAM2zB,qBAIvEN,GAAU9yB,aAAe,CACrB+yB,eAAgB,GAChBC,eAAgB,GAChBv1B,UAAW,MACXiF,KAAM,OACNywB,MAAO,GACPjxB,MAAO,IAmBI4wB,UCpDTO,GAAc,uJACdC,GAAiB,uHACjBC,GAAiB,8CACjBC,GAAa,8DAENpE,GAAQ,SAAC5wB,GAAD,OAAUA,GAAO60B,GAAYvmB,KAAKtO,IAE1Ci1B,GAAW,SAACj1B,GAAD,OAAUA,GAAO80B,GAAexmB,KAAKtO,IAChDuxB,GAAW,SAACvxB,GAAD,OAAUA,GAAO+0B,GAAezmB,KAAKtO,IAChD8yB,GAAW,SAAC9yB,GAAD,QAAWA,GACtBk1B,GAAY,SAACl1B,GAAD,OAAUA,GAAO,YAAYsO,KAAKtO,IAC9Cm1B,GAAgB,SAACn1B,GAAD,OAAUA,GAAOg1B,GAAW1mB,KAAKtO,ICPjDo1B,GAAgB,SAACn0B,GAAD,OACzB,kBAACya,GAAA,EAAD,CAAK2Z,WAAS,GACV,kBAACpa,GAAA,EAAD,KACKha,EAAMq0B,eAAiBr0B,EAAMq0B,aAAa7jB,QACvC,uBAAGxS,UAAWgC,EAAMs0B,SAApB,uEAEHt0B,EAAMq0B,cAAgB5Y,MAAM8Y,QAAQv0B,EAAMq0B,aAAa7jB,SACpD,wBAAIxS,UAAWgC,EAAMs0B,SAChBt0B,EAAMq0B,aAAa7jB,OAAOhO,KAAI,SAAC2uB,GAAD,OAC3B,wBAAI3xB,IAAK2xB,EAAMvvB,MACVuvB,EAAMhM,QACNnlB,EAAMw0B,WAAN,iBAA6BrD,EAAMvvB,KAAnC,aAgB7BuyB,GAAc5zB,aAAe,CACzB+zB,QAAS,sCACTG,SAAS,GAGEN,UC1BFO,GAAiB,SAACjO,GAC3B,IFLoB1nB,EEKdyR,EAAS,GAyBf,OAxBKqhB,GAASpL,EAAOkJ,QAAWA,GAAMlJ,EAAOkJ,SACzCnf,EAAOmf,MAAQ7vB,aAAE,4BAEhB+xB,GAASpL,EAAOkJ,SACjBnf,EAAOmf,MAAQ7vB,aAAE,0BAEhB+xB,GAASpL,EAAOzE,SAAYgS,GAASvN,EAAOzE,UAC7CxR,EAAOwR,OAASliB,aAAE,+BAEjB+xB,GAASpL,EAAOzE,UACjBxR,EAAOwR,OAASliB,aAAE,6BAEjB+xB,GAASpL,EAAOkO,UAAYlO,EAAOzE,SAAWyE,EAAOkO,UACtDnkB,EAAOmkB,QAAU70B,aAAE,0CAElB+xB,GAASpL,EAAOkO,WACjBnkB,EAAOmkB,QAAU70B,aAAE,yCAElB+xB,GAASpL,EAAOmO,eFxBD71B,EEwBwB0nB,EAAOmO,YFxBf,WAAWvnB,KAAKtO,MEyBhDyR,EAAOokB,UAAY90B,aAAE,0CAEpB+xB,GAASpL,EAAOmO,aACjBpkB,EAAOokB,UAAY90B,aAAE,wCAElB0Q,GAGEqkB,GAAqB,SAAC70B,GAAD,OAC9B,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,qBAAqB6yB,YAAU,GACtC,kBAAC,GAAD,CACI7yB,KAAK,QACLwE,KAAK,QACLgvB,YAAanyB,aAAE,2BACf2C,MAAOzC,EAAMymB,OAAOkJ,MACpBptB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOmf,MACxBgE,kBAAmB3zB,EAAMwQ,OAAOmf,MAChC+D,MAAO,CAAE,aAAc5zB,aAAE,2BAA4B4C,SAAU1C,EAAM80B,KAAMC,aAAc,cAE7F,kBAAC,GAAD,CACIt2B,KAAK,SACLwE,KAAK,WACLgvB,YAAanyB,aAAE,oCACf2C,MAAOzC,EAAMymB,OAAOzE,OACpBzf,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOwR,OACxB2R,kBAAmB3zB,EAAMwQ,OAAOwR,OAChC0R,MAAO,CACH,aAAc5zB,aAAE,oCAChB4C,SAAU1C,EAAM80B,KAChBC,aAAc,kBAGtB,kBAAC,GAAD,CACIt2B,KAAK,UACLwE,KAAK,WACLgvB,YAAanyB,aAAE,2CACf2C,MAAOzC,EAAMymB,OAAOkO,QACpBpyB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOmkB,QACxBhB,kBAAmB3zB,EAAMwQ,OAAOmkB,QAChCjB,MAAO,CACH,aAAc5zB,aAAE,2CAChB4C,SAAU1C,EAAM80B,KAChBC,aAAc,kBAGtB,kBAAC,GAAD,CACIt2B,KAAK,YACLwE,KAAK,OACLgvB,YAAanyB,aAAE,kCACf2C,MAAOzC,EAAMymB,OAAOmO,UACpBryB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOokB,UACxBjB,kBAAmB3zB,EAAMwQ,OAAOokB,UAChClB,MAAO,CACH,aAAc5zB,aAAE,kCAChBqyB,UAAW,EACXzvB,SAAU1C,EAAM80B,QAIxB,kBAACra,GAAA,EAAD,CAAK2Z,WAAS,EAACp2B,UAAU,6BACrB,kBAACgc,GAAA,EAAD,KACI,kBAACqY,GAAA,EAAD,CAAQpvB,KAAK,SAAS2S,OAAK,EAACC,QAAS7V,EAAMuxB,SAAU7uB,SAAU1C,EAAM80B,MAChE90B,EAAM80B,KAAOh1B,aAAE,qBAAuBA,aAAE,qBAKpDE,EAAMg1B,SAAW,kBAAC,GAAD,CAAeX,aAAcr0B,EAAMg1B,YAI7DH,GAAmBt0B,aAAe,CAC9Bu0B,MAAM,EACNtkB,OAAQ,GACRiW,OAAQ,IAcGoO,U,SChHF5K,GAAW,SAAC5jB,GAAD,OAAWA,EAAMse,KAAKsF,UACjCE,GAAsC,SAAC9jB,GAAD,OAAWA,EAAMse,KAAKwF,qCAK5DwF,GAAQ,SAACtpB,GAAD,OAAWA,EAAMse,KAAKqB,QAAQ2J,OAkBtCzF,GAAW,SAAC7jB,GAAD,OAAWA,EAAMse,KAAKuF,UACjClE,GAAU,SAAC3f,GAAD,OAAWA,EAAMse,KAAKqB,SAEtC,GAA2EjU,azCpCnDwF,wByCoCxB,sBAAO0d,GAAP,MAA8BC,GAA9B,MAAoDC,GAApD,MAEA,GAA+DpjB,aAAiBwR,IAAhF,sBAAO6R,GAAP,MAA0BC,GAA1B,MAA4CC,GAA5C,MAEMC,GAAoB,SAAClvB,GAAD,MAAsC,qBAApB6jB,GAAS7jB,IACrD,GAAkE0L,aAAiByR,IAAnF,sBAAOgS,GAAP,MAA2BC,GAA3B,MAEA,IAFA,MAE6C1jB,aAAiB0R,KAA9D,sBAAOiS,GAAP,MAAkBC,GAAlB,MAA+BC,GAA/B,MAEA,GAAgD7jB,aAAiB2R,IAAjE,sBAEA,IAFA,kBAE6F3R,azC1C9DwF,gCyC0C/B,sBAAOse,GAAP,MAAoCC,GAApC,MAAgEC,GAAhE,MAIA,GAA+DhkB,aAAiB4R,IAAhF,sBAAOqS,GAAP,MAA0BC,GAA1B,MAA4CC,GAA5C,M,kBCvCA,GAA+C5wB,cAAqB,SAAC9B,EAAUmsB,EAAO3N,EAAQ4S,GACjG,OAAOzjB,aACH3N,E1CduB+T,uB0CgBvB3R,IAAKma,cACL,CAAE5P,OAAQ,QAASwf,QAAO3N,SAAQ4S,kBAClC3rB,EACA,WAPD,sBAAOktB,GAAP,MAWA,IAXA,MAWuC7wB,cAAqB,SAAC9B,EAAU8C,GAC1E,OAAO6K,aACH3N,EACA+f,GACA3d,IAAKka,eAHgB,YAAC,eAIjBxZ,GAJgB,IAIVgJ,OAAQ,gBACnBrG,EACA,YAPD,sBAAOmtB,GAAP,MAWA,IAXA,MAWyC9wB,cAAqB,SAAC9B,EAAUiO,GAC5EjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR9kB,EAAYikB,GAAkBpvB,GAC9BkL,EAAWgkB,GAAkBlvB,GAC7BiL,EAAYkkB,GAAmBnvB,GAEhCkL,GAAaD,GAAeE,IAAaC,GAC1C9L,aAAW0wB,EAAG7S,GAAc5d,IAAKqa,wBARtC,sBAAOsW,GAAP,MAaA,IAbA,MAa6BjxB,cAAqB,SAAC9B,EAAUmsB,EAAOqE,GACvE,OAAOruB,aAAWnC,EAAUigB,GAAO7d,IAAKsZ,MAAO,CAAEyQ,QAAO3N,OAAQgS,QAAY/qB,EAAW,YADpF,sBAAOiW,GAAP,MAIA,IAJA,MAI+B5Z,cAAqB,SAAC9B,GACxD,OAAOmC,aAAWnC,EAAUkgB,GAAQ9d,IAAKuZ,YADtC,sBAAOA,GAAP,MAIA,IAJA,MAI2D7Z,cAAqB,SAAC9B,EAAUmsB,GAC9F,OAAOxe,aACH3N,E1CpD8B+T,8B0CsD9B3R,IAAKma,cACL,CAAE5P,OAAQ,UAAWwf,cACrB1mB,EACA,YAPD,sBAAOutB,GAAP,MAWA,IAXA,MAWuClxB,cAAqB,SAAC9B,EAAU8C,GAC1E,OAAO6K,aACH3N,EACAmgB,GACA/d,IAAKka,eAHgB,YAAC,eAIjBxZ,GAJgB,IAIVgJ,OAAQ,gBACnBrG,EACA,YAPD,sBAAOwtB,GAAP,MCjCQC,IDiCR,MClE0B,SAACC,GAAuD,IAA5CC,EAA2C,uDAA3B,GAAIC,EAAuB,uDAAP,GAC7E,EAA4B31B,mBAAS,eAAK21B,IAA1C,oBAAOrmB,EAAP,KAAesmB,EAAf,KACA,EAA4B51B,mBAAS,eAAK01B,IAA1C,oBAAOnQ,EAAP,KAAesQ,EAAf,KAEA,SAAShI,IACL,IAAMiI,EAA+B,oBAAdL,EAA2BA,EAAUlQ,GAAU,GACtE,OAAuC,IAAhC7d,OAAO8G,KAAKsnB,GAASp0B,OAIhC,SAASL,EAAS/C,EAAKiD,GAEfs0B,EADe,kBAARv3B,EACG,2BAAKinB,GAAWjnB,GAEhB,2BAAKinB,GAAN,kBAAejnB,EAAMiD,KAItC,SAASw0B,IACL,IAAMD,EAA+B,oBAAdL,EAA2BA,EAAUlQ,GAAU,GAEtE,OADAqQ,EAAUE,GACHA,EAGX,MAAO,CACHvQ,SACAlkB,WACA00B,WACAlI,UACAve,YChBK0mB,GAA6B,8BAAC,eACpCR,GAAkBhC,KADiB,IAEtCS,oBAAqB/uB,YAAY+uB,IACjCD,qBAAsB9uB,YAAY8uB,IAClCD,sBAAuB7uB,YAAY6uB,OCsExBkC,GA9EmB,WAC9B,MAAgCj2B,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACA,EAA8BlG,oBAAS,GAAvC,oBAAOgP,EAAP,KAAgBknB,EAAhB,KAEQjB,EDTgC,WACxC,IAAM3yB,EAAWsD,cACjB,MAAO,CACHqvB,eAAgB,SAACxG,EAAO3N,EAAQ4S,GAC5B,OAAOuB,GAAe3yB,EAAUmsB,EAAO3N,EAAQ4S,KCK5ByC,GAAnBlB,eACR,EAQIe,KAPAzQ,EADJ,EACIA,OACAlkB,EAFJ,EAEIA,SACA00B,EAHJ,EAGIA,SACAlI,EAJJ,EAIIA,QACAve,EALJ,EAKIA,OACA2kB,EANJ,EAMIA,oBACAF,EAPJ,EAOIA,sBA4BJ,OAFAxzB,qBANmB,WACf2F,GAAY,GACZgwB,GAAW,KAIO,IAGlB,kBAAC1c,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKG,GAAI,CAAEmd,KAAM,GAAIC,OAAQ,GAAKliB,GAAI,CAAEiiB,KAAM,EAAGC,OAAQ,GAAKC,GAAI,CAAEF,KAAM,EAAGC,OAAQ,IACjF,kBAAC,GAAD,CAAWxe,MAAM,mBACZ7I,EACG,oCACI,yBAAKlS,UAAU,oBACX,uBAAGA,UAAU,+BACb,uBAAGA,UAAU,QAAb,0CAC2C,kBAAC,IAAD,CAAMV,GAAG,UAAT,cAD3C,iBAOR,oCACI,+HAIA,kBAAC,GAAD,CACIw3B,KAAMG,EACNzkB,OAAQrJ,OAAW8B,EAAYuH,EAC/BwkB,QAAS7tB,OAAW8B,EAAYksB,EAChC5yB,SAAUA,EACVgvB,SAnDX,SAACjc,GAClBA,EAAMkc,iBACN4F,GAAW,GACXhwB,GAAY,GACZ6vB,IAEIlI,KACAoH,EAAe1P,EAAOkJ,MAAOlJ,EAAOzE,OAAQyE,EAAOmO,WAC9C5jB,QAAQ7I,MAAK,WACVivB,GAAW,MAEdnmB,OAAM,gBAyCawV,OAAQA,U,UC1E/BgR,GAAmB,SAACz3B,GAO7B,OACI,kBAAC03B,GAAA,EAAD,CAAY15B,UAAWgC,EAAMhC,WACzB,kBAAC05B,GAAA,EAAWC,QAAZ,CAAoB35B,UAAU,iBAAiB6X,QARlC,WACb7V,EAAMuC,WAAavC,EAAMsD,SACzBtD,EAAMuC,SAASvC,EAAMvB,KAAMuB,EAAMyC,SAO7B,kBAACi1B,GAAA,EAAWE,MAAZ,CACI51B,GAAIhC,EAAMvB,KAAO,IAAMuB,EAAMyC,MAC7BhE,KAAMuB,EAAMvB,KACZgE,MAAOzC,EAAMyC,MACbF,SAAU,aACVvE,UAAU,iBACVsF,QAAStD,EAAMsD,QACfovB,aAAY1yB,EAAM63B,WAAa73B,EAAMmC,SAG7C,2BACIwT,QAAS3V,EAAMvB,KAAO,IAAMuB,EAAMyC,MAClCzE,UAAU,sBACV4c,wBAAyB,CAAEC,OAAQ7a,EAAMmC,WAMzDs1B,GAAiBl3B,aAAe,GAajBk3B,UCxCFK,GAAkB,SAAC93B,GAAD,OAC3B,kBAACqxB,GAAA,EAAK5W,IAAN,CAAUzc,UAAS,0BAAqBgC,EAAMyzB,QAAU,UAAY,GAAjD,YAAuDzzB,EAAMhC,YAC5E,kBAACqzB,GAAA,EAAKvvB,MAAN,CAAYO,GAAI2X,KAAKhc,UAAWgC,EAAMszB,gBACjCtzB,EAAMjD,MAAQ,uBAAGiB,UAAU,QAAQgC,EAAMjD,MAEzCiD,EAAM+3B,QAAQv1B,KAAI,SAACw1B,EAAQrc,GACxB,IAAMrY,EAAUtD,EAAMymB,OAAOzmB,EAAMvB,QAAUu5B,EAAOv1B,MAC9Cw1B,EAAStc,IAAM3b,EAAM+3B,QAAQn1B,OAAS,EAE5C,OACI,yBACI5E,UAAS,0BAAqBi6B,GAAUj4B,EAAMk4B,UAAY,GAAK,kBAC/D14B,IAAG,UAAKQ,EAAMvB,KAAX,YAAmBu5B,EAAOv1B,QAE7B,kBAAC,GAAD,CACIhE,KAAMuB,EAAMvB,KACZgE,MAAOu1B,EAAOv1B,MACdN,MAAO61B,EAAO71B,MACdmB,QAASA,EACTf,SAAUvC,EAAMuC,eAM/BvC,EAAM2zB,mBAAqB,yBAAK31B,UAAU,4BAA4BgC,EAAM2zB,sBAiBzFmE,GAAgBv3B,aAAe,CAC3BvC,UAAW,GACXs1B,eAAgB,GAChByE,QAAS,GACTtR,OAAQ,IAGGqR,UCnDFK,GAAgB,SAACn4B,GAC1B,IAAMo4B,EAAep4B,EAAMuC,SAAW,kBAAMvC,EAAMuC,UAAUvC,EAAMsD,eAAW2F,EAE7E,OACI,kBAACyuB,GAAA,EAAD,CAAY15B,UAAWgC,EAAMhC,WACzB,kBAAC05B,GAAA,EAAWC,QAAZ,CAAoB35B,UAAU,iBAAiB6X,QAASuiB,GACpD,kBAACV,GAAA,EAAWW,SAAZ,CACIr2B,GAAIhC,EAAMgC,GACVhE,UAAU,iBACVsF,QAAStD,EAAMsD,QACff,SAAU61B,EACV1F,aAAY1yB,EAAM63B,WAAa73B,EAAMmC,SAG7C,2BACIwT,QAAS3V,EAAMgC,GACfhE,UAAU,sBACV4c,wBAAyB,CAAEC,OAAQ7a,EAAMmC,WAMzDg2B,GAAc53B,aAAe,CACzByB,GAAI,WAYOm2B,UCgEAG,GA/FyB,SAACt4B,GAAD,2BACpC,yBAAKhC,UAAU,uBACX,6BAAMgC,EAAMu4B,WAAaz4B,aAAE,6BAC3B,2BAAIA,aAAE,8BACLhC,IAAO,wBACJ,kBAACuzB,GAAA,EAAKvvB,MAAN,CAAYuT,GAAI,IAAKrX,UAAU,OAC3B,2BAAOA,UAAU,eAAe8B,aAAE,gCAClC,yBAAK9B,UAAU,kBACX,kBAAC,GAAD,CACIgE,GAAG,aACHvD,KAAK,WACL0D,MAAOrC,aAAE,mBACT+3B,UAAW/3B,aAAE,mBACbwD,QAAmC,MAA1BtD,EAAMymB,OAAON,SACtB5jB,SAAU,kBAAMvC,EAAMuC,SAAS,WAAY,SAGnD,yBAAKvE,UAAU,kBACX,kBAAC,GAAD,CACIgE,GAAG,aACHvD,KAAK,WACL0D,MAAOrC,aAAE,kBACT+3B,UAAW/3B,aAAE,kBACbwD,QAAmC,MAA1BtD,EAAMymB,OAAON,SACtB5jB,SAAU,kBAAMvC,EAAMuC,SAAS,WAAY,UAGlD,UAAAvC,EAAMwQ,cAAN,eAAc2V,WAAY,yBAAKnoB,UAAU,4BAAf,UAA2CgC,EAAMwQ,cAAjD,aAA2C,EAAc2V,WAG3FroB,IAAO,wBACJ,kBAAC,GAAD,CACIw1B,eAAe,OACfG,WAAU,UAACzzB,EAAMwQ,cAAP,aAAC,EAAc2V,UACzB1nB,KAAK,WACL8D,SAAUvC,EAAMuC,SAChBw1B,QAAS,CACL,CAAE51B,MAAOrC,aAAE,mBAAoB2C,MAAO,KACtC,CAAEN,MAAOrC,aAAE,kBAAmB2C,MAAO,MAEzC1F,KAAK,GACL42B,kBAAiB,UAAE3zB,EAAMwQ,cAAR,aAAE,EAAc2V,SACjCM,OAAQzmB,EAAMymB,SAGrB3oB,IAAO,sBACJ,kBAACuzB,GAAA,EAAKvvB,MAAN,CAAYuT,GAAI,IAAKrX,UAAU,OAC3B,2BAAOA,UAAU,eAAe8B,aAAE,8BAClC,yBAAK9B,UAAU,kBACX,kBAAC,GAAD,CACIgE,GAAG,WACHvD,KAAK,SACL0D,MAAOrC,aAAE,mBACT+3B,UAAW/3B,aAAE,mBACbwD,QAAiC,MAAxBtD,EAAMymB,OAAOL,OACtB7jB,SAAU,kBAAMvC,EAAMuC,SAAS,SAAU,SAGjD,yBAAKvE,UAAU,kBACX,kBAAC,GAAD,CACIgE,GAAG,WACHvD,KAAK,SACL0D,MAAOrC,aAAE,kBACT+3B,UAAW/3B,aAAE,kBACbwD,QAAiC,MAAxBtD,EAAMymB,OAAOL,OACtB7jB,SAAU,kBAAMvC,EAAMuC,SAAS,SAAU,UAGhD,UAAAvC,EAAMwQ,cAAN,eAAc4V,SAAU,yBAAKpoB,UAAU,4BAAf,UAA2CgC,EAAMwQ,cAAjD,aAA2C,EAAc4V,SAGzFtoB,IAAO,wBACJ,kBAAC,GAAD,CACIw1B,eAAe,OACfG,WAAU,UAACzzB,EAAMwQ,cAAP,aAAC,EAAc8V,UACzB7nB,KAAK,WACL8D,SAAUvC,EAAMuC,SAChBw1B,QAAS,CACL,CAAE51B,MAAOrC,aAAE,mBAAoB2C,MAAO,KACtC,CAAEN,MAAOrC,aAAE,kBAAmB2C,MAAO,MAEzC1F,KAAM+C,aAAE,2CACR6zB,kBAAiB,UAAE3zB,EAAMwQ,cAAR,aAAE,EAAc8V,SACjCG,OAAQzmB,EAAMymB,W,8BCtFxB+R,IAAc,IAAIxzB,MAAOyD,cACzBiB,GAAY,IAAI1E,KAAKwzB,GAAc,IAAK,GACxCC,GAAU,IAAIzzB,KAEP0zB,GAAgB,SAAC,GAA+C,IAA7C30B,EAA4C,EAA5CA,KAAM40B,EAAsC,EAAtCA,YAAap2B,EAAyB,EAAzBA,SAAUq2B,EAAe,EAAfA,SACnDC,EAASF,EAAYG,YAGvBC,EAAa,IACjB,OAAQH,GACJ,IAAK,UACDG,EAAa,EACb,MACJ,IAAK,WACDA,EAAa,GACb,MACJ,QACIA,EAAa,IAMrB,IAHA,IAEMC,EAAQ,GACLrd,EAHQ,IAAI3W,KAAKwzB,GAAcO,EAAY,GAG9BtwB,cAAekT,GAAK8c,GAAQhwB,cAAekT,GAAK,EAClEqd,EAAM/iB,KAAK0F,GAGf,IAAMyc,EAAe,SAAsB3iB,GACvC,MAAwBA,EAAED,OAAOrK,KAAzBkD,EAAR,EAAQA,KAAM4qB,EAAd,EAAcA,MACd12B,EAAS,IAAIyC,KAAKqJ,EAAK5L,MAAOw2B,EAAMx2B,SAGxC,OACI,0BAAMzE,UAAU,qBACZ,4BAAQS,KAAK,QAAQ8D,SAAU61B,EAAc31B,MAAOsB,EAAK2E,WAAY1K,UAAU,UAC1E66B,EAAOr2B,KAAI,SAACy2B,EAAOtd,GAAR,OACR,4BAAQnc,IAAKy5B,EAAOx2B,MAAOkZ,GACtBsd,OAIb,4BAAQx6B,KAAK,OAAO8D,SAAU61B,EAAc31B,MAAOsB,EAAK0E,cAAezK,UAAU,UAC5Eg7B,EAAMx2B,KAAI,SAAC6L,GAAD,OACP,4BAAQ7O,IAAK6O,EAAM5L,MAAO4L,GACrBA,SAQZ6qB,GAAY,SAACl5B,GACtB,MAA0BkB,mBAAS,IAAI8D,MAAvC,oBAAOi0B,EAAP,KAAcE,EAAd,KAEMC,EAAwB,SAACC,GAC3BF,EAASE,IAGb,OACI,kBAAChI,GAAA,EAAKvvB,MAAN,CAAY9D,UAAWgC,EAAMszB,eAAgBvxB,UAAW/B,EAAM+B,WAAa/B,EAAMvB,MAC5EuB,EAAMmC,OACH,kBAACkvB,GAAA,EAAKpvB,MAAN,CAAYjE,UAAS,UAAKgC,EAAMuzB,eAAX,YAA6BvzB,EAAMwzB,UAAY,YAAc,KAC7ExzB,EAAMmC,OAIf,yBAAKnE,UAAS,UAAKgC,EAAMyzB,QAAU,aAAe,KAC9C,kBAAC,KAAD,CACI6F,WAAU,aACNt7B,UAAU,GAAD,OAAKgC,EAAMhC,UAAX,YAAwBgC,EAAMyzB,QAAU,aAAe,IAChEh1B,KAAMuB,EAAMvB,KACZwzB,YAAajyB,EAAMiyB,aAChBjyB,EAAM0zB,OAEb6F,YAAa,SAACrrB,GAAD,OAASlO,EAAMuC,SAASvC,EAAMvB,KAAM4M,aAAe6C,KAChEsrB,UAAWrsB,KACXssB,WAAYpuB,KACZ5I,MAAOzC,EAAMyC,MACbiH,UAAWA,GACX+uB,QAASA,GACTiB,WAAW,EACXC,eACI35B,EAAMkM,IACA,CACI0tB,eAAgB,gBAAG71B,EAAH,EAAGA,KAAM40B,EAAT,EAASA,YAAT,OACZ,kBAAC,GAAD,CACI50B,KAAMA,EACN40B,YAAaA,EACbp2B,SAAU62B,EACVR,SAAU54B,EAAM44B,UAAY,MAGpC7uB,aAAc,CAAC,CAAE8vB,MAAO,IAAI70B,OAC5Bi0B,cAEJhwB,KAKjBjJ,EAAMyzB,SAAW,kBAACpC,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAAWjD,EAAM2zB,qBAK3EuF,GAAU34B,aAAe,CACrB+yB,eAAgB,GAChBC,eAAgB,GAChBv1B,UAAW,mBACXuE,SAAU,aACVmxB,MAAO,GACPxnB,KAAK,GAmBMgtB,UCrIFY,GAAc,SAAC95B,GAAD,OACvB,kBAACqxB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAWgC,EAAMszB,eAAgBvxB,UAAW/B,EAAM+B,WAAa/B,EAAMvB,MAC5EuB,EAAMmC,OACH,kBAACkvB,GAAA,EAAKpvB,MAAN,CAAYjE,UAAS,UAAKgC,EAAMuzB,eAAX,YAA6BvzB,EAAMwzB,UAAY,YAAc,GAA7D,MAChBxzB,EAAMmC,OAIf,kBAACkvB,GAAA,EAAKjvB,QAAN,eACIC,GAAG,SACHrE,UAAS,UAAKgC,EAAMhC,UAAX,YAAwBgC,EAAMyzB,QAAU,aAAe,IAChEh1B,KAAMuB,EAAMvB,KACZszB,aAAc/xB,EAAM+xB,aACpBtvB,MAAOzC,EAAMyC,OACTzC,EAAM0zB,MANd,CAOInxB,SAAUvC,EAAMuC,SAChBw3B,QAAM,IAEL/5B,EAAMoK,UAGVpK,EAAMyzB,SAAW,kBAACpC,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAAWjD,EAAM2zB,qBAIvEmG,GAAYv5B,aAAe,CACvB+yB,eAAgB,GAChBC,eAAgB,GAChBv1B,UAAW,MACXg8B,cAAc,EACdtG,MAAO,IAeIoG,U,kBCxCFpF,GAAiB,SAACjO,GAC3B,IAAMjW,EAAS,GAaf,OAZKqhB,GAASpL,EAAON,WAAaroB,IAAO,yBACrC0S,EAAO2V,SAAWrmB,aAAE,iCAEnB+xB,GAASpL,EAAOL,SAAWtoB,IAAO,uBACnC0S,EAAO4V,OAAStmB,aAAE,iCAEjB+xB,GAASpL,EAAOH,WAAaxoB,IAAO,yBACrC0S,EAAO8V,SAAWxmB,aAAE,iCAEnB+xB,GAASpL,EAAON,WAAaroB,IAAO,yBACrC0S,EAAO2V,SAAWrmB,aAAE,gCAEjB0Q,GAeIypB,GAZuB,SAACj6B,GAAD,OAClC,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,yBAAyB6yB,YAAU,GAC1C,uBAAGtzB,UAAU,oBAAoB8B,aAAE,mCACnC,kBAAC,GAA6BE,KCZzB00B,GAAiB,WAAkB,IAAjBjO,EAAgB,uDAAP,GAC9BjW,EAAS,GA+Cf,OA9CKqhB,GAASpL,EAAO1N,SACjBvI,EAAOuI,MAAQjZ,aAAE,gCAEhB+xB,GAASpL,EAAOyT,aACjB1pB,EAAO0pB,UAAYp6B,aAAE,8BAEpB+xB,GAASpL,EAAOyJ,YACjB1f,EAAO0f,SAAWpwB,aAAE,4BAEnB+xB,GAASpL,EAAOkJ,QAAWA,GAAMlJ,EAAOkJ,SACzCnf,EAAOmf,MAAQ7vB,aAAE,4BAEhB+xB,GAASpL,EAAOkJ,SACjBnf,EAAOmf,MAAQ7vB,aAAE,0BAEhB+xB,GAASpL,EAAOzE,SAAYgS,GAASvN,EAAOzE,UAC7CxR,EAAOwR,OAASliB,aAAE,+BAEjB+xB,GAASpL,EAAOzE,UACjBxR,EAAOwR,OAASliB,aAAE,6BAEjB+xB,GAASpL,EAAO0T,MAASlG,GAAUxN,EAAO0T,OAC3C3pB,EAAO2pB,IAAMr6B,aAAE,gCAEd+xB,GAASpL,EAAOva,MAASgoB,GAAczN,EAAOva,OAC/CsE,EAAOtE,IAAMpM,aAAE,wBAEd+xB,GAASpL,EAAO2T,WACjB5pB,EAAO4pB,QAAUt6B,aAAE,+BAElB+xB,GAASpL,EAAO4T,QACjB7pB,EAAO6pB,KAAOv6B,aAAE,4BAEf+xB,GAASpL,EAAO6T,WAAchK,GAAS7J,EAAO6T,YAC/C9pB,EAAO8pB,SAAWx6B,aAAE,kCAEnB+xB,GAASpL,EAAO8T,UACjB/pB,EAAO+pB,OAASz6B,aAAE,8BAEjB+xB,GAASpL,EAAO+T,WACjBhqB,EAAOgqB,QAAU16B,aAAE,gCAIvB8I,OAAO6xB,OAAOjqB,EAAQkqB,GAA2BjU,IAE1CjW,GAKEmqB,GAAiB,SAAC36B,GAW3B,OACI,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,cAAc6yB,YAAU,GAC/B,kBAACD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,2BACf70B,KAAK,QACLgE,MAAOzC,EAAMymB,OAAO1N,OAAS,GAC7BxW,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOuI,MACxB4a,kBAAmB3zB,EAAMwQ,OAAOuI,MAChC2a,MAAO,CAAEhxB,SAAU1C,EAAM80B,OAEzB,4BAAQryB,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,qBAEN8I,OAAO8G,KAAKkrB,IAAQp4B,KAAI,SAAChD,GAAD,OACrB,4BAAQA,IAAKA,EAAKiD,MAAOjD,GACpBo7B,GAAOp7B,QAKpB,kBAAC,GAAD,CACI8zB,eAAe,2BACfrB,YAAanyB,aAAE,wBACfrB,KAAK,YACLgE,MAAOzC,EAAMymB,OAAOyT,UACpB33B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO0pB,UACxBvG,kBAAmB3zB,EAAMwQ,OAAO0pB,UAChCxG,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAG7B,kBAAC,GAAD,CACIxB,eAAe,2BACfrB,YAAanyB,aAAE,sBACfrB,KAAK,WACLgE,MAAOzC,EAAMymB,OAAOyJ,SACpB3tB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO0f,SACxByD,kBAAmB3zB,EAAMwQ,OAAO0f,SAChCwD,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfrB,YAAanyB,aAAE,wBACfrB,KAAK,MACLwE,KAAK,MACLR,MAAOzC,EAAMymB,OAAO0T,IACpB53B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO2pB,IACxBxG,kBAAmB3zB,EAAMwQ,OAAO2pB,IAChCzG,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAG7B,kBAAC,GAAD,CACIxB,eAAe,kBACfrB,YAAanyB,aAAE,kBACfrB,KAAK,MACLgE,MAAOzC,EAAMymB,OAAOva,IACpB3J,SAzEQ,SAACs4B,GAAuB,IAAD,EAAfp4B,EAAe,uDAAP,GAC9Bq4B,EAAWr4B,EAAMsG,MAAM,KAC7B/I,EAAMuC,UAAN,mBACKs4B,EAAQp4B,GADb,uBAEYq4B,EAAS,IAFrB,wBAGaA,EAAS,IAHtB,sBAIWA,EAAS,IAJpB,KAwEYrH,UAAWzzB,EAAMwQ,OAAOtE,IACxBynB,kBAAmB3zB,EAAMwQ,OAAOtE,IAChCwnB,MAAO,CAAEhxB,SAAU1C,EAAM80B,KAAMC,aAAc,OAC7C7oB,KAAG,KAKX,kBAACmlB,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfrB,YAAanyB,aAAE,2BACfrB,KAAK,QACLwE,KAAK,QACLR,MAAOzC,EAAMymB,OAAOkJ,MACpBptB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOmf,MACxBgE,kBAAmB3zB,EAAMwQ,OAAOmf,MAChC+D,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAE7B,kBAAC,GAAD,CACIxB,eAAe,kBACfrB,YAAanyB,aAAE,uBACfrB,KAAK,SACLwE,KAAK,WACLR,MAAOzC,EAAMymB,OAAOzE,OACpBzf,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOwR,OACxB2R,kBAAmB3zB,EAAMwQ,OAAOwR,OAChC0R,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAKjC,4CACA,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfrB,YAAanyB,aAAE,yBACfrB,KAAK,UACLgE,MAAOzC,EAAMymB,OAAO2T,QACpB73B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO4pB,QACxBzG,kBAAmB3zB,EAAMwQ,OAAO4pB,QAChC1G,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAE7B,kBAAC,GAAD,CACIxB,eAAe,kBACfrB,YAAanyB,aAAE,sBACfrB,KAAK,OACLgE,MAAOzC,EAAMymB,OAAO4T,KACpB93B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO6pB,KACxB1G,kBAAmB3zB,EAAMwQ,OAAO6pB,KAChC3G,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfrB,YAAanyB,aAAE,wBACfrB,KAAK,SACLgE,MAAOzC,EAAMymB,OAAO8T,OACpBh4B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO+pB,OACxB5G,kBAAmB3zB,EAAMwQ,OAAO+pB,OAChC7G,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAE7B,kBAAC,GAAD,CACIxB,eAAe,kBACfrB,YAAanyB,aAAE,yBACfrB,KAAK,UACLgE,MAAOzC,EAAMymB,OAAO+T,SAAW,GAC/Bj4B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOgqB,QACxB7G,kBAAmB3zB,EAAMwQ,OAAOgqB,QAChC9G,MAAO,CAAEhxB,SAAU1C,EAAM80B,OAEzB,4BAAQryB,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,gCAEN8I,OAAO8G,KAAKqrB,IAAWv4B,KAAI,SAAChD,GAAD,OACxB,4BAAQA,IAAKA,EAAKiD,MAAOjD,GACpBu7B,GAAUv7B,GAAK2C,YAMhC,kBAACkvB,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfrB,YAAanyB,aAAE,0BACfrB,KAAK,WACLgE,MAAOzC,EAAMymB,OAAO6T,SACpB/3B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDixB,MAAO,CAAEvB,UAAW,EAAGzvB,SAAU1C,EAAM80B,MACvCrB,UAAWzzB,EAAMwQ,OAAO8pB,SACxB3G,kBAAmB3zB,EAAMwQ,OAAO8pB,YAIxC,kBAAC,GAAD,CAA0B/3B,SAAUvC,EAAMuC,SAAUkkB,OAAQzmB,EAAMymB,OAAQjW,OAAQxQ,EAAMwQ,UAEtFxQ,EAAMg7B,QAAUh7B,EAAMuxB,WACpB,kBAACF,GAAA,EAAK5W,IAAN,CAAU2Z,WAAS,GACdp0B,EAAMg7B,QACH,kBAAChhB,GAAA,EAAD,CAAKrP,GAAI,QACL,kBAAC0nB,GAAA,EAAD,CAAQnyB,QAAQ,kBAAkB2V,QAAS7V,EAAMg7B,OAAQt4B,SAAU1C,EAAM80B,MACpEh1B,aAAE,kBAIdE,EAAMuxB,UACH,kBAACvX,GAAA,EAAD,KACI,kBAACqY,GAAA,EAAD,CAAQzc,OAAK,EAAC3S,KAAK,SAAS4S,QAAS7V,EAAMuxB,SAAU7uB,SAAU1C,EAAM80B,MAChE90B,EAAM80B,KAAOh1B,aAAE,qBAAuBA,aAAE,uBAO5DE,EAAMg1B,SAAW,kBAAC,GAAD,CAAeX,aAAcr0B,EAAMg1B,YAKjE2F,GAAep6B,aAAe,CAC1Bu0B,MAAM,EACNtkB,OAAQ,GACRiW,OAAQ,IAaGkU,U,SCxQAM,GArB0B,SAAC,GAAD,IAAGjV,EAAH,EAAGA,QAAH,OACrC,kBAACrJ,GAAA,EAAD,CACIjd,OAAQ,CACJw7B,MAAO,wBACPC,WAAY,cACZpiB,MAAOiN,EAAQjN,MACfqiB,UAAWpV,EAAQkU,UACnBmB,SAAUrV,EAAQkK,SAClBP,MAAO3J,EAAQ2J,MACf2L,iBAAaryB,EACbsyB,gBAAYtyB,EACZqnB,SAAUtK,EAAQsU,SAClBkB,MAAOxV,EAAQmU,QCFdsB,GAAyB,8BAAC,eAChC/E,GAAkBhC,KADa,IAElCY,gBAAiBlvB,YAAYkvB,IAC7BD,iBAAkBjvB,YAAYivB,IAC9BD,kBAAmBhvB,YAAYgvB,OCyCpBsG,OAtDf,SAAe17B,GACX,MAQIy7B,KAPAhV,EADJ,EACIA,OACAlkB,EAFJ,EAEIA,SACA00B,EAHJ,EAGIA,SACAlI,EAJJ,EAIIA,QACAve,EALJ,EAKIA,OACA8kB,EANJ,EAMIA,gBACAF,EAPJ,EAOIA,kBAEIgB,EDV4B,WACpC,IAAM5yB,EAAWsD,cACjB,MAAO,CACHsvB,WAAY,SAAC9vB,GACT,OAAO8vB,GAAW5yB,EAAU8C,KCMbq1B,GAAfvF,WACR,EAAgCl1B,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACA,EAAkClG,oBAAS,GAA3C,oBAAO06B,EAAP,KAAkBC,EAAlB,KAsBA,OArBAp6B,qBAAU,WACN2F,GAAY,KACb,IAoBC,oCACI,kBAAC,GAAD,CACI0tB,KAAMM,EACN5kB,OAAQrJ,OAAW8B,EAAYuH,EAC/BwkB,QAAS7tB,OAAW8B,EAAYqsB,EAChC0F,OAAQh7B,EAAMg7B,OACdz4B,SAAUA,EACVgvB,SAzBW,SAACjc,GACpBA,EAAMkc,iBACNpqB,GAAY,GACZ6vB,IACIlI,MACA8M,GAAa,GACb5zB,MAAM,eACDE,MAAK,WACFiuB,EAAW3P,GACVzV,QAAQC,OAAM,eACdC,SAAQ,WACL2qB,GAAa,WAerBpV,OAAQA,IAEXmV,GAAa,kBAAC,GAAD,CAA2B5V,QAASS,MC3B/CqV,GApBa,WACxB,IAAMC,EAAY31B,aAAY,SAACC,GAAD,OAAWA,EAAMse,KAAKqB,QAAQgW,aAE5D,OACI,oCACI,yBAAKh+B,UAAU,oCACX,uBAAGA,UAAU,+BACb,iDAEJ,kBAAC2e,GAAA,EAAD,CACI1c,IAAK87B,EACLr8B,OAAQ,CACJu8B,eAAgBziB,OAAO5G,SAASxV,KAAK2L,MAAM,MAAM,GACjDmzB,UAAW1iB,OAAO5G,SAASxV,KAAK2L,MAAM,MAAM,QCTnD2rB,GAAiB,SAACjO,GAC3B,IAAMjW,EAAS,GAaf,OAZKqhB,GAASpL,EAAOkJ,QAAWA,GAAMlJ,EAAOkJ,SACzCnf,EAAOmf,MAAQ7vB,aAAE,4BAEhB+xB,GAASpL,EAAOkJ,SACjBnf,EAAOmf,MAAQ7vB,aAAE,0BAEhB+xB,GAASpL,EAAOuN,WAAcA,GAASvN,EAAOuN,YAC/CxjB,EAAOwjB,SAAWl0B,aAAE,gCAEnB+xB,GAASpL,EAAOuN,YACjBxjB,EAAOwjB,SAAWl0B,aAAE,8BAEjB0Q,GAGE2rB,GAAY,SAACn8B,GAAD,OACrB,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,YAAY6yB,YAAU,GAC7B,kBAACD,GAAA,EAAK5W,IAAN,KACI,kBAACT,GAAA,EAAD,CAAK3E,GAAIrV,EAAMo8B,cAAgB,IAAM,MACjC,kBAAC,GAAD,CACI39B,KAAK,QACLwE,KAAK,QACLgvB,YAAanyB,aAAE,2BACf9B,UAAU,OACVyE,MAAOzC,EAAMymB,OAAOkJ,MACpBptB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOmf,MACxBgE,kBAAmB3zB,EAAMwQ,OAAOmf,MAChC+D,MAAO,CAAE,aAAc5zB,aAAE,2BAA4B4C,SAAU1C,EAAM80B,KAAMC,aAAc,eAGjG,kBAAC/a,GAAA,EAAD,CAAK3E,GAAIrV,EAAMo8B,cAAgB,IAAM,MACjC,kBAAC,GAAD,CACI39B,KAAK,WACLwE,KAAK,WACLgvB,YAAanyB,aAAE,uBACf9B,UAAU,OACVyE,MAAOzC,EAAMymB,OAAOuN,SACpBzxB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOwjB,SACxBL,kBAAmB3zB,EAAMwQ,OAAOwjB,SAChCN,MAAO,CAAE,aAAc5zB,aAAE,uBAAwB4C,SAAU1C,EAAM80B,KAAMC,aAAc,wBAIjG,kBAAC1D,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,wCAChB,kBAACgc,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,GACb,kBAACgd,GAAA,EAAD,CAAQpvB,KAAK,SAAS2S,OAAK,EAACC,QAAS7V,EAAMq8B,QAAS35B,SAAU1C,EAAM80B,MAC/D90B,EAAM80B,KAAOh1B,aAAE,qBAAuBA,aAAE,mBAGjD,kBAACka,GAAA,EAAD,CAAK3E,GAAIrV,EAAMo8B,cAAgB,IAAM,OAAQjiB,GAAI,IAC7C,kBAACkY,GAAA,EAAD,CAAQnyB,QAAQ,OAAOlC,UAAU,YAAY6X,QAAS7V,EAAMs8B,aACxD,+BAAQx8B,aAAE,sCAKrBE,EAAMg1B,SAAW,kBAAC,GAAD,CAAeX,aAAcr0B,EAAMg1B,WAEnDh1B,EAAMo8B,eACJ,oCACI,wBAAIp+B,UAAU,aAAa8B,aAAE,2BAC7B,kBAACuyB,GAAA,EAAD,CAAQzc,OAAK,EAAC1V,QAAQ,UAAU2V,QAAS7V,EAAMu8B,gBAC1Cz8B,aAAE,+BAOvBq8B,GAAU57B,aAAe,CACrBu0B,MAAM,EACNtkB,OAAQ,GACRiW,OAAQ,IAcG0V,UCnFFK,GAAoB,8BAAC,eAC3B9F,GAAkBhC,KADQ,IAE7BzK,SAAU7jB,YAAY6jB,IACtByL,UAAWtvB,YAAYsvB,IACvBE,WAAYxvB,YAAYwvB,IACxBD,YAAavvB,YAAYuvB,OCwBd8G,OAtCf,SAAuBz8B,GACnB,MAA+Ew8B,KAAvE/V,EAAR,EAAQA,OAAQlkB,EAAhB,EAAgBA,SAAU00B,EAA1B,EAA0BA,SAAUlI,EAApC,EAAoCA,QAASve,EAA7C,EAA6CA,OAAQklB,EAArD,EAAqDA,UAAWE,EAAhE,EAAgEA,WACxD1W,EDFuB,WAC/B,IAAM1b,EAAWsD,cACjB,MAAO,CACHoY,MAAO,SAACyQ,EAAO3N,GACX,OAAO9C,GAAM1b,EAAUmsB,EAAO3N,KCFpB0a,GAAVxd,MAER,EAAgChe,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KAcA,OAbA3F,qBAAU,WACN2F,GAAY,KACb,IAYC,kBAAC,GAAD,CACI0tB,KAAMY,EACNllB,OAAQrJ,OAAW8B,EAAYuH,EAC/BwkB,QAAS7tB,OAAW8B,EAAY2sB,EAChCrzB,SAAUA,EACV85B,QAfY,SAAC/mB,GACjBA,EAAMkc,iBACNpqB,GAAY,GACZ6vB,IACIlI,KACA7P,EAAMuH,EAAOkJ,MAAOlJ,EAAOuN,UAAUhjB,QAAQE,SAAQ,kBAAMlR,EAAMo8B,eAAiB5iB,OAAO5G,SAAS+pB,aAWlGJ,eAAgBv8B,EAAMu8B,eACtBD,YAAat8B,EAAMs8B,YACnB7V,OAAQA,EACR2V,cAAep8B,EAAMo8B,iBCzBpB1H,GAAiB,SAACjO,GAC3B,IAAMjW,EAAS,GAOf,OANKqhB,GAASpL,EAAOkJ,QAAWA,GAAMlJ,EAAOkJ,SACzCnf,EAAOmf,MAAQ7vB,aAAE,4BAEhB+xB,GAASpL,EAAOkJ,SACjBnf,EAAOmf,MAAQ7vB,aAAE,0BAEd0Q,GAGEosB,GAAoB,SAAC58B,GAC9B,IAAI0S,EAAUC,eAENzC,EAAsGlQ,EAAtGkQ,QAAS2sB,EAA6F78B,EAA7F68B,YAAa5S,EAAgFjqB,EAAhFiqB,SAAUzZ,EAAsExQ,EAAtEwQ,OAAQskB,EAA8D90B,EAA9D80B,KAAMrO,EAAwDzmB,EAAxDymB,OAAQlkB,EAAgDvC,EAAhDuC,SAAUu6B,EAAsC98B,EAAtC88B,OAAQ9B,EAA8Bh7B,EAA9Bg7B,OAAQhG,EAAsBh1B,EAAtBg1B,QAASzD,EAAavxB,EAAbuxB,SAQjG,OANA9vB,qBAAU,WACFyO,GAAW2sB,GACXA,MAEL,CAAC3sB,EAAS2sB,EAAanqB,IAGtB,kBAAC2e,GAAA,EAAD,CAAM5yB,KAAK,oBAAoB6yB,YAAU,IACnCrH,GACE,kBAACoH,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BAChB,kBAACgc,GAAA,EAAD,KACI,mDACA,wHAIZ,kBAACqX,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BAChB,kBAACgc,GAAA,EAAD,KACI,kBAAC,GAAD,CACIvb,KAAK,QACLwE,KAAK,QACLgvB,YAAanyB,aAAE,2BACf9B,UAAU,OACVyE,MAAOgkB,EAAOkJ,MACdptB,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDgxB,UAAWjjB,EAAOmf,MAClBgE,kBAAmBnjB,EAAOmf,MAC1B+D,MAAO,CAAEhxB,SAAUoyB,GAAQ7K,EAAU8K,aAAc,gBAK/D,kBAAC1D,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BACJ,WAAX8+B,IAAwB7S,GACrB,kBAACjQ,GAAA,EAAD,CAAKrP,GAAI,QACL,kBAAC0nB,GAAA,EAAD,CAAQpvB,KAAK,SAAS/C,QAAQ,kBAAkB2V,QAASmlB,EAAQt4B,SAAUoyB,GACtEh1B,aAAE,kBAKf,kBAACka,GAAA,EAAD,KACI,kBAACqY,GAAA,EAAD,CAAQpvB,KAAK,SAAS2S,OAAK,EAACC,QAAS0b,EAAU7uB,SAAUoyB,GACpDA,EAAOh1B,aAAE,qBAAuBA,aAAE,4BAK9Ck1B,GAAW,kBAAC,GAAD,CAAeX,aAAcW,IACxC9kB,GAAW,uBAAGlS,UAAU,0BAA0B8B,aAAE,8BAA+BmqB,IACnF/Z,GAAW,kBAAC,KAAD,CAAU5S,GAAG,uBAKrCs/B,GAAkBr8B,aAAe,CAC7Bu0B,MAAM,EACNtkB,OAAQ,GACRN,SAAS,EACTuW,OAAQ,IAcGmW,UC3EFG,GAA4B,WACrC,IAAMC,EAAgB52B,YAAYupB,IAC5BsN,EAAMvG,GAAkBhC,IACxBl2B,EAAa4H,YAAY6jB,IAM/B,OAJIzrB,GAAcy+B,EAAIxW,OAAOkJ,QAAUqN,GACnCC,EAAI16B,SAAS,QAASy6B,GAGnB,2BACAC,GADP,IAEIhT,SAAUzrB,EACVu3B,0BAA2B3vB,YAAY2vB,IACvCD,2BAA4B1vB,YAAY0vB,IACxCD,4BAA6BzvB,YAAYyvB,OC8BlCqH,OA1Df,SAA+Bl9B,GAC3B,MASI+8B,KARAtW,EADJ,EACIA,OACAlkB,EAFJ,EAEIA,SACA00B,EAHJ,EAGIA,SACAlI,EAJJ,EAIIA,QACAve,EALJ,EAKIA,OACAyZ,EANJ,EAMIA,SACA8L,EAPJ,EAOIA,0BACAF,EARJ,EAQIA,4BAEIW,EDN+B,WACvC,IAAMhzB,EAAWsD,cACjB,MAAO,CACH0vB,qBAAsB,SAAC7G,GACnB,OAAO6G,GAAqBhzB,EAAUmsB,KCEbwN,GAAzB3G,qBAER,EAAgCt1B,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACA3F,qBAAU,WACN2F,GAAY,GACZgwB,GAAW,KACZ,IAEH,MAA8Bl2B,oBAAS,GAAvC,oBAAOgP,EAAP,KAAgBknB,EAAhB,KAmBA,OACI,kBAAC,GAAD,CACItC,KAAMe,EACNrlB,OAAQrJ,OAAW8B,EAAYuH,EAC/BwkB,QAAS7tB,OAAW8B,EAAY8sB,EAChC9L,SAAUA,EACV+Q,OAAQh7B,EAAMg7B,OACdz4B,SAAUA,EACVgvB,SAzBoB,SAACjc,GACzBA,EAAMkc,iBACN4F,GAAW,GACXhwB,GAAY,GACZ6vB,IAEIlI,KACAyH,EAAqB/P,EAAOkJ,OACvB3e,QAAQ7I,MAAK,WACVivB,GAAW,MAEdnmB,OAAM,gBAeXf,QAAS/I,OAAW8B,EAAYiH,EAChCuW,OAAQA,EACRoW,YAAa78B,EAAM68B,eC9C/B,SAASnB,GAAM17B,GACX,IAAM0S,EAAUC,eACVC,EAAWC,eACXuqB,EAAQ,IAAI5gB,gBAAgB5J,EAAS/M,QAC3C,EAAgC3E,mBAASk8B,EAAMC,IAAI,mBAAqB,QAAU,SAAlF,oBAAO5O,EAAP,KAAiB6O,EAAjB,KACMC,EAAYn3B,YAAY6jB,IAW9B,OAFAxoB,qBARuB,WACnB,GAAI87B,GAAav9B,EAAMw9B,gBAAiB,CACpC,IACMC,EADS,IAAIjhB,gBAAgB9J,EAAQE,SAAS/M,QAC5B63B,IAAI,YAC5BhrB,EAAQjV,QAAQggC,GAAY,kBAIV,CAACz9B,EAAMw9B,gBAAiB9qB,EAAS6qB,IAGvD,oCACKA,EACG,kBAAC,GAAD,MAEA,oCACkB,UAAb9O,GACG,kBAAC,GAAD,CACI8N,eAAgB,kBAAMe,EAAY,aAClChB,YAAa,kBAAMgB,EAAY,YAGzB,aAAb7O,GAA2B,kBAACkP,GAAD,CAAoB3C,OAAQ,kBAAMsC,EAAY,YAC5D,UAAb7O,GACG,kBAAC,GAAD,CAAuBuM,OAAQ,kBAAMsC,EAAY,UAAUT,YAAa78B,EAAM68B,gBAYtGnB,GAAMn7B,aAAe,CACjBi9B,iBAAiB,GAGN9B,UC/BAkC,GApBU,WACrB,OACI,oCACI,kBAAC,IAAD,KACI,yCAEJ,kBAAC5Q,GAAD,MACA,kBAACtS,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKG,GAAI,CAAEmd,KAAM,GAAIC,OAAQ,GAAKliB,GAAI,CAAEiiB,KAAM,EAAGC,OAAQ,GAAKC,GAAI,CAAEF,KAAM,EAAGC,OAAQ,IACjF,kBAAC,GAAD,CAAWxe,MAAM,0BACb,kBAAC,GAAD,YCPb8kB,GADevP,aANN,SAACjoB,GAAD,MAAY,CAChC4jB,SAAUA,GAAS5jB,OAGI,iBAAO,KAEJioB,CAA6CoN,I,+BCFrEjC,GAAa,SAAC11B,GAAwB,IAAlB+5B,EAAiB,uDAAN,EAC3BrE,EAAatsB,aAAepJ,GAC5B+J,EAAgBD,aAAiB4rB,EAAYqE,GACnD,OAAOpwB,aAAwBI,IA2FpBiwB,GAxFY,SAAC/9B,GACxB,IAAMg+B,EAAqB3mB,WAAWrX,EAAMuf,QAAQye,oBAAsB,EAE1E,OACI,kBAACrlB,GAAA,EAAD,KACI,kBAACA,GAAA,EAAKsa,OAAN,KACI,kBAACxY,GAAA,EAAD,CAAKzc,UAAU,6BACX,kBAACgc,GAAA,EAAD,CAAK3E,GAAI,GACL,4BAAKrV,EAAMuf,QAAQ1hB,WAEvB,kBAACmc,GAAA,EAAD,CAAK3E,GAAI,EAAGrX,UAAU,kBAChBggC,GACE,uBAAGhgC,UAAU,uBACT,uBAAGA,UAAU,oBACZ8B,aAAE,4BAQVk+B,GACG,uBAAGhgC,UAAU,yBACT,uBAAGA,UAAU,wBACZ8B,aAAE,4CAMvB,kBAAC6Y,GAAA,EAAKO,KAAN,KACI,kBAACuB,GAAA,EAAD,CAAKzc,UAAU,6BACX,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,GACL,yBACI1K,IAAG,oEAA+DD,EAAMuf,QAAQ+H,KAA7E,aACHhnB,IAAI,gBACJ0Y,QAAQ,OACRilB,QAAS,SAACxoB,GACNA,EAAED,OAAO0oB,QAAU,KACnBzoB,EAAED,OAAOvV,IAAMk+B,MAEnBngC,UAAU,WAGlB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,GACL,uBAAG3M,UAAU,MACT,gCAASgC,EAAMuf,QAAQ6e,eAE3B,uBAAGpgC,UAAU,MACT,uCAAgBgC,EAAMuf,QAAQyF,YAElC,kBAACvK,GAAA,EAAD,CAAK9P,GAAI,GACL,kBAACqP,GAAA,EAAD,KACI,gCAASla,aAAE,0CAEf,kBAACka,GAAA,EAAD,KAAMha,EAAMuf,QAAQsG,QACpB,kBAAC7L,GAAA,EAAD,KACI,gCAASla,aAAE,gCAEf,kBAACka,GAAA,EAAD,KAAMyf,GAAWz5B,EAAMuf,QAAQ8e,cAC/B,kBAACrkB,GAAA,EAAD,KACI,gCAASla,aAAE,iCAEf,kBAACka,GAAA,EAAD,KAAMyf,GAAWz5B,EAAMuf,QAAQ8e,YAAa90B,SAASvJ,EAAMuf,QAAQhU,UACnE,kBAACyO,GAAA,EAAD,KACI,gCAASla,aAAE,+BAEf,kBAACka,GAAA,EAAD,KAAMha,EAAMuf,QAAQhU,SAGvByyB,GACG,kBAAC3L,GAAA,EAAD,CAAQr0B,UAAU,OAAO6X,QAAS,kBAAM7V,EAAMs+B,aAAat+B,EAAMuf,WAC5Dzf,aAAE,8CCjFtBy+B,GAAU,SAACv+B,GACpB,OACI,yBAAKhC,UAAU,6BACX,kBAAC0f,GAAA,EAAD,CACI3S,KAAMjN,IAAO,sBACb2C,KAAK,KACLkd,MAAO7f,IAAO,uBACdE,UAAU,SAEd,uBAAGA,UAAU,WAAWgC,EAAMmlB,WAK1CoZ,GAAQh+B,aAAe,CACnBi+B,QAAQ,EACRrZ,QAAS,2BAQEoZ,UCtBTE,GAAO,SAAC,GAAD,IAAGr0B,EAAH,EAAGA,SAAUs0B,EAAb,EAAaA,aAAb,OACT,oCACKA,EACG,kBAAChkB,GAAA,EAAD,CAAW1c,UAAU,aACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAG,MAAMP,KAItB,oCAAGA,KAKFu0B,GAAoB,SAAC3+B,GAAD,OAC7B,oCACKA,EAAM4c,WACH,kBAAC,GAAD,CAAM8hB,aAAc1+B,EAAM0+B,cACrB1+B,EAAM4+B,aAAe,kBAAC5R,GAAD,MACtB,kBAAC,GAAD,CAAS7H,QAASnlB,EAAM6+B,kBAG5B,oCACM7+B,EAAM8+B,iBAGJ,kBAAC,GAAD,CAAMJ,aAAc1+B,EAAM0+B,cACtB,uBAAG1gC,UAAU,eACT,uBAAGA,UAAU,gCACZgC,EAAM++B,qBAAuBj/B,aAAE,wBAEpC,4BAAQ9B,UAAU,kBAAkB6X,QAAS7V,EAAMg/B,SAC9Cl/B,aAAE,mBARXE,EAAMoK,YAiB1Bu0B,GAAkBp+B,aAAe,CAC7Bu+B,kBAAkB,EAClBliB,YAAY,EACZ8hB,cAAc,GAaHC,UC/BAM,OA/BR,SAAuBj/B,EAAOk/B,EAAS1tB,EAAWD,EAAUD,EAAWD,EAAS8tB,EAAYC,GAC/F,IAAM57B,EAAWsD,cAEX8V,EAAcvL,IAAYE,IAAaC,GAAcF,EAErD+tB,EAAO,WAAyB,IAAxBC,EAAuB,yDAC7BjuB,GAAYE,GAAaD,GAAeE,IAAa8tB,GACrDJ,EAAQ17B,EAAU87B,IAIpBC,EAAQ,WACVF,GAAK,GACDr/B,EAAMg/B,SAASh/B,EAAMg/B,WAM7B,OAHAv9B,oBAAU49B,GAGHG,WAASh9B,IAAIxC,EAAMoK,UAAY,IAAI,SAACq1B,GACvC,OAAOC,uBAAaD,EAAD,YAAC,2BACbz/B,GACAy/B,EAAMz/B,OAFM,IAGf4c,WAAYA,KAAgB5c,EAAM4c,WAClCkiB,iBAAmBttB,IAAc4tB,KAAmBp/B,EAAM8+B,iBAC1DE,QAASO,GACLJ,EAAaA,EAAW,CAAE3tB,YAAWD,WAAUD,YAAWD,UAASuL,eAAgB,SCZpF+iB,OAVR,SAA0B3/B,GAC7B,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWovB,GAAkBpvB,MACtDw5B,EAAYz5B,aAAY,SAACC,GAAD,OAAWkvB,GAAkBlvB,MACrDy5B,EAAa15B,aAAY,SAACC,GAAD,OAAWmvB,GAAmBnvB,MAG7D,OAAO44B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OAAqB8kB,GAAY/yB,EAAUiO,KAMtBmuB,EAAYC,EAAWC,GAF3C,ICEd,GAA6Cx6B,cAChD,SAAC9B,EAAUpE,EAAWoG,EAAQqf,EAAQC,EAAYC,EAAWld,EAAa5J,GAA0B,IAAhBsoB,EAAe,uDAAP,GAgBxF,OAfA/iB,EAAS,CACLP,KAAMif,EACNxe,QAAS,CACLT,KAAM,MACN7D,YACAylB,OAAQA,EACRC,aACAC,YACAvf,SACAqC,cACA5J,WACAsoB,QACAd,cAAe,QAGhB9f,aAAWnC,EAAU0e,EAAgBtc,IAAK2Z,QAAhC,aAA2CsF,OAAQA,GAAW0B,OAjBhF,sBAAOwZ,GAAP,MAqBA,IArBA,MAqBuCz6B,cAAqB,SAAC9B,EAAU0hB,GAC1E,OAAOvf,aAAWnC,EAAU2e,EAAavc,IAAK4Z,kBAAmB,CAAEqG,OAAQX,QADxE,sBAAO8a,GAAP,MAsDMC,IAtDN,MAsDsB,SAACz8B,EAAU08B,GACpC18B,EAAS,CAAEP,KAAMqf,EAAgB5e,QAASw8B,MAOvC,GAAyC56B,cAAqB,SAAC9B,EAAU0hB,EAAWib,GACvF,IAAIC,EAAM,CACNva,OAAQX,EACRM,aAAc2a,GAElB,OAAOhvB,aAAmB3N,EAAU4e,EAAmBxc,IAAKoa,mBAAoBogB,OAAKn3B,EAAW,WAL7F,sBAAOo3B,GAAP,MC/CQC,ID+CR,MCrFiB,SAAC,GAAkB,IAAhBpW,EAAe,EAAfA,SACjB1mB,EAAWsD,cACX4L,EAAUC,eAEV2rB,EAAe,SAAC/e,ID4CC,SACvB/b,EACA0hB,EACA9lB,EACAoG,EACAqf,EACAC,EACAE,EACAC,EACApd,EACA5J,GAEAuF,EAAS,CACLP,KAAMof,EACN3e,QAAS,CACLT,KAAM,WACNiiB,YACA9lB,YACAylB,OAAQA,EACRC,aACAE,YACAC,aACAzf,SACAqC,cACA5J,cCnEJsiC,CACI/8B,EACA+b,EAAQsG,OACRtG,EAAQngB,UACRmgB,EAAQ/Z,OACR+Z,EAAQsF,OACRtF,EAAQuF,WACRvF,EAAQyF,UACRzF,EAAQ0F,WACR9X,aAAeoS,EAAQ8e,aACvB9e,EAAQhU,QAEZmH,EAAQuD,KAAK,aAGjB,OACI,kBAAC,GAAD,KACI,kBAAC,GAAD,KACyB,IAApBiU,EAAStnB,OACN,oCACI,4BAAK9C,aAAE,wCACP,2BAAIA,aAAE,wCAGVoqB,EAAS1nB,KAAI,SAAC+c,GAAD,OACT,kBAAC,GAAD,CAAaA,QAASA,EAAS+e,aAAcA,EAAc9+B,IAAK+f,EAAQsG,gBClCnF2a,GAAmC,WAC5C,IAAMh9B,EAAWsD,cACjB,MAAO,CACH2vB,WAAY,SAAChQ,GACT,OAAOgQ,GAAWjzB,EAAUijB,MAK3Bga,GAAiC,WAC1C,IAAMC,EAAWt6B,YAAY4f,IACvB2a,EAAoB,CACtBxa,SAAUua,EAASva,SACnBC,OAAQsa,EAASta,OACjBC,QAASqa,EAASra,QAClBC,SAAUoa,EAASpa,UAGvB,OAAO,2BACAoQ,GAAkBhC,GAAgBiM,IADzC,IAEIzK,gBAAiB9vB,YAAY8vB,IAC7BD,iBAAkB7vB,YAAY6vB,IAC9BD,kBAAmB5vB,YAAY4vB,OCcxB4K,OAlCR,WACH,MAAgC1/B,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACMy5B,EAAcJ,KACZhK,EAAe+J,KAAf/J,WAOR,OACI,kBAAC9d,GAAA,EAAD,KACI,kBAACA,GAAA,EAAKsa,OAAN,KACI,4BAAKnzB,aAAE,iCAEX,kBAAC6Y,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAAC,GAAD,CAAwByoB,OAAQoa,EAAYpa,OAAQlkB,SAAUs+B,EAAYt+B,WAC1E,kBAAC8vB,GAAA,EAAD,CAAQxc,QAZC,SAACP,GAClBA,EAAMkc,iBACNiF,EAAWoK,EAAYpa,QAAQzV,QAAQE,SAAQ,kBAAM9J,GAAY,OAU1B1E,SAAUm+B,EAAY7K,mBAChD6K,EAAY7K,kBAAoB,iBAAmB,WAEtD7uB,GACE,oCACK05B,EAAY5K,iBACT,uBAAGj4B,UAAU,yBAAyB8B,aAAE,qCAExC,uBAAG9B,UAAU,0BAA0B8B,aAAE,4C,mBC7BxDghC,GAAY,SAAC9gC,GACtB,IAAM0S,EAAUC,eACVC,EAAWC,eAGjB,IAFkBzM,YAAY6jB,KAEU,WAAtBrX,EAASwB,SAAuB,CAC9C,IAAM2sB,EAAe/gC,EAAMy9B,UAAY7qB,EAASwB,SAEhD,OADA1B,EAAQjV,QAAR,0BAAmCsjC,IAC5B,KAGX,OAAO/gC,EAAMoK,UAGjB02B,GAAUE,UAAY,CAClBvD,SAAUwD,KAAUlqB,QAGT+pB,U,UCUFpM,GAAiB,WAAkB,IAAjBjO,EAAgB,uDAAP,GAC9BjW,EAAS,GA4Cf,GA3CKqhB,GAASpL,EAAO1N,SACjBvI,EAAOuI,MAAQjZ,aAAE,gCAEhB+xB,GAASpL,EAAOyT,aACjB1pB,EAAO0pB,UAAYp6B,aAAE,8BAEpB+xB,GAASpL,EAAOyJ,YACjB1f,EAAO0f,SAAWpwB,aAAE,4BAEnB+xB,GAASpL,EAAOkJ,QAAWA,GAAMlJ,EAAOkJ,SACzCnf,EAAOmf,MAAQ7vB,aAAE,4BAEhB+xB,GAASpL,EAAOkJ,SACjBnf,EAAOmf,MAAQ7vB,aAAE,0BAEhB+xB,GAASpL,EAAO0T,MAASlG,GAAUxN,EAAO0T,OAC3C3pB,EAAO2pB,IAAMr6B,aAAE,gCAEd+xB,GAASpL,EAAOya,UACjB1wB,EAAO0wB,OAASphC,aAAE,gCAEjB+xB,GAASpL,EAAO4D,WACjB7Z,EAAO6Z,QAAUvqB,aAAE,gCAElB+xB,GAASpL,EAAO0a,SACjB3wB,EAAO2wB,MAAQrhC,aAAE,gCAEhB+xB,GAASpL,EAAO2T,WACjB5pB,EAAO4pB,QAAUt6B,aAAE,+BAElB+xB,GAASpL,EAAO4T,QACjB7pB,EAAO6pB,KAAOv6B,aAAE,4BAEf+xB,GAASpL,EAAO6T,WAAchK,GAAS7J,EAAO6T,YAC/C9pB,EAAO8pB,SAAWx6B,aAAE,kCAEnB+xB,GAASpL,EAAO8T,UACjB/pB,EAAO+pB,OAASz6B,aAAE,8BAEjB+xB,GAASpL,EAAO+T,WACjBhqB,EAAOgqB,QAAU16B,aAAE,iCAGlB0Q,EAAO0wB,SAAW1wB,EAAO6Z,UAAY7Z,EAAO2wB,MAAO,CACpD,IAAMC,EAAMn1B,aAAakB,aAAe,GAAD,OAAIsZ,EAAOya,OAAX,YAAqBza,EAAO4D,QAA5B,YAAuC5D,EAAO0a,SACjFC,EAAM,KACN5wB,EAAO0wB,OAASphC,aAAE,2BAClB0Q,EAAO6Z,QAAU,IACjB7Z,EAAO2wB,MAAQ,KAIvB,OAAO3wB,GAKE6wB,GAAiB,SAACrhC,GAAD,OAC1B,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,cAAc6yB,YAAU,GAC/B,kBAACD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,2BACfnxB,MAAOrC,aAAE,oBACTrB,KAAK,QACLgE,MAAOzC,EAAMymB,OAAO1N,OAAS,GAC7BxW,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOuI,MACxB4a,kBAAmB3zB,EAAMwQ,OAAOuI,MAChC2a,MAAO,CAAEhxB,SAAU1C,EAAM80B,OAEzB,4BAAQryB,MAAM,GAAGC,UAAQ,IACxBkG,OAAO8G,KAAKkrB,IAAQp4B,KAAI,SAAChD,GAAD,OACrB,4BAAQA,IAAKA,EAAKiD,MAAOjD,GACpBo7B,GAAOp7B,QAKpB,kBAAC,GAAD,CACI8zB,eAAe,2BACfnxB,MAAOrC,aAAE,wBACTrB,KAAK,YACLgE,MAAOzC,EAAMymB,OAAOyT,UACpB33B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO0pB,UACxBvG,kBAAmB3zB,EAAMwQ,OAAO0pB,UAChCxG,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAG7B,kBAAC,GAAD,CACIxB,eAAe,2BACfnxB,MAAOrC,aAAE,sBACTrB,KAAK,WACLgE,MAAOzC,EAAMymB,OAAOyJ,SACpB3tB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO0f,SACxByD,kBAAmB3zB,EAAMwQ,OAAO0f,SAChCwD,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACfnxB,MAAOrC,aAAE,2BACTrB,KAAK,QACLwE,KAAK,QACLR,MAAOzC,EAAMymB,OAAOkJ,MACpBptB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOmf,MACxBgE,kBAAmB3zB,EAAMwQ,OAAOmf,MAChC+D,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACfnxB,MAAOrC,aAAE,wBACTrB,KAAK,MACLwE,KAAK,MACLR,MAAOzC,EAAMymB,OAAO0T,IACpB53B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO2pB,IACxBxG,kBAAmB3zB,EAAMwQ,OAAO2pB,IAChCzG,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACfnxB,MAAOrC,aAAE,kBACTrB,KAAK,SACLgE,MAAOzC,EAAMymB,OAAOya,QAAU,GAC9BxN,MAAO,CAAE,aAAc5zB,aAAE,qBAAsB4C,SAAU1C,EAAM80B,MAC/DvyB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO0wB,OACxBvN,kBAAmB3zB,EAAMwQ,OAAO0wB,QAEhC,4BAAQz+B,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,mBAhKJ,YAAI,IAAI2b,MAAM,KAAKjZ,KAAI,SAAC+H,EAAKoR,GAAN,OAAaA,EAAI,EAAI,GAAK,IAAM,KAAOA,EAAI,GAAGnN,cACtEhM,KAAI,SAACC,GAAD,OACd,4BAAQjD,IAAKiD,EAAOA,MAAOA,GACtBA,OAkKD,kBAAC,GAAD,CACI6wB,eAAe,kBACfnxB,MAAOrC,aAAE,uBACTyzB,eAAe,oBACfC,WAAS,EACT/0B,KAAK,UACLgE,MAAOzC,EAAMymB,OAAO4D,SAAW,GAC/BqJ,MAAO,CAAE,aAAc5zB,aAAE,uBAAwB4C,SAAU1C,EAAM80B,MACjEvyB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO6Z,QACxBsJ,kBAAmB3zB,EAAMwQ,OAAO6Z,SAEhC,4BAAQ5nB,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,qBAEN+4B,GAAOr2B,KAAI,SAACy2B,GAAD,OACR,4BAAQz5B,IAAKy5B,EAAMx2B,MAAOA,MAAOw2B,EAAMx2B,OAClCw2B,EAAMx6B,UAKnB,kBAAC,GAAD,CACI60B,eAAe,kBACfnxB,MAAOrC,aAAE,sBACTyzB,eAAe,oBACfC,WAAS,EACTwG,cAAY,EACZv7B,KAAK,QACLgE,MAAOzC,EAAMymB,OAAO0a,OAAS,GAC7BzN,MAAO,CAAE,aAAc5zB,aAAE,sBAAuB4C,SAAU1C,EAAM80B,MAChEvyB,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO2wB,MACxBxN,kBAAmB3zB,EAAMwQ,OAAO2wB,OAEhC,4BAAQ1+B,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,oBAjMK,WACxB,IAAMwhC,GAAM,IAAIt8B,MAAOyD,cACvB,OAAO,YAAI,IAAIgT,MAAM,MAAMjZ,KAAI,SAACgW,EAAMmD,GAAP,OAC3B,4BAAQnc,IAAK8hC,EAAM3lB,EAAGlZ,MAAO6+B,EAAM3lB,GAC9B2lB,EAAM3lB,MA+LF4lB,KAIT,kBAAClQ,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACfnxB,MAAOrC,aAAE,yBACTrB,KAAK,UACLgE,MAAOzC,EAAMymB,OAAO2T,QACpB73B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO4pB,QACxBzG,kBAAmB3zB,EAAMwQ,OAAO4pB,QAChC1G,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACfnxB,MAAOrC,aAAE,sBACTrB,KAAK,OACLgE,MAAOzC,EAAMymB,OAAO4T,KACpB93B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO6pB,KACxB1G,kBAAmB3zB,EAAMwQ,OAAO6pB,KAChC3G,MAAO,CAAEhxB,SAAU1C,EAAM80B,QAE7B,kBAAC,GAAD,CACIxB,eAAe,MACfnxB,MAAOrC,aAAE,wBACTrB,KAAK,SACLgE,MAAOzC,EAAMymB,OAAO8T,OACpBh4B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAO+pB,OACxB5G,kBAAmB3zB,EAAMwQ,OAAO+pB,OAChC7G,MAAO,CAAEhxB,SAAU1C,EAAM80B,SAIjC,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACfnxB,MAAOrC,aAAE,0BACTrB,KAAK,WACLgE,MAAOzC,EAAMymB,OAAO6T,SACpB/3B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDixB,MAAO,CAAEvB,UAAW,EAAGzvB,SAAU1C,EAAM80B,MACvCrB,UAAWzzB,EAAMwQ,OAAO8pB,SACxB3G,kBAAmB3zB,EAAMwQ,OAAO8pB,WAGpC,kBAAC,GAAD,CACIhH,eAAe,MACfnxB,MAAOrC,aAAE,yBACTrB,KAAK,UACLgE,MAAOzC,EAAMymB,OAAO+T,SAAW,GAC/Bj4B,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QACxDgxB,UAAWzzB,EAAMwQ,OAAOgqB,QACxB7G,kBAAmB3zB,EAAMwQ,OAAOgqB,QAChC9G,MAAO,CAAEhxB,SAAU1C,EAAM80B,OAEzB,4BAAQryB,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,gCAEN8I,OAAO8G,KAAKqrB,IAAWv4B,KAAI,SAAChD,GAAD,OACxB,4BAAQA,IAAKA,EAAKiD,MAAOjD,GACpBu7B,GAAUv7B,GAAK2C,aAM9BnC,EAAMg7B,QAAUh7B,EAAMuxB,WACpB,kBAACF,GAAA,EAAK5W,IAAN,CAAU2Z,WAAS,GACdp0B,EAAMg7B,QACH,kBAAChhB,GAAA,EAAD,CAAKrP,GAAI,QACL,kBAAC0nB,GAAA,EAAD,CAAQnyB,QAAQ,kBAAkB2V,QAAS7V,EAAMg7B,OAAQt4B,SAAU1C,EAAM80B,MACpEh1B,aAAE,kBAIdE,EAAMuxB,UACH,kBAACvX,GAAA,EAAD,KACI,kBAACqY,GAAA,EAAD,CAAQzc,OAAK,EAACC,QAAS7V,EAAMuxB,SAAU7uB,SAAU1C,EAAM80B,MAClD90B,EAAM80B,KAAOh1B,aAAE,qBAAuBA,aAAE,qBAO5DE,EAAMg1B,SAAW,kBAAC,GAAD,CAAeX,aAAcr0B,EAAMg1B,YAI7DqM,GAAe9gC,aAAe,CAC1Bu0B,MAAM,EACNtkB,OAAQ,GACRiW,OAAQ,IAaG4a,UC7TFG,GAAyB,WAClC,IAAMd,EAAWt6B,YAAY4f,IACvB2a,EAAoB,CACtB5nB,MAAO2nB,EAAS3nB,MAChBmhB,UAAWwG,EAASxG,UACpBhK,SAAUwQ,EAASxQ,SACnBP,MAAO+Q,EAAS/Q,MAChByK,QAASsG,EAAStG,QAClBC,KAAMqG,EAASrG,KACfoH,KAAMf,EAASe,KACflH,OAAQmG,EAASnG,OACjBC,QAASkG,EAASlG,QAClBF,SAAUoG,EAASpG,SACnBH,IAAKuG,EAASvG,IACd+G,OAAQR,EAASQ,OACjB7W,QAASqW,EAASrW,QAClB8W,MAAOT,EAASS,OAGpB,OAAO,2BACAzK,GAAkBhC,GAAgBiM,IADzC,IAEIzK,gBAAiB9vB,YAAY8vB,IAC7BD,iBAAkB7vB,YAAY6vB,IAC9BD,kBAAmB5vB,YAAY4vB,OCoBxB0L,OA/CR,WACH,IAAM1b,EAAUwb,KAChB,EAAgCtgC,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACQqvB,EDR4B,WACpC,IAAMjzB,EAAWsD,cACjB,MAAO,CACH2vB,WAAY,SAAChQ,GACT,OAAOgQ,GAAWjzB,EAAUijB,KCIbkb,GAAflL,WAWR,OACI,kBAAC9d,GAAA,EAAD,KACI,kBAACA,GAAA,EAAKsa,OAAN,KACI,4BAAKnzB,aAAE,gCACP,uBAAG9B,UAAU,OAAO8B,aAAE,gCAE1B,kBAAC6Y,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAAC,GAAD,CACIyoB,OAAQT,EAAQS,OAChBjW,OAAQwV,EAAQxV,OAChBskB,KAAM9O,EAAQgQ,kBACdzzB,SAAUyjB,EAAQzjB,WAEtB,kBAAC8vB,GAAA,EAAD,CAAQxc,QAtBC,SAACP,GAClBA,EAAMkc,iBACNxL,EAAQiR,WAEJjR,EAAQ+I,WACR0H,EAAWzQ,EAAQS,QAAQzV,QAAQE,SAAQ,kBAAM9J,GAAY,OAiB1B1E,SAAUsjB,EAAQgQ,mBAC5ChQ,EAAQgQ,kBAAoB,iBAAmB,WAElD7uB,GACE,oCACK6e,EAAQiQ,iBACL,oCACI,uBAAGj4B,UAAU,yBAAb,mDACA,kBAAC,GAAD,CAAeq2B,aAAcrO,EAAQkQ,gBAAiB5B,QAAQ,2BAGlE,uBAAGt2B,UAAU,0BAAb,oD,mBCPb4jC,GAxCO,SAAC5hC,GACnB,IAAM6hC,EAAc,CAAC,iBAAkB,SAAU,0BAA2B,UAAW,OACvF,EAAkC3gC,mBAASlB,EAAM8hC,QAAU9hC,EAAM+hC,KAAK,IAAtE,oBAAOC,EAAP,KAAkBC,EAAlB,KACMC,EAAkB,SAAC1iC,GACrByiC,EAAaziC,IAEjB,OACI,oCACI,kBAAC2iC,GAAA,EAAIznB,UAAL,CAAe1Y,GAAG,oBAAoB8wB,iBAAkB9yB,EAAM+hC,KAAK,GAAGviC,KAClE,kBAACwa,GAAA,EAAD,CAAK3E,GAAI,GACL,kBAAC+sB,GAAA,EAAD,CAAKpkC,UAAU,6DAA6DqE,GAAG,MAC1ErC,EAAM+hC,KAAKv/B,KAAI,SAACgW,GAAD,OACZ,kBAAC4pB,GAAA,EAAIC,KAAL,CAAU7iC,IAAKgZ,EAAKhZ,IAAK6C,GAAG,KAAKwT,QAAS,kBAAMqsB,EAAgB1pB,EAAKhZ,MAAM0zB,SAAU1a,EAAKhZ,IAAKxB,UAAW6jC,EAAY7rB,KAAK,MAA3H,IAAoIwC,EAAK/Z,KACrI,uBAAGT,UAAU,gEAKzB,kBAACskC,GAAA,EAAD,CAAUtkC,UAAU,+CAChB,kBAACskC,GAAA,EAASt/B,OAAV,CAAiBX,GAAG,SAASY,KAAK,SAASjF,UAAU,kCAAkCkF,KAAK,UACxF,8BAAOlD,EAAM+hC,KAAK3+B,QAAO,SAACg9B,GAAD,OAASA,EAAI5gC,MAAQwiC,KAAW,GAAGvjC,OAEhE,kBAAC6jC,GAAA,EAASn/B,KAAV,KACKnD,EAAM+hC,KAAKv/B,KAAI,SAACgW,GAAD,OACZ,kBAAC8pB,GAAA,EAASC,KAAV,CAAe/iC,IAAKgZ,EAAKhZ,IAAKqW,QAAS,kBAAMqsB,EAAgB1pB,EAAKhZ,MAAM0zB,SAAU1a,EAAKhZ,KAClFgZ,EAAK/Z,YAK1B,kBAACub,GAAA,EAAD,CAAK3E,GAAI,GACArV,EAAM2hB,QAAQqgB,OCjBvC,SAASQ,KACL,IAAMC,EAAcr8B,YAAY8jB,IAC1BwY,GAA4B,OAAXD,QAAW,IAAXA,OAAA,EAAAA,EAAaE,SAAU,GACxCC,GAA0B,OAAXH,QAAW,IAAXA,OAAA,EAAAA,EAAaI,OAAQ,GACpCle,EAAOve,YAAY4f,IAqCnB8c,EAAgB,CAClB,CAAErkC,KAAMqB,aAAE,0BAA2BN,IAAK,WAC1C,CAAEf,KAAMqB,aAAE,iCAAkCN,IAAK,mBACjD,CAAEf,KAAMqB,aAAE,kCAAmCN,IAAK,cAClD,CAAEf,KAAMqB,aAAE,+BAAgCN,IAAK,eAGnD,OACI,kBAAC,GAAD,KACI,kBAAC,IAAD,KACI,+BAAQM,aAAE,0BAEd,kBAACktB,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAOjZ,aAAE,wBAAyB0uB,SAAU1uB,aAAE,0BAA2B6kB,EAAKuV,aACzF,kBAACxf,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAAC,GAAD,CAAeqnB,OAAQgB,EAAc,GAAGtjC,IAAKuiC,KAAMe,EAAenhB,QAnD5D,WAClB,OAEI,kBAACwgB,GAAA,EAAIY,QAAL,KACI,kBAACZ,GAAA,EAAIa,KAAL,CAAU9P,SAAS,WACf,kBAAC,GAAD,OAGJ,kBAACiP,GAAA,EAAIa,KAAL,CAAU9P,SAAS,sBACf,kBAAC,GAAD,OAGJ,kBAACiP,GAAA,EAAIa,KAAL,CAAU9P,SAAS,mBACf,kBAACva,GAAA,EAAD,KACI,kBAACA,GAAA,EAAKsa,OAAN,KACI,4BAAKnzB,aAAE,6BACP,uBAAG9B,UAAU,OAAO8B,aAAE,6BAE1B,kBAAC6Y,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAAC,GAAD,SAIZ,kBAACmkC,GAAA,EAAIa,KAAL,CAAU9P,SAAS,cACf,kBAAC,GAAD,CAAUhJ,SAAUwY,KAGxB,kBAACP,GAAA,EAAIa,KAAL,CAAU9P,SAAS,cACf,kBAAC,GAAD,CAAUhJ,SAAU0Y,YA8BxCJ,GAAUjiC,aAAe,CACrB66B,UAAW,aAGAoH,U,uCCtBAS,GApDU,SAAC,GAAwE,IAAtE7jC,EAAqE,EAArEA,UAAWwE,EAA0D,EAA1DA,SAAUkC,EAAgD,EAAhDA,KAAM+I,EAA0C,EAA1CA,IAAKq0B,EAAqC,EAArCA,UAAWC,EAA0B,EAA1BA,SAAUC,EAAgB,EAAhBA,UACvEC,EAAW,gEAA4Dv9B,EAAKN,OAAjE,QACX89B,EAAW,WAAOJ,EAAP,YAAoB9jC,EAApB,YAAiCwE,EAAjC,YAA6CkC,EAAKN,OAAlD,YAA4DsR,aAAQhR,EAAKrH,OACpF8kC,EAAU10B,EAAMA,EAAG,UAAM,KAAKxB,KAAKwB,GAAO,IAAM,IAA7B,wBAAgD/Q,IAAM,UAAiBwlC,EAC1F9iC,EAAS,SAAUsF,EAAOA,EAAK09B,KAAO19B,EAAK29B,IAAI16B,QAGnC,UAAd3J,GAAuBoB,EAAOyV,KAAKotB,GAEvC,IAAMK,EAAcljC,EAAOgC,KAAI,SAACihC,EAAK9nB,GACjC,IAAI7C,EAAQ,yBAAK9a,UAAU,kBAAkBiC,IAAKwjC,EAAKnjC,IAAI,SAAS0Y,QAAQ,SAC5E,OAAInK,EAEI,uBAAGzR,KAAMmmC,EAAS/jC,IAAKmc,EAAG3d,UAAU,UAAUwX,OAAO,SAAS4b,IAAI,uBAC7DtY,GAKL,kBAAC,IAAD,CAAMxb,GAAIimC,EAAS/jC,IAAKmc,EAAG3d,UAAU,WAChC8a,MAKjB,OACI,yBAAK9a,UAAU,cACVmlC,GACG,kBAACQ,GAAA,EAAD,CAAOC,MAAI,EAAC1jC,QAAQ,2CACfJ,aAAE,yBAGVsjC,GACG,kBAACO,GAAA,EAAD,CAAOC,MAAI,EAAC1jC,QAAQ,sBACfJ,aAAE,0BAGX,kBAAC,KAAD,CAAQ9B,UAAU,wBAAwB0lC,K,6BClCzCG,GAAW,SAAC,GAA4F,IAA1FzkC,EAAyF,EAAzFA,UAAWwE,EAA8E,EAA9EA,SAAUkC,EAAoE,EAApEA,KAAM+I,EAA8D,EAA9DA,IAAKq0B,EAAyD,EAAzDA,UAAWY,EAA8C,EAA9CA,mBAAoBC,EAA0B,EAA1BA,UAAW1kC,EAAe,EAAfA,SACjG,EAAwB6B,oBAAS,GAAjC,oBAAO4B,EAAP,KAAakhC,EAAb,KACA,EAAkC9iC,oBAAS,GAA3C,oBAAO2tB,EAAP,KAAkBC,EAAlB,KACA,EAA0B5tB,mBAAS,IAAnC,oBAAO+iC,EAAP,KAAcC,EAAd,KACA,EAA0BhjC,mBAAS,IAAnC,oBAAOyuB,EAAP,KAAcC,EAAd,KACA,EAA8B1uB,mBAAS,GAAvC,oBAAOgP,EAAP,KAAgBknB,EAAhB,KACA,EAA8Bl2B,mBAAS,IAAvC,oBAAOikB,EAAP,KAAgBgf,EAAhB,KACA,EAA0CjjC,oBAAS,GAAnD,oBAAOkjC,EAAP,KAAsBC,EAAtB,KA+CA,OAAIx1B,EAEI,oCACI,kBAACwjB,GAAA,EAAD,CAAQnyB,QAAO,iBAAY,IAAM4jC,GAAlB,OAAuCC,EAAY,aAAe,IAAMnuB,OAAK,EAACC,QAhD1E,kBAAMmuB,GAAQ,KAgCzB,SAAC3kC,EAAUD,GAC3B,OAAKC,GAAY,EAAUS,aAAE,yBAA0BV,EAAWC,GAC3DS,aAAE,yBAA0BV,GAetBklC,CAAYjlC,EAAUD,IAE3B,kBAACmlC,GAAA,EAAD,CAAOzhC,KAAMA,EAAM0hC,UAAQ,EAACC,OAlDT,kBAAMT,GAAQ,KAmD7B,kBAACO,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,IACzB,kBAACH,GAAA,EAAMrrB,KAAP,CAAYlb,UAAU,mBAClB,kBAAC+B,GAAA,EAAD,CAAM/B,UAAU,SAChB,uBAAGA,UAAU,WAAb,uEACA,kBAACb,GAAA,EAAD,CACIa,UAAS,8CAAyC8lC,GAClDjuB,QAAS,WApB7B8uB,IAAQrvB,MAAM,CACVsvB,SAAU,iBACVz0B,OAAQ,oCACRhO,MAAO,gCAkBS/E,KAAMyR,EAAG,wBAAoB/Q,IAAM,WAHvC,wBAQJ,kBAACymC,GAAA,EAAMM,OAAP,CAAc7mC,UAAU,OACpB,uBAAGA,UAAU,uBACR8B,aAAE,2BAEP,kBAACuxB,GAAA,EAAD,CAAMC,YAAU,EAACzC,UAAWA,EAAW0C,SAlEtC,SAACjc,GAClB,IAAMnK,EAAOmK,EAAMoc,cACnBpc,EAAMkc,iBACNlc,EAAMmc,mBAEuB,IAAzBtmB,EAAKwmB,iBACL1pB,MAAM,GAAD,OACErC,IAAKsa,iBADP,kBACiCnK,mBAAmB4Z,GADpD,kBACoE5Z,mBACjEkuB,GAFH,sBAGcn+B,EAAKwhB,OAEnBnf,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACH8wB,EAAW9wB,EAAK4J,SACK,IAAjB5J,EAAK4J,SAAei0B,EAAW,IACd,IAAjB79B,EAAK4J,UACLi0B,EAAW79B,EAAKkK,OAAO,GAAG2U,SAC1Bkf,GAAiB,OAGxBpzB,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,GAC9C4uB,GAAiB,MAI7BvV,GAAa,GACbuV,GAAiB,KAwCgB,IAAZn0B,GACG,kBAACmhB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,IACL,kBAAC0mB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,aAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,mBACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIK,MAAOwhC,EACP1hC,SAAU,SAACkT,GAAD,OAAOyuB,EAASzuB,EAAED,OAAO/S,QACnCQ,KAAK,OACLgvB,YAAY,aACZJ,UAAQ,IAEZ,kBAACR,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,iCAKR,kBAAC+W,GAAA,EAAD,CAAKrP,GAAI,IACL,kBAAC0mB,GAAA,EAAKvvB,MAAN,CAAYC,UAAU,gBAClB,kBAACsvB,GAAA,EAAKpvB,MAAN,sBACA,kBAACovB,GAAA,EAAKjvB,QAAN,CACIK,MAAOktB,EACPptB,SAAU,SAACkT,GAAD,OAAOma,EAASna,EAAED,OAAO/S,QACnCQ,KAAK,QACLgvB,YAAY,gBACZJ,UAAQ,IAEZ,kBAACR,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAA5B,0CAKR,kBAAC+W,GAAA,EAAD,CAAKrP,GAAI,IACL,kBAAC0nB,GAAA,EAAD,CAAQzc,OAAK,EAAC1V,QAAQ,YAAYO,KAAK,KAAKwC,KAAK,UAAjD,eAMXkiB,EAAQviB,OAAS,GACd,kBAACyuB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BAChB,kBAACgc,GAAA,EAAD,KACI,uBAAGhc,UAAU,oBACT,uBAAGA,UAAU,sBADjB,IAC2CmnB,KAM1C,IAAZjV,GACG,kBAACmhB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,6BAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,IACL,uBAAG3M,UAAU,kBACT,uBAAGA,UAAU,yCADjB,uGASXomC,GAA6B,IAAZl0B,GACd,kBAACyM,GAAA,EAAD,CACIjd,OAAQ,CACJw7B,MAAO,gBACPK,WAAY,UACZ5L,MAAOA,EACP2L,YAAaprB,EAAU,MAAQ,KAC/B40B,iBAAkB5tB,aAAcsC,OAAO5G,SAASxV,SAI5D,uBAAGY,UAAU,oBACT,uBAAGZ,KAAK,SAASoY,OAAO,SAAS4b,IAAI,uBACjC,2BAAItxB,aAAE,0CACL,IAHT,aAqBpB,kBAAC,IAAD,CACIxC,GAAE,WAAM4lC,EAAN,YAAmB9jC,EAAnB,YAAgCwE,EAAhC,YAA4CkC,EAAKN,OAAjD,YAA2DsR,aAAQhR,EAAKrH,MAAQ,KAClFT,UAAS,6BAAwBqB,GAAY,iBAApC,YAAwDykC,GAAxD,OAA6EC,EAAY,aAAe,KAEhHjkC,aAAE,yBAA0BV,EAAWC,KAcpDwkC,GAAStjC,aAAe,CACpB2iC,UAAW,cACXY,mBAAoB,eAGTD,UCzMFkB,GAAuB,SAAC,GAAD,IAChCC,EADgC,EAChCA,eACAC,EAFgC,EAEhCA,aACA5lC,EAHgC,EAGhCA,SACA6lC,EAJgC,EAIhCA,gBACAC,EALgC,EAKhCA,iBACAC,EANgC,EAMhCA,UACAC,EAPgC,EAOhCA,UAPgC,OAShC,qCACMD,GACE,oCACI,uBAAGpnC,UAAU,kBACT,4BAAQA,UAAS,UAAKmnC,IAAqBH,GAAkBC,GADjE,OAGKD,EAAiBllC,aAAE,iCAAkCob,aAAe8pB,EAAgBC,IAAiBnlC,aAAE,gCAAiCklC,EAAgB9pB,aAAe8pB,EAAgBC,MAE1LI,GACE,uBAAGrnC,UAAU,OACR8B,aAAE,sBACH,0BAAM9B,UAAS,aAAQmnC,EAAR,sBAAf,WACkBH,EAAiB3lC,EAAW6lC,KAM7DE,GACG,oCACI,uBAAGpnC,UAAU,aACT,+BAAQ8B,aAAE,wBAEd,uBAAG9B,UAAS,uBAAkBmnC,EAAlB,sBAAZ,OACYH,EAAiB3lC,EAAW6lC,MAexDH,GAAqBxkC,aAAe,CAChC4kC,iBAAkB,gBAGPJ,U,mBCCAO,GArDY,SAACtlC,GAYxB,MAAwBkB,oBAAS,GAAjC,oBAAO4B,EAAP,KAAakhC,EAAb,KACMxgC,EAAWsD,cASXy+B,EAAc,kBAAMvB,GAASlhC,IAEnC,OACI,oCACI,kBAACuvB,GAAA,EAAD,CACInyB,QAASF,EAAME,QACf2V,QAdc,WAElB7V,EAAM4D,UAAWD,aAAaH,EAAUxD,EAAM4D,UAIlD2hC,KASQvnC,UAAWgC,EAAMhC,UACjB4X,OAAK,GAJT,sBAMA,kBAAC2uB,GAAA,EAAD,CAAOzhC,KAAMA,EAAM2hC,OAAQc,EAAaf,UAAQ,GAC5C,kBAACD,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,GACrB,kBAACH,GAAA,EAAMiB,MAAP,4BAEJ,kBAACjB,GAAA,EAAMrrB,KAAP,KACKlZ,EAAMwF,QACH,kBAACkV,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACA,kBAACsY,GAAA,EAAD,CAAOpyB,QAAQ,aAAf,4BAAqDF,EAAMnC,SAA3D,QAKZ,kBAAC4U,GAAA,EAAD,CAAkB2C,WAAW,EAAMrY,KAAK,eCxC5D,SAAS0oC,GAAT,GAaI,IAZArmC,EAYD,EAZCA,UACAwE,EAWD,EAXCA,SAEAkC,GASD,EAVCkiB,SAUD,EATCliB,MACAzG,EAQD,EARCA,SACA6lC,EAOD,EAPCA,gBACAF,EAMD,EANCA,eACAC,EAKD,EALCA,aACAp2B,EAID,EAJCA,IAEAq0B,EAED,EAFCA,UACAzU,EACD,EADCA,SAEM0U,EAAwB,IAAbr9B,EAAK4/B,IAChBtC,EAAyB,IAAbt9B,EAAK4/B,IACjBC,EAAexC,EAAW,oBAAsBC,EAAY,cAAgB,GAC5EU,EAAqBX,EAAW,gBAAkB,cAClDgC,EAAmBhC,EAAW,iBAAH,eAA8BrlC,IAAO,yBAChE8nC,KAAoBZ,IAAkBC,GACtCY,OAAyB58B,IAAb5J,EAAyB6lC,EAAkB7lC,EAE7D,OACI,oCACkB,SAAbovB,GACG,kBAAC/T,GAAA,EAAD,CAAW1c,UAAS,wCAAmC2nC,IACnD,kBAAClrB,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK3E,GAAI,EAAGF,GAAI,EAAGnX,UAAU,OACzB,kBAAC,GAAD,CAAiBoB,YAAWwE,WAAUkC,OAAM+I,MAAKq0B,YAAWC,WAAUC,eAG1E,kBAACppB,GAAA,EAAD,CAAK3E,GAAI,EAAGF,GAAI,EAAGnX,UAAU,sBACzB,kBAACyc,GAAA,EAAD,CAAKzc,UAAU,QACX,kBAACgc,GAAA,EAAD,KACI,4BAAKlU,EAAKrH,MACV,2BACI,uBAAGT,UAAS,0BAAqBmnC,KADrC,OAEWr/B,EAAKggC,QAKxB,kBAACrrB,GAAA,EAAD,CAAK2Z,WAAS,GACT3Y,MAAM8Y,QAAQzuB,EAAKigC,WAChB,4BACKjgC,EAAKigC,SAASvjC,KAAI,SAACwjC,EAASrqB,GAAV,OACf,wBAAInc,IAAKmc,EAAGf,wBAAyB,CAAEC,OAAQmrB,UAM/D,kBAACvrB,GAAA,EAAD,CAAKzc,UAAU,qEACV4nC,EACG,kBAAC5rB,GAAA,EAAD,KACI,kBAAC,GAAD,CACIqrB,WAAW,EAEPL,iBACAC,eACA5lC,WACA6lC,kBACAC,sBAKZ,kBAACnrB,GAAA,EAAD,KACmB,aAAdkpB,GACG,kBAAC,GAAD,CACIhjC,QAAQ,cACRsF,OAAQM,EAAKN,OACb3H,SAAUiI,EAAKrH,QAM/B,kBAACub,GAAA,EAAD,KACI,kBAAC,GAAD,CAAU+pB,WAAW,EAAO1kC,SAAUwmC,EAAiBzmC,YAAWwE,WAAUkC,OAAM+I,MAAKq0B,YAAWY,4BAO5G,SAAbrV,GACG,kBAAC9V,GAAA,EAAD,CAAM3a,UAAS,mDAA8C2nC,IACzD,yBAAK3nC,UAAU,qBACX,kBAAC,GAAD,CAAiBoB,YAAWwE,WAAUkC,OAAM+I,MAAKq0B,YAAWC,WAAUC,cACtE,yBAAKplC,UAAU,sCACX,uBAAGA,UAAU,mBACT,uBAAGA,UAAS,0BAAqBmnC,EAArB,OADhB,OAEWr/B,EAAKggC,QAIxB,kBAACntB,GAAA,EAAKO,KAAN,KACI,wBAAIlb,UAAU,MAAM8H,EAAKrH,MACxBmnC,GACG,yBAAK5nC,UAAU,QACX,kBAAC,GAAD,CACIqnC,WAAW,EACXtB,WAAW,EAEPiB,iBACAC,eACA5lC,WACA6lC,kBACAC,sBAKf1pB,MAAM8Y,QAAQzuB,EAAKigC,WAChB,wBAAI/nC,UAAU,OACT8H,EAAKigC,SAASvjC,KAAI,SAACwjC,EAASrqB,GAAV,OACf,wBAAInc,IAAKmc,EAAGf,wBAAyB,CAAEC,OAAQmrB,UAK/D,kBAACrtB,GAAA,EAAKksB,OAAN,CAAa7mC,UAAU,0BACnB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACmB,aAAdkpB,GACG,kBAAC,GAAD,CACIhjC,QAAQ,cACRrC,SAAUiI,EAAKrH,KAChBT,UAAU,mBAGjB,kBAAC,GAAD,CACI+lC,WAAW,EACX1kC,SAAUwmC,EACJzmC,YAAWwE,WAAUkC,OAAM+I,MAAKq0B,YAAWY,4BA0BrF2B,GAASllC,aAAe,CACpBwlC,SAAU,GACV/d,SAAU,GACVliB,KAAM,IAGKmgC,sBAAKR,I,UC9KPS,GAAc,SAAC,GASrB,IARH7mB,EAQE,EARFA,QACArhB,EAOE,EAPFA,UACA+a,EAME,EANFA,MACAotB,EAKE,EALFA,MACAC,EAIE,EAJFA,eACAC,EAGE,EAHFA,gBAEAC,GACE,EAFFC,eAEE,EADFD,QAIME,EAAkB,SAACpjC,EAAQkjC,GAC7B,YAAer9B,IAAXq9B,EACOD,EAAgBC,KAAYljC,EAAO+iC,GAEvCE,EAAgB/kC,SAAS8B,EAAO+iC,KAG3C,OACI,kBAACxtB,GAAA,EAAD,CAAM3a,UAAS,+CAA0CA,GAAa,KAClE,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,sBAAsB+a,GAE7C,kBAACJ,GAAA,EAAKO,KAAN,KACI,kBAACmY,GAAA,EAAD,KACKhS,EAAQ7c,KAAI,SAACY,GAAD,OACT,kBAACiuB,GAAA,EAAKhuB,MAAN,CACI7D,IAAK4D,EAAO+iC,GACZljC,KAAM,WACNwjC,iBAAgBrjC,EAAO+iC,GACvBhkC,MAAOiB,EAAOjB,OAASiB,EAAO3E,KAC9B8D,SAAU,kBAAM6jC,EAAehjC,EAAO+iC,GAAQG,IAC9ChjC,QAASkjC,EAAgBpjC,EAAQkjC,YAiB7DJ,GAAY3lC,aAAe,CACvB8e,QAAS,GACTgnB,gBAAiB,GACjBF,MAAO,MAcID,U,SC/DFQ,GAAsB,SAAC1mC,GAChC,IAAMwD,EAAWsD,cAyDjB,OATArF,qBAAU,WACN,GAAIzB,EAAM2mC,OAAQ,CACd,IAAMC,EAAkB,IAAIpqB,gBAAgB7F,SAAS/D,SAAS/M,QAAQ63B,IAAI19B,EAAM2mC,QAC5EC,GACAtwB,aAAS9S,EAAUxD,EAAM6mC,SAAUD,EAAgB5vB,cAAcjO,MAAM,SAGhF,CAACvF,EAAUxD,EAAM2mC,OAAQ3mC,EAAM6mC,WAE3B,kBAAC,GAAD,iBAAiB7mC,EAAjB,CAAwBomC,eAvDR,SAAC5mC,EAAK8mC,GASzB,GAAsB,kBAAXA,EAAqB,CAC5B,IAAMQ,EAAc9mC,EAAM8mC,YAC1BtnC,EAAM+J,SAAS/J,GAEf,IAAMunC,EAAQ/mC,EAAMqmC,gBAEdW,EAAgBD,EAAMT,KAAY9mC,EACxCunC,EAAMT,GAAUU,GAAiB,EAAIxnC,EAGrC,IAAK,IAAImc,EAAI,EAAGA,EAAImrB,EAAanrB,IAC7BorB,EAAMprB,GAAKorB,EAAMprB,KAAO,EAG5B,IAAMsrB,EAAQ,YAAOF,GAErBzwB,aAAS9S,EAAUxD,EAAM6mC,SAAUI,GAGjB,qBAAXX,IACHtmC,EAAMqmC,gBAAgB/kC,SAAS9B,GAC/B8W,aACI9S,EACAxD,EAAM6mC,SACN7mC,EAAMqmC,gBAAgBjjC,QAAO,SAACrE,GAAD,OAASA,IAAQS,MAGlD8W,aAAS9S,EAAUxD,EAAM6mC,SAAjB,sBAA+B7mC,EAAMqmC,iBAArC,CAAsD7mC,OAmBX+mC,eAdxC,WACnBjwB,aAAS9S,EAAUxD,EAAM6mC,SAAU,SAsB3CH,GAAoBnmC,aAAe,CAC/B8lC,gBAAiB,IAGNK,U,UC7CAQ,GA9BU,SAAClnC,GAAW,IAAD,IAChC,OACI,kBAACqxB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAWgC,EAAMhC,WACzB,kBAACqzB,GAAA,EAAKpvB,MAAN,CAAYjE,UAAU,aAClB,uBAAGA,UAAU,mBADjB,IACwCgC,EAAM+Y,OAE9C,kBAACouB,GAAA,EAAD,CACI9kC,GAAG,SACHrE,UAAU,yBACVuE,SAAU,SAACkT,GAAD,OAAOzV,EAAMuC,SAASkT,IAChChT,MAAK,oBAAKzC,EAAMonC,mBAAX,aAAK,EAAmBvM,MAAxB,sBAAiC76B,EAAMonC,mBAAvC,aAAiC,EAAmBC,YAExDrnC,EAAMsnC,YAAY9kC,KAAI,SAAC+kC,GAAD,OACnB,4BAAQ/nC,IAAG,UAAK+nC,EAAI1M,MAAT,YAAkB0M,EAAIF,WAAa5kC,MAAK,UAAK8kC,EAAI1M,MAAT,YAAkB0M,EAAIF,YACpEE,EAAIplC,aCVhBqlC,GAAoB,SAACxnC,GAC9B,IAAMwD,EAAWsD,cAkBjB,OATArF,qBAAU,WACN,GAAIzB,EAAM2mC,OAAQ,CACd,IAAMC,EAAkB,IAAIpqB,gBAAgB7F,SAAS/D,SAAS/M,QAAQ63B,IAAI19B,EAAM2mC,QAC5EC,GACAtwB,aAAS9S,EAAUxD,EAAM6mC,SAAUD,EAAgB79B,MAAM,SAGlE,CAACvF,EAAUxD,EAAM2mC,OAAQ3mC,EAAM6mC,WAE3B,kBAAC,GAAD,iBAAe7mC,EAAf,CAAsBuC,SAhBZ,SAAC+S,GACd,MAA2BA,EAAME,OAAO/S,MAAMsG,MAAM,KAApD,oBAAO8xB,EAAP,KAAcwM,EAAd,KACMI,EAAqBznC,EAAMsnC,YAAY3lC,MAAK,SAAC4lC,GAAD,OAASA,EAAI1M,QAAUA,GAAS0M,EAAIF,YAAcA,KACpG/wB,aAAS9S,EAAUxD,EAAM6mC,SAAUY,QAsB3CD,GAAkBjnC,aAAe,CAC7B8lC,gBAAiB,IAGNmB,U,SCkIAE,GA1KE,CACb,CACIC,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIF,YAAa,cACbC,QAAS,CACL,CACIE,WAAY,SAIxB,CACIH,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIF,YAAa,qBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,6BACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,MACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,MACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,WACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,WACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,OACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,gBACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,eACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,eACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,aACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,eACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,kBACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,QACbJ,YAAa,WACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,QACbJ,YAAa,gBACbC,QAAS,CACL,CACIC,MAAO,aAInB,CACIE,YAAa,QACbJ,YAAa,mBACbC,QAAS,CACL,CACIC,MAAO,cChKVG,GAAY,SAAChoC,GAAD,OACrB,kBAAC,KAAD,CACIioC,SAAUjoC,EAAMioC,SAChBl9B,KAAM,CACFiT,KACI,oNACJkqB,UAAWloC,EAAMmoC,OACjBC,YAAa,EACbC,aAAc,EACdC,YAAa,OACb7nC,KAAM,IAAI+Y,OAAO+uB,OAAOC,KAAKC,KAAK,GAAI,GAAI,KAAM,MAChDC,OAAQ,IAAIlvB,OAAO+uB,OAAOC,KAAKG,MAAM,EAAG,EAAG,KAAM,MACjDC,OAAQ,IAAIpvB,OAAO+uB,OAAOC,KAAKG,MAAM,GAAI,GAAI,KAAM,MACnDE,WAAY,IAAIrvB,OAAO+uB,OAAOC,KAAKC,KAAK,GAAI,GAAI,KAAM,OAE1DK,OAAQ9oC,EAAM8oC,OACdjzB,QAAS7V,EAAM6V,SAEd7V,EAAMoK,WAWf49B,GAAUznC,aAAe,CACrB4nC,OAAQ,QAGGH,UCmBAe,GA/C4B,SAAC/oC,GACxC,OACI,kBAAC,KAAD,CACI4oC,OAAQ5oC,EAAM4oC,OACdX,SAAUjoC,EAAMgpC,OAAOljC,KAAKuiB,IAC5B4gB,aAAcjpC,EAAMuyB,QACpBv0B,UAAU,QAEV,oCACI,uBAAGA,UAAU,aAAagC,EAAMgpC,OAAOljC,KAAKrH,MAC5C,2BAAIuB,EAAMgpC,OAAOljC,KAAKggC,OACpB9lC,EAAMkpC,kBACJ,uBAAGlrC,UAAU,oBACRgC,EAAMgpC,OAAOhE,gBAAkBhlC,EAAMgpC,OAAO/D,aAAc,IAC1DnlC,aACG,kCACEE,EAAMgpC,OAAOhE,eACf9pB,aAAelb,EAAMgpC,OAAOhE,eAAgBhlC,EAAMgpC,OAAO/D,eAE7D,6BACCnlC,aAAE,sBARP,QASKE,EAAMgpC,OAAO3pC,UAAYW,EAAMgpC,OAAO9D,iBAG/C,kBAAC,GAAD,CACI9lC,UAAWY,EAAMZ,UACjBwE,SAAU5D,EAAM4D,SAChBkC,KAAM9F,EAAMgpC,OAAOljC,KACnBo9B,UAAWljC,EAAMkjC,UACjBr0B,IAAK7O,EAAMgpC,OAAOn6B,IAClBi1B,mBAAmB,0BCIxBqF,GArC6B,SAACnpC,GACzC,IAAMopC,EAAW,YAAO,IAAI7f,IAAIvpB,EAAMgd,QAAQxa,KAAI,SAACwmC,GAAD,OAAYA,EAAOljC,KAAKwhB,UAe1E,OACI,kBAAC3O,GAAA,EAAD,CAAM3a,UAAU,QACZ,kBAAC2a,GAAA,EAAKO,KAAN,KACI,kBAACuB,GAAA,EAAD,KACK2uB,EAAY5mC,KAAI,SAACgQ,GAAD,OAfb,SAAC62B,GAAS,IAAD,MACzB,GAAI,UAACrpC,EAAMspC,aAAaD,UAApB,aAAC,EAAyBlB,OAC9B,OAAO,kBAACnuB,GAAA,EAAD,CAAKxa,IAAK6pC,EAAKl0B,GAAI,EAAGE,GAAI,EAAG8E,GAAI,EAAGnc,UAAU,QACjD,uBACIA,UAAU,0BACVurC,MAAO,CAAE1B,MAAK,UAAE7nC,EAAMspC,aAAaD,UAArB,aAAE,EAAyBlB,UAH1C,UAKFnoC,EAAMspC,aAAaD,UALjB,aAKF,EAAyB5qC,MAQe+qC,CAAYh3B,MAE7C,kBAACwH,GAAA,EAAD,CAAK7E,GAAI,EAAGE,GAAI,EAAG8E,GAAI,EAAGnc,UAAU,QAChC,uBAAGA,UAAU,0BAA0BurC,MAAO,CAAE1B,MAAO,UACtD/nC,aAAE,4CCnBrB2pC,GAAiB,CACnB/vB,MAAO,OACPrZ,OAAQ,SAGNipC,GAAe,CACjBI,EAAG,CACCvB,OAAQ,UACR1pC,KAAM,OAEVoiB,EAAG,CACCsnB,OAAQ,UACR1pC,KAAM,SAEVkrC,EAAG,CACCxB,OAAQ,UACR1pC,KAAM,oBAEVmrC,IAAK,CACDzB,OAAQ,UACR1pC,KAAM,qBAId,SAASorC,GAAkB7pC,GACvB,MAA4BkB,mBAAS,MAArC,oBAAO4oC,EAAP,KAAeC,EAAf,KACA,EAA4C7oC,mBAAS,MAArD,oBAAO8oC,EAAP,KAAuBC,EAAvB,KACA,EAAkC/oC,mBAAS,IAA3C,oBAAOgpC,EAAP,KAAkBC,EAAlB,KACA,EAAgCjpC,oBAAS,GAAzC,oBAAOkpC,EAAP,KAAiBC,EAAjB,KAEA,EAAgCC,aAAc,CAC1CzsB,iBAAkB/f,IAAO+f,mBADrBtM,EAAR,EAAQA,SAAUg5B,EAAlB,EAAkBA,UAIdA,GAAW5qC,QAAQwxB,MAAMoZ,GAE7B,IAAMC,EAAYziC,uBACd,SAACvF,GACG,IAAMioC,EAAS,IAAIjxB,OAAO+uB,OAAOC,KAAKkC,aACtC1qC,EAAMgd,QAAQxa,KAAI,SAACwmC,GAEf,OADAyB,EAAOE,OAAO3B,EAAOljC,KAAKuiB,KACnB2gB,EAAOljC,KAAKN,UAEvBhD,EAAIgoC,UAAUC,KAElB,CAACzqC,EAAMgd,UAGL4tB,EAAc,SAACpoC,GACjBunC,EAAUvnC,GACVgoC,EAAUhoC,IAeRqoC,EAAkB,WACpBR,GAAY,IAGhB5oC,qBAAU,WACFqoC,GACAU,EAAUV,KAEf,CAAC9pC,EAAMgd,QAASwtB,EAAWV,IAiD9B,OAAOv4B,EA7CC,oCACI,kBAAC,KAAD,CACIvP,GAAG,WACH8oC,kBAAmBrB,GACnBsB,KAAM/qC,EAAM+qC,KAEZhT,QAAS,CACLiT,OAAQtD,GACRuD,mBAAmB,EACnBC,QAAS,GACTC,sBAAuB,CACnBC,WAAY,KAGpBtC,OAAQ8B,EACRS,sBAAsB,qBACtBH,QAAQ,MAEPlrC,EAAMgd,QAAQxa,KAAI,SAACwmC,GAAD,aACf,kBAAC,GAAD,CACIxpC,IAAKwpC,EAAOljC,KAAKN,OACjByiC,SAAUe,EAAOljC,KAAKuiB,IACtB8f,QAAQ,UAAAmB,GAAaN,EAAOljC,KAAKwhB,aAAzB,eAAgC6gB,SAAU,OAClDW,OAAQ,SAACwC,GAAD,OA/CN,SAACA,EAAQtC,GAC/B,OAAOmB,GAAa,SAACoB,GACjB,OAAO,2BAAKA,GAAZ,kBAAwBvC,EAAOljC,KAAKN,OAAS8lC,OA6CTE,CAAkBF,EAAQtC,IAC9CnzB,QAAS,kBA1CN,SAACmzB,GACxBiB,EAAkBjB,GACdoB,GAAUC,GAAY,GAC1BA,GAAY,GAuCuBoB,CAAmBzC,SAIzCoB,GAAYJ,GACT,kBAAC,GAAD,CACIpB,OAAQsB,EAAUF,EAAelkC,KAAKN,QACtCpG,UAAWY,EAAMZ,UACjBwE,SAAU5D,EAAM4D,SAChBolC,OAAQgB,EACR9G,UAAWljC,EAAMkjC,UACjB3Q,QAASsY,EACT3B,iBAAkBlpC,EAAMkpC,oBAIpC,kBAAC,GAAD,CAA8BI,aAAcA,GAActsB,QAAShd,EAAMgd,WAKrD,aAWpC6sB,GAAkBtpC,aAAe,CAC7B2iC,UAAW,eAGA2G,UCpJFvT,GAAW,SAACjwB,EAAO7G,GAAR,OAAgB6G,EAAMwN,SAASrU,ICGjD8nC,GAAc,CAChB,CACInlC,MAAO,oBACP04B,MAAO,WACP6Q,SAAU,kBACVrE,UAAW,OAEf,CACIllC,MAAO,oBACP04B,MAAO,WACP6Q,SAAU,kBACVrE,UAAW,QAEf,CACIllC,MAAO,OACP04B,MAAO,OACPwM,UAAW,QAWnB,SAASsE,GAAqBtF,EAAiBrpB,GAC3C,OAAKqpB,EAAgBzjC,OACdoa,EAAQ5Z,QAAO,SAAC4lC,GAAD,OAAY3C,EAAgB/kC,SAAS0nC,EAAOljC,KAAKwhB,SADnCtK,EAIxC,SAAS4uB,GAAwBvF,EAAiBrpB,GAC9C,OAAKqpB,EAAgBzjC,QAAgD,MAArCyjC,EAAgB,GAAGrvB,eAAoD,IAA3BqvB,EAAgBzjC,OACjFoa,EACJA,EAAQ5Z,QAAO,SAAC4lC,GAAD,MAAiC,MAArBA,EAAOljC,KAAK2F,QAGlD,SAASogC,GAAchkB,EAAU7K,EAAS8uB,GACtC,IAAKjkB,IAAaA,EAASjlB,OAAQ,OAAOoa,EAE1C,IAAM+uB,EAAeD,EAAatpC,KAAI,SAACwpC,GAAD,OAAUA,EAAKC,WAC/CC,EAAa,YAAOrkB,GAE1B,OAAO7K,EAAQ5Z,QAAO,SAAC4lC,GACnB,IAEImD,EA0HZ,WAA6B,IAAXpxB,EAAU,uDAAJ,GACpB,OAAOA,EAAI3X,QAAO,SAACmH,GAAD,MAAiB,KAARA,KAAY/H,KAAI,SAAC4pC,GAAD,OAAQA,KA3H/BC,CAFA5wB,MAAM8Y,QAAQyU,EAAOljC,KAAKihC,OAASiC,EAAOljC,KAAKihC,MAAQ,IAavE,OAVAlf,EAAWqkB,GAEXC,EAAYA,EAAU3pC,KAAI,SAAC+H,EAAKkO,GAC5B,IAAM6zB,EAAgBzkB,EAASpP,GACzBwzB,EAAUF,EAAatzB,GAC7B,OAAuB,IAAnB6zB,GACGC,GAAkBhiC,EAAK0hC,EAASK,OAI1BE,OAAM,SAACnvC,GAAD,OAAOA,QAItC,SAASovC,GAAcC,EAAkB1vB,GAIrC,OAHA0vB,EAAiBlqC,KACb,SAACY,GAAD,OAAa4Z,EAAUA,EAAQ5Z,QAAO,SAAC4lC,GAAD,OAAYz/B,SAASy/B,EAAOljC,KAAK6mC,OAASpjC,SAASnG,SAEtF4Z,EAGX,SAAS4vB,GAAgBC,EAAQ7vB,GAC7B,OAAOA,EAAQ5Z,QAAO,SAAC4lC,GAAD,OAAYA,EAAOljC,KAAKgnC,MAAMxrC,UAAUurC,MAGlE,IAAMN,GAAoB,SAACQ,EAAMd,EAASe,GACtC,OAAQf,GACJ,IAAK,KACD,OAAOc,GAAQC,EACnB,IAAK,IACD,OAAOD,EAAOC,EAClB,IAAK,KACD,OAAOD,IAASC,EACpB,IAAK,IACD,OAAOD,EAAOC,EAClB,IAAK,KACD,OAAOD,GAAQC,EACnB,QACI,OAAO,IAInB,SAASC,GAAUC,EAAclwB,GAC7B,IAAKkwB,IAAiBlwB,EAAS,OAAOA,EAEtC,IAAQ6d,EAA+BqS,EAA/BrS,MAAO6Q,EAAwBwB,EAAxBxB,SAAUrE,EAAc6F,EAAd7F,UAEX,SAAVxM,EASc,QAAdwM,EACArqB,EAAQ5J,MAAK,SAACC,EAAGC,GACb,OAAmB,IAAfD,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,KAAmB,EAC/B,IAAfryB,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,IAAkB,EAC1CruB,WAAWhE,EAAEwnB,IAAUxnB,EAAEq4B,IAAar0B,WAAW/D,EAAEunB,IAAUvnB,EAAEo4B,OAG1E1uB,EAAQ5J,MAAK,SAACC,EAAGC,GACb,OAAmB,IAAfD,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,KAAmB,EAC/B,IAAfryB,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,IAAkB,EAC1CruB,WAAW/D,EAAEunB,IAAUvnB,EAAEo4B,IAAar0B,WAAWhE,EAAEwnB,IAAUxnB,EAAEq4B,OAlB1E1uB,EAAQ5J,MAAK,SAACC,EAAGC,GACb,OAAmB,IAAfD,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,KAAmB,EAC/B,IAAfryB,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,IAAkB,EAC1CryB,EAAEvN,KAAKrH,KAAK8U,cAAcD,EAAExN,KAAKrH,SAoBpD,SAAS0uC,GAA8B9G,EAAiBrpB,GACpD,IAAKA,EAAS,OAAOA,EACrB,IAAMowB,EAAW,YACV,IAAI7jB,IACHvM,EACKxa,KAAI,SAACwmC,GAAD,OAAYA,EAAOhhB,YACvB5kB,QAAO,SAAC4kB,GAAD,QAAgBA,KACvBxlB,KAAI,SAACwlB,GAAD,OAAcA,EAASV,UAIxC,OAAO+e,EAAgBjjC,QAAO,SAACpB,GAAD,OAAQorC,EAAY9rC,SAASU,MAG/D,SAASqrC,GAAmBrwB,EAASswB,GACjC,IAAKtwB,EAAS,OAAOA,EACrB,IAAMoC,EAAY,IAAImK,IAAIvM,EAAQxa,KAAI,SAACwmC,GAAD,OAAYA,EAAOhhB,YAAU5kB,QAAO,SAAC4kB,GAAD,QAAgBA,MAE1F,OAAO,YAAI5I,GACN5c,KAAI,SAACwlB,GAAD,mBAAC,eACCA,GADF,IAEDnlB,SAAUyqC,EAAkBhsC,SAAS0mB,EAASV,WAEjDlU,MAAK,SAACC,EAAGC,GACN,OAAID,EAAE5U,KAAO6U,EAAE7U,MAAc,EACzB4U,EAAE5U,KAAO6U,EAAE7U,KAAa,EACrB,KAInB,SAAS8uC,GAAsBlH,GAC3B,MAAO,CACH,CACIrkC,GAAI,IACJvD,KAAM,eACNoE,SAAUwjC,EAAgB/kC,SAAS,OA0IhCksC,OA9DR,SACHxwB,EACA5d,GAUD,IARCquC,EAQF,uDAR4B,GAC1BC,EAOF,uDAP+B,GAC7BC,EAMF,uDANqB,GACnBjB,EAKF,uDALqB,GACnB3F,EAIF,uDAJU,GACRK,EAGF,uDAHgBE,GAAY,GAC1BsG,EAEF,uCADEC,EACF,uCAKQC,EAA2BX,GAA8BM,EAAyBzwB,GAGlF+wB,EAAmBV,GAAmBrwB,EAAS8wB,GAC/CE,EAAsBT,GAAsBG,GAQ9CO,EAAatC,GAAqBmC,EAA0B9wB,GA8BhE,MA1BkB,gBAAd5d,IACA6uC,EAAarC,GAAwB8B,EAA4BO,IAIrEA,EAAaxB,GAAcC,EAD3BuB,EAAapC,GAAc8B,EAAkBM,EAAYlH,IAKrD8G,IACAI,EAAarB,GAAgBiB,EAAQI,IAIrC7G,GACA6F,GAAU7F,GAAeE,GAAY,GAAI2G,GAGzCL,GACAK,EAAW76B,MAAK,SAACC,EAAGC,GAChB,OAAmB,IAAfD,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,KAAmB,EAC/B,IAAfryB,EAAEvN,KAAK4/B,KAA4B,IAAfpyB,EAAExN,KAAK4/B,IAAkB,EAC1CryB,EAAEvN,KAAKrH,KAAK8U,cAAcD,EAAExN,KAAKrH,SAIzC,CAACsvC,EAAkBC,EAAqB1G,GAAa2G,ICjSnDC,GAAmB,SAACluC,GAC7B,MAA8CkB,oBAAS,GAAvD,oBAAOitC,EAAP,KAAwBC,EAAxB,KACMC,EAAUxd,iBAAO,MAEjByd,EAAiB,WACnBD,EAAQpd,QAAQsd,UAAUC,OAAO,aACjCJ,GAAmB,IAGjB/sC,EAAQ,CACV,iBACA,mBACA,iBACA,OACA,SACA,QACFC,SAASC,UAAUC,UAarB,OAXAitC,2BAAgB,WACM,MAAdzuC,EAAMjD,OACLoxC,GAAiBE,EAAQpd,QAAQsd,UAAU/kB,IAAI,aACzC6kB,EAAQpd,QAAQyd,aAAeL,EAAQpd,QAAQ0d,iBAAiB,GAAGtuC,OACnE,GAAoB,OAAfL,EAAMjD,MAAeuxC,OACtC,CAACD,EAASruC,EAAMjD,OAEnB0E,qBAAU,WACN2sC,EAAmB/sC,KACpB,IAGgB,OAAfrB,EAAMjD,MACF,yBAAKiB,UAAS,6BAAwBgC,EAAMhC,WAAa,KACpDgC,EAAM4uC,OACH,yBACI5wC,UAAS,eAAUmwC,EAAkB,GAAK,aAC1Cvc,IAAKyc,EACLzzB,wBAAyB,CAAEC,OAAQ7a,EAAMjD,MACzCwsC,MAAO,CAAEsF,gBAAiB7uC,EAAM8uC,QAAUX,EAAkBnuC,EAAM8uC,MAAMtgC,WAAa2/B,EAAkB,MAAQ,OAGnH,yBACInwC,UAAS,eAAUmwC,EAAkB,GAAK,aAC1Cvc,IAAKyc,EACL9E,MAAO,CAAEsF,gBAAiB7uC,EAAM8uC,QAAUX,EAAkBnuC,EAAM8uC,MAAMtgC,WAAa2/B,EAAkB,MAAQ,MAE9GnuC,EAAMjD,MAGf,kBAACs1B,GAAA,EAAD,CAAQ5xB,KAAK,KAAKP,QAAQ,cAAc2V,QAASy4B,EAAgBtwC,UAAU,QAA3E,eAQhBkwC,GAAiB3tC,aAAe,CAC5BuuC,MAAO,EACP/xC,KACI,mqBAGOmxC,UCVAa,OAlDf,SAA4B/uC,GACxB,MAA8BkB,oBAAS,GAAvC,oBAAO8tC,EAAP,KAAgBC,EAAhB,KACA,EAA8B/tC,mBAASlB,EAAM4G,QAA7C,oBAAOsoC,EAAP,KAAgBC,EAAhB,KA6CA,OA/BA1tC,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAyBvB,OAxBAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,4IAC8I9O,EAAM4G,QACrJ,CAAEuI,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACCA,EAAK1D,OAAS,IAEV5C,EAAMovC,QACN,kBAAmB9oC,EAAK,GAAG+oC,KAC3B/oC,EAAK,GAAG+oC,IAAIC,eACZhpC,EAAK,GAAG+oC,IAAIC,cAAcC,MAAK,SAACl8B,GAAD,OAAOA,EAAEm8B,UAAYxvC,EAAMovC,UAE1DD,EACI,uBAAGnxC,UAAU,QACRsI,EAAK,GAAG+oC,IAAIC,cAAc3tC,MAAK,SAAC0R,GAAD,OAAOA,EAAEm8B,UAAYxvC,EAAMovC,UAAQK,YAI3EN,EAAW,uBAAGnxC,UAAU,QAAQsI,EAAK,GAAG+oC,IAAIK,WAEhDT,GAAW,OAGhB,WACHhgC,EAAWG,WAEhB,CAACpP,EAAM4G,OAAQ5G,EAAMovC,SAEjBJ,EA3CS,SAACE,GACb,OACI,kBAACx0B,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,kBAAC,GAAD,CAAkBjd,KAAMmyC,EAASlxC,UAAU,YAsC9C+kC,CAAQmM,GAAW,MC7CjC,GAA0Cn9B,aAAiBiR,IAA3D,sB,IAAA,kB,OCJM/D,GAAQ,SAAC5Y,GAAD,OAAWA,EAAMC,KAAK2Y,MAAMA,OACpC6tB,GAAQ,SAACzmC,GAAD,OAAWA,EAAMC,KAAK2Y,MAAM4J,UACpCV,GAAgB,SAAC9hB,GAAD,OAAWA,EAAMC,KAAK2Y,MAAMkJ,eAGlD,GAAmDpW,aAAiBmR,IAApE,sBAAOysB,GAAP,MAAqBC,GAArB,MACMC,IADN,MACoB,SAACxpC,EAAOzC,GAAR,QAAuBukB,GAAc9hB,GAAOzC,KCoBxDksC,OAxBf,YAAwE,IAAnDhD,EAAkD,EAAlDA,MAAOlmC,EAA2C,EAA3CA,OAAQvI,EAAmC,EAAnCA,QAAmC,IAA1B0xC,yBAA0B,MAAN,GAAM,EAC7DvpC,EAAaJ,aAAY,SAACC,GAAD,uBAAWA,EAAMC,KAAKC,QAAQA,QAAQK,UAAtC,aAAW,EAAoCnI,QAC9E,YAAkBwK,IAAfzC,EAEK,yBAAKxI,UAAW+xC,GACXjD,EAAMlqC,OAAS,GACZ,oCACI,wBAAI5E,UAAU,WAAd,qBAA+CwI,GAC/C,uFAA+D,wBAAIxI,UAAU,4BACxE8uC,EAAMtqC,KAAI,SAAC1C,EAAG6b,GAAJ,OACP,wBAAInc,IAAKmc,EAAG3d,UAAU,QAClB,kBAAC,IAAD,CAAMV,GAAE,gBAAWe,EAAX,YAAsBuI,EAAtB,YAAgC9G,EAAEkC,GAAlC,YAAwC8U,aAAQhX,EAAErB,QAAUqB,EAAErB,aAS1F,sCCFHuxC,GAAsB,SAAChwC,GAChC,IAAMiwC,EAAgBpf,mBAChBrtB,EAAWsD,cAGjB,EAA0C5F,mBAAS,CAAE6lC,MAAO,CAAC,EAAG,GAAI4F,MAAO,KAA3E,oBAAOuD,EAAP,KAAsBC,EAAtB,KACA,EAA4CjvC,mBAAS,MAArD,oBAAOkvC,EAAP,KAAuBC,EAAvB,KACA,EAA8CnvC,mBAASovC,QAAQ92B,OAAOC,YAAc,MAApF,oBAAO82B,EAAP,KAAwBC,EAAxB,KACMC,EAAerqC,YAAY1E,MAC3BgvC,EAAYtqC,YAAY0mC,IACxB6D,EAAiBF,EAAa9uC,MAAK,SAACtD,GAAD,OAAaA,EAAQuD,OAAS5B,EAAMZ,aACvEwxC,EAAcD,EAAeE,UAC7BC,EAAa1qC,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAK+Y,QAAQA,WACvD0xB,EAAgB3qC,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAK+Y,QAAQyI,aAAa6oB,EAAeE,cACtF9J,EAAQ3gC,aAAY,SAACC,GAAD,OHjCH,SAACA,GAAD,OAAWA,EAAMC,KAAK+Y,QAAQwI,SGiChBmpB,CAAY3qC,MAAQuqC,GACnDjD,EAAmBvnC,aAAY,SAACC,GAAD,OAAWiwB,GAASjwB,EAZhC,yBAanBqmC,EAAmBtmC,aAAY,SAACC,GAAD,OAAWiwB,GAASjwB,EAZhC,2BAcpBoV,MAAM8Y,QAAQoZ,IAAqBA,EAAiB/qC,OAAS,IAC9D0T,aACI9S,EAjBiB,qBAmBjBiY,MAAM7S,OAAO6d,OAAOqqB,GAAY1tC,QAAO,SAAC6tC,GAAD,MAAkB,UAAXA,EAAEhuC,QAAkBL,QAAQsuC,KAAK,IAIvF,IAAMC,EAAgB,SAACluC,EAAMR,EAAO2uC,GAehC,GAdI53B,OAAOC,WAcE,UAATxW,EAAkB,CAClB,IAAIguB,EAAUyb,EACbzb,EAAQ3vB,SAASiI,SAAS9G,IAErBwuB,EAAQogB,OAAOpgB,EAAQzG,QAAQjhB,SAAS9G,IAAS,GADjDwuB,EAAQhb,KAAK1M,SAAS9G,IAE5B6T,aAAS9S,EA1CQ,qBA0CoBytB,GAGzC,GAAa,UAAThuB,EAAkB,CAClB,IAAIguB,EAAU0c,EACd1c,EAAQmgB,GAAO7nC,SAAS9G,GACxB6T,aAAS9S,EAjDQ,qBAiDoBytB,GAqCrCif,GAAeC,EAAiB,KAIxC1uC,qBAAU,WACN,GAAuB,OAAnB2uC,EAAJ,CAeAC,EAdqB,WACjB,IAAKrwC,EAAMgd,QAAQpa,OAAQ,MAAO,GAGlC,IAAM0uC,EAAY71B,MAAM8Y,QAAQv0B,EAAMgd,QAAQ,GAAGlX,KAAKihC,OAAS/mC,EAAMgd,QAAQ,GAAGlX,KAAKihC,MAAMnkC,OAAS,EAChG2uC,EAAY91B,MAAM61B,GAAWJ,KAAK,GAOtC,OANAlxC,EAAMgd,QAAQjO,SAAQ,SAACi6B,IACmB,OAAtBA,EAAOljC,KAAKihC,MAAiBtrB,MAAM61B,GAAWJ,KAAK,GAAKlI,EAAOljC,KAAKihC,OAC1Eh4B,SAAQ,SAAChQ,EAAK4c,GAChB5c,EAAMwyC,EAAU51B,KAAI41B,EAAU51B,GAAK5c,SAGxCwyC,EAEOC,OACnB,CAACpB,EAAgBpwC,EAAMgd,UAE1B,IAAMy0B,EAAsBzxC,EAAMgC,GAAK,cAEjC0vC,EAA0B1xC,EAAMgC,GAAK,kBACrC2vC,EAA6B3xC,EAAMgC,GAAK,qBACxColC,EAAchhC,aAAY,SAACC,GAAD,OAAWiwB,GAASjwB,EAAOorC,MAErDhE,EAA0BrnC,aAAY,SAACC,GAAD,OAAWiwB,GAASjwB,EAAOqrC,MACjEhE,EAA6BtnC,aAAY,SAACC,GAAD,OAAWiwB,GAASjwB,EAAOsrC,MAE1E,EAA4EnE,GACxExtC,EAAMgd,QACNhd,EAAMZ,UAENquC,EACAC,EACAC,EACAjB,EACA3F,IACA/mC,EAAM4xC,cAAexK,EACrBpnC,EAAM4tC,WACN5tC,EAAM6tC,QAXV,oBAAOnkB,EAAP,KAAwBmoB,EAAxB,KAA4CvK,EAA5C,KAAyDwK,EAAzD,KAcA,EAAgC5wC,mBAAS,QAAzC,oBAAOutB,EAAP,KAAiB6O,EAAjB,KAEMyU,EAA6C,MADvC,IAAIC,IAAIx4B,OAAO5G,SAASxV,MACd60C,aAAavU,IAAI,QAEvCj8B,qBAAU,WACN,IAAMywC,EAAsB,WAExB,IAAI30B,EADA,mBAAmBlQ,KAAK9L,UAAUC,YAEtCgY,OAAOiE,cAAcF,GACrBA,EAAU9I,YAAW,kBAAM+7B,EAAmBF,QAAQ92B,OAAOC,YAAc,QAAO,OAGtF,OADAD,OAAOc,iBAAiB,SAAU43B,GAC3B,WACH14B,OAAOe,oBAAoB,SAAU23B,OAK7C,IAAMC,EAAW,SAACC,GACd,IAAIC,EAAO,GACXD,EAAGrjC,SAAQ,SAACjJ,GACJ,UAAWA,EAAKA,MAChBA,EAAKA,KAAKgnC,MAAM/9B,SAAQ,SAACsrB,GACrBgY,EAAI,sBACGA,GADH,CAEA,CACIrwC,GAAIq4B,EACJ57B,KAAMiyC,EAAUrW,YAOpC,IAAMiY,EAAO,IAAI/oB,IAAI8oB,EAAK7vC,KAAI,SAACiT,GAAD,OAAOnN,KAAKiqC,UAAU98B,OAC9C+8B,EAAM/2B,MAAMg3B,KAAKH,GAAM9vC,KAAI,SAACiT,GAAD,OAAOnN,KAAKC,MAAMkN,MAEnD,OAAO,YACA,IAAI8T,IACHipB,EAAIp/B,MAAK,SAACC,EAAGC,GACT,IAAIo/B,EAAKr/B,EAAE5U,KAAKuY,cACZ27B,EAAKr/B,EAAE7U,KAAKuY,cAChB,OAAI07B,EAAKC,GAAY,EACjBD,EAAKC,EAAW,EACb,QAMvB,OACI,oCACI,kBAAC,GAAD,CAAW55B,MAAO/Y,EAAM+Y,MAAO0V,SAAUA,EAAUC,iBAAkB4O,IAErE,kBAAC5iB,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK3E,GAAI,GACL,kBAAC+d,GAAA,EAAD,CAAUwf,GAAIrC,GACV,yBAAKvuC,GAAG,0BACHhC,EAAM4xC,cACH,oCACI,kBAAC,GAAD,CACI/K,SAAU4K,EACV14B,MAAOjZ,aAAE,wBACTwnC,YAAaA,EACbF,YAAaA,IAEjB,wBAAIppC,UAAU,wBAGrB0rB,EAAgB9mB,OAAS,IACrB,CAAC,QAAS,cAActB,SAASqvC,EAAe/uC,QAChD5B,EAAM6tC,QACH,kBAAC,GAAD,CACIhH,SAAU6K,EACV1zC,UAAU,cACV+a,MAAOjZ,aAAE,kCACTuf,QAASqK,EACT2c,gBAAiBoH,EACjBzrC,GAAG,kBACHmkC,MAAM,OACNQ,OAAO,YACP1Z,SAAUgjB,IAIrBrnC,OAAO8G,KAAKqhC,GAAevuC,KAAI,SAACmN,EAAKgM,GAClC,OACI,kBAAChD,GAAA,EAAD,CAAMnZ,IAAKmc,EAAG3d,UAAU,mCACpB,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,QAAQ+yC,EAAcphC,IAC7C,kBAACgJ,GAAA,EAAKO,KAAN,KACKtQ,OAAO6d,OAAOqqB,GACV1tC,QACG,SAACokB,GAAD,OACIje,SAASie,EAAEqpB,aAAetnC,SAASqnC,IACnCrnC,SAASie,EAAEopB,eAAiBrnC,SAASoG,MAE5CnN,KAAI,SAACglB,EAAG7L,GACL,OACI,yBAAKnc,IAAKmc,GACL,YAAa6L,EACV,kBAAC6J,GAAA,EAAKvvB,MAAN,CAAYC,UAAS,iBAAYylB,EAAExlB,KAC/B,kBAACqvB,GAAA,EAAKpvB,MAAN,CAAYjE,UAAU,QACjBwpB,EAAE/oB,MAEP,kBAACgc,GAAA,EAAD,CAAK2Z,WAAS,EAACp2B,UAAU,QACrB,kBAACgc,GAAA,EAAD,CACIrP,GAAI,EACJ3M,UAAU,oDAEV,kBAACqzB,GAAA,EAAKjvB,QAAN,CACIa,KAAK,QACL4H,IAAK,EACLC,IACI2Q,MAAM8Y,QAAQ6b,GACRA,EAAe5oB,EAAE/kB,OACjB,EAEVy9B,KAAM,EACNliC,UAAU,eACVyE,MAAOkrC,EAAiBnmB,EAAE/kB,OAC1BF,SAAU,SAACkT,GAAD,OACN07B,EACI3pB,EAAEvkB,KACFwS,EAAED,OAAO/S,MACT+kB,EAAE/kB,WAKlB,kBAACuX,GAAA,EAAD,CACIrP,GAAI,EACJ3M,UAAU,oDAEV,0BAAMgtC,OAAQ,CAAE6H,SAAU,aACtB,gCACKlF,EAAiBnmB,EAAE/kB,OADxB,SAShB,kBAAC4uB,GAAA,EAAKhuB,MAAN,CACIJ,KAAK,WACLd,MAAOqlB,EAAE/oB,KACTuD,GAAE,iBAAYwlB,EAAExlB,IAChBsB,QAASopC,EAAiBprC,SAASkmB,EAAE/kB,OACrCF,SAAU,kBAAM4uC,EAAc3pB,EAAEvkB,KAAMukB,EAAE/kB,mBAW3D,gBAApBzC,EAAMZ,WACH,kBAAC,GAAD,CACIynC,SAAU8K,EACV3zC,UAAS,qBAAgB+zC,EAAY,UAAY,IACjDh5B,MAAOjZ,aAAE,qCACTuf,QAASwyB,EACTxL,gBAAiBqH,EACjB1rC,GAAG,kBACH2kC,OAAO,OACP1Z,SAAUgjB,MAK1B,kBAAC5d,GAAA,EAAD,CACIzc,OAAK,EACL1V,QAAQ,QACRlC,UAAU,iBACVyC,KAAK,KACLoV,QAAS,kBAAM26B,GAAoBD,IACnCuC,gBAAc,yBACdC,gBAAexC,GAPnB,UASQA,EAAkB,OAAS,OATnC,cAWEvwC,EAAM6tC,QAAkC,cAAxB8C,EAAe/uC,MAAwB5B,EAAM4D,UAC3D,kBAAC,GAAD,CACIkpC,MAAOqF,EAASL,GAChBlrC,OAAQ5G,EAAM4D,SACdvF,QAASsyC,EAAe/uC,KACxBmuC,kBAAkB,uBAK9B,kBAAC/1B,GAAA,EAAD,CAAK3E,GAAI,EAAGk0B,MAAO,CAAEyJ,UAAW,UAC3BlB,EAAgBlvC,OACb,oCACkB,SAAb6rB,GACGqjB,EAAgBtvC,KAAI,SAACwmC,GAAD,OAAYhpC,EAAMizC,eAAejK,EAAQva,MACnD,SAAbA,GACG,kBAAChU,GAAA,EAAD,CAAK9P,GAAI,EAAGwP,GAAI,EAAGhF,GAAI,GAClB28B,EAAgBtvC,KAAI,SAACwmC,GAAD,OACjB,kBAAChvB,GAAA,EAAD,CAAKxa,IAAKwpC,EAAOljC,KAAKN,OAAQxH,UAAU,UACnCgC,EAAMizC,eAAejK,EAAQva,QAKhC,QAAbA,GACG,kBAAC,GAAD,CACIrvB,UAAWY,EAAMZ,UACjBwE,SAAU5D,EAAM4D,SAChBoZ,QAAS80B,EACT5O,UAAWljC,EAAMkjC,UACjBgG,iBAAkBlpC,EAAMkpC,oBAKpC,oCACKlpC,EAAMkzC,WACH,uBAAGl1C,UAAU,uBAAb,UAA6C8B,aAAE,6BAI3D,kBAAC,GAAD,CACIgtC,MAAOqF,EAASL,GAChBlrC,OAAQ5G,EAAM4D,SACdvF,QAASsyC,EAAe/uC,KACxBmuC,kBAAkB,wBAK9B,yBAAKne,IAAKqe,GACN,kBAAC,WAAD,CAAUxiB,SAAU,yBAAKzvB,UAAU,eAAf,eAChB,kBAAC,GAAD,CAAoB4I,OAAQ5G,EAAM4D,SAAUwrC,OAAQpvC,EAAM6tC,cAkBlFmC,GAAoBzvC,aAAe,CAC/ByB,GAAI,GACJ5C,UAAW,YACX4d,QAAS,GACTkmB,UAAW,eAGA8M,U,SCnaF5wC,GAAY,SAACiH,GAAD,OAAWA,EAAMR,OAAOmX,QAAQtd,OAAON,WACnDwE,GAAW,SAACyC,GAAD,OAAWA,EAAMR,OAAOmX,QAAQtd,OAAOkE,UAQlDmmB,GAAiB,SAAC1jB,GAAD,OAAWA,EAAMR,OAAOmX,QAAQ+M,gBAEjDrrB,GAAQ,SAAC2H,GAAD,OAAWA,EAAMR,OAAOmX,QAAQte,OAExCgB,GAAS,SAAC2G,GAAD,OAAWA,EAAMR,OAAOmX,QAAQtd,QACzCklB,GAAgB,SAACve,GAAD,OAAWA,EAAMR,OAAOmX,QAAQ4H,eCZhDxF,GAAY,SAAC/Y,GAAD,OAAWA,EAAMC,KAAK8Y,UAAUA,WAC5C2I,GAAqB,SAAC1hB,GAAD,OAAWA,EAAMC,KAAK8Y,UAAU2I,oBAG3D,GAAmDhW,aAAiBkR,IAApE,sBAAO0sB,GAAP,MAAqBC,GAArB,MACMC,IADN,MACoB,SAACxpC,EAAOjH,GAAR,QAAwB2oB,GAAmB1hB,GAAOjH,K,kBCRhE+zC,GAAkB,SAAC/zB,EAAW5M,GACvC,OAAO4M,EAAU5M,I,SCiBR4gC,IAJeC,aAAep0B,GAAOkJ,GAAevkB,IAAU,SAAC0vC,EAAQC,EAAgBjsC,GAChG,OAAO4gB,GAAmBorB,EAAQC,EAAgBjsC,MAGzB+rC,aAAe9sC,KAAS3C,IAAU,SAAC4vC,EAAUlsC,GACtE,OAAO6U,aAAcq3B,EAAUlsC,OAGtBmsC,GAAmBJ,aAC5Bj0C,GACAsC,KACA6E,KACA6Y,GACAH,IHhBmB,SAAC5Y,GAAD,OAAWA,EAAMR,OAAOmX,QAAQA,WGkBnD,SAAC3V,EAAYqsC,EAAWF,EAAUG,EAAYL,EAAQM,GAClD,OAAOA,EAASpxC,KAAI,SAACwmC,GACjB,IjG/BgB/pB,EAAOzZ,EiG+BjBM,GjG/BUmZ,EiG+BSq0B,EjG/BF9tC,EiG+BUwjC,EAAO6K,QjG9BzC50B,EAAMzZ,IiGgCL,OAAO,2BACAwjC,GADP,IAEI3qC,QAASy1C,aAAeJ,EAAWrsC,GACnCvB,OACAkiB,SAAUmrB,GAAgBQ,EAAD,OAAa7tC,QAAb,IAAaA,OAAb,EAAaA,EAAMwhB,MAC5C1gB,OAAQuV,aAAcq3B,EAAD,OAAW1tC,QAAX,IAAWA,OAAX,EAAWA,EAAMiuC,cCNvCC,GAxBuB,WAClC,IACMh3B,EADW5W,YAAYqtC,IACJQ,MAAM,EAAG,GAE5BC,EAAc,GAUpB,OATAl3B,EAAQjO,SAAQ,SAACi6B,EAAQrtB,GAAO,IAAD,EAC3Bu4B,EAAY,gBAAD,OAAiBv4B,EAAI,IAAOqtB,EAAOljC,KAAKrH,KAEnDy1C,EAAY,wBAAD,OAAyBv4B,EAAI,IAAOqtB,EAAOpiC,OAAOnI,KAC7Dy1C,EAAY,wBAAD,OAAyBv4B,EAAI,IAAOqtB,EAAOljC,KAAKggC,KAC3DoO,EAAY,sBAAD,OAAuBv4B,EAAI,IAAOxE,aAAM6xB,EAAO3pC,UAAY2pC,EAAO9D,iBAC7EgP,EAAY,iBAAD,OAAkBv4B,EAAI,IAAOzE,aAAa,UAAC8xB,EAAOljC,YAAR,aAAC,EAAa29B,QAInE,kBAAC9mB,GAAA,EAAD,CACIjd,OAAM,aACFw7B,MAAO,0BACJgZ,MCgBJC,GA9BqB,WAChC,IAAMC,EAAiBhuC,YAAYwe,IAC7ByvB,EAAUl4B,aAAc/V,YAAYG,MAAU6tC,EAAexwC,UAGnE,OAFyBgF,OAAO8G,KAAK0kC,GAAgBxxC,OAAS,EAItD,kBAAC+Z,GAAA,EAAD,CACIjd,OAAQ,CACJw7B,MAAO,4BACPoZ,aAAc,eACdC,YAAaH,EAAeh1C,UAC5Bo1C,WAAYh7B,OAAO5G,SAASxV,KAAK2L,MAAM,MAAM,GAE7C0rC,oBAAmB,OAAEJ,QAAF,IAAEA,OAAF,EAAEA,EAAS51C,KAC9Bi2C,aAAcrpC,aAAe,IAAIrG,KAAKovC,EAAevsC,cACrD8sC,cAAeP,EAAen2C,SAC9B22C,WAAYR,EAAejqC,OAASiqC,EAAehqC,SAAWgqC,EAAe/pC,QAC7EwqC,cAAeT,EAAejqC,OAC9B2qC,gBAAiBV,EAAehqC,SAChC2qC,cAAeX,EAAe/pC,QAC9B2qC,YAAoC,OAAvBl3C,IAAM,SAAwB,SAAWA,IAAM,YAMrE,M,oCC0BIm3C,GAlDyB,SAACj1C,GACrC,IAAMwD,EAAWsD,cACX8L,EAAWC,eAEXqiC,EAAc9uC,YAAY+uC,MAC1BC,EAAqBhvC,YAAYivC,MAEjCC,EAA0BlvC,YAAY0W,MACtCy4B,EAAgBnvC,YAAY6rC,IAC5BuD,EAAuBpvC,YAAYqvC,IAEnCrY,EAAQ,IAAI5gB,gBAAgB5J,EAAS/M,QACrC6vC,EAAYtY,EAAMM,IAAI,cAAWz0B,EAmCvC,OAPAxH,qBAAU,YA1Be,WACrB,IAEIk0C,GAAmB,EAKvB,GAPe,CAAC,UAAW,SAAU,OAAQ,SAAU,SAAU,WAAY,WAGtE5mC,SAAQ,SAAC8rB,GACPuC,EAAMC,IAAIxC,KAAQ8a,GAAmB,MAG1CA,EAAkB,CAAC,IAAD,gBACZC,EAAIN,EAA0BE,EAAuBD,EAE3D,OACInY,EAAMM,IAAI,cAAV,UAAyBkY,EAAEx2C,iBAA3B,aAAyB,EAAaoP,aACtC4uB,EAAMM,IAAI,aAAV,UAAwBkY,EAAEhyC,gBAA1B,aAAwB,EAAY4K,cACnC9B,aAAcS,aAAeiwB,EAAMM,IAAI,SAAUkY,EAAE/tC,cACpDu1B,EAAMM,IAAI,aAAV,UAAwBkY,EAAE33C,gBAA1B,aAAwB,EAAYuQ,aACpC4uB,EAAMM,IAAI,aAAV,UAAwBkY,EAAEzrC,cAA1B,aAAwB,EAAUqE,aAClC4uB,EAAMM,IAAI,eAAV,UAA0BkY,EAAExrC,gBAA5B,aAA0B,EAAYoE,aACtC4uB,EAAMM,IAAI,cAAV,UAAyBkY,EAAEvrC,eAA3B,aAAyB,EAAWmE,gBAChCknC,KAAS,UAAIE,EAAEpwC,cAAN,aAAI,EAAUgJ,aAAeknC,KAAS,UAAKE,EAAEpwC,cAAP,aAAK,EAAUgJ,aAI1E,OAAO,GAIHqnC,KACA1/B,eACApQ,aAAYvC,EAAU0xC,EAAaE,EAAoBM,MAE5D,IAEI11C,EAAMoK,UCtDV,SAAS0rC,GAAc91C,GAC1B,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWupC,GAAavpC,EAAOrG,EAAMZ,cAC9DygC,EAAYz5B,aAAY,SAACC,GAAD,OAAWwpC,GAAYxpC,EAAOrG,EAAMZ,cAC5D0gC,EAAa15B,aAAY,SAACC,GAAD,OAAWspC,GAAatpC,EAAOrG,EAAMZ,cAC9D22C,IAAa/1C,EAAMZ,UAEzB,OAAO6/B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OCHQ,SAACjO,EAAUpE,GAA8B,IAAnBqS,EAAkB,wDAChE,OAAOjO,GAAS,SAAC6yB,EAAGC,GAChB,IAAMjwB,EAAQiwB,IACR/kB,EAAWs+B,GAAYxpC,EAAOjH,GAC9BkS,EAAYq+B,GAAatpC,EAAOjH,GAChCoS,EAAYo+B,GAAavpC,EAAOjH,GAEtC,GAAIgS,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,aAAW0wB,EAAGpT,GAAerd,IAAKwZ,UAAW,CAAE/gB,QAASe,GAAaA,MDL/C42C,CAAaxyC,EAAUxD,EAAMZ,UAAWqS,KAMxCmuB,EAAYC,EAAWC,EAAYiW,GAG5ED,GAAc9U,UAAY,CACtB5hC,UAAW6hC,KAAUlqB,QAGV++B,UEjBFG,GAAW,SAACzyC,EAAUI,GAA6B,IAAnB6N,EAAkB,wDAC3DjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAWs+B,GAAYxpC,EAAOzC,GAC9B0N,EAAYq+B,GAAatpC,EAAOzC,GAChC4N,EAAYo+B,GAAavpC,EAAOzC,GAEtC,GAAIwN,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,aAAW0wB,EAAGnT,GAAWtd,IAAKqZ,MAAO,CAAErY,OAAQhD,GAAYA,OCLvE,SAASsyC,GAAUl2C,GACtB,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWupC,GAAavpC,EAAOrG,EAAM4D,aAC9Di8B,EAAYz5B,aAAY,SAACC,GAAD,OAAWwpC,GAAYxpC,EAAOrG,EAAM4D,aAC5Dk8B,EAAa15B,aAAY,SAACC,GAAD,OAAWspC,GAAatpC,EAAOrG,EAAM4D,aAC9DmyC,IAAa/1C,EAAM4D,SAEzB,OAAOq7B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OAAqBwkC,GAASzyC,EAAUxD,EAAM4D,SAAU6N,KAMnCmuB,EAAYC,EAAWC,EAAYiW,GAG5EG,GAAUlV,UAAY,CAClBp9B,SAAUq9B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAGhD4nC,U,SCfFE,GAAmB,SAACp2C,GAAD,OAC5B,kBAACqxB,GAAA,EAAD,CAAMC,YAAU,EAACyD,aAAa,OAC1B,kBAAC1D,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,QAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,IACL,gCAAS7K,aAAE,wCAInB,kBAACuxB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,kCAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,aAAE,wBAE1B,kBAACka,GAAA,EAAD,CAAKrP,GAAI,GACL,kBAAC0rC,GAAA,EAAD,CACIr0C,GAAIhC,EAAMgC,GAAK,UACfS,MAAOzC,EAAMmK,OACbU,IAAK,EACLC,IAAK9K,EAAM0K,WAAa1K,EAAMoK,SAAWpK,EAAMqK,SAC/C9H,SAAU,SAACgI,GAAD,OAASvK,EAAMs2C,eAAe/rC,QAKpD,kBAAC8mB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,kCAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,aAAE,0BAE1B,kBAACka,GAAA,EAAD,CAAKrP,GAAI,GACL,kBAAC0rC,GAAA,EAAD,CACIr0C,GAAIhC,EAAMgC,GAAK,YACfS,MAAOzC,EAAMoK,SACbU,IAAK9K,EAAM0K,WAAa1K,EAAMmK,OAASnK,EAAMqK,SAC7C9H,SAAU,SAACgI,GAAD,OAASvK,EAAMu2C,iBAAiBhsC,QAKtD,kBAAC8mB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,kCAChB,kBAACgc,GAAA,EAAD,CAAKrP,GAAI,GACL,uBAAG3M,UAAU,OAAO8B,aAAE,yBAE1B,kBAACka,GAAA,EAAD,CAAKrP,GAAI,GACL,kBAAC0rC,GAAA,EAAD,CACIr0C,GAAIhC,EAAMgC,GAAK,WACfS,MAAOzC,EAAMqK,QACbS,IAAK9K,EAAM0K,WAAa1K,EAAMmK,OAASnK,EAAMoK,UAC7C7H,SAAU,SAACgI,GAAD,OAASvK,EAAMw2C,gBAAgBjsC,UAkB7D6rC,GAAiB71C,aAAe,CAC5ByB,GAAI,mBACJ0I,UAAW,IAGA0rC,UCrDFK,GAA2B,WACpC,MAAO,CACHtsC,OAAQ/D,YAAY+D,MACpBC,SAAUhE,YAAYgE,MACtB1K,OAAQ0G,YAAY1G,MACpB6F,cAAea,YAAYb,MAC3B8E,QAASjE,YAAYiE,QCjBhBqsC,GAAoB,SAAC,GAAuB,IAArB5zC,EAAoB,EAApBA,KAAMyvB,EAAc,EAAdA,QAChCokB,EDFgC,WACtC,IAAMnzC,EAAWsD,cAEjB,MAAO,CACHqP,iBAAkB,kBAAMA,aAAiB3S,IACzCuC,YAAa,SAACrG,EAAQ6F,GAAT,OAA2BQ,aAAYvC,EAAU9D,EAAQ6F,IACtEpB,mBAAoB,SAACoG,GAAD,OAASpG,aAAmBX,EAAU+G,IAC1DjG,qBAAsB,SAACiG,GAAD,OAASjG,aAAqBd,EAAU+G,IAC9D/F,oBAAqB,SAAC+F,GAAD,OAAS/F,aAAoBhB,EAAU+G,KCNhDqsC,GACVlkC,EAAUC,eACVC,EAAWC,eACXxM,EAAQowC,KAed,OACI,oCACI,kBAAClS,GAAA,EAAD,CAAOC,UAAQ,EAAC1hC,KAAMA,EAAM2hC,OAAQlS,GAChC,kBAACgS,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,GACrB,kBAACH,GAAA,EAAMiB,MAAP,KACI,gCAAS1lC,aAAE,qCAGnB,kBAACykC,GAAA,EAAMrrB,KAAP,KACI,kBAAC,GAAD,CACI/O,OAAQ9D,EAAM8D,OACdC,SAAU/D,EAAM+D,SAChBC,QAAShE,EAAMgE,QACfisC,eAAgBK,EAAQxyC,mBACxBoyC,iBAAkBI,EAAQryC,qBAC1BkyC,gBAAiBG,EAAQnyC,sBAE7B,kBAACiW,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,kBAACqY,GAAA,EAAD,CAAQzc,OAAK,EAACC,QAhCjB,WACjB8gC,EAAQxgC,mBACRwgC,EAAQ5wC,YAAYM,EAAM3G,OAAQ2G,EAAMd,eAExC,IAAM7F,EAAS,IAAI8c,gBAAgB5J,EAAS/M,QAC5C+C,OAAO8G,KAAKrJ,EAAMd,eAAewJ,SAAQ,SAACvP,GACtCE,EAAOiQ,IAAInQ,EAAK6G,EAAMd,cAAc/F,OAExCkT,EAAQuD,KAAK,CAAE7B,SAAU,WAAYvO,OAAQnG,EAAO8O,aAEpD+jB,MAuByBzyB,aAAE,uBAcnC42C,GAAkBn2C,aAAe,GAElBm2C,UCjCAG,GA7BsB,SAAC72C,GAClC,IAAM4S,EAAWC,eACjB,EAAoD3R,oBAAS,GAA7D,oBAAO41C,EAAP,KAA2BC,EAA3B,KAEMC,EAAuBjvC,uBAAY,WACrC,IAAMq1B,EAAQ,IAAI5gB,gBAAgB5J,EAAS/M,QAC3C,OACIu3B,EAAMC,IAAI,YACVD,EAAMC,IAAI,WACVD,EAAMC,IAAI,SACVD,EAAMC,IAAI,YACTD,EAAMC,IAAI,YACVD,EAAMC,IAAI,cACVD,EAAMC,IAAI,aAEhB,CAACzqB,EAAS/M,SAMb,OAJApE,qBAAU,WACNs1C,EAAsBC,OACvB,CAACA,IAGA,oCACKh3C,EAAMoK,SACP,kBAAC,GAAD,CAAmBtH,KAAMg0C,EAAoBvkB,QAAS,kBAAMwkB,GAAsB,Q,SCrBvF,SAASE,GAAYj3C,GACxB,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWwF,aAAoBxF,EAAOrG,EAAMZ,cACrEygC,EAAYz5B,aAAY,SAACC,GAAD,OAAWuF,aAAmBvF,EAAOrG,EAAMZ,cACnE0gC,EAAa15B,aAAY,SAACC,GAAD,OAAWqF,aAAoBrF,EAAOrG,EAAMZ,cACrE22C,IAAa/1C,EAAMZ,UAEzB,OAAO6/B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OAAqBuD,aAAWxR,EAAUxD,EAAMZ,UAAWqS,KAMtCmuB,EAAYC,EAAWC,EAAYiW,GAG5EkB,GAAYjW,UAAY,CACpB5hC,UAAW6hC,KAAUlqB,QAGVkgC,UCWAC,OArBR,SAA2Bl3C,GAC9B,IAAMm3C,EAAY/wC,YAAYyW,MACxBu6B,EAAchxC,YAAYwW,MAC1By6B,EAAejxC,YAAY2W,MAC3Bu4B,EAA0BlvC,YAAY0W,MACtCw6B,EAAalxC,YAAY6W,MAa/B,OAAOgiB,GAAcj/B,GAXL,SAACwD,EAAUiO,GAAX,OAAqB8lC,aAAW/zC,EAAUiO,KACvC0lC,GACA7B,IAA4B+B,EAC5B/B,GAA2B8B,GAC5B9B,GAA2B+B,GAC1B,iBAAO,CACtBt6B,YAAas6B,EACbv6B,uBAAwBw4B,EACxBr4B,UAAWq6B,OCVnB,SAASE,GAAQx3C,GACb,IAAMy3C,EAZU,SAACr5C,EAAY2F,EAAM9F,GACnC,IAAMy5C,EAAQ,IAAI1yC,KAAKjB,GACnBkX,EAAS,GAMb,OAJI7c,IAAY6c,GAAM,UAAO7c,EAAP,OAClB2F,IAAMkX,GAAM,UAAOtN,aAAmB+pC,GAA1B,YAAoCnqC,aAA2BmqC,GAA/D,YAAyEA,EAAMjvC,gBAC3FxK,IAAUgd,GAAM,eAAYhd,EAAZ,YAEbgd,EAIW08B,CAAY33C,EAAM5B,WAAY4B,EAAM+D,KAAM/D,EAAM/B,UAElE,OACI,kBAACyc,GAAA,EAAD,CAAW1c,UAAU,gFAAgFurC,MAAO,CAACyJ,UAAW,SACpH,uBAAGh1C,UAAU,gCACb,uBAAGA,UAAU,MAAb,2CACCy5C,GACG,uBAAGz5C,UAAU,MACT,gCAASy5C,IAGjB,yBAAKz5C,UAAU,qBACX,0BAAMA,UAAU,MAAM45C,cAAa53C,EAAMyQ,QACrC,0BAAMzS,UAAU,gBAOpCw5C,GAAQj3C,aAAe,CACnB7B,MAAO,EACP+R,OAAQ,OAWG+mC,UCTAK,GAhC+B,SAAC73C,GAC3C,IAAM83C,EAAS1xC,YAAY1H,IACrB8U,EAAUpN,YAAY1G,IACtB20C,EAAUjuC,YAAYgtC,IAE5B,OAAIpzC,EAAM8+B,iBAEF,kBAACpkB,GAAA,EAAD,CAAW1c,UAAU,aACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAI,IACL,uBAAG3M,UAAU,eACT,uBAAGA,UAAU,gCACZ8B,aAAE,yCAMhBE,EAAM4c,YAAc5c,EAAM+c,YAE7B,kBAAC,GAAD,CACIre,MAAOsB,EAAM8c,uBAAyB,EAAIg7B,EAC1C/zC,KAAM/D,EAAM8c,4BAAyB7T,EAAYuK,EAAQ3L,YACzD5J,SAAU+B,EAAM8c,4BAAyB7T,EAAYuK,EAAQvV,SAC7DG,WAAY4B,EAAM8c,wBAAN,OAA2Cu3B,QAA3C,IAA2CA,OAAZprC,EAAYorC,EAAS51C,KAChEgS,OAAQzQ,EAAM8c,uBAAyB,cAAgB,eAI5D9c,EAAMoK,UCjCJtG,GAAa,SAACN,EAAUO,GACjCP,EAAS,CAAEP,KAAMe,GAAaN,QAASK,KCiBrCg0C,GAAmB5qB,gBAAK,kBAAM,iCA4ErB6qB,GA1EO,WAClB,IAAMx0C,EAAWsD,cACXO,EAAajB,YAAYhH,IACzBoU,EAAUpN,YAAY1G,IACtBu4C,EAAe7xC,YAAYyB,MAC3Bq7B,EAAS,UAAqB,UAAf77B,EAAyB,OAAS,OAAxC,WACTT,EAASR,YAAYgtC,IACrB9zB,EAAgBlZ,aAAY,SAACC,GAAD,OAAWotC,GAAiBptC,OAAW,GACnE0S,EAAQjZ,aAAE,sBAAuBwf,EAAc1c,OAAtC,OAA8CgE,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAQnI,MAQrE,OANAgD,qBAAU,WAGNqC,GAAWN,EAAUy0C,MAIrB,kBAAC,GAAD,KACI,kBAAC,GAAD,KACI,kBAAC,IAAD,KACI,+BAAQn4C,aAAE,2BAAD,OAA6B8G,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAQnI,OAC9C,0BAAM2yB,IAAI,YAAYh0B,KAAMoc,OAAO5G,SAASxV,QAEhD,kBAAC4vB,GAAD,MACA,kBAACtS,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACwC,GAAA,EAAD,QAIR,kBAAC,GAAD,CAAa9d,UAAWoU,EAAQpU,WAC5B,kBAAC,GAAD,CAAeA,UAAWoU,EAAQpU,WAC9B,kBAAC,GAAD,CAAWwE,SAAU4P,EAAQ5P,UACzB,kBAAC,GAAD,KACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI5B,GAAG,gBACH+W,MAAO1R,EAAa0R,EAAQjZ,aAAE,gCAC9BV,UAAWiI,EACXzD,SAAQ,OAAEgD,QAAF,IAAEA,OAAF,EAAEA,EAAQ5E,GAClBgb,QAASsC,EACT4jB,UAAWA,EACX+P,eAAgB,SAACjK,EAAQva,GAAT,OACZ,kBAAC,GAAD,eACIjvB,IAAKwpC,EAAO6K,QACZz0C,UAAWiI,EACXzD,SAAQ,OAAEgD,QAAF,IAAEA,OAAF,EAAEA,EAAQ5E,GAClBkhC,UAAWA,EACXzU,SAAUA,GACNua,KAGZ4I,cAAY,IAEhB,kBAAC,GAAD,MACA,kBAAC,WAAD,CACInkB,SACI,yBAAKzvB,UAAU,eAAe8B,aAAE,wCAGpC,kBAACi4C,GAAD,CAAkBnxC,OAAQA,WAStD,kBAAC,GAAD,QC5FCkY,GAAc,SAACzY,GAAD,OAAWA,EAAMC,KAAKR,KAAKkgB,QAAQlH,aAGvD,GAAmD/M,aAAiBoR,IAApE,sBAAOwsB,GAAP,MAAqBC,GAArB,MACMC,IADN,MACoB,SAACxpC,EAAOb,GAAR,QAAqBsZ,GAAYzY,GAAOb,KCHtDuZ,GAAc,SAAC1Y,GAAD,OAAWA,EAAMC,KAAKR,KAAKkX,QAAQ+B,aAGvD,GAAmDhN,aAAiBqR,IAApE,sBAAOusB,GAAP,MAAqBC,GAArB,MACMC,IADN,MACoB,SAACxpC,EAAOb,GAAR,QAAqBuZ,GAAY1Y,GAAOb,KCLtDwZ,GAAc,SAAC3Y,GAAD,OAAWA,EAAMC,KAAKR,KAAK8iB,QAAQ5J,aACjDk5B,GAAc,SAAC7xC,GAAD,OAAWA,EAAMC,KAAKR,KAAK8iB,QAAQD,SAGvD,GAAmD5W,aAAiBsR,IAApE,sBAAOssB,GAAP,MAAqBC,GAArB,MACMC,IADN,MACoB,SAACxpC,EAAOb,GAAR,QAAqBwZ,GAAY3Y,GAAOb,KCLtDwjB,GAAY,SAAC3iB,GAAD,OAAWA,EAAMC,KAAK4iB,UAAUF,WAE5CE,GAAY,SAAC7iB,GAAD,OAAWA,EAAMC,KAAK4iB,UAAUA,WAGlD,GAA0EnX,aAAiBuR,IAA3F,sBAAO60B,GAAP,MAA8BC,GAA9B,MACMC,IADN,MAC6B,SAAChyC,EAAOb,GAAR,QALJ,SAACa,GAAD,OAAWA,EAAMC,KAAK4iB,UAAUD,iBAKPA,CAAiB5iB,GAAOb,KCTpE8yC,GAAqB,SAACx5B,EAAatZ,GAAd,OAAyBsZ,EAAYtZ,ICO1D+yC,GAAyB,SAACrvB,EAAWF,EAAWlE,GACzD,IAAM0zB,EARsB,SAACxvB,EAAWlE,GAAZ,OAA2BkE,EAAUlE,GAQ9C2zB,CAAiBzvB,EAAWlE,IAAe,GACxD4zB,EAJqB,SAACxvB,EAAWpE,GAAZ,OAA2BoE,EAAUpE,GAI1C6zB,CAAgBzvB,EAAWpE,GACjD,OAAO,2BAAK4zB,GAAkBF,ICuB3B,IAAMp5C,GAAY,SAACiH,GAAD,OAAWA,EAAMP,KAAK1G,WAClCoG,GAAS,SAACa,GAAD,OAAWA,EAAMP,KAAKN,QAG/BwgB,GAAU,SAAC3f,GAAD,OAAWiyC,GAAmBx5B,GAAYzY,GAAQb,GAAOa,KAEnEuiB,GAAU,SAACviB,GAAD,OCvCW,SAAC2Y,EAAaxZ,GAAd,OAAyBwZ,EAAYxZ,GDuCrCozC,CAAmB55B,GAAY3Y,GAAQb,GAAOa,KAEnE2hB,GAAWqrB,aAAertB,GAAS5G,IAAW,SAACshB,EAAUiT,GAClE,OAAOR,GAAgBQ,EAAD,OAAajT,QAAb,IAAaA,OAAb,EAAaA,EAAUpZ,SAGpCmsB,GAAmBJ,cAPT,SAAChtC,GAAD,OEnCW,SAAC0Y,EAAavZ,GAAd,OAAyBuZ,EAAYvZ,GFmCrCqzC,CAAmB95B,GAAY1Y,GAAQb,GAAOa,OAHpD,SAACA,GAAD,OAAWA,EAAMP,KAAK8jB,eAa9CV,GACAF,IACA,SAAC8vB,EAAcC,EAAkBC,EAAYR,GACzC,IAAMS,EAAgB,IAAIj0C,KAAK+zC,GACzB/7B,EAAO,OAAG87B,QAAH,IAAGA,OAAH,EAAGA,EAAc97B,QAC9B,GAAKA,EAAL,CAEA,IAAMk8B,EAAM,GACNC,EAAmB,GASzB,OAPAvwC,OAAO8G,KAAKsN,GAASjO,SAAQ,SAACqqC,GAC1BF,EAAIE,GA3ChB,SAAwBpQ,EAAQjlC,EAAMmlB,EAAWF,GAC7C,IAAMzd,EAAS3C,OAAO8G,KAAKs5B,GAAQ,GAC7BqQ,EAAQrQ,EAAOz9B,GAAQ/I,KAAI,SAAC82C,GAAD,mBAAC,2BAC3BA,GACCf,GAAuBrvB,EAAWF,EAAWswB,EAAKlwB,WAAa,IAFtC,IAG7BvhB,YAAa9D,EACbwH,cAGJ,MAAO,CACHxH,OACAwH,SACAguC,YAAaF,EAAM72C,KAAI,SAAC82C,GAAD,OAAWA,EAAKv0B,aAAW3R,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,KAAG,GACxE+lC,SA8BmBG,CAAex8B,EAAQo8B,GAAUjsC,aAAeisC,GAAUJ,EAAYR,IACjFiB,MAAMR,EAAc5sC,YAAcc,aAAeisC,GAAS/sC,YAAc4sC,EAAc5sC,aACtF8sC,EAAiBC,GAAWF,EAAIE,OAIjC,CACHF,IAAKtwC,OAAO8G,KAAKwpC,GAAKt2C,OAASs2C,OAAMjwC,EACrCkwC,iBAAkBvwC,OAAO8G,KAAKypC,GAAkBv2C,OAASu2C,OAAmBlwC,EAC5E2gB,aAAe6vB,MAAMR,EAAc5sC,gBAAkDpD,EAArCiwC,EAAI7tC,aAAe4tC,SGzChES,GApBoB,kBAC/B,kBAACh/B,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gDACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,sBACX,kBAACgc,GAAA,EAAD,KACI,yBAAKhc,UAAU,oBACX,yBAAKA,UAAU,aACX,kBAAC0f,GAAA,EAAD,CAAM1f,UAAU,2BAA2B+M,KAAK,QAAQtK,KAAK,KAAKkd,MAAM,WAE5E,yBAAK3f,UAAU,eACX,uBAAGA,UAAU,iBAAiB8B,aAAE,uBAChC,uBAAG9B,UAAU,aAAa8B,aAAE,mCC2FzC65C,GAvGmB,SAAC,GAAoD,IAAlDC,EAAiD,EAAjDA,QAASnV,EAAwC,EAAxCA,OAAQ3hC,EAAgC,EAAhCA,KAAMtC,EAA0B,EAA1BA,OAAQq5C,EAAkB,EAAlBA,YAClE,SAcID,QAdJ,IAcIA,IAAW,GAbb7T,EADF,EACEA,SACA+T,EAFF,EAEEA,UACAzgC,EAHF,EAGEA,QACA0gC,EAJF,EAIEA,OACAC,EALF,EAKEA,SACAlhC,EANF,EAMEA,MACAmhC,EAPF,EAOEA,SACAC,EARF,EAQEA,QACAC,EATF,EASEA,WACAC,EAVF,EAUEA,WACAC,EAXF,EAWEA,QACAC,EAZF,EAYEA,MACAC,EAbF,EAaEA,SAGIC,EAAkBC,mBAAQ,WAC9B,YAAkBxxC,IAAd6wC,EAAgC,GAC7BA,EAAUt3C,KAAI,SAACihC,EAAK9nB,GACzB,IAAM++B,EAASjX,EAAIkX,WAAW,QAAUlX,EAAzB,UAAkCmX,IAAlC,OAAmDnX,GAClE,OAAO,yBAAKjkC,IAAKmc,EAAG3d,UAAU,YAAYiC,IAAKy6C,EAAQp6C,IAAG,wBAAmBqb,GAAK3C,QAAQ,cAE3F,CAAC8gC,IAEEe,EAAc,SAACtiC,EAAOc,GAC1B,OAAKd,EAEH,yBAAKva,UAAU,QACb,4BAAKqb,GACJd,EAAM/V,KAAI,SAACgW,GAAD,OACT,yBAAKhZ,IAAKgZ,GACR,uBAAGxa,UAAU,mCACZwa,OAPU,MAcfsiC,EAAeL,mBAAQ,kBAAMI,EAAY9U,EAAU,cAAa,CAACA,IACjEgV,EAAeN,mBAAQ,kBAAMI,EAAYZ,EAAU,cAAa,CAACA,IACjEe,EAAcP,mBAAQ,kBAAMI,EAAYX,EAAS,aAAY,CAACA,IAC9De,EAAiBR,mBAAQ,kBAAMI,EAAYV,EAAY,iBAAgB,CAACA,IACxEe,EAAiBT,mBAAQ,kBAAMI,EAAYT,EAAY,iBAAgB,CAACA,IACxEe,EAAcV,mBAAQ,kBAAMI,EAAYR,EAAS,aAAY,CAACA,IAC9De,EAAYX,mBAAQ,kBAAMI,EAAYP,EAAO,WAAU,CAACA,IACxDe,EAAeZ,mBAAQ,kBAAMI,EAAYN,EAAU,cAAa,CAACA,IAEjEe,GAAqB,OAAN96C,QAAM,IAANA,OAAA,EAAAA,EAAQoC,QAAS,IAAoB,OAAf43C,QAAe,IAAfA,OAAA,EAAAA,EAAiB53C,QAAS,EAErE,OACE,kBAAC2hC,GAAA,EAAD,CAAOzhC,KAAMA,EAAM2hC,OAAQA,EAAQD,UAAQ,EAAC/jC,KAAK,KAAKzC,UAAU,oBAC9D,kBAACumC,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,GACvB,kBAACH,GAAA,EAAMiB,MAAP,KAAcwU,IAGhB,kBAACzV,GAAA,EAAMrrB,KAAP,KACE,kBAACuB,GAAA,EAAD,CAAK9P,GAAI,EAAGwK,QAAclM,IAAV6P,GAAuBwiC,EAAe,EAAI,GACvDA,GACC,kBAACthC,GAAA,EAAD,KACE,kBAACS,GAAA,EAAD,MACS,OAANja,QAAM,IAANA,OAAA,EAAAA,EAAQoC,QAAS,GAChB,kBAACoX,GAAA,EAAD,CAAKhc,UAAU,QACb,kBAAC,KAAD,KAASwC,KAIG,OAAfg6C,QAAe,IAAfA,OAAA,EAAAA,EAAiB53C,QAAS,GACzB,kBAACoX,GAAA,EAAD,CAAKhc,UAAU,QACb,kBAAC,KAAD,KAASw8C,MAMnB,kBAACxgC,GAAA,EAAD,CAAKhc,UAAU,gBACZqb,GAAW,4BAAKA,GAChBwgC,GAAe,yBAAKj/B,wBAAyB,CAAEC,OAAQg/B,KACvDE,GAAU,2BAAIA,GACde,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,OCjFPE,GAAkB,CACtBzjC,UAAU,EACVE,MAAO,IACPC,aAAc,EACdE,eAAgB,EAChBqjC,gBAAgB,GAGLZ,GAAiB,8DAE9B,SAASa,GAAT,GAAoD,IAApB7B,EAAmB,EAAnBA,QAAS8B,EAAU,EAAVA,OACvC,EAAwBx6C,oBAAS,GAAjC,oBAAO4B,EAAP,KAAakhC,EAAb,KAEM2X,EAAalB,mBAAQ,WACzB,YAAsBxxC,IAAlB2wC,EAAQ9gC,MAA4B,GACjC8gC,EAAQ9gC,MAAMtW,KAAI,SAACihC,EAAK9nB,GAC7B,IAAM++B,EAASjX,EAAIkX,WAAW,QAAUlX,EAAzB,UAAkCmX,IAAlC,OAAmDnX,GAClE,OAAO,yBAAKjkC,IAAKmc,EAAG3d,UAAU,YAAYiC,IAAKy6C,EAAQp6C,IAAG,wBAAmBqb,GAAK3C,QAAQ,cAE3F,CAAC4gC,EAAQ9gC,QAEN8iC,GAAyBhC,EAAQiC,aAAe,EAChDC,GAAgBlC,EAAQmC,cAAgB,EAExClC,EAAc,CAACD,EAAQoC,MAAMjzB,OAE7BkzB,EAA8BpC,EACjCr3C,KAAI,SAAC05C,GAAD,2CAA4C1lC,aAAW0lC,GAAvD,WACJlmC,KAAK,IACFmmC,EAA4BtC,EAAYr3C,KAAI,SAAC05C,GAAD,mBAAoB1lC,aAAW0lC,GAA/B,WAAgDlmC,KAAK,IAEvG,OACE,kBAACyE,GAAA,EAAD,CAAK2Z,WAAS,EAACp2B,UAAU,qCACvB,kBAACgc,GAAA,EAAD,CAAK3E,GAAI,EAAGF,GAAI,EAAGnX,UAAS,sCAAuD,IAAtB29C,EAAW/4C,OAAe,SAAW,KAChG,kBAAC,KAAW24C,GAAkBI,GAE7BC,GACC,0BAAM59C,UAAU,4DACb8B,aAAE,+BAAgC85C,EAAQiC,gBAKjD,kBAAC7hC,GAAA,EAAD,KACyB,IAAtB2hC,EAAW/4C,QAAgBg5C,GAC1B,0BAAM59C,UAAU,4DACb8B,aAAE,+BAAgC85C,EAAQiC,eAG/C,yBAAK79C,UAAU,OACb,wBAAIA,UAAU,QAAQ47C,EAAQI,UAC9B,2BACE,uBAAGh8C,UAAS,wBAAmBF,IAAO,wBAA1B,SAA6D,IACxEgC,aAAE,6BAA8B85C,EAAQwC,kBACf,MAAzBxC,EAAQyC,cACP,8BACE,uBAAGr+C,UAAS,uCAAkCF,IAAO,wBAAzC,WAA8E,IACzFgC,aAAE,sCAGqB,MAA3B85C,EAAQ0C,gBACP,kBAAChqB,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,oBACjC,kBAAC0f,GAAA,EAAD,CAAM3S,KAAK,gBAAgB4S,MAAM,YAAYld,KAAK,KAAKzC,UAAU,SADnE,2CAOH47C,EAAQoC,MACP,oCACG,yBAAKh+C,UAAU,kBAAkB4c,wBAAyB,CAAEC,OAAQohC,KACrE,kBAAC5pB,GAAA,EAAD,CAAQnyB,QAAQ,cAAcO,KAAK,KAAKzC,UAAU,cAAc6X,QAAS,kBAAMmuB,GAAQ,KACpFlkC,aAAE,qBAEJgD,GACC,kBAAC,GAAD,CACE82C,QAASA,EACTnV,OAAQ,kBAAMT,GAAQ,IACtBlhC,KAAMA,EACNtC,OAAQm7C,EACR9B,YAAasC,MAOvB,kBAAC1hC,GAAA,EAAD,CAAK2Z,WAAS,EAACp2B,UAAU,sEACtB89C,GACC,kBAAC9hC,GAAA,EAAD,CAAKrP,GAAI,GAAIwK,GAAI,CAAEmiB,KAAM,EAAGC,OAAQ,GAAKv5B,UAAU,gBACjD,6BACE,uBAAGA,UAAU,8DACV8B,aACC,2BACCuX,WAAWuiC,EAAQ70B,WAAa1N,WAAWuiC,EAAQmC,gBAAgBzkC,QAAQ,KAGhF,uBAAGtZ,UAAU,4DACX,uBAAGA,UAAU,+BADf,IACgD8B,aAAE,2BAA4B85C,EAAQmC,kBAK5F,kBAAC/hC,GAAA,EAAD,CAAKrP,GAAI,GAAIwK,GAAI,CAAEmiB,KAAM,EAAGC,OAAQukB,EAAe,EAAI,IACrD,kBAACzpB,GAAA,EAAD,CAAQr0B,UAAU,gDAAgD6X,QAAS6lC,GACxE57C,aAAE,eAAgB85C,EAAQ70B,gBAczC02B,GAAqBl7C,aAAe,GAErBk7C,UC5HFc,GAAgB,SAACv8C,GAC1B,IAAMsnC,EAAc,CAChB,CACInlC,MAAO,oBACPM,MAAO,OAEX,CACIN,MAAO,oBACPM,MAAO,SAIf,EAAoCvB,mBAASomC,EAAY,IAAzD,oBAAOkV,EAAP,KAAmBC,EAAnB,KAaIlD,EAAc,GAOlB,OANGv5C,EAAMgpC,SACLuQ,EAAcv5C,EAAMgpC,OAAOqQ,MAAMqD,QAAO,SAACC,EAAMC,GAC3C,OAASD,EAAK53B,YAAc63B,EAAK73B,UAAa43B,EAAOC,MAItD58C,EAAMgpC,OACT,oCACI,kBAACtuB,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,6CACVgC,EAAMgpC,QACH,kBAAChvB,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,EAAGF,GAAI,GACpB,wBAAInX,UAAU,oCAAoCgC,EAAMgpC,OAAOqQ,MAAMz2C,OAArE,IAA8E5C,EAAMgpC,OAAOqQ,MAAMz2C,OAAS,EAAI,WAAa,UAA3H,mBAAyJ22C,EAAYx0B,WACrK,uBAAG/mB,UAAU,gDAAb,UAAgE2P,aAAmB3N,EAAMgpC,OAAOjlC,MA5BtG,GA4BM,YAAoHwJ,aAA2BvN,EAAMgpC,OAAOjlC,MA5BlK,GA4BM,gBAAoL/D,EAAMgpC,OAAOz9B,OAAjM,aAGR,kBAACyO,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,EAAGF,GAAI,EAAGnX,UAAU,6BACjC,kBAACqzB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAU,gCAClB,kBAACmpC,GAAA,EAAD,CAAa9kC,GAAG,SAASrE,UAAU,YAAYuE,SAAU,SAACkT,GAAD,OA9BhE,SAAC1W,GACd,IAAM89C,EAAgBvV,EAAY3lC,MAAK,SAACq2B,GAAD,OAAYA,EAAOv1B,QAAU1D,KACpE09C,EAAcI,GA4BsEt6C,CAASkT,EAAED,OAAO/S,SAC7E6kC,EAAY9kC,KAAI,SAAC+kC,GAAD,OACb,4BAAQ/nC,IAAG,UAAK+nC,EAAI9kC,OAASA,MAAK,UAAK8kC,EAAI9kC,QACtC8kC,EAAIplC,eA5BrB,SAAC26C,GACjB,IAAMC,EAAqC,QAArBP,EAAW/5C,MACjC,OAAOq6C,EAAc1pC,MAAK,SAACC,EAAGC,GAAJ,OAAWypC,EAAgB1pC,EAAE0R,UAAYzR,EAAEyR,UAAYzR,EAAEyR,UAAY1R,EAAE0R,aAmC5Fi4B,CAAYh9C,EAAMgpC,OAAOqQ,OAAO72C,KAAI,SAAC82C,GAAD,OACjC,kBAAC,GAAD,CACI95C,IAAK85C,EAAKz0B,OACV+0B,QAASN,EACTx6B,YAAa9e,EAAM8e,YACnB48B,OAAQ,kBAAM17C,EAAM07C,OAAOpC,UAKvC,yBAAKt7C,UAAU,mBACX,wBAAIA,UAAU,QAAQ8B,aAAE,qCACvBA,aAAE,kCAWfy8C,GAAch8C,aAAe,GAEdg8C,UCrDAU,GAhCS,SAAC,GAAD,IAAGC,EAAH,EAAGA,QAAShvC,EAAZ,EAAYA,IAAKnK,EAAjB,EAAiBA,KAAMsK,EAAvB,EAAuBA,KAAM9P,EAA7B,EAA6BA,MAAOsE,EAApC,EAAoCA,SAAUs6C,EAA9C,EAA8CA,UAA9C,OACpB,kBAACxkC,GAAA,EAAD,CACI3a,UAAS,gDAA2C6E,GAAY,gBAAvD,aAA2Es6C,GAAa,YACjGtnC,QAASqnC,GAET,kBAACvkC,GAAA,EAAKO,KAAN,CAAWlb,UAAS,sCAChB,uBAAGA,UAAU,QACRkQ,EADL,KACYnK,EADZ,IACkB,wBAAI/F,UAAU,iCAC3BqQ,GAEL,uBAAGrQ,UAAU,2CAA2C8B,aAAE,mBAAoBvB,EAAM+Y,QAAQ,KAC3FzU,EACG,uBAAG7E,UAAU,4CAA4C8B,aAAE,4BAE3D,uBAAG9B,UAAU,4CACR8B,aAAE,sBAAuBq9C,OCF9C,SAASC,GAAiBp9C,GAEtB,IAAMq9C,EAAaj3C,YAAY2jB,IAAgBhmB,KAIzCu5C,EADWt9C,EAAMgd,QACQqgC,GAIzBE,EADW30C,OAAO6d,OAAOzmB,EAAMgd,SACN5Z,QAAO,SAACW,GAAD,OAAUA,IAASu5C,KACnDnE,EAA8BoE,EAhBzBnqC,MAAK,SAACC,EAAGC,GAChB,OAAO,IAAItO,KAAKqO,EAAEtP,MAAQ,IAAIiB,KAAKsO,EAAEvP,SAgBzCu5C,GAAiBnE,EAAiB9H,OAAO,EAAG,EAAGiM,GAE/C,IAAM3lC,EAAW,CACbC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,UAAU,EACVC,MAAO,IACPC,aAAc,EACdE,eAAgB,EAChBna,UAAW,yBACXoa,WAAY,CACR,CACIC,WAAY,IACZV,SAAU,CACNM,aAAc,IAGtB,CACII,WAAY,IACZV,SAAU,CACNM,aAAc,MAM9B,OACgC,IAA5BkhC,EAAiBv2C,QACb,kBAAC8X,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,uBACvB,kBAAC0c,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,CAAKzc,UAAU,iCAAiCo2B,WAAS,GACrD,kBAACpa,GAAA,EAAD,CAAK3E,GAAI,EAAG8E,GAAI,IACZ,wBAAInc,UAAU,cAAc8B,aAAE,iCAElC,kBAACka,GAAA,EAAD,CAAK3E,GAAI,EAAG8E,GAAI,IAoBZ,kBAAC,KAAWxC,EACPwhC,EAAiB32C,KAAI,SAACwmC,EAAQrtB,GAAT,OAClB,kBAAC,GAAD,CACInc,IAAKmc,EACL9Y,SAAUmmC,IAAWhpC,EAAMgqC,eAC3B97B,IAAKP,aAAmBq7B,EAAOjlC,MAAM,GACrCA,KAAMwJ,aAA2By7B,EAAOjlC,MACxCsK,KAAM26B,EAAOjlC,KAAKyK,WAAWylC,MAAM,GAAI,IACvC11C,MAAOyqC,EAAOuQ,YACd2D,QAAS,kBAAMl9C,EAAMw9C,SAASxU,cAyBtEoU,GAAiB78C,aAAe,GAEjB68C,UCjHR,SAASK,GAAgBz9C,GAC5B,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWupC,GAAavpC,EAAOrG,EAAMwF,WAC9Dq6B,EAAYz5B,aAAY,SAACC,GAAD,OAAWwpC,GAAYxpC,EAAOrG,EAAMwF,WAC5Ds6B,EAAa15B,aAAY,SAACC,GAAD,OAAWspC,GAAatpC,EAAOrG,EAAMwF,WAC9DuwC,IAAa/1C,EAAMwF,OAEzB,OAAOy5B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OCJU,SAACjO,EAAUgC,GAA2B,IAAnBiM,EAAkB,wDAC/DjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAWs+B,GAAYxpC,EAAOb,GAC9B8L,EAAYq+B,GAAatpC,EAAOb,GAChCgM,EAAYo+B,GAAavpC,EAAOb,GAElC4L,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,IACzD9L,aAAW0wB,EAAGjT,GAAkBxd,IAAKmZ,YAAa,CAAEvZ,UAAUA,MDJjCk4C,CAAel6C,EAAUxD,EAAMwF,OAAQiM,KAMvCmuB,EAAYC,EAAWC,EAAYiW,GAG5E0H,GAAgBzc,UAAY,CACxBx7B,OAAQy7B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAG9CmvC,UEeAE,OA5Bf,SAAiC39C,GAC7B,IAAMwD,EAAWsD,cACX82C,EAAUx3C,YAAYZ,IACtBq4C,EAAoBz3C,YAAYqtC,IAEhCqK,KAAwB,OAACD,QAAD,IAACA,OAAD,EAACA,EAAmB1E,kBAC5CnP,EAAc,OAAG6T,QAAH,IAAGA,OAAH,EAAGA,EAAmBj0B,aAO1C,OACI,kBAAC,GAAD,CAAiBpkB,OAAQo4C,GACpBE,GACG,kBAAC,GAAD,CACIt4C,OAAQo4C,EACR5gC,QAAS6gC,EAAkB3E,IAC3BlP,eAAgBA,EAChBwT,SAAU,SAACxU,GAAD,OAZU,SAACA,GACjCllC,GAAWN,EAAUwlC,EAAOjlC,MAC5B/D,EAAMk9C,QAAQ,iBAUoBa,CAA4B/U,IAClD3qC,QAAS2B,EAAM3B,YCzBtB2/C,GAAa,SAACh+C,GACvB,OACI,kBAAC2Y,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,QAAQgC,EAAM+Y,QAEhC,kBAACJ,GAAA,EAAKO,KAAN,CAAWlb,UAAU,kBACjB,wBAAIA,UAAU,wBACTgC,EAAMi+C,WAAWz7C,KAAI,SAAC07C,EAAUviC,GAAX,OAClB,wBAAInc,IAAKmc,GACL,uBAAG3d,UAAU,mCACb,0BAAM4c,wBAAyB,CAAEC,OAAQqjC,UAIpDl+C,EAAMm+C,UAAYn+C,EAAMm+C,SAASv7C,OAAS,GACvC,kBAAC,GAAD,CAAkB7F,KAAMiD,EAAMm+C,SAAS1gD,QAAQ,UAAW,KAAKA,QAAQ,QAAS,sBAAuBmxC,QAAM,IAEhH5uC,EAAMo+C,eAAiBp+C,EAAMo+C,cAAcx7C,OAAS,GACjD,yBACI5E,UAAU,gCACV4c,wBAAyB,CAAEC,OAAQ7a,EAAMo+C,oBAYjEJ,GAAWz9C,aAAe,CACtB09C,WAAY,CAAC,MAGFD,UC3BAK,OAZf,SAAuBr+C,GACnB,OACI,yBAAKhC,UAAU,mBACX,2BAAIgC,EAAM2hB,W,qBCCf,SAAS28B,GAA0BC,EAAQ1gD,GAC9C,IAAM2gD,EAAQ3gD,EAASkL,MAAMw1C,GAC7B,MAAM,GAAN,OAAUA,EAAV,cAAuC,IAAjBC,EAAM57C,OAAe47C,EAAM,GAAGvnC,OAASpZ,GCO1D,IAoDQ4gD,GApDqB,WAAO,IAAD,IAChC/d,EAAWt6B,YAAY4f,IACvB04B,EAAYt4C,YAAY4hB,IACxB8wB,EAAe1yC,YAAY2Y,IAC3Bs1B,EAAUl4B,aAAc/V,YAAYG,MAAUm6B,EAASqT,MACvDwB,EAAgBnvC,YAAY1G,MAC5Bi/C,EAAgBv4C,YAAYkZ,IAAe3d,MAAK,SAACqnC,GAAD,OAAYA,EAAO6K,UAAYnT,EAASl7B,UAExFo5C,EAAiB,GACnBnjC,MAAM8Y,QAAN,OAAcmM,QAAd,IAAcA,OAAd,EAAcA,EAAUud,aACxBvd,EAASud,WACJ76C,QAAO,SAAC86C,EAAUviC,GAAX,OAAiBA,EAAI,KAC5B5M,SAAQ,SAACmvC,EAAUviC,GAChBijC,EAAe,mBAAD,OAAoBC,OAAOC,aAAa,GAAKnjC,KAAQuiC,KAI/E,IAAMa,EAAe,GAWrB,OAVItjC,MAAM8Y,QAAN,OAAcukB,QAAd,IAAcA,GAAd,UAAcA,EAAclvB,oBAA5B,aAAc,EAA4ByvB,QAC1CP,EAAalvB,aAAayvB,MACrBj2C,QAAO,SAAC47C,EAAUrjC,GAAX,OAAiBA,EAAI,KAC5B5M,SAAQ,SAACiwC,EAAUrjC,GAChBojC,EAAa,sBAAD,OAAuBpjC,EAAI,IAAOqjC,EAAShF,SACvD+E,EAAa,gBAAD,OAAiBpjC,EAAI,IAAOqjC,EAAS5C,iBACjD2C,EAAa,qBAAD,OAAsBpjC,EAAI,IAAOxE,aAAM6nC,EAASj6B,cAKpE,kBAACpI,GAAA,EAAD,CACIjd,OAAM,qCACFw7B,MAAO,iBACP+jB,aAAc,iBACdC,WAAYhoC,aAAcsC,OAAO5G,SAASxV,MACrCK,QAAQ,gBAAiB,UACzBA,QAAQ,gBAAiB,UAC9B0hD,oBAAqBb,GAA0BI,EAAUjgD,KAAMiiC,EAASjiC,MACxE2gD,oBAAmB,OAAE/K,QAAF,IAAEA,OAAF,EAAEA,EAAS51C,KAC9B4gD,oBAAqB3e,EAASoF,KAC9BwZ,WAAYnoC,cAAmB,OAAbwnC,QAAa,IAAbA,OAAA,EAAAA,EAAet/C,YAAf,OAA2Bs/C,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAezZ,kBAC5Dqa,aAAcroC,cAAc,UAAAwpB,EAAS8C,YAAT,eAAgB,KAAM9C,EAAS8C,OACxDob,GACAG,GAZD,IAaFS,cAAejK,EAAct3C,SAC7BwhD,aAAcp0C,aAAe,IAAIrG,KAAKuwC,EAAc1tC,cACpD63C,aAAcr0C,aAAewC,aAAiB0nC,EAAc1tC,aAAc0tC,EAAct3C,WACxF0hD,YAAoC,OAAvB7hD,IAAM,SAAwB,SAAWA,IAAM,cCrC7D8hD,OAtBf,SAAgB5/C,GACZ,OACI,oCACI,yBAAKhC,UAAU,kCACX,yBAAKiC,IAAKD,EAAM2oB,QAASroB,IAAKN,EAAM6/C,SACpC,uBAAG7hD,UAAU,yBACRgC,EAAMvB,KACP,0BAAMT,UAAU,iCAAhB,MAAoDgC,EAAM+D,QAGlE,2BAAI/D,EAAM8/C,UCNtB,SAASC,GAAT,GAA4C,IAAzBjhC,EAAwB,EAAxBA,YAAa8J,EAAW,EAAXA,QACxBo3B,EAAkB,uBAAGhiD,UAAU,OAAO8B,aAAE,2BAmB5C,OAlBA,OAAI8oB,QAAJ,IAAIA,OAAJ,EAAIA,EAAShmB,UACTo9C,EAAkBp3B,EAAQpmB,KAAI,SAACy9C,EAAKxnC,GAAN,OAC1B,yBAAKjZ,IAAKiZ,GACN,kBAAC,GAAD,CACIha,KAAMwhD,EAAIxhD,KAAOwhD,EAAIxhD,KAAOqB,aAAE,0BAC9BiE,KAAM,IAAIiB,KAAKi7C,EAAIC,MAAMC,mBAAmB,QAAS,CACjD9xC,KAAM,UACN4qB,MAAO,SAEX6mB,OAAQG,EAAIG,KACZP,OAAQI,EAAII,MACZ13B,QAASs3B,EAAIt3B,UAEjB,kCAMR,kBAAChQ,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAO8gB,EAAYrgB,OAErC,kBAACka,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OAChBgiD,IAYjBD,GAAQx/C,aAAe,CACnBue,YAAa,GACb8J,QAAS,IAGEm3B,UC1CFphB,GAAoB,SAAC3+B,GAAD,OAC7B,oCACKA,EAAM4c,WACH,kBAAC,GAAD,CAASuI,QAASnlB,EAAM6+B,iBAExB,oCACK7+B,EAAMsgD,eAAiB7kC,MAAM8Y,QAAQv0B,EAAMsgD,cAAc9vC,SACtD,kBAAC8hB,GAAA,EAAD,CAAOpyB,QAAQ,SAASlC,UAAU,yBAC7BgC,EAAMsgD,cAAc9vC,OAAOhO,KAAI,SAAC2uB,GAAD,OAC5B,uBAAG3xB,IAAK2xB,EAAMvvB,KAAM5D,UAAU,QAA9B,UACQmzB,EAAMhM,SADd,OACwBgM,EAAMovB,WAAa,KAAOpvB,EAAMovB,WAAa,IAAM,UAKrFvgD,EAAM8+B,kBAAoB9+B,EAAMoK,SACjCpK,EAAM8+B,kBAAoB9+B,EAAMwgD,UAC7B,kBAAC,GAAD,CAAWrtB,SAAS,GAChB,2BAAInzB,EAAM++B,qBAAuBj/B,aAAE,wBACnC,4BAAQ9B,UAAU,kBAAkB6X,QAAS7V,EAAMg/B,SAAnD,cAKPh/B,EAAM8+B,mBAAqB9+B,EAAMwgD,UAC9B,kBAAC,GAAD,CAAWznC,MAAM,4BACb,uBAAG/a,UAAU,eAAegC,EAAM++B,qBAAuBj/B,aAAE,wBAC3D,4BAAQ9B,UAAU,kBAAkB6X,QAAS7V,EAAMg/B,SAC9Ch/B,EAAMwgD,SAAW,YAAc1gD,aAAE,kBAErCE,EAAMygD,WAAa,uBAAGziD,UAAS,uBAA0BZ,KAAK,KAA3C,gCAK1B4C,EAAM4c,aACH5c,EAAM0gD,WACN1gD,EAAM8+B,kBACP9+B,EAAM2gD,gBACyB,kBAAxB3gD,EAAMsgD,eAA+B,uBAAGtiD,UAAU,eAAegC,EAAM4gD,oBAAsB9gD,aAAE,0BAM1H6+B,GAAkBp+B,aAAe,CAC7Bu+B,kBAAkB,EAClB6hB,gBAAgB,EAChB/jC,YAAY,EACZ8jC,UAAU,GAcC/hB,UC/DR,SAASkiB,GAAgB7gD,GAC5B,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWupC,GAAavpC,EAAOrG,EAAMwF,WAC9Dq6B,EAAYz5B,aAAY,SAACC,GAAD,OAAWwpC,GAAYxpC,EAAOrG,EAAMwF,WAC5Ds6B,EAAa15B,aAAY,SAACC,GAAD,OAAWspC,GAAatpC,EAAOrG,EAAMwF,WAC9DuwC,IAAa/1C,EAAMwF,OAEzB,OAAOy5B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OCJU,SAACjO,EAAUgC,GAA2B,IAAnBiM,EAAkB,wDAC/DjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAWs+B,GAAYxpC,EAAOb,GAC9B8L,EAAYq+B,GAAatpC,EAAOb,GAChCgM,EAAYo+B,GAAavpC,EAAOb,GAEtC,GAAI4L,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,aAAY0wB,EAAGhT,GAAkBzd,IAAKoZ,YAAa,CAAExZ,UAAUA,MDJzCs7C,CAAet9C,EAAUxD,EAAMwF,OAAQiM,KAMvCmuB,EAAYC,EAAWC,EAAYiW,GAG5E8K,GAAgB7f,UAAY,CACxBx7B,OAAQy7B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAG9CuyC,UEjBTE,GAAkB,SAACxgC,GAAD,OAAY3a,IAAK0a,sBAAsBC,ICMxD,SAASygC,GAAuBhhD,GACnC,IAAQwF,EAAmCxF,EAAnCwF,OAAQ3H,EAA2BmC,EAA3BnC,SAAUD,EAAiBoC,EAAjBpC,aAGpBgiC,EAAax5B,aAAY,SAACC,GAAD,OAAW+xC,GAAsB/xC,EAAOb,MACjEq6B,EAAYz5B,aAAY,SAACC,GAAD,OAAWgyC,GAAqBhyC,EAAOb,MAC/Ds6B,EAAa15B,aAAY,SAACC,GAAD,OAAW8xC,GAAsB9xC,EAAOb,MAGvE,OAAOy5B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,ODPQ,SAACjO,EAAUgC,GAA2B,IAAnBiM,EAAkB,wDAC7DjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAW8mC,GAAqBhyC,EAAOb,GACvC8L,EAAY6mC,GAAsB9xC,EAAOb,GACzCgM,EAAY4mC,GAAsB/xC,EAAOb,GACzCqJ,EAAMkyC,GAAgBv7C,GAE5B,GAAI4L,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,aAAW0wB,EAAG/S,GAAgBzU,EAAK,CAAErJ,UAAUA,MCFzBy7C,CAAaz9C,EAAUgC,EAAQ3H,EAAUD,EAAc6T,KAMvDmuB,EAAYC,EAAWC,EAF3Ct6B,GAAU3H,GAAYD,OAE2CqL,GAAW,GAGjG+3C,GAAuBhgB,UAAY,CAC/B5B,aAAc6B,KAAUigB,KACxB17C,OAAQy7B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,SACzDzQ,SAAUojC,KAAUlqB,OACpBnZ,aAAcqjC,KAAUlqB,QAG5BiqC,GAAuBzgD,aAAe,CAClC6+B,cAAc,GAGH4hB,UC3BFG,GAA0B,SAACnhD,GACpC,IAAMwD,EAAWsD,cACjB,EAAgC5F,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KAEMg6C,EAAqBh7C,YAAYhH,MACjCiiD,EAAoBj7C,YAAYxC,MAgBtC,OAdAnC,qBAAU,WACF0F,IACInH,EAAMZ,WAAaY,EAAMZ,YAAcgiD,GACvC79C,aAAcC,EAAUxD,EAAMZ,WAG9BY,EAAM4D,UAAY5D,EAAM4D,WAAay9C,GACrC19C,aAAaH,EAAUxD,EAAM4D,UAGjCwD,GAAY,MAEjB,CAACg6C,EAAoBC,EAAmBrhD,EAAMZ,UAAWY,EAAM4D,SAAUJ,EAAU2D,IAE/EnH,EAAMoK,UAAY,MAG7B+2C,GAAwBngB,UAAY,CAChC5hC,UAAW6hC,KAAUkV,UAAU,CAAClV,KAAU3yB,OAAQ2yB,KAAUlqB,SAC5DnT,SAAUq9B,KAAUkV,UAAU,CAAClV,KAAU3yB,OAAQ2yB,KAAUlqB,UAGhDoqC,UCTAG,GAxBW,SAACthD,GAAD,OACtB,kBAAC2Y,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAd,iBAEJ,kBAAC2a,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAACyc,GAAA,EAAD,CAAK9P,GAAI,EAAG0K,GAAI,EAAG+e,WAAS,GACvBp0B,EAAMuhD,SAAS/+C,KAAI,SAACg/C,EAAK7lC,GACtB,OACI,kBAAC3B,GAAA,EAAD,CAAKxa,IAAKmc,EAAG3d,UAAU,OACnB,wBAAIA,UAAU,KAAK4c,wBAAyB,CAAEC,OAAQ2mC,EAAIzoC,MAAM0oC,YAChE,yBAAKxhD,IAAKuhD,EAAInS,IAAIv2B,MAAOxY,IAAKkhD,EAAIzoC,MAAM0oC,SAAUzjD,UAAU,eAC5D,2BAAIwjD,EAAInS,IAAIwK,aACZ,kBAACxnB,GAAA,EAAD,CAAQj1B,KAAMokD,EAAInS,IAAIxgC,IAAK2G,OAAO,SAASI,OAAK,GAAhD,sBCMb8rC,OAlBf,SAAgB1hD,GACZ,IACM0jC,EAAc1jC,EAAM2hB,QAAQnf,KAAI,SAACm/C,EAAOhmC,GAC1C,OAAO,4BAAQnc,IAAKmc,EAAG1b,IAAK0hD,EAFR,kCAEiC5oC,MAAM,QAAQ/a,UAAU,oBAGjF,OACI,kBAAC2a,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAd,eAA6BgC,EAAMtB,MAAQ,EAAI,IAAM,MAEzD,kBAACia,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAAC,KAAD,CAAQA,UAAU,sBAAsB0lC,MCIzCke,OAjBf,SAAe5hD,GACX,OACI,kBAAC2Y,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAd,0BAEJ,kBAAC2a,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,yBACI4c,wBAAyB,CACrBC,OAAQ7a,EAAM2hB,QAAQlkB,QAAQ,UAAW,KAAKA,QAAQ,QAAS,4BCHjFgsC,GAAiB,CACnB/vB,MAAO,OACPrZ,OAAQ,SAGZ,SAASwhD,GAAe7hD,GACpB,MAAgCsqC,aAAc,CAC1CzsB,iBAAkB/f,IAAO+f,mBADrBtM,EAAR,EAAQA,SAAUg5B,EAAlB,EAAkBA,UAKdA,GAAW5qC,QAAQwxB,MAAMoZ,GAE7B,MAAiDrpC,oBAAS,GAA1D,oBAAO4gD,EAAP,KAA0BC,EAA1B,KA4BA,OAAOxwC,EAxBC,kBAAC,KAAD,CACIvP,GAAG,WACH8oC,kBAAmBrB,GACnBsB,KAAM/qC,EAAM+qC,KACZvM,OAAQx+B,EAAMioC,SACdlQ,QAAS,CACLiT,OAAQtD,GACRuD,mBAAmB,EACnBE,sBAAuB,CACnBC,WAAY,MAIpB,kBAAC,GAAD,CAAW5rC,IAAKQ,EAAMgC,GAAI6T,QAAS,kBAAMksC,GAAoB,IAAO9Z,SAAUjoC,EAAMioC,UAC/E6Z,GACG,kBAAC,KAAD,CAAYlZ,OAAQ5oC,EAAMgC,GAAIinC,aAAc,kBAAM8Y,GAAoB,KAClE,4BAAK/hD,EAAMvB,SAQH,aAUpCojD,GAAethD,aAAe,CAC1ByB,GAAI,cACJimC,SAAU,CAAE3f,IAAK,EAAGC,IAAK,GACzB9pB,KAAM,mBACNssC,KAAM,GAGK8W,UCtCAG,OAzBf,SAAkBhiD,GACd,OACI,oCACI,kBAAC2Y,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAd,aAEJ,kBAAC2a,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAAC,GAAD,CAAgBiqC,SAAUjoC,EAAMioC,SAAUxpC,KAAMuB,EAAMvB,KAAMwjD,KAAMjiD,EAAMiiD,SAG/EjiD,EAAMkiD,WAAWt/C,OAAS,GACvB,kBAAC+V,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAd,eAEJ,kBAAC2a,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,yBAAK4c,wBAAyB,CAAEC,OAAQ7a,EAAMkiD,kBCLvDC,OAbf,SAA0BniD,GACtB,OACI,kBAAC2Y,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAyB,UAAlBgC,EAAM3B,QAAsB,QAAU,kBAE/D,kBAACsa,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,yBAAK4c,wBAAyB,CAAEC,OAAQ7a,EAAM2hB,cCkB/CygC,OAzBf,SAAsBpiD,GAClB,IAAI+Y,EAAQ,GACR4I,EAAU,GACd,OAAQ3hB,EAAM3B,SACV,IAAK,QACD0a,EAAQ,kBACR4I,EACI,kjCACJ,MACJ,QACI5I,EAAQ,GACR4I,EAAU,GAElB,OACI,kBAAChJ,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,iBACnB,wBAAIA,UAAU,OAAO+a,IAEzB,kBAACJ,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,yBAAK4c,wBAAyB,CAAEC,OAAQ8G,Q,UC0BzC0gC,OA5Cf,SAA6BriD,GACzB,OACI,oCACI,kBAAC+hC,GAAA,EAAD,CACI/jC,UAAU,8CACV80B,iBAAkB9yB,EAAM8hC,OACxB0b,SAAU,SAAC9gC,GAAD,OAAO1c,EAAMk9C,QAAQxgC,IAC/B1a,GAAG,UAEFhC,EAAM8iC,cAActgC,KAAI,SAAC8/C,EAAK3mC,GAAN,OACrB,kBAACwmB,GAAA,EAAD,CACI3iC,IAAKmc,EACLuX,SAAUovB,EAAI9iD,IACdqW,QAAS,kBAAM7V,EAAMk9C,QAAQoF,EAAI9iD,MACjCuZ,MAAOupC,EAAI7jD,WAKlBuB,EAAM8iC,cAAc1/B,QAAO,SAACg9B,GAAD,OAASA,EAAI5gC,MAAQQ,EAAM8hC,UAAQl/B,OAAS,EACpE,kBAAC0/B,GAAA,EAAD,CAAUtkC,UAAU,+CAChB,kBAACskC,GAAA,EAASt/B,OAAV,CAAiBX,GAAG,SAASY,KAAK,SAASjF,UAAU,kCAAkCkF,KAAK,UACxF,0BAAMlF,UAAU,IAAIgC,EAAM8iC,cAAc1/B,QAAO,SAACg9B,GAAD,OAASA,EAAI5gC,MAAQQ,EAAM8hC,UAAQ,GAAGrjC,OAEzF,kBAAC6jC,GAAA,EAASn/B,KAAV,KACKnD,EAAM8iC,cAActgC,KAAI,SAACgW,GAAD,OACrB,kBAAC8pB,GAAA,EAASC,KAAV,CAAe/iC,IAAKgZ,EAAKhZ,IAAKqW,QAAS,kBAAM7V,EAAMk9C,QAAQ1kC,EAAKhZ,OAC3DgZ,EAAK/Z,WAKtB,uCC6PL8jD,GApQSC,sBAAW,WAA2B5wB,GAAS,IAAjC6wB,EAAgC,EAAhCA,OAAQC,EAAwB,EAAxBA,aACpCr7C,EAAajB,YAAYhH,IACzBs/C,EAAYt4C,YAAY4hB,IACxB26B,EAAev8C,YAAY4f,IAC3B43B,EAAUx3C,YAAYZ,IACtBq4C,EAAoBz3C,YAAYqtC,IAChCmP,EAAWx8C,YAAYwiB,IACvBpiB,EAAaJ,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAKC,QAAQA,WACvDyjC,EAAc,OAAG6T,QAAH,IAAGA,OAAH,EAAGA,EAAmBj0B,aACpC/qB,EAAwB,UAAfwI,EACTw7C,EAAoBH,EACpBI,EAAa18C,YAAY4f,IACzB+8B,EAAoBD,EAAW1E,cAAcx7C,OAAS,EAGtDogD,EAASF,EAAWG,IAAMH,EAAWG,IAAIl6C,MAAM,SAAW,GAC1Dm6C,EAAaF,EAAOpgD,OAGpBugD,EAASL,EAAWM,GAAGxgD,OAAS,EAChCygD,EAAYP,EAAWM,GAGvBnb,EAAW6a,EAAWz6B,IACtB65B,EAAaY,EAAWZ,WACxBoB,EAAerb,EAASrlC,OAAS,GAAKs/C,EAAWt/C,OAAS,EAG5D2gD,GAAwBV,EACc,IAAtCF,EAAaa,cAAc5gD,SAAc2gD,GAAuB,GAGpE,MAAkCriD,qBAAlC,oBAAO8gC,EAAP,KAAkBC,EAAlB,KACA,EAA4C/gC,oBAAS,GAArD,oBAAOuiD,EAAP,KAAuBC,EAAvB,KACA,EAA8BxiD,mBAAS,IAAvC,oBAAOyiD,EAAP,KAAgBC,EAAhB,KACA,EAAgC1iD,mBAAS,IAAzC,oBAAOqgD,EAAP,KAAiBsC,EAAjB,KACM3hB,EAAkB,SAAC1iC,GACrByiC,EAAaziC,IAKXsjC,EAAgB,GAElB6f,EAAa1E,WAAWr7C,OAAS,GACjCkgC,EAAc7sB,KAAK,CACfxX,KAAqB,eAAf4I,EAA8B,uBAA9B,UAA0DvH,aAAE,yBAClEN,IAAK,eAIT1B,IAAO,wBAA0BA,IAAO,sBAAuC,UAAfuJ,GAA0Bo8C,GAC1F3gB,EAAc7sB,KAAK,CAAExX,KAAMqB,aAAE,qBAAsBN,IAAK,YAExDqjD,GACA/f,EAAcghB,QAAQ,CAClBrlD,KAAqB,UAAf4I,EAAyB,QAAU,gBACzC7H,IAAK,kBAET+jD,GACAzgB,EAAc7sB,KAAK,CACfxX,KAAqB,UAAf4I,EAAyB,QAAU,gBACzC7H,IAAK,qBAETujD,GACAjgB,EAAc7sB,KAAK,CAAExX,KAAMqB,aAAE,2BAA4BN,IAAK,kBAG9D8jD,GAAcxgB,EAAc7sB,KAAK,CAAExX,KAAM,WAAYe,IAAK,aAC1D0jD,EAAa,GAAGpgB,EAAc7sB,KAAK,CAAExX,KAAK,QAAD,OAAUykD,EAAa,EAAI,IAAM,IAAM1jD,IAAK,WACrF+hD,EAAS3+C,OAAS,GAAGkgC,EAAc7sB,KAAK,CAAExX,KAAM,eAAgBe,IAAK,QACrE2jD,GAAQrgB,EAAc7sB,KAAK,CAAExX,KAAM,QAASe,IAAK,OA9B9B,CAAC,SA+BL8B,SAAS+F,IAAay7B,EAAc7sB,KAAK,CAAExX,KAAM,iBAAkBe,IAAK,iBAE3FiC,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAgBvB,OAfAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,yEAC2EtI,EAAWm8C,EAAa5O,MAAM/xC,GADzG,gBAGD,CAAEmN,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACH,GAAIA,EAAK1D,OAAS,EAAG,CACjB,IAAMmhD,EAASz9C,EAAK,GACpBs9C,EAAWG,EAAO1U,IAAI,qBAG7Bp+B,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAE/C,WACHxG,EAAWG,WAEhB,CAAC5I,EAAYm8C,EAAa5O,OAE7BtyC,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAEnB80C,EAAM,UAAMp+C,IAAKkJ,IAAX,oCAcV,OAbA60C,EAAQ50C,SAAQ,SAACyyC,GACbwC,EAASA,EAAS,cAAgBxC,KAElCmC,EAAQ/gD,OAAS,GACjBqF,MAAM+7C,EAAQ,CAAE70C,OAAQF,EAAWE,SAC9BhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACHu9C,EAAYv9C,MAEf2K,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAGnD,WACHxG,EAAWG,WAEhB,CAACu0C,IAEJliD,qBAAU,WACNwgC,EAAaa,EAAc,GAAGtjC,OAC/B,IAEHiC,qBAAU,WACNiiD,IAAkBd,GAAWA,EAAShgD,OAAS,KAChD,CAACggD,IAEC/jD,IACD8X,SAASstC,qBAAqB,QAA9B,YAAqDtiC,QAAU7hB,aAC3D,4BACA6iD,EAAalkD,KACb+H,EAAWm8C,EAAa5O,MAAMt1C,OAiEtC,OACI,yBAAKmzB,IAAKA,GACL8wB,GACG,kBAAC,GAAD,CACIxF,QAAShb,EACTJ,OAAQE,EACR3jC,QAASgJ,EACT68C,IAAKtG,KAIX8E,GACE,kBAAChoC,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,qBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,6BACX,kBAACgc,GAAA,EAAD,KACI,uBAAGhc,UAAU,oCAAb,kBAAgE2kD,EAAalkD,KAA7E,WAEJ,kBAACub,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAG,QACZ,kBAAC,GAAD,CAAanV,QAAQ,cAAclC,UAAU,OAAOH,SAAU8kD,EAAalkD,WAO/F,kBAACic,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,CAAKzY,GAAG,oBACJ,kBAACgY,GAAA,EAAD,CAAK3E,GAAI,GACL,kBAAC,GAAD,CAAyBjW,UAAWiI,EAAYzD,SAAU++C,EAAa5O,OACvE,kBAAC,GAAD,CACIjS,OAAQE,EACRc,cAAeA,EACfoa,QAAShb,IAEb,kBAAC,GAAD,CAAiB18B,OAAQo4C,GAhG1B,WACf,OAAQ5b,GACJ,IAAK,gBACD,OACI,kBAAC,GAAD,CAAiBx8B,OAAQo4C,GACrB,kBAAC,GAAD,CACIp4C,OAAQo4C,EACR//C,SAAU8kD,EAAalkD,KACvBb,aAAc8gD,EAAUjgD,MAExB,kBAAC,GAAD,CAAmBogC,eAAgB/+B,aAAE,mCACjC,kBAAC,GAAD,CACIkpC,OAAQgB,EACRlrB,YAAa6jC,EACbjH,OAAQ,SAACpC,GAAD,OAAUmJ,EAAO,CAAEnJ,eAMnD,IAAK,mBACD,OAAO,kBAAC,GAAD,CAAkB33B,QAASghC,EAAaa,cAAenlD,QAASgJ,IAC3E,IAAK,aACD,OACI,kBAAC,GAAD,CACI42C,WAAY0E,EAAa1E,WACzBG,cAAgBv/C,OAAkCoK,EAAzB05C,EAAawB,UACtChG,SAAUwE,EAAayB,cACvBrrC,MAAsB,eAAf1R,EAA8B,uBAA9B,UAA0DvH,aAAE,2BAG/E,IAAK,UACD,OACI,kBAAC,GAAD,CAAmB++B,eAAgB/+B,aAAE,6BACjC,kBAAC,GAAD,CAASgf,YAAa6jC,EAAc/5B,QAASg6B,KAGzD,IAAK,gBACD,OAAO,kBAAC,GAAD,CAAejhC,QAASghC,EAAavE,gBAChD,IAAK,MACD,OAAO,kBAAC,GAAD,CAAYmD,SAAUA,IACjC,IAAK,SACD,OAAO,kBAAC,GAAD,CAAQ5/B,QAASqhC,EAAQtkD,MAAOwkD,IAC3C,IAAK,KACD,OAAO,kBAAC,GAAD,CAAOvhC,QAAS0hC,IAC3B,IAAK,WACD,OACI,kBAAC,GAAD,CACIpb,SAAUA,EACVia,WAAYA,EACZzjD,KAAMqkD,EAAWrkD,KACjBwjD,KAAMa,EAAWb,OAG7B,IAAK,eACD,OAAO,kBAAC,GAAD,CAAc5jD,QAASgJ,IAClC,QACI,OAAO,+BAwCMg9C,IAGJxB,GACG,yBAAK7kD,UAAU,UACX,kBAAC,GAAD,CAAiBwH,OAAQo4C,GACrB,kBAAC,GAAD,CACIp4C,OAAQo4C,EACR//C,SAAU8kD,EAAalkD,KACvBb,aAAc8gD,EAAUjgD,MAExB,kBAAC,GAAD,KACI,kBAAC,GAAD,WAOxB,kBAACub,GAAA,EAAD,CAAK3E,GAAI,GACL,wCACA,kBAAC,GAAD,CAAkBtY,KAAM4lD,EAAaxE,SAAUvP,QAAM,WChM9D0V,GAjFW,WACtB,IAAM1xC,EAAWC,eACXY,EAAiBrN,YAAYb,MAEnC,EAAwBrE,oBAAS,GAAjC,oBAAO4B,EAAP,KAAakhC,EAAb,KAMMugB,EAAa,SAAC9uC,GACE,KAAdA,EAAE+uC,SAAkB/uC,EAAEgvC,QAAQzgB,GAAQ,IAU9C,SAAS0gB,EAAsBvwC,EAAewwC,GAC1C,IAAMC,EAAU,2BACTnxC,GADS,IAEZtJ,OAAQ,EACRC,SAAU,EACVoB,QAAS,IAEPsK,EAAclN,OAAO8G,KAAKk1C,GAC3BxhD,QAAO,SAAC5D,GAAD,MAAoC,qBAApBolD,EAAWplD,MAClC4D,QAAO,SAAC5D,GAAD,MAAiB,YAARA,GAA6B,WAARA,GAA4B,cAARA,KACzDgD,KAAI,SAAChD,GAAD,gBAAYuW,mBAAmBvW,GAA/B,YAAuCuW,mBAAmB6uC,EAAWplD,QACzEwW,KAAK,KAEN6uC,EAAQjyC,EAASwB,SAASrL,MAAM,KAGpC,OAFA87C,EAAM,GAAK1wC,EAAgB,mBAAqB,mBAChD0wC,EAAQA,EAAM7uC,KAAK,KACf2uC,EAAgB,GAAN,OAAUE,EAAV,YAAmB/uC,GAE3B,GAAN,OAAU0D,OAAO5G,SAAS81B,QAA1B,OAAmCmc,EAAnC,YAA4C/uC,GAGhD,OA5BArU,qBAAU,WAEN,OADAkV,SAAS2D,iBAAiB,UAAWiqC,GAC9B,WACH5tC,SAAS4D,oBAAoB,UAAWgqC,OA0B5C,kBAAChgB,GAAA,EAAD,CAAOzhC,KAAMA,EAAM2hC,OArCP,WACZT,GAAQ,IAoC4BQ,UAAQ,EAAC/jC,KAAK,MAC9C,kBAAC8jC,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,EAAC1mC,UAAU,cAChC,kBAACumC,GAAA,EAAMiB,MAAP,KACI,gCAAS1lC,aAAE,uBAGnB,kBAACykC,GAAA,EAAMrrB,KAAP,KACI,uBAAGlb,UAAU,MAAM8B,aAAE,iCAErB,kBAACiiC,GAAA,EAAD,CAAMjP,iBAAiB,YACnB,kBAACqP,GAAA,EAAD,CAAKjP,SAAS,WAAWna,MAAM,iBAC3B,kBAACuZ,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,YAC/B,0BAAMkF,KAAK,MAAMwvB,aAAW,aAA5B,gBAEQ,IAHZ,6EAMA,8BAAOgyB,GAAsB,GAAM,KAEvC,kBAACviB,GAAA,EAAD,CAAKjP,SAAS,WAAWna,MAAM,iBAC3B,kBAACuZ,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,YAC/B,0BAAMkF,KAAK,MAAMwvB,aAAW,aAA5B,gBAEQ,IAHZ,sDAMA,8BAAOgyB,GAAsB,MAIrC,wBAAI1mD,UAAU,SACd,uBAAGA,UAAU,MAAM8B,aAAE,kCACrB,8BAAO4kD,QC3EhB,SAASI,GAAgB9kD,GAC5B,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWupC,GAAavpC,EAAOrG,EAAMwF,WAC9Dq6B,EAAYz5B,aAAY,SAACC,GAAD,OAAWwpC,GAAYxpC,EAAOrG,EAAMwF,WAC5Ds6B,EAAa15B,aAAY,SAACC,GAAD,OAAWspC,GAAatpC,EAAOrG,EAAMwF,WAC9DuwC,IAAa/1C,EAAMwF,OAEzB,OAAOy5B,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OCJU,SAACjO,EAAUgC,EAAQ5B,GAA6B,IAAnB6N,EAAkB,wDACzEjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAWs+B,GAAYxpC,EAAOb,GAC9B8L,EAAYq+B,GAAatpC,EAAOb,GAChCgM,EAAYo+B,GAAavpC,EAAOb,GAElC4L,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,IACzD9L,aAAW0wB,EAAGlT,GAAkBvd,IAAKkZ,YAAa,CAAEtZ,SAAQoB,OAAQhD,GAAY4B,MDJnDu/C,CAAevhD,EAAUxD,EAAMwF,OAAQxF,EAAM4D,SAAU6N,KAMvDmuB,EAAYC,EAAWC,EAAYiW,GAG5E+O,GAAgB9jB,UAAY,CACxBx7B,OAAQy7B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,SACzD1K,SAAUq9B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAGhDw2C,UEmBAE,OAlCf,SAA0BhlD,GACtB,IAAMwD,EAAWsD,cACjB,EAA8B6M,eAAtBvU,EAAR,EAAQA,UAAWoG,EAAnB,EAAmBA,OAEb47C,EAAqBh7C,YAAY0M,IACjCmyC,EAAkB7+C,YAAY8+C,IAE9BC,EAAyB/lD,GAAaA,IAAcgiD,EACpDgE,EAAsB5/C,GAAUA,IAAWy/C,EAajD,OAFAxjD,qBAT6B,WACrB0jD,G5CjBiB,SAAC3hD,EAAUpE,GACpCoE,EAAS,CAAEP,KpGDesU,mCoGCO7T,QAAStE,I4CiBlCmE,CAAcC,EAAUpE,GAExBgmD,G5CZc,SAAC5hD,EAAUgC,GACjChC,EAAS,CAAEP,KAAM0mB,GAAajmB,QAAS8B,I4CY/B6/C,CAAW7hD,EAAUgC,KAIG,CAAChC,EAAUpE,EAAWoG,EAAQ2/C,EAAwBC,IAE/E5lB,WAASh9B,IAAIxC,EAAMoK,UAAY,IAAI,SAACq1B,GACvC,OAAOC,uBAAaD,EAAO,CACvB7iB,WAAYuoC,GAA0BC,KAAyBplD,EAAM4c,WACrEkiB,mBAAoB9+B,EAAM8+B,iBAC1BE,QAASh/B,EAAMg/B,cCjB3B,SAASsmB,GAAUtlD,GACf,IARiB4S,EAQjB,EAAwB1R,oBAAS,GAAjC,oBAAO4B,EAAP,KAAakhC,EAAb,KACMuhB,IAAsD,MAArCluC,WAAWrX,EAAMsoB,KAAK9Z,YAA2D,MAArC6I,WAAWrX,EAAMwoB,KAAKha,YACrFg3C,EATuB,OADV5yC,EAUa5S,EAAM4S,UATvB6yC,OAAO,GACT7yC,EAASqhC,MAAM,GAAGx2C,QAAQ,YAAa,IAE3CmV,EAOD8yC,EAAWt/C,YAAY8xC,IAE7B,OACI,kBAACx9B,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,sCACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,sBACX,kBAACgc,GAAA,EAAD,CAAK7E,GAAI,EAAGnX,UAAU,gBAClB,wBAAIA,UAAU,UAAUgC,EAAMvB,MAC9B,uBAAGT,UAAU,OACT,uBAAGA,UAAU,iCADjB,IACsDwnD,IAI1D,kBAACxrC,GAAA,EAAD,CAAK7E,GAAI,EAAGnX,UAAU,iBAIlB,kBAACq0B,GAAA,EAAD,CACIr0B,UAAU,YACVyC,KAAK,KACLoV,QAAS,WAAO7V,EAAM2lD,oBACtBzlD,QAAQ,eAEPF,EAAM0iD,aAAe,gBAAkB,oBAG3C6C,GACG,oCACI,kBAAClzB,GAAA,EAAD,CACInyB,QAAQ,QACRlC,UAAS,wBAAmBgC,EAAM4lD,iBAAmB,OAAS,IAC9D/vC,QAAS,kBAAMmuB,GAAQ,IACvBvjC,KAAK,MAEL,uBAAGzC,UAAU,oBANjB,IAMyC8B,aAAE,gBAE3C,kBAACykC,GAAA,EAAD,CAAOzhC,KAAMA,EAAM2hC,OAAQ,kBAAMT,GAAQ,IAAQvjC,KAAK,KAAK+jC,UAAQ,GAC/D,kBAACD,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,GACrB,kBAACH,GAAA,EAAMiB,MAAP,KAAcxlC,EAAMvB,OAExB,kBAAC8lC,GAAA,EAAMrrB,KAAP,CAAYlb,UAAU,sCAClB,kBAAC,GAAD,CAAgBiqC,SAAUjoC,EAAMioC,SAAUxpC,KAAMuB,EAAMvB,KAAMwjD,KAAMjiD,EAAMiiD,UAKvFjiD,EAAM4lD,kBAAoB,yBAAK3lD,IAAKylD,EAAUplD,IAAKolD,QAiB5EJ,GAAU/kD,aAAe,CACrB0nC,SAAU,CAAE3f,IAAK,EAAGC,IAAK,GACzBq9B,kBAAkB,GAGPN,UCpFTO,GAASC,IAAM34B,MAAK,kBAAM,+CAiEjB44B,GA/DK,SAAC/lD,GACjB,IACA,EAAgCkB,mBAASlB,EAAM2hD,MADvB,mCACxB,oBAAOqE,EAAP,KAAiBC,EAAjB,KACA,EAA4B/kD,qBAA5B,oBAAOV,EAAP,KAAe0lD,EAAf,KAsCA,OAZAzkD,qBAAU,WACNwkD,EAAYjmD,EAAM2hD,MA7BE,qCA8BrB,CAACqE,EAAUhmD,EAAM2hD,QAEpBlgD,qBAAU,WACNykD,EACIlmD,EAAMQ,OAAOgC,KAAI,SAACihC,EAAK9nB,GAAN,OACb,yBAAKnc,IAAKmc,EAAI,EAAG3d,UAAU,YAAYiC,IAAKwjC,EAAKnjC,IAAKN,EAAMmmD,SAAUntC,QAAQ,eAGvF,CAAChZ,EAAMQ,OAAQR,EAAMmmD,WAGpB,kBAACzrC,GAAA,EAAD,CAAW1c,UAAU,OAAO2c,OAAK,GAC7B,kBAACF,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKnE,QAAS,WAtCjB7V,EAAM2hD,OACXsE,EAAY,KAqC8B1c,MAAO,CAAEyJ,UAAW,UAClD,kBAAC,WAAD,CAAUvlB,SAAU,yBAAKxtB,IAAI,mBAAmByZ,MAAM,OAAOpZ,IAAI,aAC7D,kBAACulD,GAAD,eAAQ7nD,UAAU,sBApCd,CACpBA,UAAW,oBACX+Z,UAAU,EACVD,UAAU,EACVsuC,YAAY,EACZC,cAAe,IACfpuC,aAAc,EACdG,WAAY,CACR,CACIC,WAAY,IACZV,SAAU,CACN3Z,UAAW,0BACXooD,YAAY,EACZnuC,aAAc,OAwBLzX,QC6Bd8lD,GAxEoB,SAAC,GAAsC,IAArC5D,EAAoC,EAApCA,aAAciD,EAAsB,EAAtBA,iBACzCt+C,EAAajB,YAAYhH,IACzBujD,EAAev8C,YAAY4f,IAC3B43B,EAAUx3C,YAAYZ,IACtBmuC,EAAavtC,YAAYgZ,IAEzBvgB,EAAwB,UAAfwI,EAETk/C,EAAYngD,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAKR,KAAKkgB,QAAQlH,YAAY8+B,GAASn/C,QAChF6I,EAAYlB,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAKR,KAAKkgB,QAAQlH,YAAY8+B,GAAS7J,QAGlFvzC,EAAM,YAAOmiD,EAAanf,MACR,IAAlBhjC,EAAOoC,SAAcpC,EAAM,sBAAOA,GAAP,YAAkBA,KAC3B,IAAlBA,EAAOoC,SAAcpC,EAAM,sBAAOA,GAAP,YAAiBA,GAAjB,YAA2BA,GAA3B,YAAqCA,KAGpE,IAAMgmD,EAAiBl+C,KAAKiqC,UAAU,CAClC,WAAY,sBACZ,QAAS,gBACT9zC,KAAMkkD,EAAalkD,KACnBqa,MAAO6pC,EAAanf,KAAK,GACzBqW,YAAa8I,EAAaxE,SAC1B/tB,QAAS,CACL,QAAS,gBACTq2B,gBAAiB9D,EAAa7c,KAAK/8B,MAAM,KAAK,GAC9C29C,cAAe/D,EAAa7c,KAAK/8B,MAAM,KAAK,IAEhD49C,IAAK,CACD,QAAS,iBACTC,SAAUjE,EAAar6B,IACvBu+B,UAAWlE,EAAan6B,KAE5Bs+B,MAAO,CACH,QAAS,QACTroD,KAAMk1C,EAAWgP,EAAar7B,MAAM7oB,QAI5C,OACI,oCACI,kBAAC,IAAD,KACI,+BAAQ8nD,GACR,0BACIn1B,IAAI,YACJh0B,KAAI,8CACAyB,EAAS,OAAS,OADlB,YAEAwI,EAFA,YAEcC,EAFd,YAE2Bs2C,EAF3B,YAEsC9mC,aAAQyvC,GAAa,OAEnE,0BAAM9nD,KAAK,cAAckjB,QAASghC,EAAaxE,WAC/C,4BAAQl7C,KAAK,uBAAuBujD,IAExC,kBAAC,GAAD,CACI/nD,KAAMkkD,EAAalkD,KACnBmU,SAAU+vC,EAAa7c,KACvBmC,SAAU0a,EAAat6B,IACvB45B,KAAMU,EAAar7B,KACnBy/B,IAAMloD,OAAmBoK,EAAV20C,EACf8E,aAAcA,EACdkD,kBAAmB/mD,GAAUf,IAAO,wBAA0BA,IAAO,yBACrE6nD,iBAAkBA,IAEtB,kBAAC,GAAD,CACInlD,OAAQA,EACRq5C,YAAa8I,EAAaxE,SAC1BwD,MAAQ9iD,OAA4BoK,EAAnB05C,EAAaM,IAC9BkD,SAAWtnD,OAA6BoK,EAApB05C,EAAalkD,SC2BlCuoD,OAjFf,SAAkBhnD,GACd,IAAMwD,EAAWsD,cACX4L,EAAUC,eACVC,EAAWC,eACjB,EAAgCc,eAAxBvU,EAAR,EAAQA,UAAWwE,EAAnB,EAAmBA,SACb2D,EAAYnB,YAAYnI,MACxB2/C,EAAUx3C,YAAYZ,IACtBq4C,EAAoBz3C,YAAYqtC,IAChC50C,EAAuB,UAAdO,EACTsjD,EAAe,8DAA8Dr1C,KAAKuF,EAASwB,UAgB3F6yC,EAAkBp2B,iBAAO,MAK/B,OACI,oCACI,kBAACnW,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAACkf,GAAA,EAAD,OAGJ,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAiB1X,OAAQo4C,EAASh6C,SAAUA,GACxC,kBAAC,GAAD,CAAaxE,UAAWA,GACpB,kBAAC,GAAD,CAAeA,UAAWA,GACtB,kBAAC,GAAD,CACI2/B,oBAAqBj/B,aAAE,oBAAqBjB,GAC5CggC,eAAgB/+B,aAAE,eAAgBjB,GAClC+/B,aAAW,EACXF,cAAY,GAEX1+B,EAAMmU,eAAiB,kBAAC,GAAD,MACxB,kBAAC,GAAD,CACIuuC,aAAcA,EACdiD,iBAvBP,WACrBnsC,OAAOyT,SAAS,CAACi6B,IAAKD,EAAgBh2B,QAAQk2B,wBAAwBD,IAAM1tC,OAAO4tC,YAAc,GAAIC,SAAU,cAkCvF,kBAAC,GAAD,CACI5E,OApDJ,SAACn8C,GAAU,IAAD,EAClCy5B,GACIv8B,EACApE,EACAw+C,EACAt3C,EAAKgzC,KAAKz0B,OACVve,EAAKgzC,KAAKlwB,SACV9iB,EAAKgzC,KAAKv0B,UAND,UAOT84B,EAAkBj0B,oBAPT,aAOT,EAAgC7lB,KAChCwD,EACAjB,EAAKigB,OAET7T,EAAQuD,KAAK,WAAY,CAAEzY,SAAUgc,OAAO5G,SAASwB,YAyCzBsuC,aAAcA,EACd9wB,IAAKq1B,SAQ7B,kBAAC,GAAD,QCjFCK,GAAiB,SAACtnD,GAC3B,IAAMwD,EAAWsD,cAEXwuC,EAA0BlvC,YAAY0W,MACtCyqC,EAAanhD,YAAYohD,IACzBC,EAAoBrhD,YAAYshD,IAChCC,EAAavhD,YAAYwhD,MACzBC,EAAoBzhD,YAAYb,MAkCtC,OAPA9D,qBAAU,YAzBe,WACrB,IACM/B,EAAS41C,EAA0BmS,EAAoBF,EAEzD5R,GAAmB,EAKvB,MARe,CAAC,YAAa,WAAY,cAAe,WAAY,SAAU,WAAY,WAInF5mC,SAAQ,SAAC8rB,GACqB,qBAAtB8sB,EAAW9sB,KAAwB8a,GAAmB,QAGjEA,IAEIj2C,EAAON,YAAcuoD,EAAWvoD,WAChCM,EAAOkE,WAAa+jD,EAAW/jD,WAC9B8I,aAAchN,EAAOmI,YAAa8/C,EAAW9/C,cAC9CnI,EAAOzB,WAAa0pD,EAAW1pD,UAC/ByB,EAAOyK,SAAWw9C,EAAWx9C,QAC7BzK,EAAO0K,WAAau9C,EAAWv9C,UAC/B1K,EAAO2K,UAAYs9C,EAAWt9C,SAC7BrK,EAAMwF,QAAU9F,EAAO8F,SAAWxF,EAAMwF,SAQ7CqwC,KACA1/B,eACApQ,aAAYvC,EAAUmkD,EAAYE,EAAmB7nD,EAAMwF,WAEhE,IAEIxF,EAAMoK,UAGjBk9C,GAAetmB,UAAY,CACvBx7B,OAAQy7B,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAG9Cg5C,UC1BAQ,GAvBQ,WACnB,MAAwCn0C,eAAhCvU,EAAR,EAAQA,UAAWwE,EAAnB,EAAmBA,SAAU4B,EAA7B,EAA6BA,OAE7B,OACI,oCACI,kBAAC,IAAD,KACI,+BAAQ1F,aAAE,oBAEd,kBAAC,GAAD,CAAyBV,UAAWA,EAAWwE,SAAUA,GACrD,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAgB4B,OAAQA,GACpB,kBAAC,GAAD,KACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAUsiD,gBAAc,WCX3CljC,GAAgB,SAACve,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQqF,eACjD3hB,GAAO,SAACoD,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQtc,MACxC7D,GAAY,SAACiH,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQngB,WAC7CoG,GAAS,SAACa,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ/Z,QAE1Csf,GAAa,SAACze,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQuF,YAC9CC,GAAY,SAAC1e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQwF,WAC7CC,GAAY,SAAC3e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQyF,WAC7CC,GAAa,SAAC5e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ0F,YAC9CM,GAAkB,SAAClf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQgG,iBACnDC,GAAe,SAACnf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQiG,cAChDC,GAAgB,SAACpf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQkG,eACjD5d,GAAc,SAACxB,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ1X,aAC/C5J,GAAW,SAACoI,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQthB,UAC5CinB,GAAY,SAAC7e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ2F,WAC7CE,GAAU,SAAC/e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ6F,SAE3CE,GAAc,SAACjf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ+F,aAC/CI,GAAU,SAACrf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQmG,SAC3CE,GAAiB,SAACvf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQqG,gBAClDT,GAAU,SAAC9e,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ4F,SAEjD,GAA+DpT,aAAiBmQ,GAAhF,sBAAO6lC,GAAP,MAA0BC,GAA1B,MAA2CC,GAA3C,MAGA,GAA+Dl2C,aAAiBoQ,GAAhF,sBAAO+lC,GAAP,MAA0BC,GAA1B,MAGMxiC,IAHN,MAGuB,SAACtf,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQoG,iBAElD7f,GAAOutC,aAAev0B,GAAatZ,IAAQ,SAACm9C,EAAc/E,GACnE,OAAOtF,GAAmBqK,EAAc/E,MAG/Bh3C,GAASysC,aAAe9sC,KAAST,IAAM,SAAC0tC,EAAU4U,GAC3D,OAAOjsC,aAAcq3B,EAAU4U,EAAMrU,SAG5B/rB,GAAWqrB,aAAej0B,GAAWtZ,IAAM,SAAC6tC,EAAYyU,GACjE,OAAOA,EAAQjV,GAAgBQ,EAAYyU,EAAM9gC,WAAQre,KAGhDqwC,GAAOjG,aAAerqB,GAAWE,GAAWpE,IAAY,SAAC0zB,EAAYQ,EAAYqP,GAC1F,OAAO9P,GAAuBC,EAAYQ,EAAYqP,MAG7CC,GAAejV,aAAetuB,IAAW,SAACwjC,GACnD,MAA6B,qBAAfA,EAA6BlxC,WAAWkxC,QAAct/C,KAG3Du/C,GAAmB,SAACniD,GAAD,MAAqC,kBAAnB+e,GAAQ/e,IAE7CoiD,GAA8B,SAACpiD,GAAD,MAAuD,qBApCzD,SAACA,GAAD,OAAWA,EAAMkZ,QAAQA,QAAQ8F,kBAoCbqjC,CAA0BriD,IAEhF,GAAmE0L,aAAiBqQ,GAApF,sBAAOumC,GAAP,MAAwBC,GAAxB,MAA+CC,GAA/C,MCjEA,GAA0D92C,aAAiBwQ,GAA3E,sBAAO3F,GAAP,MAAmBkiB,GAAnB,MACA,IADA,MACoD/sB,aAAiByQ,IAArE,sBAAOk+B,GAAP,MAAiBC,GAAjB,MAAiCmI,GAAjC,MAGMliC,GAAkB,SAACvgB,GAAD,MAAoD,SAAzCA,EAAMkZ,QAAQ0G,OAAOW,iBCalDmiC,GAAmB,SAAC1iD,GAAW,IAAD,EACvC,iBDfkB,SAACA,GAAD,OAAWA,EAAMkZ,QAAQ0G,OAAOA,OCe3C+iC,CAAW3iD,UAAlB,aAAO,EAAmB7D,KAAI,SAACwmB,GAC3B,IAAMvmB,EAHQ,SAAC4D,GAAD,OAAWA,EAAMkZ,QAAQpU,KAAK8a,OAG9BA,CAAO5f,GAAO2iB,EAAUpnB,OAAS,EACzCojB,EAAY3N,WAAW2R,EAAUigC,MAAQxmD,EACzCymD,EAAe7xC,WAAW2R,EAAUmgC,SAAW1mD,EACrD,OAAO,2BAAKumB,GAAZ,IAAuBvmB,QAAOuiB,YAAWkkC,qBAGpCE,GAA2B,SAAC/iD,GAAW,IAAD,EAC/C,iBAAO0iD,GAAiB1iD,UAAxB,aAAO,EAAyBjD,QAAO,SAACimD,GAAD,OAAWA,EAAM5mD,MAAQ,MAcvD6mD,GAAmB,SAACjjD,GAAD,OAAWA,EAAMkZ,QAAQpU,KAAKob,MAAMC,aACvD+iC,GAAc,SAACljD,GAAD,OAAWA,EAAMkZ,QAAQpU,KAAKob,MAAME,QACxD,GAA2D1U,aAAiB6Q,GAA5E,sBAAO4mC,GAAP,MAAsBC,GAAtB,MAAyCC,GAAzC,MAIM/iC,GAAgB,SAACtgB,GAAD,OAAWA,EAAMkZ,QAAQpU,KAAKub,QAAQC,eAGtDgjC,GAAmB,SAACtjD,GAG7B,QAFqBujD,GAAkBvjD,IAAU,OAC3B4e,GAAW5e,IAAU,MAIlCwjD,GAAmB,SAACxjD,GAC7B,IAAMyjD,EAAW1kC,GAAQ/e,IAAU,EACnC,OAAOgR,WAAWyyC,GA7BoB,SAACzjD,GACvC,OAAO0iD,GAAiB1iD,GAAOq2C,QAAO,SAACv9C,EAAOkqD,GAC1C,OAAOA,EAAMH,aAAe/pD,IAC7B,GA0B2B4qD,CAA2B1jD,IAGhD2jD,GAAgB,SAAC3jD,GAC1B,IAAMkiD,EAAaxjC,GAAU1e,IAAU,EACjC4jD,EAAiBxkC,GAAcpf,IAAU,EAC/C,OAAOgR,WAAWkxC,EAAa0B,GA9BA,SAAC5jD,GAAW,IAAD,EAC1C,iBAAO+iD,GAAyB/iD,UAAhC,aAAO,EAAiCq2C,QAAO,SAACv9C,EAAOkqD,GACnD,OAAOA,EAAMrkC,UAAY7lB,IAC1B,GA2B8C+qD,CAAoB7jD,IAG5D2e,GAAY,SAAC3e,GACtB,IAAM8jD,EAAoB3B,GAAiBniD,GACrC+jD,EAAiBzjC,GAActgB,GAErC,OAAO8jD,GAAwC,YAAnBC,EAA+BP,GAAiBxjD,GAAS2jD,GAAc3jD,IAG1FgkD,GAAqB,SAAChkD,GAE/B,MAAqB,QADApD,GAAKoD,GAEf2jD,GAAc3jD,GAAS2e,GAAU3e,GAErCsjD,GAAiBtjD,IAGfikD,GAAgB,SAACjkD,GAE1B,MAAqB,QADApD,GAAKoD,GAEU,SAAzBsgB,GAActgB,GAAoB2jD,GAAc3jD,GAASwjD,GAAiBxjD,GAE9EsjD,GAAiBtjD,ICtBbkkD,GA9C6B,WACxC,IAAMC,EAAUpkD,YAAY+D,MACtBsgD,EAAerkD,YAAYyB,IAC3B6iD,EAAYtkD,YAAYgE,MACxBugD,EAAkBvkD,YAAYwf,IAC9Bre,EAAYnB,YAAYnI,IACxBygD,EAAYt4C,YAAY4hB,IACxBogC,EAAQhiD,YAAYN,IACpBuuC,EAAUjuC,YAAYQ,IACtBgkD,EAAkBxkD,YAAYgjD,IAC9ByB,EAAiBzkD,YAAY4jD,IAC7Bc,EAAW1kD,YAAYiE,MACvB0gD,EAAQ3kD,YAAYkzC,IAEpB0R,EAAkBJ,EAAgBjpD,MAAK,SAAC0nD,GAC1C,OAAyD,IAAlDA,EAAM5qD,KAAKuY,cAAcnR,OAAO,gBAG3C,OACI,kBAAC8W,GAAA,EAAD,CACIjd,OAAQ,CACJw7B,MAAO,eACP+vB,UAAW,MACXC,kBAAkB,GAAD,OAAKxM,EAAUjgD,KAAf,cAAyB2pD,EAAM3pD,MAChD0sD,kBAAmB9W,EAAQ51C,KAC3B2sD,kBAAmBhD,EAAMtiB,KACzBulB,kBAAmBN,EAAM/Q,SACzBzhC,MAAOhR,EACP+jD,UAAWn0C,aAAM0zC,GACjBU,UAAWZ,EACXa,WAAYt0C,aAAcuE,MAAM8Y,QAAQ6zB,EAAM5kB,MAAQ4kB,EAAM5kB,KAAK,GAAK4kB,EAAM5kB,MAC5EioB,WAAYpgD,aAAe,IAAIrG,KAAKylD,IACpCiB,WAAYrgD,aAAewC,aAAiB,IAAI7I,KAAKylD,GAAeljD,IACpEokD,YAAapkD,EACbqkD,YAAapB,EACbqB,cAAenB,EACfoB,aAAchB,EACdiB,SAAUvB,EAAUE,EAAYI,EAChCkB,YAAahB,EAAkB,iBAAc/hD,EAC7CgjD,gBAAiBjB,EAAkB7zC,aAAM6zC,EAAgB/B,WAAQhgD,EACjEijD,UAAkC,OAAvBpuD,IAAM,SAAwB,SAAWA,IAAM,aCpD7DquD,GAAiB,SAACnsD,GAC3B,IAAM6H,EAAc7H,EAAM6H,YAAc,IAAI7C,KAAKhF,EAAM6H,kBAAeoB,EAChE6E,EAAgB9N,EAAM6H,YAAc,IAAI7C,KAAKhF,EAAM6H,kBAAeoB,EAClElL,EAAqC,QAAtBiC,EAAMosD,YAM3B,OAJIt+C,GACAA,EAAcu+C,QAAQv+C,EAAcnF,UAAYY,SAASvJ,EAAM/B,SAAU,KAIzE,kBAAC,GAAD,CAAW8a,MAAO/Y,EAAM+Y,OACnB/Y,EAAMssD,cACH,oCACI,uBAAGtuD,UAAU,QAAQ8B,aAAE,iCAAkC/B,IACzD,kBAACs0B,GAAA,EAAD,CAAQr0B,UAAU,qBAAqBkC,QAAQ,UAAU2V,QAAS2D,OAAO+yC,OACpEzsD,aAAE,qCAIf,uBAAG9B,UAAU,mCACRgC,EAAM8F,KAAKrH,MAEhB,uBAAGT,UAAU,UACT,uBAAGA,UAAU,sCACb,8BAAOgC,EAAM8F,KAAKggC,OAEtB,yBAAK9nC,UAAU,kCACX,uBAAGA,UAAU,2BACU,eAAlBgC,EAAM3B,SAA4B2B,EAAMs5C,KAAKU,SACb,qBAAzBh6C,EAAMs5C,KAAKv0B,WACf,oCACI,6BADJ,OACY1N,WAAWrX,EAAMs5C,KAAKv0B,WAAWzN,QAAQ,MAKhEzP,GACG,uBAAG7J,UAAU,4BACR8B,aAAE,4BAA6BuJ,aAAmBxB,KAG1DiG,GACG,uBAAG9P,UAAU,4BACR8B,aAAE,6BAA8BuJ,aAAmByE,KAG5D,2BAAIhO,aAAE,6BAA8BE,EAAM/B,aAKtDkuD,GAAe5rD,aAAe,CAC1B+rD,cAAc,EACdvzC,MAAO,uBACPjT,KAAM,GACNkiB,SAAU,GACVsxB,KAAM,IAaKrT,sBAAKkmB,ICvEPK,GAAiB,SAAC,GAWxB,IAVHxuD,EAUE,EAVFA,UACAioB,EASE,EATFA,OACAlN,EAQE,EARFA,MACA5Z,EAOE,EAPFA,MACAstD,EAME,EANFA,eACA1nC,EAKE,EALFA,UACA2nC,EAIE,EAJFA,WACAhnC,EAGE,EAHFA,QAEAinC,GACE,EAFFtuD,QAEE,EADFsuD,WAEM7Q,EAAe6Q,EAAY,EACjC,OACI,kBAACh0C,GAAA,EAAD,CAAM3a,UAAS,oDAA+CA,GAAa,KACvE,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,MAAM+a,GAC7B,kBAACJ,GAAA,EAAKO,KAAN,KACI,2BAAIpZ,aAAE,gCACN,2BAAO9B,UAAU,mBACb,+BACI,wBAAIA,UAAU,QACV,4BAAI,4BAAQA,UAAU,uBAAuB8B,aAAE,wCAA3C,MACJ,4BAAI,4BAAQ9B,UAAU,kBAAlB,OAAqC+mB,EAAUzN,QAAQ,MAE9D2O,EAAOzjB,KAAI,SAAC6mD,EAAO1tC,GAChB,OACI,wBAAInc,IAAKmc,GACL,4BACI,4BAAQ3d,UAAU,uBACbqrD,EAAM5qD,KACN4qD,EAAM5mD,MAAQ,GAAd,YAAwB4mD,EAAM5mD,MAA9B,OAGT,4BACI,4BAAQzE,UAAU,kBAAkBqrD,EAAMrkC,UAAY,EAAlB,cAA0BqkC,EAAMrkC,UAAU1N,QAAQ,IAAO,SAK5GwkC,GACG,4BACI,4BACI,4BAAQ99C,UAAU,gBAAlB,kBAAgD,0BAAMA,UAAU,eAAhB,OAEpD,4BACI,4BAAQA,UAAU,kBAAlB,OAAqC2uD,EAAUr1C,QAAQ,SAO/E,kBAACqB,GAAA,EAAKO,KAAN,CAAWlb,UAAS,aAAQ89C,EAAe,UAAY,cACnD,uBAAG99C,UAAS,+BAA0B89C,EAAe,cAAgB,KAChEh8C,aAAE,uCAEP,uBAAG9B,UAAS,aAAQ89C,EAAe,cAAgB,KAAnD,OACM38C,EAAMmY,QAAQ,IAEnBo1C,GACG,uBAAG1uD,UAAU,uBACR8B,aACG,sCACA4N,aAAwBP,aAAeuY,IACvC+mC,EAAen1C,QAAQ,QASnDk1C,GAAejsD,aAAe,CAC1B0lB,OAAQ,GACRlN,MAAOjZ,aAAE,2CACTX,MAAO,EACPstD,eAAgB,EAChB1nC,UAAW,EACX2nC,YAAY,GAeDzmB,sBAAKumB,IChGPA,GAAiB,SAAC,GAAD,IAAGxuD,EAAH,EAAGA,UAAW+a,EAAd,EAAcA,MAAOkM,EAArB,EAAqBA,WAAYD,EAAjC,EAAiCA,UAAW2kC,EAA5C,EAA4CA,iBAA5C,OAC1B,kBAAChxC,GAAA,EAAD,CAAM3a,UAAS,oDAA+CA,GAAa,KACvE,kBAAC2a,GAAA,EAAKsa,OAAN,CAAaj1B,UAAU,MAAM+a,GAC7B,kBAACJ,GAAA,EAAKO,KAAN,KACI,wBAAIlb,UAAU,sBACV,4BACI,4BAAQA,UAAU,uBAAuB8B,aAAE,+BAA3C,KACA,4BAAQ9B,UAAU,kBAAlB,OAAqCqZ,WAAW2N,GAAW1N,QAAQ,KAEvE,4BACI,4BAAQtZ,UAAU,uBAAuB8B,aAAE,gCAA3C,KACA,4BAAQ9B,UAAU,kBAAlB,OAAqCqZ,WAAW4N,GAAY3N,QAAQ,OAIhF,kBAACqB,GAAA,EAAKO,KAAN,CAAWlb,UAAU,gBACjB,uBAAGA,UAAU,yBAAyB8B,aAAE,uCACxC,uBAAG9B,UAAU,uBAAb,OAAqCqZ,WAAWsyC,GAAkBryC,QAAQ,OAKtFk1C,GAAejsD,aAAe,CAC1B0kB,WAAY,EACZ0kC,iBAAkB,EAClB5wC,MAAOjZ,aAAE,oCACTklB,UAAW,GAWAihB,sBAAKumB,I,qBCRPI,GAAqB,SAAC5sD,GAC/B,IAAMuf,EAAU,CACZzZ,KAAMM,YAAYN,IAClBkiB,SAAU5hB,YAAY4hB,IACtBsxB,KAAMlzC,YAAYkzC,IAClBzxC,YAAazB,YAAYyB,IACzB5J,SAAUmI,YAAYnI,IACtBmB,UAAWgH,YAAYhH,KAGrBytD,EAAmBzmD,YAAYoiD,IAC/BsE,EAAW1mD,YAAYsf,IACvB0kC,EAAiBhkD,YAAYugB,IAC7B4hC,EAAaniD,YAAYkiD,IACzByE,EAAcF,GAAuC,YAAnBzC,EAClC4C,EAA4B5mD,YAAYgjD,IACxC6D,EAAa7mD,YAAY4e,IACzBkoC,EAAsB9mD,YAAYikD,IAClC8C,EAAQ/mD,YAAYnD,IACpBgnD,EAAiB7jD,YAAYqf,IAE7B2nC,EAAchnD,YAAY6e,IAC1BooC,EAAoBjnD,YAAYujD,IAChC2D,EAAqBlnD,YAAYwjD,IAEvC,OACI,kBAAClvC,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,EAAGF,GAAI,GACnBnV,EAAMoK,UAEX,kBAAC4P,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAI,EAAGF,GAAI,GACpB,kBAAC,GAAD,CACIi3C,YAAae,EACbb,aAActsD,EAAMssD,aACpBxmD,KAAMyZ,EAAQzZ,KACdkiB,SAAUzI,EAAQyI,SAClBsxB,KAAM/5B,EAAQ+5B,KACdzxC,YAAa0X,EAAQ1X,YACrB5J,SAAUshB,EAAQthB,SAClBI,QAAUkhB,EAAQngB,aAEpBY,EAAMssD,cACJ,yBAAKtuD,UAAU,0BACA,QAAVmvD,EACG,kBAAC,GAAD,CACIlnC,OAAQ+mC,EACR7tD,MAAO8tD,EACPR,eAAgBS,EAChBnoC,UAAWwjC,EACXmE,WAAYK,EACZrnC,QAASonC,EACTzuD,QAASkhB,EAAQngB,UACjButD,UAAW1C,IAGf,kBAACsD,GAAD,CACItoC,WAAYmoC,EACZpoC,UAAWsoC,EACX3D,iBAAkB0D,IAIzBrtD,EAAMyiD,QACH,oCACKziD,EAAMwtD,iBAAmB,2BAAIxtD,EAAMwtD,iBACpC,4BACIvqD,KAAK,SACLjF,UAAU,mCACV6X,QAAS7V,EAAMyiD,OACf//C,SAAU1C,EAAM0gD,UAAY1gD,EAAMytD,aAEjCztD,EAAM0gD,SAAW5gD,aAAE,qBAAuBE,EAAM0tD,kBAI3D1tD,EAAM0mB,SAAW,yBAAKzmB,IAAKymB,KAAS1oB,UAAU,4BAA4BsC,IAAI,wBAS5GssD,GAAmBrsD,aAAe,CAC9B+rD,cAAc,EACdmB,aAAa,EACb/M,UAAU,EACVgN,eAAgB5tD,aAAE,qBAWP8sD,UCnBAe,GAvGa,SAAC,GAAqC,IAAnCvB,EAAkC,EAAlCA,YAAaxmC,EAAqB,EAArBA,eAClC7nB,EAA+B,QAAhBquD,EACfvB,EAAiBzkD,YAAY4jD,IAE7BzqC,EAAU,CACZzZ,KAAMM,YAAYN,IAClBkiB,SAAU5hB,YAAY4hB,KAG1B,GAAIpC,EAAgB,CAAC,IAAD,EAChB,GAAI9nB,IAAO,eACP,IAkBI8vD,EAAeC,aAlBC,WACXr0C,OAAOs0C,MAIRnuD,QAAQouD,KAAK,iCACbtwC,cAAcmwC,GACdp0C,OAAOs0C,KAAKE,SAASC,KAAO,GAC5Bz0C,OAAOs0C,KAAKE,SAASC,KAAKtwD,OAASktD,EACnCrxC,OAAOs0C,KAAKE,SAASC,KAAK5vD,QAAU,KACpCmb,OAAOs0C,KAAKE,SAASC,KAAKC,SAAWtoC,EACrCpM,OAAOs0C,KAAKE,SAASC,KAAKzP,MAA1B,kBAA6CqM,GAC7CrxC,OAAOs0C,KAAKE,SAASC,KAAKE,SAAW,MACrC30C,OAAOs0C,KAAKE,SAASC,KAAKG,QAAU,GACpC50C,OAAOs0C,KAAKE,SAASC,KAAK5gD,KAAO,IACjCmM,OAAOs0C,KAAKE,SAASK,OAbrB1uD,QAAQouD,KAAK,4CAgBuB,IAGhD,OACI,oCACI,kBAAC,GAAD,CAAoBzB,cAAY,GAC5B,kBAAC,GAAD,CAAWvzC,MAAOjZ,aAAE,sCAAuC9B,UAAU,gBACjE,6BACI,2BAAI8B,aAAE,qCAAsCyf,EAAQyI,SAASvpB,KAAM8gB,EAAQzZ,KAAKrH,OAChF,wBAAIT,UAAU,QACT8B,aAAE,+CADP,IACuD,gCAAS8lB,IAEhE,wBAAI5nB,UAAU,kBAAkB8B,aAAE,mCAClC,2BAAIA,aAAE,uCACN,kBAAC2a,GAAA,EAAD,CAAKzc,UAAU,QACX,kBAACgc,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,aAC1B,kBAAC,IAAD,CAAMA,UAAU,0BAA0BV,GAAG,oFACxCwC,aAAE,0CAGX,kBAACka,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,aAC1B,kBAAC,IAAD,CAAMA,UAAU,0BAA0BV,GAAG,KACxCwC,aAAE,oCAGX,kBAACka,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,aAC1B,kBAAC,IAAD,CAAMA,UAAU,0BAA0BV,GAAG,eACxCwC,aAAE,6CAgB1B/B,GAAgB,kBAAC,GAAD,MAEhBD,IAAO,gBACJ,yBACIwC,IAAI,OACJguD,OAAQ,EACRjuD,OAAQ,EACRJ,IAAG,8DAAyDnC,IAAO,mBAAhE,mBACY+sD,EADZ,gCACkDA,EADlD,gBACwEjlC,EADxE,iBAC8F,UAAAjP,SAAS43C,OAAOC,MAAM,6CAAtB,eAA6DC,QAAS,GADpK,0BAGHllB,MAAO,CAAEmlB,QAAS,QAClBh1C,MAAO,KAMvB,OACI,oCACI,kBAACgB,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,uBAAGhc,UAAU,QAAQ8B,aAAE,oDC7FpC6uD,GADsBrgC,aAPb,SAACjoB,GAAD,MAAY,CAChC+lD,YAAanpD,GAAKoD,GAClBuf,eAAgBA,GAAevf,OAGR,iBAAO,KAEGioB,CAA6Cq/B,ICZrEiB,GAAgB,CACzBC,OAAQ,SACRC,QAAS,UACTC,QAAS,UACTC,eAAgB,iBAChBC,aAAc,gBCDZC,GAAmB,CACrBN,GAAcC,OACdD,GAAcE,QACdF,GAAcG,QACdH,GAAcI,gBAEZG,GAAe,CAACP,GAAcC,OAAQD,GAAcE,QAASF,GAAcG,QAASH,GAAcI,gBAClGI,GAA0B,CAACR,GAAcG,QAASH,GAAcI,gBAiBvDK,GAfY,WAAsB,IAArBp+B,EAAoB,wDACtC5pB,EAAajB,YAAYhH,IACzBkwD,EAAkBlpD,YAAYuf,IAC9B4pC,EAAenpD,YAAYnD,IASjC,OANqB,aAAjBssD,EACWH,GAEe,gBAAf/nD,EAA+B8nD,GAAeD,IAG7C9rD,QAAO,SAAC88B,GAAD,OAAWovB,EAAgBhuD,SAAS4+B,MAAOjP,EAAU,EAAI,ICjBvEu+B,GAAqB,SAACxvD,GAAD,OAChC,kBAACqxB,GAAA,EAAD,CAAM5yB,KAAK,qBAAqB6yB,YAAU,GACvCtxB,EAAMyvD,oBACL,oCACE,2BAAIzvD,EAAM0vD,uBACV,kBAACr+B,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,mBAClB,kBAACqzB,GAAA,EAAKvvB,MAAN,CAAYO,GAAI2X,MACd,yBAAKhc,UAAU,iCACb,kBAAC,GAAD,CACES,KAAK,gBACLgE,MAAM,UACNovB,UAAQ,EACR1vB,MAAOrC,aAAE,sCAAuCE,EAAM6pD,iBAAiBvyC,QAAQ,IAC/EhU,QAAkC,YAAzBtD,EAAM2vD,eACfptD,SAAUvC,EAAMuC,eAO1B,oCACGvC,EAAMwoD,iBACL,oCACE,2BAAI1oD,aAAE,mCACN,kBAACuxB,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,mBAClB,kBAACqzB,GAAA,EAAKvvB,MAAN,CAAYO,GAAI2X,MACd,yBAAKhc,UAAU,iCACb,kBAAC,GAAD,CACES,KAAK,gBACLgE,MAAM,OACNN,MAAOrC,aAAE,mCAAoCE,EAAMgqD,cAAc1yC,QAAQ,IACzEhU,QAAkC,SAAzBtD,EAAM2vD,eACfptD,SAAUvC,EAAMuC,YAGpB,yBAAKvE,UAAU,kBACb,kBAAC,GAAD,CACES,KAAK,gBACLgE,MAAM,UACNN,MAAOrC,aAAE,sCAAuCE,EAAM6pD,iBAAiBvyC,QAAQ,IAC/EhU,QAAkC,YAAzBtD,EAAM2vD,eACfptD,SAAUvC,EAAMuC,cAKE,YAAzBvC,EAAM2vD,gBACL,uBAAG3xD,UAAU,oBACV8B,aACC,8CACA4N,aAAwBP,aAAenN,EAAM0lB,UAC7C1lB,EAAMqqD,mBAAmB/yC,QAAQ,MAMzC,2BAAItX,EAAMslB,gBAOpBkqC,GAAmBjvD,aAAe,CAChC6kB,QAAS,EACTqqC,qBAAqB,EACrBC,sBACE,kHACFlH,kBAAkB,EAClBljC,YAAaxlB,aAAE,2CACf+pD,iBAAkB,EAClBG,cAAe,EACfK,mBAAoB,GAgBPmF,UCjFFI,GAAoB,SAACpsD,EAAUhE,EAAKiD,GAC7Ce,EAAS,CAAEP,KpMfoBsU,mCoMeO7T,QAAS,CAAElE,MAAKiD,YAO7CotD,GAAc,SAACrsD,EAAUhE,EAAKiD,GACvCe,EAAS,CAAEP,KAAM0f,EAAcjf,QAAS,CAAElE,MAAKiD,YAOtCqtD,GAAsB,SAACtsD,EAAUhE,EAAKiD,GAC/Ce,EAAS,CAAEP,KpM5BsBsU,qCoM4BO7T,QAASjB,KAG9C,GAAiD6C,cAAqB,SAAC9B,EAAUqiB,EAAQplB,EAAMulB,GAClG,OAAO7U,aACH3N,EACAof,EACAhd,IAAK+Z,uBAHgB,aAInBkG,SAAQ,aAAa,GAAb,OAAiBplB,IAAWulB,QACtC/c,EACA,WAPD,sBAAO8mD,GAAP,MCHQC,IDGR,MClC0B,SAACC,EAAUC,EAAcv5B,GAAmC,IAAxBE,EAAuB,uDAAP,GAC3ErzB,EAAWsD,cACjB,EAA4B5F,mBAAS,eAAK21B,IAA1C,oBAAOrmB,EAAP,KAAesmB,EAAf,KACMrQ,EAASrgB,YAAY6pD,GAE3B,SAASlhC,IACL,IAAMiI,EAA+B,oBAAdL,EAA2BA,EAAUlQ,GAAU,GACtE,OAAuC,IAAhC7d,OAAO8G,KAAKsnB,GAASp0B,OAGhC,SAASL,EAAS/C,EAAKiD,GACS,oBAAjBytD,GACPA,EAAa1sD,EAAUhE,EAAKiD,GAIpC,SAASw0B,IACL,IAAMD,EAA+B,oBAAdL,EAA2BA,EAAUlQ,GAAU,GAEtE,OADAqQ,EAAUE,GACHA,EAGX,MAAO,CACHvQ,SACAlkB,WACA00B,WACAlI,UACAve,YChBK2/C,GAA6B,8BAAC,eACpCH,GAAkBrpC,GAAempC,KADE,IAEtC1qC,QAAShf,YAAYgf,IACrBojC,iBAAkBpiD,YAAYoiD,IAC9BiH,oBAAqBrpD,YAAYqiD,IACjCnjC,YAAalf,YAAYkf,IACzBI,QAAStf,YAAYsf,IACrBmkC,iBAAkBzjD,YAAYyjD,IAC9BG,cAAe5jD,YAAY4jD,IAC3BK,mBAAoBjkD,YAAYikD,OCRvB+F,GAAuB,8BAAC,eAC9B15B,GAAkB25B,GAAe7qC,KADJ,IAEhCmjC,gBAAiBviD,YAAYuiD,IAC7BC,sBAAuBxiD,YAAYwiD,IACnCC,iBAAkBziD,YAAYyiD,OCRrBwH,GAAgB,SAAC5pC,GAC1B,IAAMjW,EAAS,GAIf,OAHKqhB,GAASpL,EAAOjB,gBACjBhV,EAAOgV,aAAe1lB,aAAE,oCAErB0Q,GA4GI8/C,OAzGf,SAAsBtwD,GAClB,MAA8DkB,oBAAS,GAAvE,oBAAOqvD,EAAP,KAAgCC,EAAhC,KACA,EAAwDtvD,oBAAS,GAAjE,oBAAOuvD,EAAP,KAA6BC,EAA7B,KACQrwB,EDd0B,WAClC,IAAM78B,EAAWsD,cACjB,MAAO,CACHu5B,YAAa,SAACnb,EAAWtjB,GAAZ,OAAqBy+B,GAAY78B,EAAU0hB,EAAWtjB,KCW/C+uD,GAAhBtwB,YACR,EAA0E+vB,KAAlEvH,EAAR,EAAQA,iBAAkB95B,EAA1B,EAA0BA,QAASkI,EAAnC,EAAmCA,SAAUxQ,EAA7C,EAA6CA,OAAQjW,EAArD,EAAqDA,OAAQjO,EAA7D,EAA6DA,SACvDquD,EAAoBxqD,YAAYof,IAChCqrC,EAAmBzqD,YAAYmf,IACrC,EAAkDrkB,mBAASulB,EAAOjB,cAAlE,oBAAOsrC,EAAP,KAA0BC,EAA1B,KACMvtD,EAAWsD,cAEXkqD,EAAoB,WACtB,IAAsBC,EAAwBxqC,EAAtCjB,aAER,QADgBorC,IAAsBK,IAIpCC,EAA0B,SAACtvD,GAC7Bq1B,IACIlI,OvHEqB,SAACvrB,EAAU5B,GACjC4B,EAAS,CACZP,KAAMmf,EACN1e,QAAS9B,EAAK4M,auHJV2iD,CAAkB3tD,EAAU5B,GAC5By+B,EAAYrgC,EAAM8lB,OAAQlkB,GACrBoP,QAAQ7I,MAAK,SAAC4oB,GACX,QAAwC9nB,IAApC8nB,EAAKrtB,QAAQ0E,SAAS9B,KAAKA,KAAoB,CAC/C,IAAMmf,EAAgBsL,EAAKrtB,QAAQ0E,SAAS9B,KAAKA,KAAKmf,eAAiB,EAClEorC,GvHGK,SAACrtD,EAAUf,GAClCe,EAAS,CACZP,KnF1C0BsU,qCmF2C1B7T,QAAS2T,WAAW5U,KuHNmB2uD,CAAmB5tD,EAAUiiB,GAExD+qC,GAA2B,MAE9Bv/C,OAAM,iBAcnB,OARAxP,qBAAU,WACNsvD,EAAqBH,KACtB,CAACA,IAEJnvD,qBAAU,WACNivD,EAAwBG,KACzB,IAGC,kBAAC,GAAD,CAAWj+B,WAAS,EAACG,QAAM,EAACC,YAAY,gBAAgBja,MAAM,iBAC1D,kBAAC0B,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK3E,GAAI,IACJo7C,GACG,kBAACn+B,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,0BAAnC,oCAGR,kBAACgc,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,OAC1B,kBAAC,GAAD,CACIiF,KAAK,OACLxE,KAAK,eACLwzB,YAAY,gBACZvvB,SAAUmuD,EACVp9B,UAAWjjB,EAAOgV,aAClB/iB,MAAOquD,EACPvuD,SAAU,SAACkT,GACPlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,OACjCsuD,EAAqBt7C,EAAED,OAAO/S,QAElCkxB,kBAAmBnjB,EAAOgV,gBAGlC,kBAACxL,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,uBAC1B,kBAACq0B,GAAA,EAAD,CACIzc,OAAK,EACLC,QAAS,WAAQq7C,EAAwBzqC,EAAOjB,eAChD9iB,SAAUmuD,GAAoBG,KAHlC,gBASPnI,GAAoBmI,KAAuBv1C,MAAM8Y,QAAQs0B,EAAiBr4C,SACvE,kBAAC8hB,GAAA,EAAD,CAAOpyB,QAAQ,SAASlC,UAAU,8BAC7B6qD,EAAiBr4C,OAAOhO,KAAI,SAAC2uB,GAAD,OACzB,uBAAG3xB,IAAK2xB,EAAMvvB,KAAM5D,UAAU,QAA9B,UACQmzB,EAAMhM,SADd,OACwBgM,EAAMovB,WAAa,KAAOpvB,EAAMovB,WAAa,IAAM,SAKtFgQ,GACG,kBAAC91C,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,kBAACsY,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,oCAC/B,kBAACyc,GAAA,EAAD,CAAK2Z,WAAS,GACV,kBAACpa,GAAA,EAAD,CAAK3E,GAAI,GAAT,gBACkB,IACd,0BAAMrX,UAAU,gBACZ,gCAASyoB,EAAOjB,eACZ,IAJZ,kBCWjB6rC,GAxFQ,SAAC,GAA2C,IAAzC3+C,EAAwC,EAAxCA,QAASutB,EAA+B,EAA/BA,cAAe/a,EAAgB,EAAhBA,UAC1C7d,EAAajB,YAAYhH,IACzBkyD,EAAWjC,KACX3oC,EAAUypC,KAChB,EAAkC3zB,KAA1B9G,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,WACb2H,EAAYn3B,YAAY6jB,IACxBsnC,EAAuCnrD,YAAY+jB,IACjD0+B,EAAqBuH,KAArBvH,iBACF2I,EAAmBprD,YAAYwgB,IAC/Bia,EAAcJ,KACZhK,EAAe+J,KAAf/J,WACR,EAAwBv1B,mBAAyC,MAAhC2/B,EAAYpa,OAAON,UAA7CsrC,EAAP,qBAaMjE,EAAkB,SAACkE,GAAD,OACtB5xD,aAAE,+BAAgC4xD,EAAY5zD,IAAO,2BAA4BA,IAAO,wBAQ1F,OANA2D,qBAAU,WACJgwD,IAAkBF,GACpB1wB,EAAYt+B,SAAS,CAAE4jB,SAAU,KAAMC,OAAQ,SAEhD,IAGD,kBAAC,GAAD,CACEonC,gBACiCA,EAAhB,gBAAfnmD,EAA+C,uBAA0C,YAE3FqmD,eAA+B,gBAAfrmD,EAA+B,uBAAyB,WACxEo7C,OA1Be,WACbllB,IACFsD,EAAY5J,WACR4J,EAAY9R,YACd0H,EAAWoK,EAAYpa,QACvBwZ,IACAvtB,EAAQuD,KAAR,mBAAyBq7C,OAqB3B7D,aAAclwB,GAEd,kBAAC,GAAD,CACE+iB,cAAe1qB,EACf8qB,SAAUhrB,EACVqJ,oBAAqBj/B,aAAE,gCACvB8gD,mBAAoB9gD,aAAE,iCAEpBy9B,GACA,oCACE,kBAAC,GAAD,CAAW3K,WAAS,EAACG,QAAM,EAACC,YAAY,QAAQja,MAAM,0BACpD,kBAAC,GAAD,CAAeujB,YAAa,kBAAM9iB,OAAOm4C,KAAK,2BAA2Bv1B,eAAa,KAExF,kBAAC,GAAD,CAAWxJ,WAAS,EAACG,QAAM,EAACC,YAAY,iBAAiBja,MAAM,wBAC7D,kBAAC4kB,GAAD,QAILJ,IAAck0B,GAAiBF,IAC9B,kBAAC,GAAD,CAAW3+B,WAAS,EAACG,QAAM,EAACC,YAAY,sBAAsBja,MAAM,4BAClE,kBAAC,GAAD,CACE0N,OAAQoa,EAAYpa,OACpBlkB,SAAUs+B,EAAYt+B,SACtBiO,OAAQqwB,EAAYrwB,OACpB+nB,WAAS,KAIdi5B,GAAoB,kBAAC,GAAD,CAAclR,cAAeuI,EAAkB/iC,OAAQZ,IAC5E,kBAAC,GAAD,CAAW0N,WAAS,EAACG,QAAM,EAACC,YAAY,kBAAkBja,MAAM,mBAC9D,kBAAC,GAAD,CACE8wC,iBAAkBnjC,EAAQmjC,iBAC1BG,cAAetjC,EAAQsjC,cACvBK,mBAAoB3jC,EAAQ2jC,mBAC5BjlC,QAASsB,EAAQtB,QACjBojC,iBAAkB9hC,EAAQ8hC,iBAC1BiH,oBAAqB/oC,EAAQ+oC,oBAC7BnqC,YAAaoB,EAAQpB,YACrBI,QAASgB,EAAQhB,QACjBiqC,eAAgBjpC,EAAQD,OACxBlkB,SAAUmkB,EAAQnkB,eC5FfqvD,GADiBtjC,aATR,SAACjoB,GAAD,MAAY,CAChC6e,UAAWA,GAAU7e,OAGE,SAAC7C,GAAD,MAAe,CACtCy8B,cAAe,kBAAMA,GAAcz8B,EAAUorD,GAAcE,UAC3Dr4B,WAAY,SAACo7B,EAAaC,GAAd,OAA6Br7B,GAAWjzB,EAAD,YAAC,eAAequD,GAAgBC,QAGvDxjC,CAA6C+iC,ICXhEU,GAAmB,SAAC/xD,GAC7B,IAAMgyD,EAAa,SAAC/I,GAChB,OAAO5xC,WAAW4xC,GAAM3xC,QAAQ,IAGpC,OACI,kBAAC,GAAD,CAAWsb,WAAS,EAACI,YAAahzB,EAAMymB,OAAO,GAAG7kB,KAAMmX,MAAO/Y,EAAMymB,OAAO,GAAGwrC,MAAOl/B,OAAkC,cAA1B/yB,EAAMymB,OAAO,GAAGwrC,MAAuBj0D,UAAU,oBAC1IgC,EAAMymB,OAAOjkB,KAAI,SAAC6mD,EAAO5wC,GAAR,OACd,yBAAKjZ,IAAKiZ,GACL4wC,EAAMrN,MAAQ,yBAAKh+C,UAAU,OAAO4c,wBAAyB,CAAEC,OAAQwuC,EAAMrN,QAC9E,yBACIh+C,UAAS,qCAA+C,YAAfqrD,EAAMpmD,KAAqB,kCAAoC,KAExF,YAAfomD,EAAMpmD,KACH,kBAAC,GAAD,CACIjB,GAAIqnD,EAAMznD,KACVO,MAAK,UAAKknD,EAAM5qD,KAAX,oBAAwBuzD,EAAW3I,EAAMJ,MAAzC,QACLpxB,UAAS,UAAKwxB,EAAM5qD,KAAX,iBAAqBuzD,EAAW3I,EAAMJ,OAC/C3lD,UAAW+lD,EAAM5mD,MACjBF,SAAU,SAACxD,GAAD,OAASiB,EAAMuC,SAAS8mD,EAAMznD,KAAMswD,OAAOnzD,OAGzD,oCACI,uBAAGf,UAAU,QACRqrD,EAAM5qD,KADX,MACmB,qCAAsB,cAAf4qD,EAAMznD,KAAuB,GAA7B,cAAsCowD,EAAW3I,EAAMJ,UAEjF,kBAAC5S,GAAA,EAAD,CACIr0C,GAAIqnD,EAAMznD,KACViJ,IAAKtB,SAAS8/C,EAAMx+C,IAAK,IACzBC,IAAKvB,SAAS8/C,EAAMv+C,IAAK,IACzBrI,MAAO4mD,EAAM5mD,MACbF,SAAU,SAACxD,GAAD,OAASiB,EAAMuC,SAAS8mD,EAAMznD,KAAM7C,cAalFgzD,GAAiBxxD,aAAe,GAgBjBwxD,UCnBFI,GAAa,SAACnyD,GACvB,MAA0CkB,wBAAS+H,GAAnD,oBAAOmpD,EAAP,KAAsBC,EAAtB,KASA,OAPA5wD,qBAAU,WACN,IAAM6wD,EAhCY,SAACrsC,GACvB,IAAMssC,EAAc,IAAIC,IAAI,CACxB,CAAC,YAAa,GACd,CAAC,OAAQ,GACT,CAAC,SAAU,GACX,CAAC,iBAAkB,GACnB,CAAC,SAAU,KAGf,OAAOvsC,EAAOzjB,KAAI,SAAAC,GAAK,kCAChBA,GADgB,IAEnBge,MAAO8xC,EAAY70B,IAAIj7B,EAAMwvD,QAAU,OAqBdQ,CAAkBzyD,EAAMimB,QAC3CysC,EAA0BJ,EApCtBl/C,MAVM,SAACC,EAAGC,GACpB,OAAID,EAAEoN,MAAQnN,EAAEmN,OACJ,EAERpN,EAAEoN,MAAQnN,EAAEmN,MACL,EAEJ,KAwCP4xC,EAnBY,SAACpsC,GACjB,IAAwBzmB,EASxB,OATwBA,EASD,QAARymB,EAREy2B,QAAO,SAAC1T,EAAQ2pB,GAIzB,OAHC3pB,EAAO2pB,EAAanzD,IAAQwpC,EAAO2pB,EAAanzD,KAAS,IAAIyW,KAC1D08C,GAEG3pB,IACR,IAYc4pB,CAAYF,MAC9B,CAAC1yD,EAAMimB,SAIN,oCACKjmB,EAAMgZ,QACHlZ,aAAE,kBAEF,oCACI,2BAAIA,aAAE,2BACLsyD,GAAiBxpD,OAAO8G,KAAK0iD,GAAe5vD,KAAI,SAAChD,GAC9C,IAAMymB,EAASmsC,EAAc5yD,GAC7B,OACI,kBAAC,GAAD,CAAkBA,IAAKymB,EAAO,GAAGrkB,KAAM5D,UAAU,OAAOuE,SAAUvC,EAAM6vD,YAAappC,OAAQR,UASzHksC,GAAW5xD,aAAe,CACtByY,SAAS,EACTiN,OAAQ,IASGksC,UCnFR,GAAqC7sD,cAAqB,SAAC9B,EAAU0hB,GACxE,OAAOvf,aAAWnC,EAAU+e,EAAY3c,IAAK6Z,iBAAkB,CAAEoG,OAAQX,OADtE,sBAAO2tC,GAAP,MAIA,IAJA,MAIqCvtD,cAAqB,SAAC9B,EAAU0hB,EAAWe,EAAQka,EAAO2yB,GAClG,IAAI1yB,EAAG,aACHva,OAAQX,GACLe,GAGP,OADK6sC,IAAU1yB,EAAI5a,aAAe2a,GAC3BhvB,aAAmB3N,EAAUgf,EAAY5c,IAAK8Z,iBAAkB0gB,OANpE,sBAAO2yB,GAAP,MCiBMC,IDjBN,MCiB2B,8BAAC,eAC5BhD,GAAkBjH,GAAkB8G,KADT,IAE9B/G,gBAAiB1iD,YAAY0iD,IAC7BhqB,iBAAkB14B,YAAY04B,IAC9B6hB,eAAgBv6C,YAAYu6C,IAC5B/jC,WAAYxW,YAAYwW,IACxB8jC,SAAUt6C,YAAYs6C,QCpBpBuS,GAAaz3C,aAAc,EAAG,GAC9B03C,GAAY13C,aAAc,EAAG,IAC7B23C,GAAY33C,aAAc,GAAI,IAEvB43C,GAAsB,SAAC,GAAiE,IAC7FC,EAD8B5sC,EAA8D,EAA9DA,OAAQjW,EAAsD,EAAtDA,OAAQjO,EAA8C,EAA9CA,SAAUq2B,EAAoC,EAApCA,SAAU06B,EAA0B,EAA1BA,OAAQC,EAAkB,EAAlBA,OAAQrnD,EAAU,EAAVA,IAOtF,MAJiB,YAAb0sB,IAAwBy6B,EAAOJ,IAClB,aAAbr6B,IAAyBy6B,EAAOH,IACnB,WAAbt6B,IAAuBy6B,EAAOF,IAG9B,kBAAC9hC,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,gBAChB,kBAACgc,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,GACb,kBAAC,GAAD,CACI5W,KAAI,YAAO60D,GACX7wD,MAAOgkB,EAAO,KAAD,OAAM6sC,KAAa,GAChC5/B,MAAO,CAAE,aAAc5zB,aAAE,qBAAsB4C,SAAU6wD,GACzDhxD,SAAUA,EAAW,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,aAASwG,EACtEwqB,UAAWjjB,EAAO,KAAD,OAAM8iD,IACvB3/B,kBAAmBnjB,EAAO,KAAD,OAAM8iD,KAE/B,4BAAQ7wD,MAAM,GAAGC,UAAQ,IACxBkG,OAAO8G,KAAKkrB,IAAQp4B,KAAI,SAAChD,GAAD,OACrB,4BAAQA,IAAKA,EAAKiD,MAAOjD,GACpBo7B,GAAOp7B,SAMxB,kBAACwa,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,GACb,kBAAC,GAAD,CACI5W,KAAI,YAAO60D,GACXrhC,YAAanyB,aAAE,uBACf2C,MAAOgkB,EAAO,KAAD,OAAM6sC,IACnB5/B,MAAO,CAAE,aAAc5zB,aAAE,uBAAwBqyB,UAAW,EAAGzvB,SAAU6wD,GACzEhxD,SAAUA,EAAW,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,aAASwG,EACtEwqB,UAAWjjB,EAAO,KAAD,OAAM8iD,IACvB3/B,kBAAmBnjB,EAAO,KAAD,OAAM8iD,OAIvC,kBAACt5C,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,GACb,kBAAC,GAAD,CACI5W,KAAI,YAAO60D,GACXrhC,YAAanyB,aAAE,uBACf2C,MAAOgkB,EAAO,KAAD,OAAM6sC,IACnB5/B,MAAO,CAAE,aAAc5zB,aAAE,uBAAwB4C,SAAU6wD,GAC3DhxD,SAAUA,EAAW,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,aAASwG,EACtEwqB,UAAWjjB,EAAO,KAAD,OAAM8iD,IACvB3/B,kBAAmBnjB,EAAO,KAAD,OAAM8iD,OAIvC,kBAACt5C,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,GACZnJ,EACG,kBAAC,GAAD,CACIzN,KAAI,aAAQ60D,GACZrhC,YAAanyB,aAAE,mBACf2C,MAAOgkB,EAAO,MAAD,OAAO6sC,IACpB5/B,MAAO,CAAE,aAAc5zB,aAAE,mBAAoBi1B,aAAc,MAAOryB,SAAU6wD,GAC5EhxD,SAAUA,EACVkxB,UAAWjjB,EAAO,MAAD,OAAO8iD,IACxB3/B,kBAAmBnjB,EAAO,MAAD,OAAO8iD,IAChC16B,SAAUA,EACV1sB,KAAG,IAGP,kBAAC,GAAD,CACIzN,KAAI,YAAO60D,GACX7wD,MAAOgkB,EAAO,KAAD,OAAM6sC,KAAa,GAChC5/B,MAAO,CAAE,aAAc5zB,aAAE,mBAAoB4C,SAAU6wD,GACvDhxD,SAAUA,EAAW,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,aAASwG,EACtEwqB,UAAWjjB,EAAOuI,MAClB4a,kBAAmBnjB,EAAOuI,OAE1B,4BAAQtW,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,oBAENuzD,EAAK7wD,KAAI,SAAC4+B,GAAD,OACN,4BAAQ5hC,IAAK4hC,EAAK3+B,MAAO2+B,GACpBA,UAUjCgyB,GAAoB7yD,aAAe,CAC/BkmB,OAAQ,GACRjW,OAAQ,GACR+iD,QAAQ,EACR36B,SAAU,UAYCw6B,UC9GF1+B,GAAiB,WAAkB,IACtClkB,EAAS,GAIf,OAAOA,GAKEgjD,GAAmB,SAAC,GAW1B,IAVHrpD,EAUE,EAVFA,OACAC,EASE,EATFA,SACAC,EAQE,EARFA,QACAmG,EAOE,EAPFA,OACAiW,EAME,EANFA,OACAD,EAKE,EALFA,YACAitC,EAIE,EAJFA,oBACAC,EAGE,EAHFA,oBACAC,EAEE,EAFFA,gBACAznD,EACE,EADFA,IAEA,OACI,kBAACmlB,GAAA,EAAD,CAAM5yB,KAAK,mBAAmB6yB,YAAU,GACnCqiC,GACG,kBAACtiC,GAAA,EAAK5W,IAAN,KACI,kBAAC4W,GAAA,EAAKvvB,MAAN,CAAYO,GAAI2X,KAAKhc,UAAU,QAC3B,uBAAGA,UAAU,QAAQ8B,aAAE,4BACvB,yBAAK9B,UAAU,iCACX,kBAAC,GAAD,CACIS,KAAK,cACLgE,MAAM,IACNN,MAAOrC,aAAE,mBACTwD,QAAyB,MAAhBkjB,EACTjkB,SAAU,SAAC/C,EAAKiD,GAAN,OAAgBixD,EAAoBl0D,EAAKiD,OAG3D,yBAAKzE,UAAU,kBACX,kBAAC,GAAD,CACIS,KAAK,cACLgE,MAAM,IACNN,MAAOrC,aAAE,yCACTwD,QAAyB,MAAhBkjB,EACTjkB,SAAU,SAAC/C,EAAKiD,GAAN,OAAgBixD,EAAoBl0D,EAAKiD,SAOvE,2BAAI3C,aAAE,oCAELqK,EACG,yBAAKnM,UAAU,QACX,4BAAK8B,aAAE,uBACN,YAAI,IAAI2b,MAAMtR,IAAS3H,KAAI,SAACgW,EAAMC,GAAP,OACxB,yBAAKjZ,IAAKiZ,GACN,uBAAGza,UAAU,yBAAb,SAA4Cya,EAAQ,GACpD,kBAAC,GAAD,CACIgO,OAAQA,EACRjW,OAAQA,EACRjO,SAAUkxD,EACV76B,SAAS,SACT06B,OAAQ76C,EAAQ,EAChB86C,OAAkB,IAAV96C,GAA+B,MAAhB+N,EACvBta,IAAKA,SAKrB,KACH9B,EACG,yBAAKpM,UAAU,QACX,4BAAK8B,aAAE,yBACN,YAAI,IAAI2b,MAAMrR,IAAW5H,KAAI,SAACgW,EAAMC,GAAP,OAC1B,yBAAKjZ,IAAKiZ,GACN,uBAAGza,UAAU,yBAAb,SAA4Cya,EAAQ,GACpD,kBAAC,GAAD,CACIgO,OAAQA,EACRjW,OAAQA,EACRjO,SAAUkxD,EACVH,OAAQ76C,EAAQtO,EAAS,EACzByuB,SAAS,WACT1sB,IAAKA,SAKrB,KACH7B,EACG,6BACI,4BAAKvK,aAAE,wBACN,YAAI,IAAI2b,MAAMpR,IAAU7H,KAAI,SAACgW,EAAMC,GAAP,OACzB,yBAAKjZ,IAAKiZ,GACN,uBAAGza,UAAU,yBAAb,UAA6Cya,EAAQ,GACrD,kBAAC,GAAD,CACIgO,OAAQA,EACRjW,OAAQA,EACRjO,SAAUkxD,EACVH,OAAQ76C,EAAQtO,EAASC,EAAW,EACpCwuB,SAAS,UACT1sB,IAAKA,SAKrB,OAKhBsnD,GAAiBjzD,aAAe,CAC5B4J,OAAQ,EACRC,SAAU,EACVC,QAAS,EACToc,OAAQ,GACRjW,OAAQ,GACRmjD,iBAAiB,GAgBNH,UCzHFI,GAA6B,WACtC,IAAMpwD,EAAWsD,cACjB,MAAO,CACH+sD,kBAAmB,SAACr0D,EAAKiD,EAAOqxD,GAAb,ObJM,SAACtwD,EAAUhE,EAAKiD,GAAsB,IAAfkiB,EAAc,uDAAP,GAC3DnhB,EAAS,CAAEP,KAAMyf,EAAsBhf,QAAS,CAAEjB,QAAOkiB,UaGRkvC,CAAkBrwD,EAAUhE,EAAKiD,EAAOqxD,IACrF/D,gBAAiB,SAAClqC,EAAQplB,EAAMulB,GAAf,OAA2B+pC,GAAgBvsD,EAAUqiB,EAAQplB,EAAMulB,IACpF+tC,aAAc,kBAAM9zB,GAAcz8B,EAAUorD,GAAcoF,UAIrDC,GAA2B,WACpC,IAAMvzB,EAAWt6B,YAAY4f,IACvBuX,EAAYn3B,YAAY6jB,IACxB3d,EAAU,IAAItH,KAGpB,OAFAsH,EAAQ4nD,YAAY3qD,SAASm3B,EAASS,OAAQ53B,SAASm3B,EAASrW,SAAW,EAAG9gB,SAASm3B,EAASQ,SAEzF,2BACA8uB,GAAkBzG,GAAaqG,GAAmBl7B,KADzD,IAEIvqB,OAAQ/D,YAAY+D,MACpBqc,YAAapgB,YAAYkjD,IACzBpkC,UAAW9e,YAAY8e,IACvB9a,SAAUhE,YAAYgE,MACtB6f,SAAUsT,EACVksB,kBAAmBrjD,YAAYqjD,IAC/BD,cAAepjD,YAAYojD,IAC3BE,eAAgBtjD,YAAYsjD,IAC5Br/C,QAASjE,YAAYiE,MACrBsa,KAAM4Y,EACA,CACE42B,IAAKzzB,EAAS3nB,MACdq7C,IAAK1zB,EAASxG,UAAU,GAAG1qB,cAC3B6kD,IAAK3zB,EAASxQ,SACdokC,IAAKroD,aAAaK,GAClBioD,KAAK,GAAD,OAAK7zB,EAASQ,OAAd,YAAwBR,EAASrW,QAAjC,YAA4CqW,EAASS,aAE3Dl4B,KCgFCurD,GAlHO,SAAC,GAAoD,IAAlD9hD,EAAiD,EAAjDA,QAASwS,EAAwC,EAAxCA,UAAW+a,EAA6B,EAA7BA,cAAe9a,EAAc,EAAdA,QAC1D,EJPkC,WAChC,IAAM3hB,EAAWsD,cACjB,MAAO,CACH+rD,UAAW,SAAC3tC,GAAD,OAAe2tC,GAAUrvD,EAAU0hB,GAAW,IACzD6tC,UAAW,SAAC7tC,EAAWe,GACnB,OAAO8sC,GAAUvvD,EAAU0hB,EAAWe,KIEfwuC,GAAzB1B,EAAR,EAAQA,UAAWF,EAAnB,EAAmBA,UACnB,EAA+Ce,KAAvCC,EAAR,EAAQA,kBAAmB9D,EAA3B,EAA2BA,gBACrBxpC,EAAQ0tC,KACR5sD,EAAajB,YAAYhH,IAC/B,EAQI4zD,KAPM0B,EADV,EACEjuC,OACAlkB,EAFF,EAEEA,SACAqa,EAHF,EAGEA,WACA8jC,EAJF,EAIEA,SACA5hB,EALF,EAKEA,iBACA6hB,EANF,EAMEA,eACAmI,EAPF,EAOEA,gBAEIwI,EAAWjC,KAMXsF,EACJ,kBAAC,GAAD,CACExqD,OAAQoc,EAAMpc,OAEdC,SAAUmc,EAAMnc,SAChBC,QAASkc,EAAMlc,QACfmc,YAAaD,EAAM0D,SAAW1D,EAAMC,YAAc,IAClDC,OAAQF,EAAME,OACdjW,OAAQ+V,EAAM/V,OACdijD,oBAAqBltC,EAAMhkB,SAC3BmxD,oBAAqB,SAACl0D,EAAKiD,GAAN,OAAgBoxD,EAAkBr0D,EAAKiD,EAAO8jB,EAAM5B,OACzEgvC,gBAAiBptC,EAAM0D,SACvB/d,IAAoB,gBAAf7E,IAeHutD,EAAa,WAEjB,GADAruC,EAAM0Q,WACF1Q,EAAMwI,UAAW,CACnB,IACIw6B,EADE9oD,EAAO8lB,EAAMpc,OAASoc,EAAMnc,SAAWmc,EAAMlc,QAGnDk/C,EAA6B,gBAAfliD,EAA+Bkf,EAAME,OAjBlC,SAACA,EAAQouC,EAAWh6B,GAIvC,IAHA,IAAM5f,EAAM,eAAQwL,GAChB9K,EAAI,EAEAA,GAAKk5C,EAAWl5C,WACfV,EAAO,GAAD,OAAI4f,GAAJ,OAAYlf,IAG3B,OAAOV,EASuD65C,CAAavuC,EAAME,OAAQhmB,EAAM,OAC7FsvD,EAAgBxpC,EAAMrB,UAAWzkB,EAAM8oD,GACpCv4C,QAAQ7I,MAAK,WACZ,IAAM4sD,EAAej6C,aAAc45C,EAAc,OAAQ,SACzD3B,EAAU7tC,EAAW6vC,GAClB/jD,QAAQ7I,MAAK,WACZ83B,IACAvtB,EAAQuD,KAAR,mBAAyBq7C,OAE1BrgD,OAAM,kBAIVA,OAAM,iBAQb,OAFAxP,qBAxDmB,WACjBoxD,EAAU3tC,KAuDU,CAACA,IAGrB,oCACGC,GACC,kBAACzK,GAAA,EAAD,KACE,yBAAK1c,UAAU,oBAAoB4c,wBAAyB,CAAEC,OAAQsK,MAG1E,kBAAC,GAAD,CAAoBuoC,eAAe,WAAWjL,OAAQmS,EAAYnH,YAAa7wC,EAAY8jC,SAAUA,GACnG,kBAAC,GAAD,CACEF,UAAQ,EACRwU,UAAWN,EACXpU,cAAe/5B,EAAMmjC,gBAAkBZ,EACvCnI,eAAgBp6B,EAAMkjC,mBAAqB9I,EAC3CD,SAAUn6B,EAAMijC,eAAiB9I,EACjC3hB,oBAAqBj/B,aAAE,8BACvB8gD,mBAAoB9gD,aAAE,6BACtBg/B,iBAAkBA,EAClBliB,WAAYA,EACZoiB,QAAS41B,GAET,kBAAC,GAAD,CACEhiC,WAAS,EACTG,QAAM,EACNC,YAAY,gBACZh1B,UAAU,mBACV+a,MAAM,sBAEL47C,IAEU,OAAZD,QAAY,IAAZA,OAAA,EAAAA,EAAc9xD,QAAS,GACtB,kBAAC,GAAD,CAAWgwB,WAAS,EAACG,QAAM,EAACC,YAAY,SAASja,MAAM,2BACrD,kBAAC,GAAD,CAAYkN,OAAQyuC,EAAc7E,YAAattD,EAAUyW,QAAS4D,SC7GjEq4C,GADgB3mC,aATP,SAACjoB,GAAD,MAAY,CAChC6e,UAAWA,GAAU7e,GACrB8e,QAASA,GAAQ9e,OAGM,SAAC7C,GAAD,MAAe,CACtCy8B,cAAe,kBAAMA,GAAcz8B,EAAUorD,GAAcC,YAGhCvgC,CAA6CkmC,I,SCb/DU,GAAuB,SAACl1D,GAAD,OAChC,kBAACqxB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAWgC,EAAMszB,eAAgBvxB,UAAW/B,EAAM+B,WACzD/B,EAAMmC,OACH,yBAAKnE,UAAU,aAAam3D,eAAA,GACvBn1D,EAAMmC,OAIf,yBAAKnE,UAAS,UAAKgC,EAAMhC,UAAX,YAAwBgC,EAAMyzB,QAAU,aAAe,IAAMzxB,GAAIhC,EAAMo1D,cAIpFp1D,EAAMyzB,SAAW,kBAACpC,GAAA,EAAKjvB,QAAQ0vB,SAAd,CAAuB7uB,KAAK,WAAWjD,EAAM2zB,qBAIvEuhC,GAAqB30D,aAAe,CAChC+yB,eAAgB,GAChBC,eAAgB,aAChBv1B,UAAW,6BAcAk3D,U,0CCgBFG,GAAkB,SAAC,GAAD,IAAG13D,EAAH,EAAGA,OAAQm3B,EAAX,EAAWA,KAAMtkB,EAAjB,EAAiBA,OAAQjO,EAAzB,EAAyBA,SAAUgvB,EAAnC,EAAmCA,SAAU9K,EAA7C,EAA6CA,OAA7C,OAC3B,oCACI,kBAAC4K,GAAA,EAAD,CAAM5yB,KAAK,kBAAkB6yB,YAAU,GACnC,yBAAKtzB,UAAU,QACX,gCAAS8B,aAAE,gCAGf,kBAACuxB,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACft1B,UAAU,eACVS,KAAK,OACLwzB,YAAanyB,aAAE,+BACf2C,MAAOgkB,EAAOhoB,KACdi1B,MAAO,CAAEhxB,SAAUoyB,GACnBvyB,SAAUA,EAAW,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,aAASwG,EACtEwqB,UAAWjjB,EAAO/R,KAClBk1B,kBAAmBnjB,EAAO/R,OAE9B,kBAAC,GAAD,CACI60B,eAAe,kBACf8hC,YAAY,mBACZrzD,UAAU,UACV0xB,UAAWjjB,EAAOlC,OAClBqlB,kBAAmBnjB,EAAOlC,UAGlC,kBAAC+iB,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,kBACf8hC,YAAY,sBACZrzD,UAAU,aACV0xB,UAAWjjB,EAAO8kD,eAClB3hC,kBAAmBnjB,EAAO8kD,iBAE9B,kBAAC,GAAD,CACIhiC,eAAe,kBACf8hC,YAAY,eACZrzD,UAAU,MACV0xB,UAAWjjB,EAAO+kD,IAClB5hC,kBAAmBnjB,EAAO+kD,OAGlC,kBAAClkC,GAAA,EAAK5W,IAAN,CAAUzc,UAAU,QAChB,kBAACqzB,GAAA,EAAKvvB,MAAN,CAAY9D,UAAU,SAAS+D,UAAU,kBACrC,kBAAC,GAAD,CACIC,GAAG,iBACHG,MAAOrC,aAAE,4CACTwD,UAAWmjB,EAAO+uC,eAClBjzD,SAAUA,EAAW,SAACe,GAAD,OAAaf,EAAS,iBAAkBe,SAAW2F,QAIjFwd,EAAO+uC,gBACN,oCACI,kBAACnkC,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACft1B,UAAU,eACVi0B,YAAanyB,aAAE,yBACfrB,KAAK,UACLgE,MAAOgkB,EAAO2T,QACd73B,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDgxB,UAAWjjB,EAAO4pB,QAClBzG,kBAAmBnjB,EAAO4pB,QAC1B1G,MAAO,CAAEhxB,SAAUoyB,MAI3B,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACft1B,UAAU,eACVi0B,YAAanyB,aAAE,sBACfrB,KAAK,OACLgE,MAAOgkB,EAAO4T,KACd93B,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDgxB,UAAWjjB,EAAO6pB,KAClB1G,kBAAmBnjB,EAAO6pB,KAC1B3G,MAAO,CAAEhxB,SAAUoyB,KAEvB,kBAAC,GAAD,CACIxB,eAAe,MACft1B,UAAU,eACVi0B,YAAanyB,aAAE,wBACfrB,KAAK,SACLgE,MAAOgkB,EAAO8T,OACdh4B,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDgxB,UAAWjjB,EAAO+pB,OAClB5G,kBAAmBnjB,EAAO+pB,OAC1B7G,MAAO,CAAEhxB,SAAUoyB,MAI3B,kBAACzD,GAAA,EAAK5W,IAAN,KACI,kBAAC,GAAD,CACI6Y,eAAe,MACft1B,UAAU,eACVi0B,YAAanyB,aAAE,0BACfrB,KAAK,WACLgE,MAAOgkB,EAAO6T,SACd/3B,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDixB,MAAO,CAAEvB,UAAW,EAAGzvB,SAAUoyB,GACjCrB,UAAWjjB,EAAO8pB,SAClB3G,kBAAmBnjB,EAAO8pB,WAG9B,kBAAC,GAAD,CACIhH,eAAe,MACft1B,UAAU,eACVS,KAAK,UACLgE,MAAOgkB,EAAO+T,SAAW,GACzBj4B,SAAU,SAACkT,GAAD,OAAOlT,EAASkT,EAAED,OAAO/W,KAAMgX,EAAED,OAAO/S,QAClDgxB,UAAWjjB,EAAOgqB,QAClB7G,kBAAmBnjB,EAAOgqB,QAC1B9G,MAAO,CAAEhxB,SAAUoyB,IAEnB,4BAAQryB,MAAM,GAAGC,UAAQ,GACpB5C,aAAE,gCAEN8I,OAAO8G,KAAKqrB,IAAWv4B,KAAI,SAAChD,GAAD,OACxB,4BAAQA,IAAKA,EAAKiD,MAAOs4B,GAAUv7B,GAAKi2D,MACnC16B,GAAUv7B,GAAK2C,aAOxC,kBAACsY,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,QAC1B,kBAACq0B,GAAA,EAAD,CAAQnyB,QAAQ,UAAU0V,OAAK,EAAC5X,UAAU,OAAO0E,SAAUoyB,EAAMjf,QAAS0b,GACrEuD,EAAOh1B,aAAE,+BAAiCA,aAAE,oCAAqCnC,EAAO2Z,QAAQ,MAGzG,kBAAC0C,GAAA,EAAD,CAAKG,GAAI,GAAI9E,GAAI,EAAGrX,UAAU,oDAC1B,yBAAKiC,IAAKy1D,KAAM13D,UAAU,iBAAiBsC,IAAI,SAC/C,yBAAKL,IAAK01D,KAAY33D,UAAU,iBAAiBsC,IAAI,kBAIjE,yBAAK0B,GAAG,yCAIhBqzD,GAAgB90D,aAAe,GAWhB80D,UC5MR,GAAuC/vD,cAAqB,SAAC9B,EAAUqiB,EAAQloB,GAClF,OAAOwT,aACH3N,EACAqf,EACAjd,IAAKga,kBACL,CAAEiG,SAAQloB,OAAO,GAAD,OAAKA,SACrBsL,EACA,WAPD,sBAAO2sD,GAAP,MAWA,IAXA,MAWyCtwD,cAC5C,SAAC9B,EAAUujB,EAAalB,EAAQvW,EAAQumD,GACpC,OAAOlwD,aACHnC,EACAsf,EACAld,IAAKia,mBACL,CAAEkH,cAAalB,SAAQvW,SAAQumD,gBAC/B5sD,EACA,YARL,sBAAO6d,GAAP,MCbMgvC,IDaN,MCb+B,SAACzvD,GAAD,MAAwD,qBAAtCA,EAAMkZ,QAAQmH,QAAQK,cACvE,GAAwEhV,aAAiB8Q,GAAzF,sBAAOkzC,GAAP,MAA6BC,GAA7B,MAAiDC,GAAjD,MACA,GAA2ElkD,aAAiB+Q,GAA5F,sBAAOozC,GAAP,MAA8BC,GAA9B,MAAmDC,GAAnD,MAEMvvC,GAAS,SAACxgB,GAAD,OAAWA,EAAMkZ,QAAQmH,QAAQG,QAC1CE,GAAc,SAAC1gB,GAAD,OAAWA,EAAMkZ,QAAQmH,QAAQK,aAC/CC,GAAa,SAAC3gB,GAAD,OAAWA,EAAMkZ,QAAQmH,QAAQM,YAC9CF,GAAc,SAACzgB,GAAD,OAAWA,EAAMkZ,QAAQmH,QAAQI,aAE/CI,GAAQ,SAAC7gB,GAAD,OAAWA,EAAMkZ,QAAQmH,QAAQQ,OCczCmvC,GAAgC,SAACC,GAG1C,OAAO,2BACA5/B,IAHW,SAACjQ,GAAD,OHXQ,WAAwC,IAAD,MAAtCA,EAAsC,uDAA7B,GAAI8vC,EAAyB,uDAAP,GACpD/lD,EAAS,GACVqhB,GAASpL,EAAOhoB,QACjB+R,EAAO/R,KAAOqB,aAAE,qCAEhB2mB,EAAO+uC,iBACF3jC,GAASpL,EAAO2T,WACjB5pB,EAAO4pB,QAAUt6B,aAAE,oCAElB+xB,GAASpL,EAAO4T,QACjB7pB,EAAO6pB,KAAOv6B,aAAE,iCAEf+xB,GAASpL,EAAO6T,WAAchK,GAAS7J,EAAO6T,YAC/C9pB,EAAO8pB,SAAWx6B,aAAE,qCAEnB+xB,GAASpL,EAAO8T,UACjB/pB,EAAO+pB,OAASz6B,aAAE,mCAEjB+xB,GAASpL,EAAO+T,WACjBhqB,EAAOgqB,QAAU16B,aAAE,qCAI3B,IAAM02D,EAAWD,EAAgBE,OAWjC,OAVI,OAACD,QAAD,IAACA,GAAD,UAACA,EAAUjB,WAAX,aAAC,EAAexmC,WAChBve,EAAO+kD,IAAMz1D,aAAE,4CAEf,OAAC02D,QAAD,IAACA,GAAD,UAACA,EAAUlB,sBAAX,aAAC,EAA0BvmC,WAC3Bve,EAAO8kD,eAAiBx1D,aAAE,wCAE1B,OAAC02D,QAAD,IAACA,GAAD,UAACA,EAAUloD,cAAX,aAAC,EAAkBygB,WACnBve,EAAOlC,OAASxO,aAAE,uCAGf0Q,EGvBuBkkB,CAAejO,EAAD,OAAS6vC,QAAT,IAASA,OAAT,EAASA,EAAYhgC,gBAEjE,IAEI34B,OAAQyI,YAAYkkD,IACpBplC,UAAW9e,YAAY8e,IACvB2B,OAAQzgB,YAAYygB,IACpBE,YAAa3gB,YAAY2gB,IACzBkvC,oBAAqB7vD,YAAY6vD,IACjCD,mBAAoB5vD,YAAY4vD,IAChCD,qBAAsB3vD,YAAY2vD,IAClCD,uBAAwB1vD,YAAY0vD,OC+L7BY,GA1JY,SAAC,GAA6B,IAA3Bh0D,EAA0B,EAA1BA,SAAUi0D,EAAgB,EAAhBA,UACpC,EAAgCz1D,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACA,EAAwClG,wBAAS+H,GAAjD,oBAAO2tD,EAAP,KAAqBC,EAArB,KACA,EAAoC31D,wBAAS+H,GAA7C,oBAAOqtD,EAAP,KAAmBQ,EAAnB,KACA,EAAoC51D,oBAAS,GAA7C,oBAAO61D,EAAP,KAAmBC,EAAnB,KAEMC,EAAc7wD,YAAY4f,IAChC,EAAmFqwC,GAC/EC,GADI7vC,EAAR,EAAQA,OAAQlkB,EAAhB,EAAgBA,SAAU00B,EAA1B,EAA0BA,SAAUlI,EAApC,EAAoCA,QAASve,EAA7C,EAA6CA,OAAQ7S,EAArD,EAAqDA,OAAQunB,EAA7D,EAA6DA,UAAW2B,EAAxE,EAAwEA,OAGxE,EAAkCqwC,eAAlC,uBAASC,EAAT,EAASA,WAAYp/B,EAArB,EAAqBA,QAUfq/B,EAAmBrvD,uBAAY,WAC7BovD,GAlF2B,SAACp/B,GACpC,IAAMvK,IAAqB,OAAPuK,QAAO,IAAPA,OAAA,EAAAA,EAASvK,aAAc,IAAIzkB,MAAM,KACrD,IAAKykB,EAAWlsB,SAAS,mBAAqBksB,EAAWlsB,SAAS,uBAAwB,CACtF,IAAI+1D,EAAmB,GAQvB,OAPK7pC,EAAWlsB,SAAS,kBAAkB+1D,EAAiBphD,KAAK,iBAC5DuX,EAAWlsB,SAAS,wBAAwB+1D,EAAiBphD,KAAK,uBACvEohD,EAAmBA,EAAiBrhD,KAAK,KAEzCrW,QAAQwxB,MAAR,8DAC2DkmC,EAD3D,oEAGO,EAGX,OAAO,EAqEKC,CAA+Bv/B,IAC/Bve,OAAOqN,OAAO0wC,aAAaC,OAAO,CAC9BC,YAAa,WACT,OAAO5wC,EAAOgvC,SAElB7qB,OAAQ,CACJ3vB,MAAO,CACH,YAAa,OACb,cACI,+IACJwsB,MAAO,YAGf4uB,OAAQ,CACJnoD,OAAQ,CACJ2hD,SAAU,oBACVyH,cAAe53D,aAAE,8BACjB63D,WAAW,EACX1lC,YAAa,eAEjBqjC,eAAgB,CACZrF,SAAU,uBACVyH,cAAe53D,aAAE,kCACjB63D,WAAW,EACX1lC,YAAa,yBAEjBsjC,IAAK,CACDtF,SAAU,gBACVyH,cAAe53D,aAAE,sCACjBmD,KAAM,WACNgvB,YAAa,8BAGtB9pB,MAAK,SAAUyvD,GACdd,EAAcc,QAI3B,CAAC7/B,EAASo/B,EAAYtwC,EAAOgvC,UAE1BgC,EAAmB,WACrB,IAAMznC,EAAU3J,EAAO+uC,eAAiB/uC,EAASwwC,EAC3Cz8B,EAAU/T,EAAO+uC,eAAiB/uC,EAAO+T,QAAUO,GAAUk8B,EAAYz8B,SAASi7B,KAExF91D,QAAQouD,KAAKjwD,IAAO,0BAA4B,2BAAwB,6BAExE+4D,OAAgB5tD,GAChB+tD,GAAc,GACdV,EACKwB,OAAO,CAEJC,eAAgBtxC,EAAOhoB,KAEvB+2D,eAAgB,CACZwC,cAAe5nC,EAAQgK,QAEvBxzB,OAAQwpB,EAAQmK,OAChB09B,SAAU7nC,EAAQiK,KAClB69B,WAAY9nC,EAAQkK,SACpB69B,kBAAmB39B,GAEvB49B,cAAet6D,IAAO,0BAA4B,CAAC,aAAe,KAErEqK,MAAK,SAAC4oB,GAIH,GAHA3pB,GAAY,GACZ4vD,GAAc,GAEVl5D,IAAO,0BAA2B,CAClC,IAAMu6D,EAtIC,SAAC,GAAsE,IAApEC,EAAmE,EAAnEA,qBAAsBC,EAA6C,EAA7CA,qBAAsBC,EAAuB,EAAvBA,iBAehEC,EAbS,CACX,CAAEC,cAAUzvD,EAAW0vD,gBAAY1vD,EAAW2vD,gBAAY3vD,EAAW+/B,QAAQ,GAC7E,CAAE0vB,UAAU,EAAMC,WAAY,MAAOC,WAAY,aAAc5vB,QAAQ,GACvE,CAAE0vB,UAAU,EAAOC,WAAY,QAASC,WAAY,QAAS5vB,QAAQ,GACrE,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,mBAAoB5vB,QAAQ,GAC7E,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,UAAW5vB,QAAQ,GACpE,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,WAAY5vB,QAAQ,GACrE,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,YAAa5vB,QAAQ,GACtE,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,cAAe5vB,QAAQ,GACxE,CAAE0vB,UAAU,EAAOC,WAAY,KAAMC,WAAY,kBAAmB5vB,QAAQ,GAC5E,CAAE0vB,UAAU,EAAMC,WAAY,MAAOC,WAAY,QAAS5vB,QAAQ,IAG1CrnC,MAAK,SAAC0E,GAC9B,OACIA,EAAMqyD,WAAaF,GACnBnyD,EAAMsyD,aAAeJ,GACrBlyD,EAAMuyD,aAAeN,KAI7B,OAAOG,IAA8B,EA+GEI,CAAmB9nC,GAI1C,GAFApxB,QAAQouD,KAAK,sBAAuBh9B,IAEN,IAA1BsnC,EAAervB,OACfrpC,QAAQouD,KAAK,oBACb4I,EAAU5lC,QAGV,OADApxB,QAAQouD,KAAK,oBACLsK,EAAeO,YAInB,IAAK,QACD/B,EAAgB,wDAChB,MACJ,IAAK,UACDA,EAAgB,sDAChB,MACJ,IAAK,mBACDA,EAAgB,kDAChB,MACJ,QACIA,EAAgB/2D,aAAE,wCAK9BH,QAAQouD,KAAK,2CACb4I,EAAU5lC,MAGjB9f,OAAM,SAAU6nD,GACbjC,EAAgBiC,GAChB1xD,GAAY,GACZ4vD,GAAc,OAU1B,OALAv1D,qBAAU,kBAAM2F,GAAY,KAAO,CAACzJ,EAAQunB,IAG5CzjB,qBAAU,kBAAM21D,MAAoB,CAACz5D,EAAQunB,EAAWiyC,EAAYC,IAEhED,EAEI,oCACI,kBAAC4B,GAAD,CACIp7D,OAAQA,EACRm3B,KAAMpyB,GAAYq0D,EAClBvmD,OAAQA,EACRjO,SAAUA,EACVgvB,SAlIa,WACzB0F,IACIlI,KAAaunC,GACbuB,KAgIQpxC,OAAQA,KAEVtf,GAAYyvD,GApKN,SAACkC,GACrB,GAAIr9C,MAAM8Y,QAAN,OAAcukC,QAAd,IAAcA,OAAd,EAAcA,EAAK9yC,SACnB,OACI,wBAAIhoB,UAAU,oBACT86D,EAAI9yC,QAAQxjB,KAAI,SAACw2D,GAAD,OACb,wBAAIx5D,IAAG,UAA6B,qBAAjBw5D,EAAOn+B,MAAwBm+B,EAAOn+B,MAAQ,SAA1D,OAAoEm+B,EAAOC,QAAlF,UACgC,qBAAjBD,EAAOn+B,MAAwBm+B,EAAOn+B,MAAMp9B,QAAQ,wBAAyB,IAAM,SADlG,MACgHu7D,EAAOnf,YADvH,KACsImf,EAAOC,MAD7I,SAQhB,IAAMC,EAAqB,kBAARJ,EAAmBA,EAAMh5D,aAAE,uCAE9C,OAAO,uBAAG9B,UAAU,oBAAoBk7D,GAqJEC,CAAgBvC,IAI/C,kBAAC,GAAD,CAASzxC,QAASrlB,aAAE,2CCzNtBs5D,GAAoB,SAAC,GAAD,IAAGvjD,EAAH,EAAGA,QAASwjD,EAAZ,EAAYA,cAAep7B,EAA3B,EAA2BA,QAAS04B,EAApC,EAAoCA,UAApC,OAC7B,kBAACtlC,GAAA,EAAD,CAAM5yB,KAAK,oBAAoB6yB,YAAU,GACrC,2BAAIxxB,aAAE,2BACN,yBAAKypC,MAAO,CAAE+vB,SAAU,UACpB,kBAAC,KAAD,CACI/vB,MAAO,CAAEgwB,OAAQ,cACjB9B,YAAa4B,EACbG,UAAW7C,EACX14B,QAASA,EACTpoB,QAASA,EACT4jD,mBAAmB,mBAMnCL,GAAkB74D,aAAe,GASlB0lC,sBAAKmzB,IAAmB,SAACM,EAAWC,GAAZ,OAA0BD,EAAUE,WAAaD,EAAUC,YCVrFC,GAA4B,iBAAO,CAC5Cl8D,OAAQyI,YAAYkkD,IACpBplC,UAAW9e,YAAY8e,IACvB6B,YAAa3gB,YAAY2gB,IACzBF,OAAQzgB,YAAYygB,IACpBovC,oBAAqB7vD,YAAY6vD,IACjCD,mBAAoB5vD,YAAY4vD,IAChCD,qBAAsB3vD,YAAY2vD,IAClCD,uBAAwB1vD,YAAY0vD,MCqBzBgE,GA1Cc,SAAC,GAAmB,IAAjBnD,EAAgB,EAAhBA,UAC5B,EAAsCkD,KAA9Bl8D,EAAR,EAAQA,OAAQunB,EAAhB,EAAgBA,UAAW2B,EAA3B,EAA2BA,OAC3B,EAAgC3lB,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACA,EAAsClG,wBAAS+H,GAA/C,oBAAO8wD,EAAP,KAAoBC,EAApB,KACA,EAAyB9C,eAAhBC,EAAT,qBAASA,WAeT,OAFA11D,qBAAU,kBAAM2F,GAAY,KAAO,CAACzJ,EAAQunB,IAExCiyC,EAEI,oCACKtwC,EAAO+yC,UACJ,kBAAC,GAAD,CACIA,SAAU/yC,EAAO+yC,SACjBP,cAAe,kBAAMxyC,EAAOgvC,SAC5B53B,QApBA,SAAC66B,GACjB1xD,GAAY,GACZ4yD,EAAelB,IAmBCnC,UAhBE,SAAC5lC,GACnBipC,OAAe/wD,GACf0tD,EAAU5lC,OAiBA5pB,GAAY4yD,GAAe,uBAAG/7D,UAAU,eAAe+7D,EAAYvrD,aAItE,kBAAC,GAAD,CAAS2W,QAASrlB,aAAE,yCCtBpBm6D,OAnBf,SAAsBj6D,GAClB,OACI,kBAAC0a,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,+QAKA,kBAACqY,GAAA,EAAD,CAAQj1B,KAAM4C,EAAMk6D,YAAah6D,QAAQ,YAAYO,KAAK,KAAKzC,UAAU,QAAzE,+BCoGLm8D,GAxFQ,SAAC,GAAiB,IAAD,EAAdznD,EAAc,EAAdA,QAChBlP,EAAWsD,cACX8L,EAAWC,eAEXunD,EAAUh0D,YAAYkkD,IACtB+P,EAAaj0D,YAAY8e,IACzBo1C,EAAUl0D,YAAYygB,IACtB0zC,EAASn0D,YAAY8gB,IACrBszC,EAAsBp0D,YAAY4vD,IAClCyE,EAAuBr0D,YAAY6vD,IACnCyE,EAAwBt0D,YAAY2vD,IAEpCzE,EAAWjC,KACjB,EAAgDnuD,oBAAS,GAAzD,oBAAOy5D,EAAP,KAAyBC,EAAzB,KAEMC,EAAwB,CAC1B,YAAaP,EAAQV,SACrBpsC,WAAY,4CACZ2gC,SAAU,MACV,oBAAqBmM,EAAQQ,aAI3BC,EAAqB,WACvBnF,GAAWpyD,EAAU62D,EAAY9tD,KAAKyuD,MAAgB,IAAVZ,GAAiB,KACxDppD,QAAQ7I,MAAK,kBAAMyyD,GAAoB,MACvC3pD,OAAM,gBAKTgqD,EAA6B,SAAC3rD,IR3BV,SAAC9L,EAAU03D,EAAS5rD,GACvC9L,EAAS,CACZP,KAAM8f,EACNrf,QAAS,CAAEw3D,UAAS5rD,YQyBpB6rD,CAAe33D,EAAU,SAAU8L,GACnC2wB,GAAcz8B,EAAUorD,GAAcG,SACtCr8C,EAAQuD,KAAR,mBAAyBq7C,KAM7B,OAFA7vD,oBAAUs5D,EAAoB,CAACv3D,EAAU42D,EAASC,IAG9C,kBAAC,GAAD,CAAoB3zC,SAAO,GACvB,kBAAC,GAAD,CACI+5B,WAAS,EACT3hB,iBAAkB07B,EAClB59C,YAAa49C,KAAyBG,GAAoBD,GAC1D37B,oBAAqB,kBAAC,GAAD,CAAe1K,aAAcomC,EAAsBnmC,QAAQ,SAChF0K,QAAS+7B,EACTl8B,eAAgB/+B,aAAE,4BAElB,kBAAC,GAAD,CAAW8yB,WAAS,EAACG,QAAM,EAACC,YAAY,UAAUja,MAAOjZ,aAAE,qCACjC,OAArB+6D,QAAqB,IAArBA,OAAA,EAAAA,EAAwB,eACrB,kBAAC,KAAD,CAAsB9iC,QAAS8iC,GAC3B,kBAAC94B,GAAA,EAAD,CACIjP,iBAAiB,SACjB9wB,GAAG,cACH9B,QAAQ,QACRlC,UAAU,mBAETF,IAAO,uBACJ,kBAACqkC,GAAA,EAAD,CAAKjP,SAAS,SAASna,MAAOjZ,aAAE,sCAC5B,kBAAC,GAAD,CAAa62D,UAAW,SAAC5lC,GAAD,OAAUkqC,EAA2B,YAGpEn9D,IAAO,mBACJ,kBAACqkC,GAAA,EAAD,CAAKjP,SAAS,SAASna,MAAOjZ,aAAE,2BAC5B,kBAAC,GAAD,CACI62D,UAAW,SAAC5lC,GAAD,OAAUkqC,EAA2B,eAI3Dn9D,IAAO,kBACJ,kBAACqkC,GAAA,EAAD,CAAKjP,SAAS,QAAQna,MAAOjZ,aAAE,0BAC3B,kBAAC,GAAD,CAAco6D,YAAaK,EAAOa,oBAOzD,UAAAxoD,EAASvM,aAAT,eAAgB8qB,QACb,uBAAGnzB,UAAU,oBAAoB8B,aAAE,8CCUxCu7D,GA1Fc,SAAC,GAAiB,IAAf3oD,EAAc,EAAdA,QACtBlP,EAAWsD,cAEXszD,EAAUh0D,YAAYkkD,IACtB+P,EAAaj0D,YAAY8e,IACzB7d,EAAajB,YAAYhH,IACzBgpD,EAAQhiD,YAAYN,IACpBw1D,EAAel1D,YAAY2gB,IAC3Bw0C,EAAcn1D,YAAY4gB,IAC1BszC,EAAUl0D,YAAYygB,IACtB20C,EAAwBp1D,YAAYgwD,IACpCqF,EAAuBr1D,YAAY+vD,IACnCuF,EAAyBt1D,YAAY8vD,IACrCyF,EAAmBv1D,YAAYw1D,IAC/BvT,EAAcjiD,YAAY0e,IAEhC,EAAgC5jB,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KACMyV,EAAW4+C,EACXnqD,EAAYoqD,GAA2BC,KAAoB,OAACA,QAAD,IAACA,OAAD,EAACA,EAAkBxrD,QAG9E0rD,EAAsB,WACxB,IAAMvsD,EAAgC,YAAvBisD,EAAYjsD,OAAuB,SAAW,SAC7DwX,GAAYtjB,EAAU83D,EAAcjB,EAAY/qD,EAAQgrD,EAAQzE,SAChEzuD,GAAY,IA0ChB,OAdA3F,oBAAUo6D,EAAqB,CAACr4D,EAAU62D,EAAYiB,EAAchB,EAAQzE,QAAS0F,EAAYjsD,SAGjG7N,qBA5ByB,WACrB,IAAK0F,IAAau0D,EACd,GAAKD,EAWGD,EAAsB/qD,OAAS,K9I2BnB,SAACjN,EAAU08B,GACvC18B,EAAS,CAAEP,KnFrFmBsU,qCmFqFO7T,QAASw8B,I8I3B9B47B,CAAiBt4D,EAAUorD,GAAcG,SACzCr8C,EAAQjV,QAAQ,CACZ2W,SAAU,mBACV/N,MAAO,CAAE8qB,OAAO,WAbxB,IAAKwqC,EAAiBxrD,OAKlB,OAJA8vB,GAAcz8B,EAAUorD,GAAcI,gB9IL3B,SAACxrD,GACrBA,EAAS,CACZP,KAAMgf,EACNve,QAAS,K8IGGq4D,CAAgBv4D,GrEzCH0hB,EqE0CIm1C,ErE1COp1C,EqE0CKm1C,ErE1COt1C,EqE0CEujC,ErE1CU71C,EqE0CG41C,EAAM9gC,KrE1CG1jB,EqE0CGwkD,EAAMrU,KrE1CCl2C,EqE0CKuqD,EAAM3pD,KrE1CDW,EqE0COiI,ErEzCvG20D,KAAWC,UAAU,CACjBA,UAAW,CACPC,UAAW,CACPC,SAAU,CACNC,YAAa,CACTp6D,GAAIkjB,EACJm3C,YAAa,6BACbC,QAASr3C,GAEbs3C,SAAU,CACN,CAEI99D,KAAMqmB,EACN9iB,GAAIkjB,EACJ3mB,MAAO0mB,EACP6hC,MAAM,GAAD,OAAKt0C,EAAL,cAAqB5O,GAC1BghC,SAAU/mC,EACVqC,QAASd,EACTo9D,SAAU,SAOlCR,KAAWC,UAAU,CACjBA,UAAW,CACP3mD,MAAO,+BqEeC5C,EAAQuD,KAAK,yBrE3C1B,IAA0BiP,EAAWD,EAAYH,EAAYtS,EAAY5O,EAAU/F,EAAUuB,IqE+DpE,CACxBoE,EACA2D,EACAuL,EAHwB,OAIxBipD,QAJwB,IAIxBA,OAJwB,EAIxBA,EAAkBxrD,OAClBmqD,EAAQzE,QACR6F,EACAD,EAPwB,OAQxBD,QARwB,IAQxBA,OARwB,EAQxBA,EAAuB/qD,SAIvB,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIquB,iBAAkB28B,EAClB7+C,WAAYtL,EACZytB,oBAAqBj/B,aAAE,gCACvBk/B,QAAS68B,EACTh9B,eAAgB/+B,aAAE,+BAElB,kBAAC,GAAD,CAAWiZ,MAAOjZ,aAAE,8CACf+c,IAAa2+C,EAAsBhrD,QAChC,oCACI,uBAAGxS,UAAU,eAAe8B,aAAE,yCAC9B,kBAACuyB,GAAA,EAAD,CAAQnyB,QAAQ,UAAU2V,QAASgmD,GAC9B/7D,aAAE,uBC7EpB28D,OAlBR,SAAqBz8D,GACxB,IAAMo0C,EAAiBhuC,YAAYwe,IAC7B+lC,EAAkBvkD,YAAYwf,IAC9B82C,EAAwC,QAAxBtoB,EAAenxC,KAG/B28B,EAAax5B,aAAY,SAACC,GAAD,OAAW2hD,GAAgB3hD,MACpDw5B,EAAYz5B,aAAY,SAACC,GAAD,OzCmBH,SAACA,GAAD,MAAuC,qBAArB6e,GAAU7e,GyCnBds2D,CAAgBt2D,MACnDy5B,EAAa15B,aAAY,SAACC,GAAD,OAAW0hD,GAAkB1hD,MAO5D,OAAO44B,GAAcj/B,GAVL,cAUqB4/B,EAAYC,EAAWC,EAN3C48B,IAAkB/R,GAAmB7qB,GACnC,SAACz5B,GAAD,MAAY,CAC3Bu2D,UAAWv2D,EAAMuW,WACjBigD,gBAAiBH,GAAiB98B,OCZpCk9B,GAAO,SAACn7C,GAAD,OACT,kBAACjH,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKrP,GAAI,IAAKgX,MAKbo7C,GAA2B,SAAC,GAQlC,IAPH3yD,EAOE,EAPFA,SACAyyD,EAME,EANFA,gBACA/9B,EAKE,EALFA,iBACA89B,EAIE,EAJFA,UACAhgD,EAGE,EAHFA,WACAoiB,EAEE,EAFFA,QACAxhC,EACE,EADFA,SAEM68D,EAAaj0D,YAAY8e,IACzB83C,EAAa52D,YAAY6hD,IAE/B,OAAKoS,GAAeuC,GAAcC,EAI9BA,EACOC,GACH,oCACI,wBAAI9+D,UAAU,QAAQ8B,aAAE,2BACxB,2BAAIA,aAAE,sCAAuCtC,IAC7C,kBAAC,GAAD,CAAe62B,aAAc2oC,EAAY1oC,QAAQ,OAAOE,WAAS,MAKzEsK,EACOg+B,GACH,oCACI,2BACI,uBAAG9+D,UAAU,gCACZ8B,aAAE,qCAEP,4BAAQ9B,UAAU,kBAAkB6X,QAASmpB,GACxCl/B,aAAE,oBAMf8c,EACOkgD,GAAK,kBAAC,GAAD,CAAS33C,QAASrlB,aAAE,8BAG7BsK,EA/BI0yD,GAAK,2BAAIh9D,aAAE,0CA0C1Bi9D,GAAyBx8D,aAAe,CACpC/C,SAAU,KAGCu/D,UClDAE,GApBqB,SAACj9D,GACjC,IAAM0S,EAAUC,eACVuqD,EAAUC,eAEV7N,EAAkBlpD,YAAYuf,IAE9By3C,EAAgBF,EAAQx9D,OAAOwgC,KAC/Bm9B,EAAehO,IAAY,GAE3BiO,GAAgBD,IAAkB/N,EAAgBhuD,SAAS87D,IAAkBA,IAAkBC,EAQrG,OANA57D,qBAAU,WACF67D,GACA5qD,EAAQjV,QAAR,mBAA4B4/D,OAI7BC,EAAe,KAAOt9D,EAAMoK,UCAxBmzD,OAbR,SAAqBv9D,GACxB,IAAMq6D,EAAaj0D,YAAY8e,IACzBqqC,EAAenpD,YAAYnD,IAG3B48B,EAAYz5B,aAAY,SAACC,GAAD,O5CuBH,SAACA,GAAD,MAAqC,qBAAnB+e,GAAQ/e,G4CvBZm3D,CAAgBn3D,MACnDy5B,EAAa15B,aAAY,SAACC,GAAD,OAAW6hD,GAAkB7hD,MACtDu5B,EAAax5B,aAAY,SAACC,GAAD,OAAW8hD,GAAgB9hD,MAG1D,OAAO44B,GAAcj/B,GANL,SAACwD,GAAD,OAAcw8B,GAAWx8B,EAAU62D,KAMdz6B,EAAYC,EAAWC,EAF3Cu6B,GAA+B,QAAjB9K,ICoEpBkO,GAnFY,WACvB,IAAMP,EAAUC,eAEVO,EAAQ,CACV,CACIjlD,MAAO,EACPha,KAAMmwD,GAAcC,QAExB,CACIp2C,MAAO,EACPha,KAAMmwD,GAAcE,SAExB,CACIr2C,MAAO,EACPha,KAAMmwD,GAAcG,SAExB,CACIt2C,MAAO,EACPha,KAAMmwD,GAAcI,gBAExB,CACIv2C,MAAO,EACPha,KAAMmwD,GAAcK,eAKtB0O,EAAcD,EAAMt6D,QAAO,SAAC88B,GAAD,OAAUA,EAAKzhC,OAASy+D,EAAQx9D,OAAOwgC,QAAM,GAkB9E,OACI,yBAAKliC,UAAU,wBACX,kBAAC0c,GAAA,EAAD,KACKijD,EACG,kBAACljD,GAAA,EAAD,CAAKzc,UAAU,sCACX,kBAACgc,GAAA,EAAD,KACI,wBAAIhc,UAAU,mBAtBjB,SAACkiC,GAClB,OAAQA,EAAKzhC,MACT,KAAKmwD,GAAcC,OACf,MAAO,yCACX,KAAKD,GAAcE,QACf,MAAO,qCACX,KAAKF,GAAcG,QACnB,KAAKH,GAAcI,eACf,MAAO,gCACX,KAAKJ,GAAcK,aACf,MAAO,4BACX,QACI,MAAO,IAUsC2O,CAAaD,KAEjDA,EAAYl/D,OAASmwD,GAAcK,cAChC,kBAACj1C,GAAA,EAAD,CAAK3E,GAAG,QACJ,yBAAKrX,UAAU,SACV0/D,EAAMzpB,MAAM,EAAG,GAAGzxC,KAAI,SAACkZ,EAAGjD,GACvB,IAAIolD,EAQJ,OANIA,EADAplD,EAAQklD,EAAYllD,MACP,YACNA,IAAUklD,EAAYllD,MAChB,SAEA,GAGb,yBAAKjZ,IAAKiZ,GACN,uBAAGza,UAAS,0BAAqB6/D,KACtB,IAAVplD,GAAe,yBAAKza,UAAU,mBAQ3D,QC3Dd8/D,GAAgB,kBAClB,kBAAC,KAAD,KACI,kBAAC,KAAD,CAAO9/C,KAAI,mBAAc4wC,GAAcC,QAAUkP,UAAWvJ,GAAQwJ,OAAK,IACzE,kBAAC,KAAD,CAAOhgD,KAAI,mBAAc4wC,GAAcE,SAAWiP,UAAW1M,GAAS2M,OAAK,IAC3E,kBAAC,KAAD,CAAOhgD,KAAI,mBAAc4wC,GAAcG,SAAWgP,UAAW5D,GAAS6D,OAAK,IAC3E,kBAAC,KAAD,CAAOhgD,KAAI,mBAAc4wC,GAAcI,gBAAkB+O,UAAW1C,GAAe2C,OAAK,IACxF,kBAAC,KAAD,CAAU1gE,GAAE,mBAAcsxD,GAAcC,YAuCjCoP,GAnCQ,SAACj+D,GAAW,IAAD,EACxB4S,EAAWC,eACX+qC,EAAUx3C,YAAYZ,IAE5B,OACI,oCACI,kBAAC,IAAD,KACI,2CAEJ,kBAACwnB,GAAD,MACA,yBAAKhvB,UAAU,gBACX,kBAAC,GAAD,MAE6B,iBAA5BgC,EAAMwuD,MAAM9uD,OAAOwgC,KAChB,kBAAC,KAAD,CAAOliB,KAAM,wBAAyB+/C,UAAWpQ,GAAcqQ,OAAK,IAEpE,kBAAC,GAAD,KACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAiBx4D,OAAQo4C,GACrB,kBAAC,GAAD,CAAwBp4C,OAAQo4C,GAC5B,kBAAC,GAAD,CAA0BpgD,SAAQ,UAAEoV,EAASvM,aAAX,aAAE,EAAgB7I,UAChD,kBAAC,GAAD,KACI,kBAAC,GAAD,eCiB7B0gE,OAhEf,WACI,MAAgCh9D,mBAAS,IAAzC,oBAAOi9D,EAAP,KAAiBC,EAAjB,KACA,EAA4Bl9D,mBAAS,KAArC,oBAAO4gC,EAAP,KAAeu8B,EAAf,KAuBA,OArBA58D,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAevB,OAdAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,0EAED,CAAEK,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACHA,EAAK8M,MAAK,SAACC,EAAGC,GACV,OAAOD,EAAEg8B,IAAI5uB,MAAQnN,EAAE+7B,IAAI5uB,SAE/B29C,EAAY93D,MAEf2K,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAE/C,WACHxG,EAAWG,WAEhB,IAGC,oCACI,kBAAC,IAAD,KACI,mEACA,0BAAMgiB,IAAI,YAAYh0B,KAAI,UAAKU,IAAO,kBAAZ,WAE9B,kBAACkvB,GAAD,MAEA,kBAAC,GAAD,CAAWjU,MAAM,+BAEjB,kBAAC2B,GAAA,EAAD,CAAW1c,UAAU,QACjB,qZAMA,kBAAC60B,GAAA,EAAD,CAAWyrC,UAAWx8B,GACjBq8B,EAAS37D,KAAI,SAAC+7D,EAAM5iD,GACjB,OACI,kBAAChD,GAAA,EAAD,CAAMnZ,IAAKmc,EAAG3d,UAAW8jC,IAAW,GAAKnmB,EAAI,SAAW,GAAI6iD,aAAYD,EAAKlvB,IAAI5uB,OAC7E,kBAACoS,GAAA,EAAU7vB,OAAX,CAAkBX,GAAIsW,KAAKsa,OAAQC,SAAU,GAAKvX,EAAG9F,QAAS,kBAAMwoD,EAAU,GAAK1iD,KAC9E4iD,EAAKxlD,MAAM0oC,UAEhB,kBAAC5uB,GAAA,EAAUO,SAAX,CAAoBF,SAAU,GAAKvX,GAC/B,kBAAChD,GAAA,EAAKO,KAAN,CACI0B,wBAAyB,CAAEC,OAAQ0jD,EAAK58C,QAAQ8/B,UAChDzjD,UAAU,uB,qBCiBnCygE,GAjEM,SAAC,GAA2B,IAAzBC,EAAwB,EAAxBA,KAAMC,EAAkB,EAAlBA,YAC1B,EAA8Bz9D,oBAAS,GAAvC,oBAAO09D,EAAP,KAAgBC,EAAhB,KACA,EAAgC39D,mBAAS,gCAAzC,oBAAO49D,EAAP,KAAiBC,EAAjB,KACA,EAAkC79D,mBAAS,cAA3C,oBAAO89D,EAAP,KAAkBC,EAAlB,KACA,EAAkC/9D,mBAAS,cAA3C,oBAAOg+D,EAAP,KAAkBC,EAAlB,KACA,EAAgCj+D,mBAAS,IAAzC,oBAAOk+D,EAAP,KAAiBC,EAAjB,KACA,EAA0Cn+D,oBAAS,GAAnD,oBAAOo+D,EAAP,KAAsBC,EAAtB,KACM3sD,EAAWC,eACjB,EAAiCc,eAA3B6rD,EAAN,EAAMA,YAAaC,EAAnB,EAAmBA,UA+BnB,OA7BIf,GAAQA,EAAK97D,SACb48D,EAAcd,EAAK31D,MAAM,KAAK,GAC9B02D,EAAYf,EAAK31D,MAAM,KAAK,IAE5B41D,GAAeA,EAAY/7D,SAAQ48D,EAAcb,GAErDl9D,qBAAU,WACN,IAAMqP,EAAS4uD,KAAM7uD,YAAYC,SAQjC,OAPA4uD,KAAMhiC,IAAN,UACO93B,IAAKkJ,IADZ,aACoB0wD,EADpB,aACoCC,EADpC,sCAEI,CAAC5vD,YAAaiB,EAAOhB,QAEpB3H,MAAK,SAACC,GACHy2D,EAAWz2D,EAAS9B,SAErB,WAAOwK,EAAOH,YACtB,CAAC8uD,EAAWD,IAEf/9D,qBAAU,WACDm9D,IACLG,EAAYH,EAAQj9C,QAAQ8/B,UAAY,uEACxCwd,EAAaL,EAAQ7lD,MAAM0oC,UAAY,gCACvC0d,EAAaP,EAAQvvB,IAAIswB,gBAAkBf,EAAQ7lD,MAAM0oC,UACzD4d,EACqC,OAAjCT,EAAQvvB,IAAIuwB,iBAA4BhB,EAAQvvB,IAAIuwB,iBAAmB9/D,aAAE,gCAEzE8+D,EAAQvvB,IAAIwwB,iBAAiBN,EAAiBX,EAAQvvB,IAAIwwB,oBAC/D,CAACjB,IAGA,oCACI,kBAAC,IAAD,KACI,+BAAQM,GACR,0BAAMzgE,KAAK,cAAckjB,QAASy9C,IAClC,0BACIhuC,IAAI,YACJh0B,KAAI,6CAAwCwV,EAASwB,UAAjD,OAA4DxB,EAAS/M,WAGjF,kBAACmnB,GAAD,MACCsyC,GACG,kBAAC5kD,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAACkf,GAAA,EAAD,OAGR,kBAAC,GAAD,CAAWnE,MAAOimD,IAClB,kBAACtkD,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKY,wBAAyB,CAAEC,OAAQikD,EAASgB,WAAW,SAAU,eAAiBv2B,MAAO,CAAEw2B,aAAc,kBCEnHC,OA/Df,WACI,MAAgC9+D,mBAAS,IAAzC,oBAAOi9D,EAAP,KAAiBC,EAAjB,KACA,EAA4Bl9D,mBAAS,KAArC,oBAAO4gC,EAAP,KAAeu8B,EAAf,KAwBA,OAtBA58D,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAgBvB,OAfAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,0KAC4KhR,IAAOggB,UACpL,CAAE3O,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACHA,EAAK8M,MAAK,SAACC,EAAGC,GACV,OAAOD,EAAEg8B,IAAI5uB,MAAQnN,EAAE+7B,IAAI5uB,SAE/B29C,EAAY93D,MAEf2K,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAG/C,WACHxG,EAAWG,WAEhB,IAGC,oCACI,kBAAC,IAAD,KACI,qDACA,0BAAMgiB,IAAI,YAAYh0B,KAAI,UAAKU,IAAO,kBAAZ,aAE9B,kBAACkvB,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAK,UAAKjb,IAAO,oBAAZ,yBAChB,kBAAC4c,GAAA,EAAD,CAAW1c,UAAU,QAKjB,4BAAK8B,aAAE,gCAAiChC,MACxC,2BAAIgC,aAAE,+BACN,kBAAC+yB,GAAA,EAAD,CAAWyrC,UAAWx8B,GACjBq8B,EAAS37D,KAAI,SAAC+7D,EAAM5iD,GACjB,OACI,kBAAChD,GAAA,EAAD,CAAMnZ,IAAKmc,EAAG3d,UAAW8jC,IAAW,GAAKnmB,EAAI,SAAW,GAAI6iD,aAAYD,EAAKlvB,IAAI5uB,OAC7E,kBAACoS,GAAA,EAAU7vB,OAAX,CAAkBX,GAAIsW,KAAKsa,OAAQC,SAAU,GAAKvX,EAAG9F,QAAS,kBAAMwoD,EAAU,GAAK1iD,KAC9E4iD,EAAKxlD,MAAM0oC,UAEhB,kBAAC5uB,GAAA,EAAUO,SAAX,CAAoBF,SAAU,GAAKvX,GAC/B,kBAAChD,GAAA,EAAKO,KAAN,CACI0B,wBAAyB,CAAEC,OAAQ0jD,EAAK58C,QAAQ8/B,UAChDzjD,UAAU,uBClCnCiiE,GArBS,SAAC,GAAc,IAAZ35D,EAAW,EAAXA,KACvB,OACI,kBAAC67B,GAAA,EAAIa,KAAL,CAAU9P,SAAS,oBACf,kBAACzY,GAAA,EAAD,CAAK9P,GAAI,EAAGwP,GAAI,EAAGqd,GAAI,GAClBlxB,EAAK9D,KAAI,SAACwmC,GAAD,OACN,kBAAChvB,GAAA,EAAD,CAAKxa,IAAG,UAAKwpC,EAAO3qC,QAAZ,YAAuB2qC,EAAOljC,KAAKN,QAAUxH,UAAU,UAC3D,kBAAC,GAAD,eACIoB,UAAW4pC,EAAO3qC,QAClBuF,SAAUolC,EAAOljC,KAAKiuC,KACtBjuC,KAAMkjC,EAAOljC,KACbo9B,UAAU,WACVzU,SAAS,QACLua,W,UCkBjBk3B,GA9BU,SAAC,GAAoB,IAAlBC,EAAiB,EAAjBA,WAClBC,EAAQ3xD,aAAa0xD,EAAY,qBAEvC,OACI,kBAACh+B,GAAA,EAAIa,KAAL,CAAU9P,SAAS,qBACf,kBAACva,GAAA,EAAD,CAAM3a,UAAU,UACZ,kBAAC2a,GAAA,EAAKsa,OAAN,KACI,kDAEJ,kBAACta,GAAA,EAAKO,KAAN,CAAWlb,UAAU,OACjB,kBAACyc,GAAA,EAAD,CAAK9P,GAAI,EAAG0K,GAAI,EAAG+e,WAAS,GACvBgsC,EAAM59D,KAAI,SAACwM,EAAI2M,GACZ,OACI,kBAAC3B,GAAA,EAAD,CAAKxa,IAAKmc,EAAG3d,UAAU,OACnB,wBAAIA,UAAU,KAAK4c,wBAAyB,CAAEC,OAAQ7L,EAAG+J,MAAM0oC,YAC/D,yBAAKxhD,IAAK+O,EAAGqgC,IAAIv2B,MAAOxY,IAAK0O,EAAG+J,MAAM0oC,SAAUzjD,UAAU,eAC1D,2BAAIgR,EAAGqgC,IAAIwK,aACX,kBAACxnB,GAAA,EAAD,CAAQj1B,KAAM4R,EAAGqgC,IAAIxgC,IAAK2G,OAAO,SAASI,OAAK,GAA/C,sBCiPrByqD,OAlPf,WACI,IAAM78D,EAAWsD,cACTlD,EAAa+P,eAAb/P,SACR,EAA8C1C,mBAAS,gCAAvD,oBAAOo/D,EAAP,KAAwBC,EAAxB,KACA,EAAoCr/D,mBAAS,IAA7C,oBAAOi/D,EAAP,KAAmBK,EAAnB,KACA,EAAsCt/D,mBAAS,IAA/C,oBAAOu/D,EAAP,KAAoBC,EAApB,KACA,EAAgCx/D,mBAAS,IAAzC,oBAAOy/D,EAAP,KAAiBC,EAAjB,KACA,EAA8B1/D,mBAAS,IAAvC,oBAAOyiD,EAAP,KAAgBC,EAAhB,KACA,EAA0C1iD,mBAAS,IAAnD,oBAAO2/D,EAAP,KAAsBC,EAAtB,KACA,EAA4C5/D,mBAAS,IAArD,oBAAO6/D,EAAP,KAAuBC,EAAvB,KACA,EAAkC9/D,mBAAS,cAA3C,oBAAO89D,EAAP,KAAkBC,EAAlB,KACA,EAAkC/9D,mBAAS,cAA3C,oBAAOg+D,EAAP,KAAkBC,EAAlB,KACA,EAAoCj+D,mBAAS,IAA7C,oBAAO+/D,EAAP,KAAmBC,EAAnB,KACA,EAAgChgE,mBAAS,IAAzC,oBAAOk+D,EAAP,KAAiBC,EAAjB,KACM8B,EAAgBh0C,gBAAK,kBAAM,iCAC3Bm0B,EAAan0B,gBAAK,kBAAM,kCAC9B,GAAkCjsB,mBAAS,oBAA3C,sBAAO8gC,GAAP,MAAkBC,GAAlB,MACMa,GAAgB,CAClB,CAAErkC,KAAM,mBAAoBe,IAAK,oBACjC,CAAEf,KAAM,oBAAqBe,IAAK,qBAClC,CAAEf,KAAM,eAAgBe,IAAK,gBAC7B,CAAEf,KAAM,iBAAkBe,IAAK,mBAE7BoT,GAAWC,eACXrM,GAAaJ,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAKC,QAAQA,QAAQ3C,GAAUnF,QAE/EgwC,2BAAgB,WACZ,IAAMx/B,EAAa,IAAIC,gBA4BvB,OA3BAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,yEAC2ElL,EAD3E,0CAED,CAAEuL,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACH,IAAMy9C,EAASz9C,EAAK,GACpBi6D,EAAmBxc,EAAOpiC,QAAQ8/B,UAClCwd,EAAalb,EAAOhrC,MAAM0oC,UAC1B0d,EAAapb,EAAO1U,IAAIswB,gBAAkB5b,EAAOhrC,MAAM0oC,UACvD4d,EAAYtb,EAAO1U,IAAIuwB,kBAAoB9/D,aAAE,gCAC7C0gE,EAAczc,EAAO1U,IAAI,sBACzBqxB,EAAe3c,EAAO1U,IAAP,kBAAkC,IACjDuU,EAAWG,EAAO1U,IAAI,iBACtByxB,EAAiB/c,EAAO1U,IAAI,mBAC5BuxB,EAAY7c,EAAO1U,IAAI,iBAAmB,IAC1C2xB,EAAkBjd,EAAO1U,IAAP,qBAAqC,IACnD0U,EAAO1U,IAAP,aACA6xB,EAAc1qD,aAAWutC,EAAO1U,IAAP,aAA2B5xC,QAAQ,MAAO,cAG1EwT,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,GAC9C8qD,EAAmB,uEACnBtB,EAAa,mCAGd,WACHhwD,EAAWG,WAEhB,CAACxL,IAEJnC,qBAAU,WACN8B,aAAcC,EAAU,aACxBG,aAAaH,EAAUI,KACxB,CAACJ,EAAUI,IAMdqyC,GAASzyC,EAAUI,GAAU,GAG7B,IACMw9D,GADoBh7D,YAAY1E,MACCc,KAAI,SAACnE,GAAD,OAAaA,EAAQuD,QAI1Dy/D,GAH0BZ,EAAYr9D,QAAO,SAAC0C,GAAD,OAAUs7D,GAAa9/D,SAASwE,EAAKw7D,eAGhD9+D,KAAI,SAACsD,GAAD,OAAUyD,SAASzD,EAAKy7D,YAC9DC,GAAap7D,aAAY,SAACC,GAAD,O7HvFH,SAACA,EAAOo7D,GACpC,IAAMxiD,EAAQ,GAMd,OALAwiD,EAAM1yD,SAAQ,SAAC/M,GACX,IAAM8D,EAAOO,EAAMC,KAAK2Y,MAAMA,MAAMjd,GACpCid,EAAMhJ,KAAKnQ,MAGRmZ,E6HgFmCyiD,CAAiBr7D,EAAOg7D,OAG5DM,GAAelB,EAAYj+D,KAAI,SAACsD,GAAD,OAAUA,EAAKw7D,cAGhDM,GAAa,GACjBJ,GAAWzyD,SAAQ,SAACjJ,EAAM6V,GACF,qBAAT7V,GAAwBA,EAAKiuC,OAASnwC,GAC7Cg+D,GAAW3rD,KAAK,CAAEnQ,OAAMzH,QAASsjE,GAAahmD,QAItD,IAAI+nB,GAAc,GAgDlB,OA9CIq9B,EAAen+D,OAAS,IACxB8gC,GAAcq9B,EAAev+D,KAAI,SAACihC,EAAK9nB,GAAN,OAC7B,yBACInc,IAAKmc,EAAI,EACT3d,UAAU,YACViC,IAAKwjC,EAAIo+B,UACTvhE,IAAG,UAAK0+D,EAAUj2D,MAAM,KAAKkrC,MAAM,GAAI,GAAGj+B,KAAK,KAA5C,YAAoD2F,EAAI,GAC3D3C,QAAQ,aAwChB,oCACI,kBAAC,IAAD,KACI,+BAAQkmD,GACR,0BAAMzgE,KAAK,cAAckjB,QAASy9C,EAASx8D,OAAS,EAAIw8D,EAAW,KACnE,0BACIhuC,IAAI,YACJh0B,KAAI,6CAAwCwV,GAASwB,UAAjD,OAA4DxB,GAAS/M,WAGjF,kBAACmnB,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAOimD,IAElB,kBAACtkD,GAAA,EAAD,CAAW1c,UAAU,OAAO2c,OAAK,GAC7B,kBAACF,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAKuvB,MAAO,CAAEyJ,UAAW,UACrB,kBAAC,WAAD,CAAUvlB,SAAU,yBAAKxtB,IAAI,mBAAmByZ,MAAM,OAAOpZ,IAAI,aAC7D,kBAAC,KAAD,eAAQtC,UAAU,sBAnDlB,CACpBA,UAAW,oBACX+Z,UAAU,EACVD,UAAU,EACVsuC,YAAY,EACZC,cAAe,IACfpuC,aAAc,EACdG,WAAY,CACR,CACIC,WAAY,IACZV,SAAU,CACN3Z,UAAW,0BACXooD,YAAY,EACZnuC,aAAc,OAuCDyrB,QAOrB,kBAAChpB,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,qBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,CAAKzc,UAAU,6BACX,kBAACgc,GAAA,EAAD,KACI,uBAAGhc,UAAU,oCAAb,6BAA2EwI,GAA3E,cAEJ,kBAACwT,GAAA,EAAD,CAAKrP,GAAI,GAAI0K,GAAG,QACZ,kBAAC,GAAD,CAAanV,QAAQ,cAAclC,UAAU,aAM7D,kBAAC0c,GAAA,EAAD,KACI,kBAACD,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,CAAK7E,GAAI,GACL,kBAAC4sB,GAAA,EAAD,CACI/jC,UAAU,8CACVsgE,UAAWt8B,GACXwb,SAAU,SAAC9gC,GAAD,OAAOulB,GAAavlB,KAE9BomB,GAActgC,KAAI,SAAC8/C,EAAK3mC,GAAN,OACd,kBAACwmB,GAAA,EAAD,CACI3iC,IAAKmc,EACLuX,SAAUovB,EAAI9iD,IACdqW,QAAS,kBAAMosB,GAAaqgB,EAAI9iD,MAChCuZ,MAAOupC,EAAI7jD,WAKvB,kBAAC6jC,GAAA,EAAD,CAAUtkC,UAAU,+CAChB,kBAACskC,GAAA,EAASt/B,OAAV,CACIX,GAAG,SACHY,KAAK,SACLjF,UAAU,kCACVkF,KAAK,UAEL,8BACK4/B,GAAc1/B,QAAO,SAACg9B,GAAD,OAASA,EAAI5gC,MAAQwiC,MAAW,GAAGvjC,OAGjE,kBAAC6jC,GAAA,EAASn/B,KAAV,KACK2/B,GAActgC,KAAI,SAACgW,GAAD,OACf,kBAAC8pB,GAAA,EAASC,KAAV,CAAe/iC,IAAKgZ,EAAKhZ,IAAKqW,QAAS,kBAAMosB,GAAazpB,EAAKhZ,OAC1DgZ,EAAK/Z,WArFvB,SAACujC,GAChB,OAAQA,GACJ,IAAK,mBACD,OAAO,kBAAC,GAAD,CAAiB17B,KAAMs7D,KAClC,IAAK,oBACD,OAAQ,kBAAC,GAAD,CAAkBzB,WAAYA,IAC1C,IAAK,eACD,OAAO,kBAAC,WAAD,CAAU1yC,SAAU,+BAAa,kBAAC6zB,EAAD,CAAYqC,QAASA,KACjE,IAAK,iBACD,OAAO,kBAAC,WAAD,CAAUl2B,SAAU,+BAAa,kBAAC0zC,EAAD,CAAeN,cAAeA,EAAeF,SAAUA,KACnG,QACI,OAAO,+BAgFEtc,CAAWriB,KAEhB,kBAAChoB,GAAA,EAAD,CAAK7E,GAAI,GACL,kBAAC,GAAD,CAAkBpY,KAAMujE,EAAgB7iE,QAAQ,SAAU,IAAKmxC,QAAM,EAACE,MAAO,OAMxFmyB,EAAWr+D,OAAS,GACjB,kBAAC8X,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,uBACIY,wBAAyB,CAAEC,OAAQomD,GACnC13B,MAAO,CACHw2B,aAAc,mBChPrC3gE,GAAY,SAACiH,GAAD,OAAWA,EAAMulB,MAAMK,YAAY7sB,WAE/CwE,GAAW,SAACyC,GAAD,OAAWA,EAAMulB,MAAMK,YAAYroB,UAE9C6vC,GAAmBJ,aAC5Bj0B,GACAH,GACAkJ,GACAvkB,GACAxE,IACA,SAACu0C,EAAYL,EAAQC,EAAgBjsC,GACjC,OAAQ4gB,GAAmBorB,EAAQC,EAAgBjsC,IAAc,IAAI9E,KAAI,SAACsD,GAAD,MAAW,CAChFA,OACAkiB,SAAUmrB,GAAgBQ,EAAY7tC,EAAKwhB,aAK1C1gB,GAASysC,aAAe9sC,KAAS3C,IAAU,SAAC4vC,EAAUlsC,GAC/D,OAAO6U,aAAcq3B,EAAUlsC,MCH7BywC,GAAmB5qB,gBAAK,kBAAM,iCAgFrB20C,GA9EM,WACjB,IAAMt+D,EAAWsD,cACjB,EAAwC6M,eAAhCvU,EAAR,EAAQA,UAAWwE,EAAnB,EAAmBA,SAAUipC,EAA7B,EAA6BA,OACvBiM,EAAe1yC,YAAYqtC,IAC3BY,EAAUjuC,YAAYQ,IACtBw6C,EAAqBh7C,YAAY0M,IACjCuuC,EAAoBj7C,YAAY2M,IAChCgvD,OAAwB94D,IAAX4jC,EACb3J,EAA0B,UAAd9jC,EAAwB,OAAS,WAC7C4iE,EAAW57D,aAAY,SAACC,GAAD,OAAWA,EAAMC,KAAK2Y,MAAM4J,SAASgkB,MAC5Dj6B,EAAWC,eAYjB,OAVApR,qBAAU,WACFrC,IAAcgiD,GCxCG,SAAC59C,EAAUpE,GAC7BoE,EAAS,CAAEP,KAAMQ,EAAgBC,QAAStE,IDuCPmE,CAAcC,EAAUpE,GAC1DwE,IAAay9C,GCrCG,SAAC79C,EAAUI,GAC5BJ,EAAS,CAAEP,KAAMY,EAAeH,QAASE,IDoCRD,CAAaH,EAAUI,KAC5D,CAACJ,EAAUpE,EAAWwE,EAAUw9C,EAAoBC,IAEvD5/C,qBAAU,WACN2U,aAAc5S,GACd6S,aAAc7S,KACf,CAACA,IAGA,oCACI,kBAAC,IAAD,KACI,gCAAe,OAAP6wC,QAAO,IAAPA,OAAA,EAAAA,EAAS51C,OAAQqB,aAAE,qBAAsBu0C,EAAQ51C,KAAMW,IAC/D,0BACIgyB,IAAI,YACJh0B,KAAI,6CAAwCwV,EAASwB,UAAjD,OAA4DxB,EAAS/M,WAGjF,kBAACmnB,GAAD,MACA,kBAACtS,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAACkf,GAAA,EAAD,OAEJ,kBAAC,GAAD,CAAyB9d,UAAWA,EAAWwE,SAAUA,IACzD,kBAAC,GAAD,CAAaxE,UAAWA,GACpB,kBAAC,GAAD,CAAeA,UAAWA,GACtB,kBAAC,GAAD,CAAWwE,SAAUA,GACjB,kBAAC,GAAD,CAAmBi7B,eAAgB/+B,aAAE,6BAA8B4+B,cAAY,GAC3E,kBAAC,GAAD,CACI18B,GAAG,QACH+W,MAAK,UAAKza,aAAkBc,GAAvB,YAAqC2iE,EAAa,OAAS,KAA3D,YACDA,EAAaC,EAAW,KAAO,GAD9B,wDAGC3tB,QAHD,IAGCA,OAHD,EAGCA,EAAS51C,MACfW,UAAWA,EACXwE,SAAUA,EACVipC,OAAQA,EACRgB,SAAQk0B,GAAal1B,EACrB7vB,QAAS87B,EACT5P,kBAAkB,EAClBhG,UAAWA,EACX+P,eAAgB,SAACjK,EAAQva,GAAT,OACZ,kBAAC,GAAD,eACIjvB,IAAKwpC,EAAOljC,KAAKN,OACjBpG,UAAWA,EACXwE,SAAQ,OAAEywC,QAAF,IAAEA,OAAF,EAAEA,EAASryC,GACnBkhC,UAAWA,EACXzU,SAAUA,GACNua,KAGZ4E,YAAY,IAEhB,kBAAC,WAAD,CACIngB,SAAU,yBAAKzvB,UAAU,eAAe8B,aAAE,wCAE1C,kBAAC,GAAD,CAAkB8G,OAAQytC,W,qBEvF7C4tB,GAAa,SAAC,GAAiE,IAA/DxjE,EAA8D,EAA9DA,KAAMu9C,EAAwD,EAAxDA,KAAMntC,EAAkD,EAAlDA,IAAK7M,EAA6C,EAA7CA,GAAIkgE,EAAyC,EAAzCA,YAAa56C,EAA4B,EAA5BA,KAAM66C,EAAsB,EAAtBA,gBAC3DznB,EAASynB,EAAe,gEACiCngE,EADjC,0EAEmCA,EAFnC,aAI9B,OACI,kBAACgY,GAAA,EAAD,KACI,kBAACrB,GAAA,EAAD,KACI,kBAACA,GAAA,EAAKC,IAAN,CACI3Y,IAAKy6C,EACLp6C,IAAK7B,EACLw/B,QAAS,SAACxoB,GACNA,EAAED,OAAO0oB,QAAU,KACnBzoB,EAAED,OAAOvV,IAAMk+B,QAGvB,kBAACxlB,GAAA,EAAKO,KAAN,KACI,kBAACP,GAAA,EAAK6sB,MAAN,CAAYxnC,UAAU,eAAeqE,GAAG,MACnC5D,GAEL,kBAACka,GAAA,EAAKqZ,KAAN,CAAWh0B,UAAU,aAAag+C,IAEtC,kBAACrjC,GAAA,EAAKksB,OAAN,KACI,kBAAC,GAAD,CAAa3kC,QAAQ,cAAc0D,SAAU5B,EAAIhE,UAAU,mBAC3D,kBAAC,IAAD,CACIV,GAAE,UAAKuR,EAAL,YAAYqzD,EAAZ,YAA2BlgE,EAA3B,YAAiC8U,aAAQrY,IAAzC,OAAiD6oB,EAAO,cAAgBA,EAAO,IAA/E,OACE66C,EAAkB,UAAY,IAElCnkE,UAAU,4CAET8B,aAAE,gBAAiBrB,QAQ5CwjE,GAAW1hE,aAAe,CACtBsO,IAAK,aAYMozD,UCjDR,SAASG,GAAoBpiE,GAChC,IACM4/B,EAAax5B,aAAY,SAACC,GAAD,OAAWiM,aAA4BjM,EAAOrG,EAAMZ,UAAWY,EAAMwS,eAC9FqtB,EAAYz5B,aAAY,SAACC,GAAD,OAAWkM,aAA2BlM,EAAOrG,EAAMZ,UAAWY,EAAMwS,eAC5FstB,EAAa15B,aAAY,SAACC,GAAD,OAAWgM,aAA4BhM,EAAOrG,EAAMZ,UAAWY,EAAMwS,eAC9FujC,IAAa/1C,EAAMZ,aAAeY,EAAMwS,WAE9C,OAAOysB,GAAcj/B,GANL,SAACwD,EAAUiO,GAAX,OAAqB4wD,aAAmB7+D,EAAUxD,EAAMZ,UAAWY,EAAMwS,WAAYf,KAMhEmuB,EAAYC,EAAWC,EAAYiW,GAG5EqsB,GAAoBphC,UAAY,CAC5B5hC,UAAW6hC,KAAUlqB,OACrBvE,WAAYyuB,KAAUkV,UAAU,CAAClV,KAAUlqB,OAAQkqB,KAAU3yB,UAGlD8zD,UCTFhjE,GAAY,SAACiH,GAAD,OAAWA,EAAMulB,MAAMC,sBAAsBzsB,WACzDoT,GAAa,SAACnM,GAAD,OAAWA,EAAMulB,MAAMC,sBAAsBrZ,YAE1DihC,GAAmBJ,aAC5B9sC,KACA2L,KACA9S,GACAoT,IACA,SAACghC,EAAU8uB,EAA2Bj7D,EAAYk7D,GAO9C,OANcnmD,aAAuBo3B,EAAU8uB,EAA2Bj7D,EAAYk7D,MAUjFlkE,GAAUg1C,aAAe3xC,KAAUtC,IAAW,SAACs0C,EAAWrsC,GACnE,OAAOysC,aAAeJ,EAAWrsC,MAGxB2gB,GAAWqrB,aAAej0B,GAAW5M,IAAY,SAACmhC,EAAY4uB,GACvE,OAAOpvB,GAAgBQ,EAAY4uB,M,UCNxBC,GAjCW,SAAC1lC,GACvB,MAA8B57B,mBAAS,MAAvC,oBAAOuhE,EAAP,KAAgBC,EAAhB,KACA,EAAoCxhE,mBAAS,MAA7C,oBAAO+/D,EAAP,KAAmBC,EAAnB,KAEMyB,EAAiBnpD,OAAO5G,SAASwB,SAAS6/B,MAAM,GA0BtD,OAxBAxyC,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAkBnB,OAjBJjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,mEACqE6zD,EADrE,yCAED,CAAExzD,OAAQF,EAAWE,SAEpBhH,MAAK,SAAC7B,GAAD,OAAUA,EAAK+B,UACpBF,MAAK,SAAC7B,GACH,IAAM4oC,EAAU5oC,EAAK,GAAG+oC,IACpB,aAAcH,GAAWA,EAAQ0zB,SAAShgE,OAAS,GACnD8/D,EAAWxzB,EAAQ0zB,UAEnB,gBAAiB1zB,GAAWA,EAAQ2zB,YAAYjgE,OAAS,GACzDs+D,EAAchyB,EAAQ2zB,gBAG7B5xD,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAE3C,WACHxG,EAAWG,WAEpB,CAACuzD,EAAgB7lC,IAEb,CAAC2lC,EAASxB,ICHN6B,GA3Ba,WACxB,MAA4B5hE,mBAAS,IAArC,oBAAOglB,EAAP,KAAe68C,EAAf,KAEMJ,EAAiBnpD,OAAO5G,SAASwB,SAAS6/B,MAAM,GAqBtD,OAnBAxyC,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAavB,OAZAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,wHAC0HhR,IAAOggB,SADjI,+BACgK6kD,EADhK,gBAED,CAAExzD,OAAQF,EAAWE,SAEpBhH,MAAK,SAAC7B,GAAD,OAAUA,EAAK+B,UACpBF,MAAK,SAAC7B,GACCA,EAAK1D,OAAS,GAAGmgE,EAAUz8D,EAAK,GAAG+oC,IAAInpB,QAAU,OAExDjV,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAG/C,WACHxG,EAAWG,WAEhB,CAACuzD,IAEG,CAACz8C,IAAUA,EAAOtjB,SCoEdogE,GAvES,WACpB,IAAMx/D,EAAWsD,cACjB,EAAoC6M,eAA5BnB,EAAR,EAAQA,WAAY0vD,EAApB,EAAoBA,YAEde,EAAkB78D,YAAYqtC,KAAqB,GACnDyvB,EAAc98D,YAAY/H,IAC1B8kE,EAAe/8D,YAAY4hB,IACjC,EAAoCw6C,KAApC,oBAAOY,EAAP,KAAmBC,EAAnB,KAEA5hE,qBAAU,YC/Be,SAAC+B,EAAUpE,GAC7BoE,EAAS,CAAEP,K5NDQsU,+C4NCc7T,QAAStE,ID+B7CmE,CAAcC,EAAU0+D,GC5BF,SAAC1+D,EAAUgP,GAC9BhP,EAAS,CAAEP,KAAMwmB,GAAiB/lB,QAAS8O,ID4B9C8wD,CAAe9/D,EAAUgP,KAC1B,CAAChP,EAAU0+D,EAAa1vD,IAE3B,MAA8BswD,KAA9B,oBAAO58C,EAAP,KAAeq9C,EAAf,KACQnvD,EAAavB,eAAbuB,SAER,OACI,oCACI,kBAAC,IAAD,KACI,+BAAQtU,aAAE,+BAAD,OAAiCojE,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAazkE,KAA9C,OAAoD0kE,QAApD,IAAoDA,OAApD,EAAoDA,EAAc1kE,OAC3E,0BACI2yB,IAAI,YACJh0B,KAAI,8CAAyCgX,MAGrD,kBAAC4Y,GAAD,MACA,yBAAKhvB,UAAU,wBACX,kBAAC0c,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACwC,GAAA,EAAD,QAIR,kBAAC,GAAD,CAAqB9d,UAAW8iE,EAAa1vD,WAAYA,GACrD,kBAAC,GAAD,CAAepT,UAAW8iE,GACtB,kBAAC,GAAD,CAAmBxjC,cAAY,GAC3B,kBAAC,GAAD,CACI3lB,MAAOjZ,aAAE,+BAAD,OAAiCojE,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAazkE,KAA9C,OAAoD0kE,QAApD,IAAoDA,OAApD,EAAoDA,EAAc1kE,QAE9E,kBAACic,GAAA,EAAD,KACI,kBAAC,GAAD,CAAkB3d,KAAMqmE,EAAYplE,UAAU,SAC7CulE,GAAe,kBAAC,WAAD,CAAiBjqD,QAAS4M,EAAQhO,OAAO,cACzD,kBAACuC,GAAA,EAAD,CAAK9P,GAAI,EAAGwP,GAAI,EAAG9E,GAAI,GAClB4tD,EAAgBrgE,OAAS,GACtBqgE,EAAgBzgE,KAAI,SAACoE,GAAD,OAChB,kBAAC,GAAD,eACIpH,IAAKoH,EAAO5E,IACR4E,EAFR,CAGIiI,IAAqB,UAAhBqzD,EAA0B,oBAAsB,YACrDA,YAAaA,EACb56C,KAAM9U,SAItB,kBAAC,GAAD,CAAkBzV,KAAMsmE,EAAerlE,UAAU,gBEhDlEioC,mBAvBa,SAAC,GAAD,IAAG7mC,EAAH,EAAGA,UAAW4oB,EAAd,EAAcA,SAAd,OACxB,kBAAC,IAAD,CAAM1qB,GAAE,WAAM0qB,EAASV,KAAf,mBAA8BloB,GAAapB,UAAU,wBACzD,kBAAC2a,GAAA,EAAD,CAAM3a,UAAU,YACZ,kBAAC2a,GAAA,EAAKC,IAAN,CACI3Y,IAAG,oEAA+D+nB,EAASV,KAAxE,uBACHtO,QAAQ,OACRilB,QAAS,SAACxoB,GACNA,EAAED,OAAO0oB,QAAU,KACnBzoB,EAAED,OAAOvV,IAAMk+B,QAGvB,kBAACxlB,GAAA,EAAKO,KAAN,CAAWlb,UAAU,gBACjB,wBAAIA,UAAU,oBAAoBgqB,EAASvpB,YCyB5C+kE,GArCK,SAAC,GAAuE,IAArEtB,EAAoE,EAApEA,YAAahkE,EAAuD,EAAvDA,YAAaulE,EAA0C,EAA1CA,sBAUvCC,EAPuB,SAAC1mD,GAC1B,IAAI/B,EAAM,YAAO+B,GAGjB,OAFA/B,EAASA,EAAO7X,QAAO,SAAC4kB,GAAD,MAAgC,SAAlBA,EAAS27C,SACvCvwD,MAAK,SAACC,EAAGC,GAAJ,OAAWA,EAAEswD,KAAOvwD,EAAEuwD,OAC3B3oD,EAGW4oD,CpIda,SAACzkD,EAAW2I,EAAoB3oB,GAAe,IAAD,EACjF,iBAAO2oB,EAAmB3oB,UAA1B,aAAO,EAA+BoD,KAAI,SAACR,GAAD,OAAQod,EAAUpd,MoII5C8hE,CADuE,EAAnBC,aACdN,EAAuBvB,IAW7E,OAA6B,IAAzBwB,EAAc9gE,OAAqB,KAEnC,kBAAC6X,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,4BAAK9b,GACL,kBAAC,GAAD,CAAekB,UAAW8iE,GACtB,kBAAC,GAAD,CACInjC,oBAAqBj/B,aAAE,iCACvB8+B,aAAW,EACXF,cAAY,GAEZ,kBAACjkB,GAAA,EAAD,CAAK9P,GAAI,EAAGwP,GAAI,EAAG9E,GAAI,EAAGmiB,GAAI,GACzBksC,EAAclhE,KAAI,SAACwlB,GAAD,OACf,kBAAChO,GAAA,EAAD,CAAKxa,IAAKwoB,EAASV,MACf,kBAAC,GAAD,CAAcloB,UAAW8iE,EAAal6C,SAAUA,cCuCrEg8C,OA1Df,WACI,IAAQ9B,EAAgBvuD,eAAhBuuD,YAEJ+B,EAAe79D,YAAY1E,MACzBwiE,EAAyB99D,YAAY2hB,IACrCo8C,EAAgB/9D,YAAYgZ,IAE9BglD,EAAiBH,EAED,QAAhB/B,QAAyCj5D,IAAhBi5D,IACzBkC,EAAiBH,EAAa7gE,QAAO,SAAC/E,GAAD,OAAaA,EAAQuD,OAASsgE,MAGvE,MAAoCM,GAAWhpD,OAAO5G,SAASwB,SAAS6/B,MAAM,IAA9E,oBAAOmvB,EAAP,KAAmBC,EAAnB,KAEA,OACI,oCACI,kBAAC,IAAD,KACI,+BAAQvjE,aAAE,6BACV,0BACIsxB,IAAI,YACJh0B,KAAI,0DAAgE6L,IAAhBi5D,EAA4BA,EAAc,OAGtG,kBAACl1C,GAAD,MACA,kBAACtS,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACwC,GAAA,EAAD,QAGR,kBAAC,GAAD,CAAWnE,MAAOjZ,aAAE,0BACpB,kBAAC4a,GAAA,EAAD,KACI,kBAAC,GAAD,CAAkB3d,KAAMqmE,EAAYplE,UAAU,SAC7ComE,EAAexhE,OAAS,GACrB,kBAAC0vB,GAAA,EAAD,CAAOpyB,QAAQ,UAAUlC,UAAU,YAC/B,0BAAMkF,KAAK,MAAMwvB,aAAW,aAA5B,gBAEQ,IAHZ,6CAOH0xC,EAAe5hE,KAAI,SAACnE,GACjB,OACI,kBAAC,GAAD,CACImB,IAAKnB,EAAQuD,KACbsgE,YAAa7jE,EAAQuD,KACrB1D,YAAaG,EAAQI,KACrBglE,sBAAuBS,EACvBH,aAAcI,OAI1B,kBAAC,GAAD,CAAkBpnE,KAAMsmE,EAAerlE,UAAU,YC1DjE,SAASqmE,GAAmBhxD,EAAGC,GAC3B,IAAMgxD,EAAQjxD,EAAE5U,KAAK+Q,cACf+0D,EAAQjxD,EAAE7U,KAAK+Q,cACrB,OAAI80D,EAAQC,GAAe,EACvBD,EAAQC,EAAc,EACnB,EAGJ,IAAMnlE,GAAY,SAACiH,GAAD,OAAWA,EAAMulB,MAAMO,cAAc/sB,WAEjDolE,GAAiBnxB,aAC1B9sC,KACAyF,KACA5M,IACA,SAACo0C,EAAUixB,EAAmBp9D,GAC1B,IAAI2V,EAAUjR,aAAsBynC,EAAUixB,EAAmBp9D,GACjE,GAAKoU,MAAM8Y,QAAQvX,GAKnB,OAHAA,EAAQ5Z,QAAO,SAACwD,GAAD,MAA0B,OAAdA,EAAO5E,MAClCgb,EAAQ5J,KAAKixD,IAENrnD,KAIF3e,GAAUg1C,aAAe3xC,KAAUtC,IAAW,SAACs0C,EAAWrsC,GACnE,OAAOysC,aAAeJ,EAAWrsC,MCyDtBq9D,GAxEQ,WACnB,IAAMlhE,EAAWsD,cACTo7D,EAAgBvuD,eAAhBuuD,YACF76D,EAAajB,YAAYhH,IACzBulE,EAAWv+D,YAAY/H,IACvBumE,EAAkBx+D,YAAYo+D,IACpC,EAAoCtjE,mBAASshE,MAA7C,oBAAOY,EAAP,KAAmBC,EAAnB,KACQjvD,EAAavB,eAAbuB,SACFjW,EAAgB,kBAAkBkP,KAAK+G,GAa7C,OAXA3S,qBAAU,YC5Be,SAAC+B,EAAUpE,GAC7BoE,EAAS,CAAEP,K5NDQsU,sC4NCc7T,QAAStE,ID4B7CmE,CAAcC,EAAU0+D,GACxB2C,aAAqBrhE,EAAU0+D,KAChC,CAAC1+D,EAAU0+D,IAEdzzB,2BAAgB,WACRm2B,GAAmBzmE,GACnBymE,EAAgBxhE,QAAO,SAAC0hE,GAAD,MAAkB,MAAXA,EAAEr5D,UAErC,CAACm5D,EAAiBzmE,IAGjB,oCACI,kBAAC,IAAD,KACI,+BAAQ2B,aAAE,uBAAwB3B,EAAzB,OAAwCwmE,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAUlmE,OAC3D,0BACI2yB,IAAI,YACJh0B,KAAI,6CAAwCgX,MAGpD,kBAAC4Y,GAAD,MACA,yBAAKhvB,UAAU,wBACX,kBAAC0c,GAAA,EAAD,CAAWC,OAAK,EAAC3c,UAAU,gBACvB,kBAAC0c,GAAA,EAAD,KACI,kBAACwC,GAAA,EAAD,QAIR,kBAAC,GAAD,CAAa9d,UAAWiI,GACpB,kBAAC,GAAD,CAAmB03B,oBAAqBj/B,aAAE,+BAAgC8+B,aAAW,EAACF,cAAY,GAC9F,kBAAC,GAAD,CAAW3lB,MAAOjZ,aAAE,uBAAwB3B,EAAzB,OAAwCwmE,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAUlmE,QAErE,kBAACic,GAAA,EAAD,KACI,kBAAC,GAAD,CAAkB3d,KAAMqmE,EAAYplE,UAAU,SAC9C,kBAACyc,GAAA,EAAD,CAAK9P,GAAI,EAAG0K,GAAI,EAAGF,GAAI,GAClByvD,GACGA,EAAgBpiE,KAAI,SAACoE,GAAD,OAChB,kBAAC,GAAD,eACIpH,IAAKoH,EAAO5E,GACZkgE,YAAaA,GACTt7D,EAHR,CAIIiI,IAAqB,UAAhBqzD,EAA0B,oBAAsB,YACrDC,gBAAiBhkE,SAIjC,kBAAC,GAAD,CAAkBpB,KAAMsmE,EAAerlE,UAAU,UAGrD,kBAAC2e,GAAA,EAAD,CACIjd,OAAQ,CACJw7B,MAAM,sCAAD,OAAwCgnC,GAC7C6C,cAAe7C,UEUhC8C,OA5Ef,WACI,MAAwC9jE,mBAAS,IAAjD,oBAAO+jE,EAAP,KAAqBC,EAArB,KAEAzjE,qBAAU,WACN,IAAMwN,EAAa,IAAIC,gBAevB,OAdAjH,MAAM,GAAD,OACErC,IAAKkJ,IADP,4FAED,CAAEK,OAAQF,EAAWE,SAEpBhH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACHA,EAAK8M,MAAK,SAACC,EAAGC,GACV,OAAOD,EAAE0F,MAAM0oC,SAASluC,cAAcD,EAAEyF,MAAM0oC,aAElDyjB,EAAgB5+D,MAEnB2K,OAAM,SAACwE,GACJ9V,QAAQwxB,MAAM,+BAAgC1b,MAE/C,WACHxG,EAAWG,WAEhB,IAEH,MAAoCozD,KAApC,oBAAOY,EAAP,KAAmBC,EAAnB,KAEM8B,EAAqB,SAACC,GACxB,OAAOA,EAAIr8D,MAAM,KAAKkrC,MAAM,GAAI,GAAGj+B,KAAK,MAG5C,OACI,oCACI,kBAAC,IAAD,KACI,2DACA,0BAAMob,IAAI,YAAYh0B,KAAK,qDAE/B,kBAAC4vB,GAAD,MACA,kBAAC,GAAD,CAAWjU,MAAO,wBAClB,kBAAC2B,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAAC,GAAD,CAAkBjB,KAAMqmE,EAAYplE,UAAU,SAC9C,kBAACyc,GAAA,EAAD,CAAK9P,GAAI,EAAGwP,GAAI,EAAG9E,GAAI,GAClB4vD,EAAaziE,KAAI,SAAC6iE,GAAD,OACd,kBAACrrD,GAAA,EAAD,CAAKxa,IAAK6lE,EAAMtsD,MAAM0oC,UAClB,kBAAC9oC,GAAA,EAAD,CAAM3a,UAAU,YACZ,kBAAC2a,GAAA,EAAKC,IAAN,CACI3Y,IAAKolE,EAAMh2B,IAAIi2B,oBAAoB,GAAGzD,UACtC7oD,QAAQ,OACRilB,QAAS,SAACxoB,GACNA,EAAED,OAAO0oB,QAAU,KACnBzoB,EAAED,OAAOvV,IAAMk+B,QAGvB,kBAACxlB,GAAA,EAAKO,KAAN,KACI,kBAACP,GAAA,EAAK6sB,MAAN,CAAYxnC,UAAU,2BAA2BqE,GAAG,MAC/C8iE,EAAmB3uD,aAAW6uD,EAAMtsD,MAAM0oC,aAGnD,kBAAC9oC,GAAA,EAAKksB,OAAN,KACI,kBAAC,GAAD,CAAa3kC,QAAQ,cAAc0D,SAAUyhE,EAAMh2B,IAAI,aAAcrxC,UAAU,mBAC/E,kBAAC,IAAD,CACIV,GAAE,wBAAmBwZ,aAAQquD,EAAmBE,EAAMtsD,MAAM0oC,WAA1D,YAAwE4jB,EAAMh2B,IAAI,cACpFrxC,UAAU,4CAET8B,aAAE,gBAAiBqlE,EAAmB3uD,aAAW6uD,EAAMtsD,MAAM0oC,oBAOtF,kBAAC,GAAD,CAAkB1kD,KAAMsmE,EAAerlE,UAAU,YC/ClDunE,OAnCf,WACI,IAWMC,EAAY3X,aAXgB,WAC1B4X,eAAeC,QAAQ,UACvB/lE,QAAQouD,KAAK,oCAAqC0X,eAAeC,QAAQ,SAAS9iE,QAClF6iE,eAAeE,WAAW,WAE1BhmE,QAAQouD,KAAK,gDACbtwC,cAAc+nD,GACd7uD,SAAS/D,SAASxV,KAAO,OAIwB,IAEzD,OACI,oCACI,kBAAC,IAAD,KACI,8CAEJ,kBAACsd,GAAA,EAAD,CAAW1c,UAAU,QACjB,kBAACyc,GAAA,EAAD,KACI,kBAACT,GAAA,EAAD,KACI,sDACA,6BACA,mKCmDT4rD,GAvDO,kBAClB,kBAAC,KAAD,KACI,kBAAC,KAAD,CAAO5nD,KAAK,IAAIggD,OAAK,EAACD,UAAWxwC,KAEjC,kBAAC,KAAD,CAAOvP,KAAK,WAAW+/C,UAAW/lB,KAClC,kBAAC,KAAD,CAAOh6B,KAAK,4CAA4C+/C,UAAW/W,KACnE,kBAAC,KAAD,CAAOhpC,KAAK,mDAAmD+/C,UAAW/W,KAC1E,kBAAC,KAAD,CAAOhpC,KAAK,mDAAmD+/C,UAAW/W,KAC1E,kBAAC,KAAD,CAAOhpC,KAAK,WAAW+/C,UAAWE,GAASD,OAAK,IAChD,kBAAC,KAAD,CAAOhgD,KAAK,iBAAiB+/C,UAAWE,KACxC,kBAAC,KAAD,CAAOjgD,KAAK,iDAAiD+/C,UAAWjW,KACxE,kBAAC,KAAD,CAAO9pC,KAAK,iDAAiD+/C,UAAWjW,KAExE,kBAAC,KAAD,CAAO9pC,KAAK,uBAAuB+/C,UAAWiG,KAC9C,kBAAC,KAAD,CAAOhmD,KAAK,UAAU+/C,UAAWiG,KACjC,kBAAC,KAAD,CAAOhmD,KAAK,wBAAwB6nD,QAAM,EAAC9H,UAAW2G,KACtD,kBAAC,KAAD,CAAO1mD,KAAK,uBAAuB6nD,QAAM,EAAC9H,UAAW2G,KACrD,kBAAC,KAAD,CAAO1mD,KAAK,6BAA6B6nD,QAAM,EAAC9H,UAAW2G,KAC3D,kBAAC,KAAD,CAAO1mD,KAAK,mCAAmC6nD,QAAM,EAAC9H,UAAWiF,KACjE,kBAAC,KAAD,CAAOhlD,KAAK,qCAAqC+/C,UAAW+D,KAC5D,kBAAC,KAAD,CAAO9jD,KAAK,wCAAwC+/C,UAAW+D,GAAO9D,OAAK,IAC3E,kBAAC,KAAD,CAAOhgD,KAAK,gDAAgD+/C,UAAW/W,KACvE,kBAAC,KAAD,CAAOhpC,KAAK,4CAA4C+/C,UAAW+D,KArBvE,IAsBI,kBAAC,KAAD,CAAO9jD,KAAK,gDAAgD+/C,UAAW+D,KACvE,kBAAC,KAAD,CAAUrvB,KAAK,WAAWn1C,GAAG,uBAC7B,kBAAC,KAAD,CAAU0gE,OAAK,EAACvrB,KAAK,mBAAmBn1C,GAAG,4BAE3C,kBAAC,KAAD,CAAO0gB,KAAK,mBAAmB+/C,UAAW+H,KAC1C,kBAAC,KAAD,CAAO9nD,KAAK,SAAS+/C,UAAWriC,KAChC,kBAAC,KAAD,CAAO1d,KAAK,cAAc+/C,UAAWv7B,KAErC,kBAAC,KAAD,CAAOxkB,KAAK,eAAe+/C,UAAWiH,KACtC,kBAAC,KAAD,CAAOhnD,KAAK,6BAA6B+/C,UAAWU,KACpD,kBAAC,KAAD,CAAOzgD,KAAK,2BACR,kBAAC,GAAD,CAAc2gD,YAAY,SAE9B,kBAAC,KAAD,CAAO3gD,KAAK,2BACR,kBAAC,GAAD,CAAc2gD,YAAY,SAE9B,kBAAC,KAAD,CAAUlsB,KAAK,0BAA0Bn1C,GAAG,kBAC5C,kBAAC,KAAD,CAAO0gB,KAAK,SAAS+/C,UAAWiC,KAChC,kBAAC,KAAD,CAAOhiD,KAAK,OAAO+/C,UAAWG,KAC9B,kBAAC,KAAD,CAAOlgD,KAAK,cAAc+/C,UAAWnvC,KACrC,kBAAC,KAAD,CAAO5Q,KAAK,sCAAsC+/C,UAAWsC,KAE5DtiD,IAAcvb,KAAI,SAACqiD,GAAD,OACf,kBAAC,KAAD,CAAOrlD,IAAKqlD,EAAM7mC,KAAMA,KAAM6mC,EAAM7mC,KAAM+/C,UAAW,kBAAM,kBAAC,GAAD,CAAcW,KAAM7Z,EAAMh2C,YAGzF,kBAAC,KAAD,CAAOmP,KAAK,SAAS+/C,UAAWwH,KAChC,kBAAC,KAAD,CAAOvnD,KAAK,OAAO+/C,UAAWtrC,KAC9B,kBAAC,KAAD,CAAUn1B,GAAG,W,qBCtBNyoE,GA9CU,SAAC,GAAyC,IAAvC97C,EAAsC,EAAtCA,SAAU+7C,EAA4B,EAA5BA,SAAUC,EAAkB,EAAlBA,YACtCrzD,EAAWC,eACjB,OACI,yBAAK7U,UAAU,yFACTisB,EAOE,oCACI,4BAAQpU,QAASmwD,EAAUhoE,UAAU,mDACjC,uBAAGA,UAAU,kBADjB,IACuC8B,aAAE,kBAExC8S,EAASwB,SAAS9S,SAAS,aACxB,4BAAQuU,QAAS,kBAAM2D,OAAOm4C,KAAK,gBAAgB3zD,UAAU,yCACzD,uBAAGA,UAAU,cADjB,IACmC8B,aAAE,qBAGrC,kBAAC,IAAD,CAASxC,GAAG,cAAcU,UAAU,wCAChC,uBAAGA,UAAU,cADjB,IACmC8B,aAAE,sBAhB7C,oCACI,4BAAQ+V,QAASowD,EAAajoE,UAAU,wDACpC,uBAAGA,UAAU,iBADjB,IACsC8B,aAAE,sBAoB/C8S,EAASwB,SAAS9S,SAAS,cACxB,uBAAGlE,KAAI,cAAS0C,aAAE,kBAAoB9B,UAAU,sBAC5C,uBAAGA,UAAU,eADjB,IACoC8B,aAAE,kBAI1C,uBAAG1C,KAAK,uEAAuEoY,OAAO,SAAS4b,IAAI,WAAWpzB,UAAU,uDAAxH,sBACuB,yBAAKiC,IAAKimE,KAAW5lE,IAAI,kBAAkBoZ,MAAM,OAAO1b,UAAU,cADzF,iBCFGmoE,GA7BW,SAACnmE,GACvB,IAAMu9B,EAAYn3B,YAAY6jB,IAM9B,OAJAxoB,qBAAU,WACFzB,EAAM8C,MAAQy6B,GAAav9B,EAAMuyB,SAASvyB,EAAMuyB,YACrD,CAACgL,EAAWv9B,IAGX,oCACI,kBAACukC,GAAA,EAAD,CAAOzhC,KAAM9C,EAAM8C,KAAM2hC,OAAQzkC,EAAMuyB,QAASiS,UAAQ,GACpD,kBAACD,GAAA,EAAMtR,OAAP,CAAcyR,aAAW,EAAC1mC,UAAU,cAChC,kBAACumC,GAAA,EAAMiB,MAAP,KACI,uDAGR,kBAACjB,GAAA,EAAMrrB,KAAP,KACI,kBAAC,GAAD,CAAOskB,gBAAiBx9B,EAAMw9B,gBAAiBX,YAAa78B,EAAMuyB,c,oBCwBvE6zC,GAzCsB,SAAC,GAAD,IAAGn8C,EAAH,EAAGA,SAAU+7C,EAAb,EAAaA,SAAUC,EAAvB,EAAuBA,YAAaI,EAApC,EAAoCA,eAApC,OACjC,kBAACjkC,GAAA,EAAD,KACMnY,EAWE,oCACI,kBAAC,IAAD,CACI3sB,GAAG,cACHU,UAAS,qDAAgDqoE,EAAiB,UAAY,WAErFvmE,aAAE,qBAEP,kBAACuyB,GAAA,EAAD,CACIpvB,KAAK,SACLxC,KAAK,KACLzC,UAAWqoE,EAAiB,UAAY,SACxCnmE,QAAQ,SACR2V,QAASmwD,GAERlmE,aAAE,mBAxBX,kBAACuyB,GAAA,EAAD,CACIpvB,KAAK,SACLxC,KAAK,KACLzC,UAAWqoE,EAAiB,UAAY,SACxCnmE,QAAQ,SACR2V,QAASowD,GAET,kBAACvoD,GAAA,EAAD,CAAM3S,KAAK,YAPf,IAO6BjL,aAAE,uBC0B5BwmE,OAtCf,YAA4D,IAAnCC,EAAkC,EAAlCA,QAASC,EAAyB,EAAzBA,YAAapnE,EAAY,EAAZA,UACrCoE,EAAWsD,cAuBjB,OACI,oCACI,uBAAG9I,UAAU,8BAA8BuoE,EAAQxtD,OACnD,wBAAI/a,UAAU,iBACTuoE,EAAQpoD,MAAM3b,KAAI,SAACikE,EAAM9qD,GACtB,OACI,wBAAInc,IAAKmc,EAAG3d,UAAU,QA3B1B,SAACjB,EAAM8R,GACnB,IAAImP,EAAOnP,IAAO,EAClB,IAAKmP,EAAM,OAAOjhB,EAClB,GAAI,YAAYsQ,KAAK2Q,GAAO,OAAO,kBAAC7gB,GAAA,EAAD,CAAGC,KAAM4gB,GAAOjhB,GAEnD,IACM2pE,EAAkB73D,EAAI2/C,MADR,QAGpB,OACI,kBAAC,IAAD,CAAMlxD,GAAI0gB,EAAMnI,QAAS,WACrBtS,aAAcC,EAAUpE,GACpBsnE,GAAmBA,EAAgB9jE,OAAS,GAC5Ce,aAAaH,EAAUkjE,EAAgB,IAE3CF,GAAY,KAEXzpE,GAWqC4pE,CAAQF,EAAK1pE,KAAM0pE,EAAK53D,YCV/D+3D,GArBc,SAAC,GAA+B,IAA7BzkE,EAA4B,EAA5BA,MAAO/E,EAAqB,EAArBA,KACnC,OADwD,EAAfkhB,SAGjC,kBAACnhB,GAAA,EAAD,CAAGC,KAAMA,EAAMY,UAAU,YACpBmE,GAKT,kBAAC,IAAD,CAAS7E,GAAIF,EAAM4gE,OAAK,EAAChgE,UAAU,WAAW6oE,gBAAgB,UACzD1kE,ICiJE2kE,GApJU,SAAC,GAAmD,IAAjD78C,EAAgD,EAAhDA,SAAU+7C,EAAsC,EAAtCA,SAAUC,EAA4B,EAA5BA,YAAac,EAAe,EAAfA,SACzD,EAA4C7lE,mBAASpD,IAAO,kBAA5D,oBAAOuoE,EAAP,KAAuBW,EAAvB,KACA,EAAgC9lE,oBAAS,GAAzC,oBAAO+lE,EAAP,KAAiBT,EAAjB,KACM5zD,EAAWC,eACXq0D,EAAmBr2C,mBACnBs2C,EAAYt2C,mBAGZu2C,EAAWhhE,YAAY1E,MACzB2lE,EAAY,CAAC,UACXC,EAAY,CAAC,YAAa,cAAe,UAAW,SAAU,YAAa,QAAS,cAiC1F,OA/BAF,EAAS5kE,KAAI,SAACnE,GACV,MAAqB,cAAjBA,EAAQuD,MAA6BylE,EAAUpxD,KAAK5X,EAAQuD,SAIpEylE,EAAUj0D,MAAK,SAAUC,EAAGC,GACxB,OAAOg0D,EAAU98C,QAAQnX,GAAKi0D,EAAU98C,QAAQlX,MAIpD4zD,EAAiBj2C,QAAUo1C,EAC3B5kE,qBAAU,WACN,IAAK3D,IAAO,iBAAkB,CAC1B,IAAMypE,EAAe,WACjB,IAAMzkE,EAAO0W,OAAOguD,QAAU,GAC1BN,EAAiBj2C,UAAYnuB,IAC7BokE,EAAiBj2C,QAAUnuB,EAC3BkkE,EAAkBlkE,KAI1B,OADA6T,SAAS2D,iBAAiB,SAAUitD,GAC7B,kBAAM5wD,SAAS4D,oBAAoB,SAAUgtD,OAEzD,IAGH9lE,qBAAU,WACN+kE,GAAY,GACZW,EAAUl2C,QAAQw2C,UACnB,CAAC70D,IAGA,kBAAC80D,GAAA,EAAD,CACIC,kBAAgB,EAChBC,OAAO,KACPrxD,GAAIzY,IAAO,gBACXkE,GAAG,kBACH9B,QAASpC,IAAO,gBAChB+pE,OAAO,MACPC,aAAYzB,EAAiBvoE,IAAO,gBAAkB,QACtDmpE,SAAUA,EACVr1C,IAAKu1C,GAEL,kBAACzsD,GAAA,EAAD,KACI,kBAAC,IAAD,CAASpd,GAAG,IAAI0gE,OAAK,GACjB,kBAAC0J,GAAA,EAAOK,MAAR,CAAc/pE,UAAU,WACpB,kBAAC+B,GAAA,EAAD,CACIG,QAASmmE,EAAiBvoE,IAAO,gBAAkB,QACnDqC,SAAUK,IAAOke,eACjBte,UAAWI,IAAOme,gBAClBte,OAAQvC,IAAO,0BAK3B,kBAAC4pE,GAAA,EAAO1kE,OAAR,CACI8vC,gBAAc,wBACd9wC,GAAG,aACH6T,QAAS,kBAAM2wD,GAAaS,KAE5B,gCAGJ,kBAACS,GAAA,EAAOt0C,SAAR,CAAiBpxB,GAAG,yBAChB,kBAACogC,GAAA,EAAD,CAAKpkC,UAAU,WACVqpE,EAAU7kE,KAAI,SAACgW,EAAMmD,GAAO,IAAD,EACxB,OACI,kBAACqsD,GAAA,EAAD,CAAaxoE,IAAKmc,EAAG5C,MAAOguD,EAASvuD,GAAMO,MAAO/a,UAAU,YACxD,kBAAC0c,GAAA,EAAD,CAAW1c,UAAU,6CACjB,kBAACyc,GAAA,EAAD,CAAK2Z,WAAS,EAACp2B,UAAU,SACrB,kBAACgc,GAAA,EAAD,CAAKhc,UAAU,sBACX,kBAACyc,GAAA,EAAD,KACKssD,EAASvuD,GAAMc,QAAQ9W,KAAI,SAACylE,EAAKtsD,GAC9B,OACI,kBAAC3B,GAAA,EAAD,CAAKxa,IAAKmc,EAAGhR,GAAI,GAAI0K,GAAI,EAAGF,GAAI,GAC3B8yD,EAAIzlE,KAAI,SAAC+jE,EAAS5qD,GAAV,OACL,kBAAC,GAAD,CACI4qD,QAASA,EACTC,YAAaA,EACbpnE,UAAWoZ,EACXhZ,IAAKmc,YAO7B,kBAAClB,GAAA,EAAD,CAAKzc,UAAU,WACX,kBAACgc,GAAA,EAAD,KACK+sD,EAASvuD,GAAM0vD,WACZ,kBAAC,IAAD,CAAM5qE,GAAE,kBAAakb,IACjB,kBAAC6Z,GAAA,EAAD,CACIr0B,UAAU,uBACVkC,QACImmE,EAAiB,YAAc,WAHvC,cAMgBU,EAASvuD,GAAMO,YAOlD,UAAAguD,EAASvuD,UAAT,eAAgBM,QAEb,kBAACkB,GAAA,EAAD,CAAK3E,GAAI,EAAGF,GAAI,EAAGnX,UAAU,4BACzB,kBAAC,IAAD,CAAMV,GAAE,kBAAakb,IACjB,yBACIvY,IAAK8mE,EAASvuD,GAAMM,MACpB9a,UAAU,gBACVsC,IAAKymE,EAASvuD,GAAMO,gBAUvDjb,IAAO,0BAA4B,kBAAC,GAAD,CAAeqE,MAAM,SAAS/E,KAAK,aAE3E,kBAAC,GAAD,CAA6B6sB,WAAU+7C,WAAUC,cAAeI,eAAgBA,QCxFrFpzC,OAjDf,WACI,IAAMzvB,EAAWsD,cACX8L,EAAWC,eACjB,EAAsC3R,oBAAS,GAA/C,oBAAOinE,EAAP,KAAoBC,EAApB,KACA,EAAgClnE,qBAAhC,oBAAO6lE,EAAP,KAAiBsB,EAAjB,KACA,EAA0CnnE,oBAAS,GAAnD,oBAAOonE,EAAP,KAAsBC,EAAtB,KACMhrC,EAAYn3B,YAAY6jB,IAExBu+C,EAAe,kBAAMrpD,GAAO3b,IAC5BilE,EAAsB,kBAAMF,GAAiB,IAC7CG,EAAW,eAAiB5qE,IAAO,mBAqBzC,OAnBA2D,qBAAU,WAEN,IAAMwN,EAAa,IAAIC,gBAYvB,OAXAjH,MAAMygE,EAAU,CAAEv5D,OAAQF,EAAWE,SAChChH,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GACH+hE,EAAY/hE,MAEf2K,OAAM,SAACkgB,GACJxxB,QAAQwxB,MAAM,UAAYA,EAAMhM,YAEnCjU,SAAQ,WACLk3D,GAAe,MAEhB,WACHn5D,EAAWG,WAEhB,CAACs5D,IAEGP,QAA4Bl/D,IAAb89D,EAClB,oCACI,kBAAC,GAAD,CAAW98C,SAAUsT,EAAWyoC,SAAUwC,EAAcvC,YAAawC,KAClE71D,EAASwB,SAAS9S,SAAS,cAC1B,kBAACqnE,GAAD,CACI1+C,SAAUsT,EACVyoC,SAAUwC,EACVvC,YAAawC,EACb1B,SAAUA,IAGlB,kBAAC,GAAD,CAAYjkE,KAAMwlE,EAAe/1C,QAnCb,kBAAMg2C,GAAiB,OAsC/C,sCCpDKl3D,GAAU,SAAChL,GAAD,OAAWA,EAAMuY,KAAKkD,OACtC,GAA0C/P,aAAiB0F,KAA3D,sBAAOmF,GAAP,MAAmBC,GAAnB,MCMM+rD,IDNN,MCMoB,SAACplE,EAAUiO,GAClCjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACRwJ,EAAaljB,GAAWvW,GACxBw5B,EAAYxuB,GAAQhL,GACpB8wC,EAAYt6B,GAASxW,GAEvB+K,cAAmB,EAAM0uB,EAAYD,EAAWsX,EAAW1lC,IAC3D9L,aAAW0wB,EAAG5e,IAAe7R,IAAKgZ,KAAM,CAAEd,SAAUhgB,IAAOggB,gBCd1D2D,GAAgB,SAACpb,GAAD,OAAWA,EAAMoe,OAAOhD,eAC9C,GAA0C1P,aAAiByP,GAA3D,sBAAO5E,GAAP,MAAmBC,GAAnB,MCCMgsD,IDDN,MCCe,SAACrlE,EAAUiO,GAC7BjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EDHW,SAAClL,GACtB,MAAuC,kBAAzBob,GAAcpb,IAAuBob,GAAcpb,GAASrB,KAAKoH,MCE1D08D,CAAUziE,GACrBiL,EAAYsL,GAAWvW,GACvBmL,EAAYqL,GAASxW,GAEvB+K,cAAmB,EAAME,EAAWC,EAAUC,EAAWC,IACzD9L,aAAW0wB,EAAG7U,EAAS5b,IAAKwa,UCqCzB2oD,GAtCK,SAAC/oE,GACjB,IAAMgpE,EAAa5iE,YAAYiL,IACzB43D,EAAgB7iE,YAAYwW,IAC5BssD,EAAc9iE,YAAYyW,IAC1BrZ,EAAWsD,cACjB,EAAgC5F,oBAAS,GAAzC,oBAAOiG,EAAP,KAAiBC,EAAjB,KAoBA,OAlBID,IACAC,GAAY,GHfG,SAAC5D,GACpBA,EAAS,CAAEP,KAAMuU,MGeb2xD,CAAQ3lE,IAGZ/B,qBAAU,WACNmnE,GAAYplE,GACZqlE,GAAOrlE,GAEPgW,OAAOc,iBAAiB,WAAW,SAAC8uD,GACjB,mBAAXA,EAAG5pE,KACHgE,GAAS,SAAC6yB,GACN1wB,aAAW0wB,EAAG5e,IAAe7R,IAAKgZ,KAAM,CAAEd,SAAUhgB,IAAOggB,mBAIxE,CAACta,IAGA,kBAAC,GAAD,CACIoZ,WAAYqsD,EACZnqC,iBAAkBoqC,EAClBnqC,oBAAqBj/B,aAAE,qBACvBk/B,QAAS,kBAAM4pC,GAAYplE,GAAU,IACrCk7B,cAAc,GAEbsqC,GAAchpE,EAAMoK,WCMlBi/D,GAnCc,SAACrpE,GAC1B,IAAMwD,EAAWsD,cACTjB,EAAWgN,eAAXhN,OAER,GAAI8Q,SAAS/D,SAAS/M,OAAQ,CAC1B,IAAMu3B,EAAQ,IAAI5gB,gBAAgB3W,GASlC,GANIu3B,EAAMC,IAAI,YAAY95B,aAAcC,EAAU45B,EAAMM,IAAI,YACxDN,EAAMC,IAAI,WAAW15B,aAAaH,EAAU45B,EAAMM,IAAI,WACtDN,EAAMC,IAAI,WAAWp5B,aAAeT,EAAU+F,SAAS6zB,EAAMM,IAAI,YACjEN,EAAMC,IAAI,SAAWnJ,GAAckJ,EAAMM,IAAI,UAC7C55B,aAAWN,EAAU2J,aAAeiwB,EAAMM,IAAI,UAE9CN,EAAMC,IAAI,UAAW,CACrB,IAAMlzB,EAASZ,SAAS6zB,EAAMM,IAAI,WAC7B+b,MAAMtvC,IAAShG,aAAmBX,EAAU2G,GAErD,GAAIizB,EAAMC,IAAI,YAAa,CACvB,IAAMjzB,EAAWb,SAAS6zB,EAAMM,IAAI,aAC/B+b,MAAMrvC,IAAW9F,aAAqBd,EAAU4G,GAEzD,GAAIgzB,EAAMC,IAAI,WAAY,CACtB,IAAM7xB,EAAUjC,SAAS6zB,EAAMM,IAAI,YAC9B+b,MAAMjuC,IAAUhH,aAAoBhB,EAAUgI,GAEvD,GAAI4xB,EAAMC,IAAI,QAAS,CACnB,IAAM5xB,EAAO2P,aAASgiB,EAAMM,IAAI,QAAQ1mB,eACpB,mBAATvL,GAAoB/G,aAAkBlB,EAAUiI,IAInE,OAAOzL,EAAMoK,UC7CF,SAASk/D,KACpB,IAAQl1D,EAAavB,eAAbuB,SAoBR,OAlBA3S,qBAAU,WACN,IAAM8nE,EAAoB,CAAC,mBAAoB,yBAE/C,GAAIzrE,IAAO,eACP,IAUI8vD,EAAeC,aAVC,WACXr0C,OAAOs0C,MAIRnuD,QAAQouD,KAAK,mBACbtwC,cAAcmwC,GACb2b,EAAkBjoE,SAAS8S,GAAyCzU,QAAQouD,KAAK,iBAA1Cv0C,OAAOs0C,KAAKE,SAASK,OAL7D1uD,QAAQouD,KAAK,4CAQuB,MAEjD,CAAC35C,IAEG,KCgDIo1D,OAlDf,WACI,IAAM3kC,EAAS1X,gBAAK,kBAAM,iCAe1B,OAbA1rB,qBAAU,WACN,IAAMgoE,EAAO,IAAIjtD,gBAAgBhD,OAAO5G,SAAS/M,QAAQ63B,IAAI,OAChD,OAAT+rC,GAAiBA,EAAK7mE,OAAS,GAC/BqF,MAAM,GAAD,OAAInK,IAAO,WAAX,yBAAsC2rE,IACtCthE,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAAC7B,GAAD,OAAU3G,QAAQouD,KAAKznD,QAEtC,IAEH7E,qBAAU,WACNkjC,IAAQ+kC,WAAW5rE,IAAO,gBAC3B,IAGC,kBAAC,IAAD,CAAU4uB,MAAOA,IACb,yBAAK1uB,UAAU,OACX,kBAAC,IAAD,KACI,+BAAQF,IAAO,qBACf,0BAAMW,KAAK,cAAckjB,QAAS7jB,IAAO,sBACzC,0BAAMW,KAAK,cAAckjB,QAAQ,YAChC7jB,IAAO,gBACJ,4BACI6rE,MAAM,QACN1pE,IAAG,gCAA2BnC,IAAO,mBAAlC,OACHmF,KAAK,qBAIjB,kBAAC,IAAD,KACI,kBAACqmE,GAAD,MACA,kBAAC,GAAD,MACA,kBAACM,GAAD,KACI,kBAAC,GAAD,KACI,8BACI,kBAAC,GAAD,OAEJ,kBAAC,WAAD,CAAUn8C,SAAU,+BAChB,kBAACoX,EAAD,a,wCCHjBglC,G,oDAvDX,WAAY7pE,GAAQ,IAAD,+BACf,cAAMA,IACDqG,MAAQ,CAAEwW,UAAU,GAFV,E,iDAenB,WACIpI,YAAW,WACPgxD,eAAeE,WAAW,SAC1BnsD,OAAO5G,SAAS+pB,WACjB,O,oBAGP,WACI,OAAImtC,KAAKzjE,MAAMwW,SAGP,kBAACnC,GAAA,EAAD,KACI,yBAAK1c,UAAU,2DACX,yBAAKA,UAAU,eACX,2BACI,kBAAC+B,GAAA,EAAD,CAAMM,OAAQ,MAElB,uBAAGrC,UAAU,WAAb,kDAEA,uBAAGA,UAAU,QAAb,6EAGA,kBAACq0B,GAAA,EAAD,CAAQxc,QAASi0D,KAAKC,cAAtB,yBAEA,uBAAG/rE,UAAU,QAAb,+CACA,2BACI,uBAAGZ,KAAK,mBAAR,kBACA,6BACA,uBAAGA,KAAK,4CAAR,yCAQjB0sE,KAAK9pE,MAAMoK,Y,uCA9CtB,WAEI,MAAO,CAAEyS,UAAU,O,GARCipC,IAAMkkB,WCSd15B,QACa,cAA7B92B,OAAO5G,SAASq3D,UAEiB,UAA7BzwD,OAAO5G,SAASq3D,UAEhBzwD,OAAO5G,SAASq3D,SAASzb,MAAM,2D,IrHNf1wC,G,UsHZT,GACP,CACAosD,OAAQ,gCACRC,OAAQ,+BAHD,GAKC,CACRD,OAAQ,0BACRl4B,IAAK,wBAPE,GASF,CACLk4B,OAAQ,sBACRE,aAAc,4BACdC,cAAe,6BACfC,iBAAkB,yBCbpBC,GAAY,CACd5sD,MAAO,WAOI6sD,GAJC,WAAwB,IAAvBnkE,EAAsB,uDAAdkkE,GACrB,OAAOlkE,GCe6B,qBAA7BokE,IAAW,gBxHRE3sD,GwHQqC2sD,IAAW,cxHPpEzO,KAAW0N,WAAW,CAClBgB,MAAO5sD,MwHQf,IACM4O,GAAQC,sBAAY69C,IAE1BG,KAAQC,UAAU,CACdC,KAAM,CACFC,iBAAiB,EACjBlkE,OAAQ9I,GAAeosE,OACvBa,WAAYjtE,GAAessE,aAC3BY,eAAgBltE,GAAewsE,iBAC/BW,oBAAqBntE,GAAeusE,eAExCa,QAAS,CACLtkE,OAAQ9I,GAAUosE,OAClBiB,OAAQrtE,GAAUqsE,OAClBa,eAAgBltE,GAAewsE,kBAEnCc,IAAK,CACDC,UAAW,CACP,CACI5sE,KAAM,QACN6sE,SAAUxtE,GAAkBk0C,IAC5BprC,OAAQ9I,GAAkBosE,YAM1CqB,IAAS/T,QACL7gD,SAAS43C,OAAO/jC,QAAQ,oBAKpB,kBAAC,IAAMghD,WAAP,KACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAU9+C,MAAOA,IACb,kBAAC,GAAD,KACI,kBAAC,GAAD,WAMpB/V,SAAS80D,eAAe,SH4DpB,kBAAmBlqE,WACnBA,UAAUmqE,cAAc5pD,MACnB3Z,MAAK,SAACwjE,GACHA,EAAaC,gBAEhB36D,OAAM,SAACkgB,GACJxxB,QAAQwxB,MAAMA,EAAMhM,a,gCInIpC,oBAQehoB,IANE,SAAC,GAAD,IAAGC,EAAH,EAAGA,KAAMgN,EAAT,EAASA,SAAUpM,EAAnB,EAAmBA,UAAnB,IAA8B+a,aAA9B,MAAsC,GAAtC,EAA0ClD,EAA1C,EAA0CA,QAA1C,OACb,uBAAGzY,KAAMA,EAAMoY,OAAO,SAAS4b,IAAI,sBAAsBpzB,UAAWA,EAAW+a,MAAOA,EAAOlD,QAASA,GACjGzL,K,gCCJT,wEAMIyhE,EACAC,EAPJ,+BASa31D,EAAmB,WAC5BqD,OAAOuyD,aAAaF,GAChBC,GAAuBA,EAAsBn7D,UAGxC4mC,EAAa,SAAC/zC,EAAUiO,GACjCjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACRyf,GAAYj5B,YAAuBzW,IAAU0W,YAAY1W,GACzD+wC,EAAcx6B,YAAWvW,GACzB8wC,EAAYt6B,YAASxW,GACrBixC,EAAar6B,YAAU5W,GAOzB+K,YAAmB2kC,EAAUqB,GAAa,EAAOD,EAAW1lC,KAE5D+H,OAAOuyD,aAAaF,GACpBA,EAAkBp3D,YARL,WACb0B,IACA21D,EAAwBnmE,YAAW0wB,EAAG5wB,IAAaG,IAAK0Z,iBAMjBg4B,EAAa,IAAO,W,06XC9BvE,sCAIA,SAASjB,EAAYr2C,GAmBjB,OACI,kBAAC,IAAD,KACI,kBAAC,IAAW23B,QAAZ,CAAoB9hB,QAf5B,WACQ7V,EAAMuC,UAAYvC,EAAMyC,MAAQ,GAAKzC,EAAM6K,KAC3C7K,EAAMuC,SAASvC,EAAMyC,MAAQ,IAaKzE,UAAU,iBAAiB0E,SAAU1C,EAAMyC,OAASzC,EAAM6K,KACxF,kBAAC,IAAWmnB,KAAZ,KACI,uCAIR,kBAAC,IAAD,CAAavvB,MAAOzC,EAAMyC,MAAOT,GAAIhC,EAAMgC,GAAIO,SAhBvD,SAAgB+S,GACZ,IAAM7S,EAAQ8G,SAAS+L,EAAME,OAAO/S,OAChCg3C,MAAMh3C,IACNzC,EAAMuC,UAAYE,GAASzC,EAAM6K,KAAOpI,GAASzC,EAAM8K,KACvD9K,EAAMuC,SAASE,IAYkDzE,UAAU,gBAE3E,kBAAC,IAAWguE,OAAZ,CAAmBn2D,QA5B3B,WACQ7V,EAAMuC,UAAYvC,EAAMyC,MAAQ,GAAKzC,EAAM8K,KAC3C9K,EAAMuC,SAASvC,EAAMyC,MAAQ,IA0BIzE,UAAU,iBAAiB0E,SAAU1C,EAAMyC,OAASzC,EAAM8K,KACvF,kBAAC,IAAWknB,KAAZ,KACI,wCAOpBqkB,EAAY91C,aAAe,CACvBkC,MAAO,EACPT,GAAI,UACJ6I,IAAK,EACLC,IAAK,IAWMurC,O,kICzDf,kCAAO,IAAMvC,EAAiB,SAACpyC,EAAUtC,GACrC,OAAOsC,EAASC,MAAK,SAACtD,GAAD,OAAaA,EAAQuD,OAASxC,O,gCCDvD,uGAYaijE,EAAqB,SAAC7+D,EAAUpE,EAAWoT,GAA+B,IAAnBf,EAAkB,wDAClFjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAWgB,YAA2BlM,EAAOjH,EAAWoT,GACxDlB,EAAYe,YAA4BhM,EAAD,UAAWjH,EAAX,YAAwBoT,IAC/DhB,EAAYc,YAA4BjM,EAAD,UAAWjH,EAAX,YAAwBoT,IAErE,GAAIpB,aAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,YACH0wB,EACAjkB,IACAxM,IAAKW,QACL,CAAElI,QAASe,EAAWkoB,KAAM9U,GAJf,UAKVpT,EALU,YAKGoT,QAMnBwC,EAAa,SAACxR,EAAUpE,GAA8B,IAAnBqS,EAAkB,wDAC9DjO,GAAS,SAAC6yB,EAAGC,GACT,IAAMjwB,EAAQiwB,IACR/kB,EAAW3F,YAAmBvF,EAAOjH,GACrCkS,EAAY5F,YAAoBrF,EAAOjH,GACvCoS,EAAY3F,YAAoBxF,EAAOjH,GAE7C,GAAIgS,aAAmB,EAAME,EAAWC,EAAUC,EAAWC,GACzD,OAAO9L,YAAW0wB,EAAGlkB,IAAavM,IAAKW,QAAS,CAAElI,QAASe,GAAaA,Q,gCCvCpF,0GAEawc,EAAYrE,sBACZsE,EAAkBtE,4BAClBuE,EAAkBvE,6B,gCCJ/B,sCAEa2E,EAAe3E,+B","file":"static/js/main.9c30a8b6.chunk.js","sourcesContent":["import React from 'react';\nimport { config } from '../config';\nimport { Link } from 'react-router-dom';\nimport A from './components/A';\nimport { parkMatcher, shouldItPluralize, forceSingular, accommodationType } from './utils/utils';\n\n// Please keep entries in alphabetical key order - thanks!\nexport const text = {\n 'booking.booking.confirmTerms': (btnText, termsAndConditionsUrl, privacyPolicyUrl) => <>By clicking on {btnText}, you agree you have read and accept our Terms and Conditions and Privacy Policy.,\n 'booking.booking.continueToStepX': (x) => `Continue to step ${x}`,\n 'booking.booking.errorLoadingData': 'There was an error while loading the booking data. Please try again.',\n 'booking.booking.failed': 'Booking failed',\n 'booking.booking.loading': 'Loading booking data, please wait...',\n 'booking.booking.noBookingInProgress': () => <>You do not currently have a booking in progress. Please use our search form to find and book your perfect holiday.,\n 'booking.booking.stepXofY': (x, y) => `Step ${x} of ${y}`,\n 'booking.booking.unableToBookHoliday': (prevPath) => <>We are sorry but we were unable to book your holiday. Please return to the park page and try again.,\n 'booking.breakdown.accommodationPrice': 'Accommodation price',\n 'booking.breakdown.amountPaid': 'Amount paid:',\n 'booking.breakdown.amountToPayToday': 'Amount to pay today:',\n 'booking.breakdown.currentPriceBreakdown': 'Current Price Breakdown',\n 'booking.breakdown.outstandingAmount': (dateStr, amount) => `Outstanding amount to pay before ${dateStr}: £${amount}`,\n 'booking.breakdown.priceBreakdown': 'Price Breakdown',\n 'booking.breakdown.introText': 'No surprises! Here is a breakdown:',\n 'booking.breakdown.totalCost': 'Total cost:',\n 'booking.confirmation.bookAttractions': 'Find and Book Attractions',\n 'booking.confirmation.bookAgain': 'Book Another Holiday',\n 'booking.confirmation.bookAnotherBreak': 'Book another break',\n 'booking.confirmation.bookAnotherBreakText': 'We have lots of great holidays added every week, so if you fancy searching use the link below.',\n 'booking.confirmation.holidayBooked': 'Your Holiday Booking Has Been Confirmed!',\n 'booking.confirmation.youAreGoingTo': (operatorName, parkName) => <>Congratulations, you’re going on holiday to {operatorName} - {parkName},\n 'booking.confirmation.planAhead': 'Now it’s time to plan ahead!',\n 'booking.confirmation.planAheadText': 'We have partnered with attraction booking site Viator to offer you some exciting attractions to help make your holiday one to remember. From magical theme parks to exciting walking tours and everything in between, Breakfree and Viator have you covered. Alternatively, you can book another break or check the status of all holidays you have booked with Breakfree and update your account details.',\n 'booking.confirmation.myAccount': `My ${config['global.brandName']}`,\n 'booking.confirmation.myAccountText': `In your My ${config['global.brandName']} account you can check the status of your booking and update your details.`,\n 'booking.confirmation.noBookingConfirmation': 'There is no booking confirmation data to show at this time.',\n 'booking.confirmation.paymentReceived': 'Your payment has been received',\n 'booking.confirmation.thankYouFor': (isNewBooking) => `Thank you for ${isNewBooking ? 'booking' : 'your payment'}`,\n 'booking.confirmation.visitMyAccount': 'Visit My Account',\n 'booking.confirmation.yourBookingReferenceIs': 'Your holiday booking reference is:',\n 'booking.details.errorLoading': 'There was an error while loading your details. Please try again.',\n 'booking.details.errorSaving': 'There was an error while saving your details. Please try again.',\n 'booking.extras.errorLoading': 'Good news, there are no extra charges for this holiday, so you can click the button below and proceed to completing your booking now!',\n 'booking.extras.errorSaving': 'There was an error while saving your selected extras. Please try again.',\n 'booking.party.bookYourHoliday': 'Book your holiday',\n 'booking.party.errorLoading': 'There was an error while loading your party details. Please try again.',\n 'booking.party.errorSaving': 'There was an error while saving your party details. Please try again.',\n 'booking.party.yourPartyDetails': 'Your Party Details',\n 'booking.payment.AdditionalPaymentSecurity': 'Additional payment security',\n 'booking.payment.cardNumber': 'Card number',\n 'booking.payment.cardSecurityNumber': 'Card security number',\n 'booking.payment.creditOrDebitCard': 'Credit or Debit Card',\n 'booking.payment.error3DSecure': 'There was an error during 3D Secure validation. Please try again.',\n 'booking.payment.errorAccessingServer': 'There was an error while accessing the server. Please use the button below to retry (you will not be charged twice).',\n 'booking.payment.errorLoading': 'There was an error while loading required payment information for your booking. Please try again.',\n 'booking.payment.errorProcessingPayment': 'There was an error processing your previous payment. Please try again. No payment has been taken from you at this time.',\n 'booking.payment.errorSubmittingForm': 'There was an error while submitting the form. Please try again.',\n 'booking.payment.expirationDate': 'Expiration date',\n 'booking.payment.initialisingCardForm': 'Initialising card payment form, please wait...',\n 'booking.payment.initialisingPaypal': 'Initialising PayPal, please wait...',\n 'booking.payment.loading': 'Loading payment form data, please wait...',\n 'booking.payment.makeYourPayment': 'Make your payment',\n 'booking.payment.payit': 'PayIt',\n 'booking.payment.paypal': 'PayPal',\n 'booking.payment.processing': 'Processing payment, please wait...',\n 'booking.summary.confirmationOf': (isNewBooking) => `Confirmation of your ${isNewBooking ? 'holiday booking' : 'payment'} has been emailed to you.`,\n 'booking.summary.checkInAt': (dateStr) => <>Check in: {dateStr},\n 'booking.summary.checkOutAt': (dateStr) => <>Check out: {dateStr},\n 'booking.summary.printBookingRef': 'Print booking reference',\n 'booking.summary.xNightStay': (duration) => `${duration} night stay`,\n 'browse.operatorRegions.title': (channelName, operatorName) => `${channelName} from ${operatorName}`,\n 'browse.operators.errorLoading': 'There was an error while loading the operators list. Please try again.',\n 'browse.regions.errorLoading': 'There was an error while loading the regions list. Please try again.',\n 'browse.regions.title': (isPetFriendly, channelName) => `${isPetFriendly ? `Dog Friendly ${channelName}` : `Browse ${channelName} by Region`}`,\n 'browse.parks.loadingParks': 'Loading, please wait...',\n 'browse.parks.title': (regionName, channel) => `Browse ${regionName} by ${accommodationType(channel)}`,\n 'buttons.back': 'Back',\n 'buttons.book': (price) => `Book from £${price}`,\n 'buttons.continue': 'Continue',\n 'buttons.createAnAccount': 'Create an Account',\n 'buttons.done': 'Done',\n 'buttons.login': 'Login',\n 'buttons.map': 'Map',\n 'buttons.readMore': 'Read more',\n 'buttons.register': 'Register',\n 'buttons.resetPassword': 'Reset password',\n 'buttons.retry': 'Retry',\n 'buttons.submit': 'Submit',\n 'buttons.update': 'Update',\n 'buttons.viewX': (x) => `View ${x}`,\n 'dotw.allPricesBasedUpon': 'All prices are based upon a party of two adults and two children. Please use the search box above if you wish to change your party size and obtain accurate prices for your requirements.',\n 'dotw.dealOfTheWeek': 'Deal of the Week',\n 'dotw.pageTitle': `Deal of the week - ${config['global.brandName']} Holidays`,\n 'feefo.logo': 'Feefo logo',\n 'feefo.ourCustomerFeefoRating': 'Our customer Feefo rating',\n 'footer.cookieConsent.text': 'Our website uses cookies to give you the best experience. By using our website you agree with our use of cookies.',\n 'footer.nav.companyName': `${config['global.brandName']} Holidays`,\n 'footer.nav.findAHoliday': 'Find a Holiday',\n 'footer.nav.holidayType': 'Holiday Type',\n 'footer.nav.information': 'Information',\n 'footer.nav.tagline': `${config['global.brandName']} Holidays are registered in England No. 05753643 | Copyright © ${config['global.brandName']}. All rights reserved.`,\n 'footer.newsletter.apply': 'apply',\n 'footer.newsletter.emailAddress': 'Email address',\n 'footer.newsletter.firstName': 'First Name',\n 'footer.newsletter.invalidFirstName': 'Please add your first name.',\n 'footer.newsletter.invalidEmail': 'Please choose a valid email address.',\n 'footer.newsletter.subscribe': 'Subscribe',\n 'footer.newsletter.success': 'Thank you for subscribing! You will now receive the latest holiday offers straight to your inbox',\n 'footer.newsletter.termsAndConditions': 'Terms & conditions',\n 'footer.newsletter.title': 'Sign up to our newsletter for all our latest and exclusive holiday offers delivered straight to your inbox.',\n 'footer.reviews.averageCustomerRating': 'Average Customer Rating:',\n 'footer.reviews.bookWithConfidence': 'Book with Confidence',\n 'footer.reviews.connectWithUs': 'Connect with Us',\n 'footer.reviews.independentServiceRating': 'Independent Service Rating Based on 236,874 verified reviews.',\n 'footer.reviews.readAllReviews': 'Read all reviews',\n 'footer.reviews.recentComments': 'Some recent comments from our customers',\n 'footer.trust.greatCustomerService': 'Great Customer Service',\n 'footer.trust.greatCustomerServiceText': 'Thousands of customer reviews independently collected by Feefo.',\n 'footer.trust.securePaymentOptions': 'Secure Payment Options',\n 'footer.trust.securePaymentOptionsText': 'We partner with trusted brands to ensure our customers\\' security.',\n 'footer.trust.title': `Breakfree - A Name You Can Trust`,\n 'footer.trust.title2': 'Over 250,000 satisfied customers every year...',\n 'footer.trust.whyChooseUs': 'Why choose Breakfree?',\n 'footer.trust.whyChooseUsText': 'Backed by our Customer Charter and Price Promise',\n 'forms.address.address': 'Address',\n 'forms.address.blankAddress': 'Please enter your address',\n 'forms.address.blankCounty': 'Please enter your county',\n 'forms.address.blankTown': 'Please enter your town',\n 'forms.address.country': 'Country',\n 'forms.address.county': 'County',\n 'forms.user.invalidPostcode': 'Please enter a valid postcode',\n 'forms.address.invalidPostcode': 'Please enter a valid postcode',\n 'forms.address.postcode': 'Postcode',\n 'forms.address.selectCountry': 'Select country',\n 'forms.address.town': 'Town',\n 'forms.booking.blankDiscountCode': 'Please enter discount code',\n 'forms.cardPayment.bookingSafeSecure': 'Your booking is secure and safe. Please fill in all fields.',\n 'forms.cardPayment.cardNumber': 'Card Number',\n 'forms.cardPayment.day': 'Day',\n 'forms.cardPayment.expiryDate': 'Expiry Date',\n 'forms.cardPayment.expiryDateDay': 'Expiry Date (day)',\n 'forms.cardPayment.expiryDateMonth': 'Expiry Date (month)',\n 'forms.cardPayment.expiryMonth': 'Expiry month',\n 'forms.cardPayment.month': 'Month',\n 'forms.cardPayment.nameOnCard': 'Name on Card',\n 'forms.cardPayment.securityCode': 'Security Code (CV2)',\n 'forms.changePassword.blankPassword': 'Please enter a password',\n 'forms.changePassword.blankResetCode': 'Please enter the reset code that was sent to you',\n 'forms.changePassword.confirmNewPassword': 'Confirm new password',\n 'forms.changePassword.confirmPassword': 'Please confirm your password',\n 'forms.changePassword.invalidResetCode': 'Invalid reset code',\n 'forms.changePassword.newPassword': 'New password',\n 'forms.changePassword.passwordMismatch': 'Passwords do not match',\n 'forms.changePassword.resetCode': 'Reset code',\n 'forms.contactPrefs.title': 'Your Contact Preferences',\n 'forms.contactPrefs.emailNewspaperOffers': 'If you booked via a newspaper promotion, would you like to receive news and offers by email from your participating newspaper? (You can unsubscribe at any time).',\n 'forms.contactPrefs.offers': 'Please tick the boxes if you are happy for Breakfree Holidays to contact you with the latest holiday offers by:',\n 'forms.contactPrefs.emailOpt': 'Email',\n 'forms.contactPrefs.smsOpt': 'Phone',\n 'forms.contactPrefs.postOpt': 'Post',\n 'forms.contactPrefs.stayUpdated': 'Stay updated',\n 'forms.forms.no': 'No',\n 'forms.forms.noValueSelected': 'Please select a value',\n 'forms.forms.yes': 'Yes',\n 'forms.extras.introText': 'Make sure your holiday is perfect, add the extras you need:',\n 'forms.login.blankPassword': 'Please enter your password',\n 'forms.login.forgotYourPassword': 'Forgot your password?',\n 'forms.login.invalidPassword': 'Please enter a valid password',\n 'forms.login.notAMember': 'No, I\\'m not a member',\n 'forms.party.adults': 'Adults (18+)',\n 'forms.party.age': 'Age',\n 'forms.party.areYouGoing': 'Are you going on this holiday?',\n 'forms.party.children': 'Children (5-17)',\n 'forms.party.checkPartySizeDetails': 'Please check your party size details are correct to get the best search results',\n 'forms.party.checkYourPartySize': 'Check your party size',\n 'forms.party.dob': 'Date of birth',\n 'forms.party.infants': 'Under 5s',\n 'forms.party.initial': 'Initial',\n 'forms.party.noIAmOnlyMakingTheBooking': 'No, I am only making the booking',\n 'forms.party.pleaseFillInDetails': 'Please fill in the details of your holiday party below.',\n 'forms.party.surname': 'Surname',\n 'forms.party.title': 'Title',\n 'forms.paymentOptions.depositPayment': (amount) => `Deposit Payment: £${amount}`,\n 'forms.paymentOptions.depositUnavailable': 'Paying a deposit is not available for this holiday. You must pay in full.',\n 'forms.paymentOptions.fullPayment': (amount) => `Full Payment: £${amount}`,\n 'forms.paymentOptions.introText': 'Pay in full or put down a deposit to secure your booking',\n 'forms.paymentOptions.outstandingAmountToPay': (dateStr, amount) => `Outstanding amount to pay before ${dateStr}: £${amount}`,\n 'forms.paypal.introText': 'Please use the button below to complete your booking.',\n 'forms.paypalCard.cardNumber': 'Card Number',\n 'forms.paypalCard.confirmPaymentOf': (amount) => `Confirm payment of £${amount}`,\n 'forms.paypalCard.differentBillingAddress': 'My billing address is different from my home address',\n 'forms.paypalCard.expiryDate': 'Expiration date',\n 'forms.paypalCard.nameOnCard': 'Name on Card',\n 'forms.paypalCard.introText': 'Your booking is secure and safe. Please fill in all fields.',\n 'forms.paypalCard.invalidAddress': 'Please enter your address',\n 'forms.paypalCard.invalidCardName': 'Please enter the name on the front of your card',\n 'forms.paypalCard.invalidCardNumber': 'Please enter a valid card number',\n 'forms.paypalCard.invalidCountry': 'Please select a value',\n 'forms.paypalCard.invalidCounty': 'Please enter your county',\n 'forms.paypalCard.invalidExpiryDate': 'Please enter a valid expiration date',\n 'forms.paypalCard.invalidPostcode': 'Please enter a valid postcode',\n 'forms.paypalCard.invalidSecurityNumber': 'Please enter a valid security number',\n 'forms.paypalCard.invalidTown': 'Please enter your town',\n 'forms.paypalCard.processing': 'Processing, please wait...',\n 'forms.paypalCard.securityCode': 'Card security number',\n 'forms.resetPassword.introText': 'Enter the email address associated with your account to receive a password reset email.',\n 'forms.resetPassword.resetYourPassword': 'Reset Your Password',\n 'forms.resetPassword.success': (isLoggedIn) => `Your request was received successfully. ${!isLoggedIn ? 'If your email address exists in our system, you\\'ll' : 'You will'} receive an email with the link to reset your password. Please be sure to check your spam or junk folders.`,\n 'forms.user.blankDob': 'Please enter your date of birth',\n 'forms.user.blankEmail': 'Please enter your email address',\n 'forms.user.blankFirstName': 'Please enter your forename',\n 'forms.user.blankPassword': 'Please enter a password',\n 'forms.user.blankSurname': 'Please enter your surname',\n 'forms.user.day': 'Day',\n 'forms.user.dob': 'Date of Birth',\n 'forms.user.dobDay': 'Day of Birth',\n 'forms.user.dobMonth': 'Month of Birth',\n 'forms.user.dobYear': 'Year of Birth',\n 'forms.user.emailAddress': 'Email address',\n 'forms.user.firstName': 'Forename',\n 'forms.user.invalidEmail': 'Please enter a valid email address',\n 'forms.user.invalidPassword': 'Passwords must be at least 8 characters, must contain upper and lower case letters, numbers and any of the following special characters ^$*.[]{}()?-\"!@#%&/,><\\':;|_~`',\n 'forms.user.invalidTelephone': 'Please enter a valid contact telephone number',\n 'forms.user.month': 'Month',\n 'forms.user.mustBeOver18': 'You must be over 18 years of age',\n 'forms.user.password': 'Password',\n 'forms.user.surname': 'Surname',\n 'forms.user.telephone': 'Contact Telephone Number',\n 'forms.user.title': 'Title',\n 'forms.user.year': 'Year',\n 'global.page.defaultMetaDesc': 'Great deals on a huge range of holiday parks, lodges, boating holiday and more. Book online today for exclusive offers!',\n 'global.errorLoading': 'There was an error while loading. Please try again.',\n 'global.errorSaving': 'There was an error while saving. Please try again.',\n 'global.loading': 'Loading...',\n 'global.pleaseWait': 'Please wait...',\n 'global.socialMedia.facebook': 'Facebook',\n 'global.socialMedia.instagram': 'Instagram',\n 'global.socialMedia.twitter': 'Twitter',\n 'global.socialMedia.youtube': 'Youtube',\n 'header.blog': `${config['global.brandName']} Blog`,\n 'header.cottages': 'Cottages',\n 'header.ferries': 'Ferries',\n 'header.hotels': 'Hotels',\n 'header.inspiration': 'Inspiration',\n 'header.cs.tel': '01234 123456',\n 'header.cs.hours': 'Mon-Sat 9am - 5pm, Sun 10am - 4pm',\n 'header.login': 'Login',\n 'header.loginSignUp': 'Login/Register',\n 'header.logout': 'Logout',\n 'header.myAccount': 'My Account',\n 'header.offers': 'Offers',\n 'header.signUp': 'My Account',\n 'header.ukAttractions': 'UK Attractions',\n 'home.page.title': 'Caravan Holidays | Cheap Holiday Park Breaks',\n 'init.errorLoading': 'We are currently experiencing technical difficulties. We are working hard to resolve them. Please check back later',\n 'myAccount.bookings.checkIn': 'Check in',\n 'myAccount.bookings.checkOut': 'Check Out',\n 'myAccount.bookings.holidayBookingRef': 'Holiday Booking Ref:',\n 'myAccount.bookings.nights': 'Nights',\n 'myAccount.bookings.noBookings.title': 'We couldn\\'t find any bookings for you.',\n 'myAccount.bookings.noBookings.text': () => <>Check out our latest deals now by viewing our offers page.,\n 'myAccount.bookings.outstandingAmount': 'Outstanding Amount',\n 'myAccount.bookings.paid': 'Paid.',\n 'myAccount.bookings.payHolidayBalance': 'Pay Holiday Balance',\n 'myAccount.page.title': 'My Account',\n 'myAccount.page.subtitle': (name) => `Welcome back, ${name}!`,\n 'myAccount.preferences.title': 'Preferences Centre',\n 'myAccount.preferences.updateSuccess': 'Your preferences have been updated successfully.',\n 'myAccount.preferences.updateFail': 'There was an error while updating your preferences. Please try again.',\n 'myAccount.menu.details': 'Your Details',\n 'myAccount.menu.prefs': 'Preferences Centre',\n 'myAccount.menu.changePassword': 'Change Password',\n 'myAccount.menu.currentBookings': 'Current Bookings',\n 'myAccount.menu.pastBookings': 'Past Bookings',\n 'myAccount.password.title': 'Change your password',\n 'myAccount.password.text': 'Use the form below to receive a password reset email.',\n 'myAccount.yourDetails.title': 'Your Details',\n 'myAccount.yourDetails.text': () => <>You can update your details here. All fields are required.,\n 'operators.document.title': 'Browse Holidays by Brand',\n 'operators.page.title': 'Browse Holidays by Brand',\n 'park.accommodation.accommodation': 'Accommodation',\n 'park.accommodation.description': 'Description',\n 'park.accommodation.disabledAccess': 'Disabled Access',\n 'park.accommodation.features': 'Features',\n 'park.accommodation.noResults': 'There are no results available for your chosen date. Please choose an alternative date from the list above.',\n 'park.accommodation.onlyXLeft': (amount) => `ONLY ${amount} LEFT`,\n 'park.accommodation.saveX': (amount) => `SAVE £${amount}`,\n 'park.accommodation.wasX': (amount) => `WAS £${amount}`,\n 'park.accommodation.sleeps': 'Sleeps',\n 'park.accommodation.sleepsX': (amount) => `Sleeps ${amount}`,\n 'park.accommodation.summary': (count, dateStr, duration) => `${count} ${shouldItPluralize('Holiday', count)} Found - ${dateStr} for ${duration} nights`,\n 'park.dates.alternativeDates': 'Alternative dates available:',\n 'park.dates.dateType': (isPreferred) => `${isPreferred ? 'Preferred' : 'Alternative'} date`,\n 'park.dates.fromX': (amount) => `From £${amount}`,\n 'park.dates.selectedDate': 'Selected date',\n 'park.dates.yourPreferredDate': 'Your preferred date:',\n 'park.errorLoading': (isBoat) => `the ${isBoat ? 'boating' : 'park'} information`,\n 'park.info.accommodation': 'Accommodation',\n 'park.info.facilities': 'Facilities',\n 'park.info.importantInfo': 'Important Info',\n 'park.info.loadingAccommodation': 'Loading accommodation results, please wait...',\n 'park.info.loadingReviews': 'Loading reviews, please wait...',\n 'park.info.metaDescription': (parkName, regionName) => `Explore ${parkName} Park for yourself. Enjoy a great value holiday in one of the best resorts in ${regionName}.`,\n 'park.info.reviews': 'Reviews',\n 'park.loading': (isBoat) => `Loading ${isBoat ? 'boating' : ''} info, please wait...`,\n 'park.parkVideo': 'Park Video',\n 'park.reviews.anonymous': 'Anonymous',\n 'park.reviews.noReviews': 'There are currently no customer reviews. You can view all reviews or leave one for this holiday by following the link below.',\n 'park.reviews.readAll': 'Read all reviews',\n 'park.tools.tools': 'Tools',\n 'park.tools.dealOfTheWeekLink': 'Deal of the week link:',\n 'park.tools.parkFromSearchLink': 'Park from search link:',\n 'parks.filters.filterByFeatures': 'Filter by Features',\n 'parks.filters.filterByOperator': 'Filter by Operator',\n 'parks.filters.filterByPetFriendly': 'Pet Friendly',\n 'parks.filters.noResults': 'There are no results to display.',\n 'parks.filters.sortBy': 'Sort by:',\n 'parks.popup.newsletter': 'Before you go, sign up to our newsletter for regular offers and a chance to WIN A HOLIDAY worth £1000',\n 'search.adults': 'Adults (18+)',\n 'search.children': 'Children (5-17)',\n 'search.dateNights': (dateStr, duration) => `${dateStr} - ${duration} ${shouldItPluralize('night', duration)}`,\n 'search.durationAndArrivalDate': 'Duration & Arrival Date',\n 'search.holidayType': 'Holiday Type',\n 'search.infants': 'Under 5\\'s',\n 'search.letMeSearch': 'Let me search for different holidays',\n 'search.loadingRegions': 'Loading regions...',\n 'search.numberOfNights': 'Number of nights',\n 'search.region': 'Region',\n 'search.route': 'Route',\n 'search.search': 'Search',\n 'search.searchNow': 'Search now',\n 'search.selectADate': 'Select a Date',\n 'search.selectAnArrivalDate': 'Select an arrival date',\n 'search.showMePetFriendly': 'Show me pet friendly holidays only',\n 'search.stayingForHowLong': 'Staying for how long?',\n 'search.yourPartySize': (people) => `Your Party Size (Max. ${people})`,\n 'search.xNights': (val) => `${val} ${val > 1 ? \"nights\" : \"night\"}`,\n 'searchResults.clickMarkerForDetails': 'Click marker for details',\n 'searchResults.errorLoadingResults': 'There was an error while loading the search results. Please try again.',\n 'searchResults.sticky': 'Park Favourite',\n 'searchResults.from': 'From',\n 'searchResults.holidaysFoundOn': (dateMatch, singleResult) => `${forceSingular('holiday', singleResult)} found on ${dateMatch ? 'your date' : 'alternative dates'}`,\n 'searchResults.accomodationLeft': (singleResult) => `accommodation ${forceSingular('type', singleResult)} left`,\n 'searchResults.loading': 'Loading...',\n 'searchResults.page.title': (regionName) => `Holidays in ${regionName || 'the UK'} - ${config['global.brandName']} Holidays`,\n 'searchResults.page.title.alt': 'Search results',\n 'searchResults.premium': 'Recommended',\n 'searchResults.starting': 'Starting...',\n 'searchResults.title': (total, regionName) => `${total} ${shouldItPluralize('Holiday', total)} found in ${regionName}`,\n 'searchResults.viewPark': (channelId, minPrice) => minPrice ? <>BOOK FROM £{minPrice} : `View ${parkMatcher(channelId)}`,\n 'termsConditions.firstHeading': 'Holiday promotion booking terms & conditions',\n 'termsConditions.firstText': `Below are the terms and conditions for ${config['global.brandName']}. If you would like to view the conditions for the Regional Newspaper promotion, click here and for the Daily Mail holiday promotion click here. The newspaper terms and conditions supplement the Standard Booking Terms and Conditions Conditions and should be read in conjunction with them. Where they conflict, the promotional terms Click to see the Standard terms and conditions. To view the the terms and conditions for any of our competition giveaways please click here.`,\n 'termsConditions.secondHeading': 'General Terms & Conditions',\n 'termsConditions.secondText': `These are the standard terms and conditions for booking a holiday with ${config['global.brandName']}`,\n 'travelGuide.checkingForTravelGuide': 'Checking for Travel Guide...',\n 'travelGuide.clickHere': (regionName) => `Click here to view our ${regionName} Travel Guide`,\n};\n\nexport default text;\n","/**\n * Retrieves the text string for the given key from the given text pack.\n * Text entries can either be strings or functions (to allow for string parameters).\n * Prints a warning to console and returns the key if the key isn't in the pack.\n * @param {string} key - The key you wish to retrieve the corresponding text for\n * @param {Object} textPack - And object full of key/value pairs for text keys and corresponsing text strings\n * @param {Array} params - An array of parameters to send to a text string function\n */\nexport function getTranslation(key, textPack, params) {\n if (typeof textPack[key] === 'undefined') {\n console.warn(`No entry found for text key '${key}'`);\n return key;\n }\n if (typeof textPack[key] === 'function') {\n return textPack[key](...params);\n }\n return textPack[key];\n}\n","import { waitForElement } from '@testing-library/dom';\nimport React from 'react';\nimport { text as defaultText } from '../../base/defaultText';\nimport { getTranslation } from '../../base/utils/i18n';\nimport { config } from '../../config';\n\nconst text = {\n ...defaultText,\n 'footer.nav.companyName': 'BreakFree Holidays',\n 'footer.nav.tagline': `${config['global.brandName']} are registered in England No. 05753643 | Copyright © ${config['global.brandName']}. All rights reserved.`,\n 'forms.contactPrefs.offers': 'Please tick here if you would like The Sun to keep you informed about exclusive offers, promotions and products from The Sun that we think you\\'d enjoy such as Sun Savers, Holidays from £9.50 and more. Would you like us to send you these? You can choose to opt out of these at any time.',\n 'forms.contactPrefs.emailOpt': '',\n 'forms.contactPrefs.emailNewspaperOffers':\n 'Please tick here if you would like The Sun to keep you informed about exclusive travel offers, travel related products and services, news and events. Your information will be used in accordance with The Sun\\'s privacy policy available at newsprivacy.co.uk',\n 'header.cs.tel': '0333 220 1901',\n};\n\n/**\n * Fetches a text string from the available text pack\n * @param {string} key - The key of the text string to retrieve\n * @param {...any} params - Any parameters to pass to your string function. Optional.\n */\nexport const t = (key, ...params) => getTranslation(key, text, params);\nexport default t;\n","import t from './skins/SN/text';\nexport * from './skins/SN/text';\nexport default t;\n","import React from 'react';\nimport { config, images } from '../../config';\n\nfunction Logo(props) {\n return (\n \n );\n}\n\nLogo.defaultProps = {\n alt: config['global.brandName'],\n variant: 'light',\n logoLight: images.logoLight,\n logoDark: images.logoDark,\n size: 'sm',\n height: 32,\n className: '',\n};\n\nexport default Logo;\n","module.exports = \"data:image/png;base64,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ewAnbgW98gBOJOh1B3DiQuxVB3Diibi80gBOW4kHfgD+/Iq802DhB+C0MWj4ATjPIH0AzjNIH4BPGbzjWDzoA/ClQTjgA3D2JBxP2IMPwJsVXhuGYwzvtgD4VodfSPzvL4qQB6AAlAAUgBKAAlACUABKAApACUABKAEoAAWgBKAAlAAUgBKAAlACUABKAApACUABKAEoACUABaAEoACUABSAEoACUAJQAEoACkAJQAEoASgABaAEoACUABSAEoACUAJQAEoACkAJQAEoASgAJQAFoASgAJQAFIASgAJQAlAASgAKQAlAASgBKAAlAAWgAJQAFIASgAJQAlAASgAKQAlAASgBKAAlAAWgBKAAlAAUgBKAAlACUABKAApACUABKAEoACUABaAEoAAUgBKAAlACUABKAApACUABKAEoACUABaAEoACUABSAEoACUAJQAEoACkAJQAEoASgAJQAFoASgABSAEoACUAJQAEoACkAJQAEoASgAJQAFoASgAJQAFIASgAJQAlAASgAKQAlAASgBKAAlAAWgBKAAlAAUgAJQAlAASgAKQAlAASgBKAAlAAWgBKAAlAAUgBKAAlB6sv8IMACt82quzNoLHQAAAABJRU5ErkJggg==\"","export const CANCELLED = '_CANCELLED';\nexport const FAILURE = '_FAILURE';\nexport const REQUEST = '_REQUEST';\nexport const RESET = '_RESET';\nexport const SUCCESS = '_SUCCESS';\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, Form } from 'react-bootstrap';\n\nexport const ChannelSelect = (props) => {\n const [selectedChannel, setSelectedChannel] = useState({ name: '' });\n\n const isIOS = [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ].includes(navigator.platform);\n\n useEffect(() => {\n setSelectedChannel(props.channels.find((channel) => channel.code === props.selectedValue));\n }, [props.channels, props.selectedValue]);\n\n return (\n <>\n \n \n {props.label}\n \n {isIOS ? (\n \n {props.channels.map((channel) => (\n \n {channel.name}\n \n ))}\n \n ) : (\n \n \n {selectedChannel?.name}\n \n \n {props.channels\n .filter((channel) => props.whitelist.includes(channel.code))\n .map((channel) => (\n \n ))}\n \n \n )}\n \n \n );\n};\n\nChannelSelect.defaultProps = {\n textStyle: 'white',\n whitelist: [],\n};\n\nChannelSelect.propTypes = {\n id: PropTypes.string,\n textStyle: PropTypes.string,\n label: PropTypes.string,\n channels: PropTypes.array,\n selectedValue: PropTypes.string,\n onChange: PropTypes.func,\n whitelist: PropTypes.array,\n disabled: PropTypes.bool,\n};\n\nexport default ChannelSelect;\n","import {\n SELECT_CHANNEL,\n SELECT_REGION,\n SELECT_DATE,\n SELECT_DURATION,\n SELECT_GUESTS_ADULTS,\n SELECT_GUESTS_CHILDREN,\n SELECT_GUESTS_UNDER5S,\n SELECT_PET_FRIENDLY,\n START_SEARCH,\n STORE_COTTAGE_DATES,\n RESET_ARRIVAL,\n} from './action-types';\nimport { GET_RESULTS } from '../results/action-types';\nimport { RESET } from '../../constants';\n\nimport { apiRequest } from '../../apiRequest';\nimport selfCancellingAction from '../../selfCancellingAction';\nimport { urls } from '../../../../config';\n\nexport const selectChannel = (dispatch, channelId) => {\n dispatch({ type: SELECT_CHANNEL, payload: channelId });\n};\nexport const selectRegion = (dispatch, regionId) => {\n dispatch({ type: SELECT_REGION, payload: regionId });\n};\nexport const selectDate = (dispatch, date) => {\n dispatch({ type: SELECT_DATE, payload: date });\n};\nexport const selectDuration = (dispatch, duration) => {\n dispatch({ type: SELECT_DURATION, payload: duration });\n};\nexport const selectGuestsAdults = (dispatch, guests) => {\n dispatch({ type: SELECT_GUESTS_ADULTS, payload: guests });\n};\nexport const selectGuestsChildren = (dispatch, guests) => {\n dispatch({ type: SELECT_GUESTS_CHILDREN, payload: guests });\n};\nexport const selectGuestsUnder5s = (dispatch, guests) => {\n dispatch({ type: SELECT_GUESTS_UNDER5S, payload: guests });\n};\nexport const selectPetFriendly = (dispatch, petFriendly) => {\n dispatch({ type: SELECT_PET_FRIENDLY, payload: petFriendly });\n};\nexport const storeAllCottageDates = (dispatch, dates) => {\n const ttl = new Date(new Date().setHours(new Date().getHours() + 1));\n dates['ttl'] = ttl;\n dispatch({ type: STORE_COTTAGE_DATES, payload: dates });\n};\nexport const resetArrival = (dispatch) => {\n dispatch({ type: RESET_ARRIVAL });\n};\n\nexport const [startSearch, cancelSearch] = selfCancellingAction((dispatch, params, requestParams, parkId) => {\n dispatch({ type: GET_RESULTS + RESET });\n dispatch({ type: START_SEARCH, payload: { ...params, parkId } });\n return apiRequest(dispatch, START_SEARCH, urls.search, { ...requestParams, park: parkId });\n});\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Dropdown } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport t from '../../../text';\n\nexport const RegionSelect = (props) => {\n const RegionNames = useSelector((state) => state.data.regions.regions);\n\n const [RegionName, setRegionName] = useState('');\n\n const isIOS = [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ].includes(navigator.platform);\n\n useEffect(() => {\n if (!props.selectedValue) setRegionName('Loading...');\n else setRegionName(RegionNames[props.selectedValue]?.name);\n }, [RegionNames, props.selectedValue]);\n\n let regionOptions;\n if (!props.channelSelected) {\n regionOptions = null;\n } else if (props.regionsLoading) {\n regionOptions = (\n \n );\n } else if (props.regions) {\n regionOptions = props.regions.map((region) => (\n //\n\n \n ));\n }\n\n return (\n \n \n {props.label}\n \n {isIOS ? (\n \n {props.regions.map((region) => (\n \n ))}\n \n ) : (\n \n \n {props.regionsLoading ? '' : RegionName}\n \n \n {regionOptions}\n \n \n )}\n \n );\n};\n\nRegionSelect.defaultProps = {\n text: 'white',\n whitelist: [],\n};\n\nRegionSelect.propTypes = {\n id: PropTypes.string,\n textStyle: PropTypes.string,\n label: PropTypes.string,\n channelSelected: PropTypes.bool,\n regions: PropTypes.array,\n regionsLoading: PropTypes.bool,\n selectedValue: PropTypes.string,\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n};\n\nexport default RegionSelect;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\n\nimport DayPicker from 'react-day-picker';\nimport { Form, Dropdown } from 'react-bootstrap';\nimport { getShortDateFormat } from '../../utils/date';\nimport t from '../../../text';\n\n// Cottages\nimport { useDispatch, useSelector } from 'react-redux';\nimport { channelId, regionId, duration, currentCottageDates, cottageTTL } from '../../redux/search/form/selectors';\nimport { storeAllCottageDates } from '../../redux/search/form/actions';\nimport { config, urls } from '../../../config';\n\nconst getNightsOptions = (channelId) => {\n switch (channelId) {\n case 'ukcaravan':\n if (config['searchBox.allowFiveDays']) return [2, 3, 4, 5, 7, 10, 11, 14];\n else return [2, 3, 4, 7, 10, 11, 14];\n case 'uktouring':\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21];\n case 'boats':\n return [3, 4, 5, 6, 7, 8, 9, 10, 11, 14];\n case 'eurocaravan':\n return [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n case 'ukcottages':\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 21];\n default:\n return [2, 3, 4, 7, 10, 11, 14];\n }\n};\n\n// \"2021-04-25\" => new Date(2021, 3, 25)\n// This is required by the react day picker api\nconst formatStringDatesToNewDates = (dates) => {\n return dates.map((date) => {\n const dateSplit = date.split('-');\n return new Date(+dateSplit[0], +dateSplit[1] - 1, +dateSplit[2]);\n });\n};\n\nconst getUnavailableDaysDefault = (duration = 0) => {\n switch (duration) {\n case 2:\n return [0, 1, 2, 3, 4, 5]; // Allow Saturdays only\n case 3:\n case 10:\n return [0, 1, 2, 3, 4, 6]; // Allow Fridays only\n case 4:\n case 11:\n return [0, 2, 3, 4, 5, 6]; // Allow Mondays only\n case 5:\n return [0, 1, 3, 5, 6];\n case 7:\n case 14:\n return [0, 2, 3, 4]; // Allow Mondays, Fridays, Saturdays\n default:\n return [0, 1, 2, 3, 4, 5, 6]; // Otherwise disable all days\n }\n};\n\nexport const DateDurationSelect = (props) => {\n const dispatch = useDispatch();\n\n const [disabledDaysObject, setDisabledDaysObject] = useState({});\n const [disabledDatesArray, setDisabledDatesArray] = useState([]);\n const [firstRun, setFirstRun] = useState(true);\n\n const _channelId = useSelector(channelId);\n const _regionId = useSelector(regionId);\n const _duration = useSelector(duration);\n const _currentCottageDates = useSelector(currentCottageDates);\n const _cottageTTL = useSelector(cottageTTL);\n\n useEffect(() => {\n getDateAndDurationText();\n }, [props.arrivalDate, props.duration]);\n\n const fetchCottageDataAndUpdateUnavailableDates = useCallback(() => {\n const timeNow = new Date();\n // Check if data exists, and ttl isnt expired\n if (_currentCottageDates && _currentCottageDates.length && _cottageTTL > timeNow) {\n setDisabledDatesArray(_currentCottageDates);\n } else {\n // do fetch request\n fetch(urls.cottageDates)\n .then((response) => response.json())\n .then((data) => {\n const cottageDates = JSON.parse(data.data);\n const today = new Date();\n\n if (_regionId in cottageDates === false)\n cottageDates[_regionId] = [\n today.getFullYear() +\n '-' +\n (today.getMonth() + 1 <= 9 ? '0' + (today.getMonth() + 1) : today.getMonth() + 1) +\n '-' +\n today.getDate(),\n ];\n for (const [key, value] of Object.entries(cottageDates)) {\n cottageDates[key] = formatStringDatesToNewDates(value);\n }\n storeAllCottageDates(dispatch, cottageDates);\n setDisabledDatesArray(cottageDates[_regionId]);\n });\n }\n }, [_cottageTTL, _currentCottageDates, _regionId, dispatch]);\n\n const setUnavailableDaysAndDates = useCallback(() => {\n if (_regionId === undefined) return;\n\n let unavailableDays = [];\n setDisabledDaysObject({});\n setDisabledDatesArray([]);\n\n switch (_channelId) {\n case 'boats':\n case 'uktouring':\n case 'eurocaravan':\n break;\n case 'ukcottages':\n fetchCottageDataAndUpdateUnavailableDates();\n break;\n default:\n unavailableDays = getUnavailableDaysDefault(_duration);\n setDisabledDaysObject({ daysOfWeek: unavailableDays });\n }\n }, [_channelId, _duration, _regionId, fetchCottageDataAndUpdateUnavailableDates]);\n\n useEffect(() => {\n setUnavailableDaysAndDates();\n }, [_channelId, _regionId, _duration, setUnavailableDaysAndDates]);\n\n if (firstRun) {\n setFirstRun(false);\n setUnavailableDaysAndDates();\n }\n\n const getDateAndDurationText = (arrivalDate, duration) => {\n if (duration && arrivalDate) {\n return t('search.dateNights', getShortDateFormat(new Date(arrivalDate)), duration);\n } else {\n return t('search.selectADate');\n }\n };\n\n return (\n \n {props.label}\n \n \n {getDateAndDurationText(props.arrivalDate, props.duration)}\n \n \n
\n
{t('search.stayingForHowLong')}
\n \n \n \n {getNightsOptions(props.channelId).map((val) => (\n \n ))}\n \n \n
\n
\n
{t('search.selectAnArrivalDate')}
\n \n
\n
\n
\n
\n );\n};\n\nDateDurationSelect.defaultProps = {};\n\nDateDurationSelect.propTypes = {\n id: PropTypes.string,\n channelId: PropTypes.string,\n textStyle: PropTypes.string,\n label: PropTypes.string,\n duration: PropTypes.number,\n arrivalDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n onDurationChange: PropTypes.func,\n onDateChange: PropTypes.func,\n onToggle: PropTypes.func,\n show: PropTypes.bool,\n disabled: PropTypes.bool,\n};\n\nexport default DateDurationSelect;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Form, Dropdown } from 'react-bootstrap';\nimport InputNumber from '../FormElements/InputNumber';\nimport { shouldItPluralize } from '../../utils/utils';\nimport t from '../../../text';\nimport Icon from '../Icon';\n\nexport const GuestsSelect = (props) => {\n const guestTotal = props.adults + props.children + props.under5s;\n\n const handleGuestUpdate = (num, param, setterFunc) => {\n let total = 0;\n\n switch (param) {\n case 'adults':\n total = props.children + props.under5s + num;\n break;\n case 'children':\n total = props.adults + props.under5s + num;\n break;\n case 'under5s':\n total = props.adults + props.children + num;\n break;\n default:\n total = 0;\n }\n\n if (total <= props.maxGuests) setterFunc(num);\n };\n\n return (\n \n \n {t('search.yourPartySize', props.maxGuests)}\n \n \n \n {guestTotal === 0 ? 'Add guests' : `${guestTotal} ${shouldItPluralize('guest', guestTotal)}`}\n \n \n \n \n

{t('search.adults')}

\n \n \n handleGuestUpdate(num, 'adults', props.onAdultsChange)}\n />\n \n {props.selectedChannel === 'boats' && (\n \n \n Min. 2 adults for Boating holidays.\n \n )}\n
\n \n \n \n

{t('search.children')}

\n \n \n handleGuestUpdate(num, 'children', props.onChildrenChange)}\n />\n \n
\n \n \n \n

{t('search.infants')}

\n \n \n handleGuestUpdate(num, 'under5s', props.onUnder5sChange)}\n />\n \n
\n
\n
\n
\n );\n};\n\nGuestsSelect.defaultProps = {\n maxGuests: 10,\n};\n\nGuestsSelect.propTypes = {\n id: PropTypes.string,\n textStyle: PropTypes.string,\n label: PropTypes.string,\n adults: PropTypes.number,\n children: PropTypes.number,\n under5s: PropTypes.number,\n onAdultsChange: PropTypes.func,\n onChildrenChange: PropTypes.func,\n onUnder5sChange: PropTypes.func,\n maxGuests: PropTypes.number,\n disabled: PropTypes.bool,\n selectedChannel: PropTypes.string,\n};\n\nexport default GuestsSelect;\n","import { GET_INIT_DATA } from '../../init/action-types';\nimport { channels } from '../../data/channels/selectors';\nimport { regions, channelRegionIds } from '../../data/regions/selectors';\nimport { getIsFetching } from '../../requests/selectors';\nimport { getRegionsIsLoading, getRegionsIsLoaded, getRegionsHasFailed } from '../../data/regions/selectors';\n\nimport { dateToDDMMYYYY } from '../../../utils/date';\nimport { getChannelById } from '../../data/channels/utils';\nimport { getRegionsByChannelId, getRegionById } from '../../data/regions/utils';\n//import { boolToyn } from '../../../utils/utils';\n\nexport const channelId = (state) => state.search.form.channelId;\nexport const regionId = (state) => state.search.form.regionId;\nexport const arrivalDate = (state) => state.search.form.arrivalDate;\nexport const duration = (state) => state.search.form.duration;\nexport const adults = (state) => state.search.form.adults;\nexport const children = (state) => state.search.form.children;\nexport const under5s = (state) => state.search.form.under5s;\nexport const cottageDates = (state) => state.search.form.cottageDates;\nexport const currentCottageDates = (state) => {\n const cottageDatesFound = cottageDates(state);\n if (cottageDatesFound) return cottageDatesFound[regionId(state)];\n};\nexport const cottageTTL = (state) => {\n const cottageDatesFound = cottageDates(state);\n if (cottageDatesFound) return cottageDatesFound.ttl;\n};\nexport const petFriendly = (state) => {\n return channelId(state) === 'eurocaravan' ? undefined : state.search.form.petFriendly;\n};\n\nexport const params = (state) => ({\n channelId: channelId(state),\n regionId: regionId(state),\n arrivalDate: arrivalDate(state),\n duration: duration(state),\n adults: adults(state),\n children: children(state),\n under5s: under5s(state),\n petFriendly: petFriendly(state),\n});\n\nexport const requestParams = (state) => ({\n channel: channelId(state),\n region: regionId(state),\n date: dateToDDMMYYYY(new Date(arrivalDate(state))),\n partysize: adults(state) + children(state) + under5s(state),\n nights: duration(state),\n adults: adults(state),\n children: children(state),\n infants: under5s(state),\n dogs: petFriendly(state) ? 'y' : '',\n});\n\nexport const channelsLoading = (state) => getIsFetching(state, GET_INIT_DATA);\nexport const regionsLoading = (state) => getRegionsIsLoading(state, channelId(state));\nexport const regionsNeedToBeLoaded = (state) => {\n const _channelId = channelId(state);\n\n return (\n _channelId &&\n !getRegionsIsLoading(state, _channelId) &&\n !getRegionsIsLoaded(state, _channelId) &&\n !getRegionsHasFailed(state, _channelId)\n );\n};\n\nexport const currentChannel = (state) => {\n return getChannelById(channels(state), channelId(state));\n};\nexport const currentRegions = (state) => {\n return getRegionsByChannelId(regions(state), channelRegionIds(state), channelId(state));\n};\nexport const currentRegion = (state) => {\n return getRegionById(regions(state), regionId(state));\n};\n","/**\n * Calculates how old a person is from their date of birth\n * @param {date} dob - The date to calculate the age from\n */\nexport function calculateAge(dob) {\n const ageDiffInMs = Date.now() - dob.getTime();\n const ageDate = new Date(ageDiffInMs);\n\n return Math.abs(ageDate.getUTCFullYear() - 1970);\n}\n\n/**\n * Compares two dates to check if they are equal, ignoring the time (hours/minutes/seconds) of each date.\n * @param {date} date1\n * @param {date} date2\n */\nexport function datesAreEqual(date1, date2) {\n const d1 = new Date(date1);\n const d2 = new Date(date2);\n\n d1.setUTCHours(0, 0, 0, 0);\n d2.setUTCHours(0, 0, 0, 0);\n\n return d1.getTime() === d2.getTime();\n}\n\n/**\n * Converts a date to DD/MM/YYYY string representation\n * @param {date} date\n */\nexport function dateToDDMMYYYY(date) {\n if (date instanceof Date) {\n return `${padFigure(date.getUTCDate())}/${padFigure(date.getUTCMonth() + 1)}/${date.getUTCFullYear()}`;\n }\n return undefined;\n}\n\n/**\n * Converts a DD/MM/YYYY date representation string to a date object\n * @param {string} dateString\n */\nexport function DDMMYYYYToDate(dateString) {\n if (/[0-9]{1,2}\\/[0-9]{1,2}\\/[0-9]{4}/.test(dateString)) {\n const dateSplit = dateString.split('/');\n const date = new Date();\n date.setUTCFullYear(parseInt(dateSplit[2]), parseInt(dateSplit[1] - 1), parseInt(dateSplit[0]));\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n return undefined;\n}\n\n/**\n * Returns the date and month (E.G. 1st January) for the given date\n * @param {date} date\n */\nexport function getDayAndMonthNameFromDate(date, short) {\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n const shortMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n if (short) {\n return `${date.getDate()}${nth(date.getDate())} ${shortMonthNames[date.getMonth()]}`;\n } else {\n return `${date.getDate()}${nth(date.getDate())} ${monthNames[date.getMonth()]}`;\n }\n}\n\n/**\n * Returns the date, month and year (E.G. 1st January 2021) for the given date\n * @param {date} date\n */\nexport function getDayMonthYearFromDate(date) {\n return `${getDayAndMonthNameFromDate(date)} ${date.getFullYear()}`;\n}\n\n/**\n * Returns the day name (E.G. Monday) for the given date\n * @param {date} date\n */\nexport function getDayNameFromDate(date, short) {\n if (short) {\n return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()];\n } else {\n return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()];\n }\n}\n\n/**\n * Takes the given date, adds the given number of days to it, and returns the new (departure) date\n * @param {date} arrivalDate - The starting (arrival) date\n * @param {number} duration - The number of days the holiday lasts for (the number of days to add to the arrival date)\n */\nexport const getDepartureDate = (arrivalDate, duration) => {\n const departureDate = new Date(arrivalDate);\n departureDate.setTime(departureDate.getTime() + parseInt(duration, 10) * 86400000);\n return departureDate;\n};\n\n/**\n * Returns a 'short date' string representation (E.G. 1-Jan-2020) for the given date\n * @param {date} date - Date to use\n * @param {string} delimiter - Character to use to separate the date parts\n */\nexport const getShortDateFormat = (date, delimiter = '-') => {\n let monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n let day = date.getDate();\n\n let monthIndex = date.getMonth();\n let monthName = monthNames[monthIndex];\n\n let year = date.getFullYear();\n\n return `${day}${delimiter}${monthName}${delimiter}${year}`;\n};\n\n/**\n * Returns the 'ordinal indicator' for a date (E.G. 'st' for 1) for the given number\n * @param {number} number\n */\nexport function nth(number) {\n if (number > 3 && number < 21) return 'th';\n switch (number % 10) {\n case 1:\n return 'st';\n case 2:\n return 'nd';\n case 3:\n return 'rd';\n default:\n return 'th';\n }\n}\n\n/**\n * Converts a number to a string, witrh values lower that 10 startting with a 0 (E.G. 01)\n * @param {number} num\n */\nexport function padFigure(num) {\n const numString = num.toString();\n return numString.length === 1 ? '0' + numString : numString;\n}\n\n/**\n * Converts a unix time to a date object\n * @param {string | number} unixTime - The unix time to convert\n */\nexport function unixTimeToDate(unixTime) {\n return new Date(unixTime * 1000);\n}\n","module.exports = __webpack_public_path__ + \"static/media/logo-dark.ab194845.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo-light.78bd6125.svg\";","import { useState, useEffect } from 'react';\nimport { urls } from '../../../../config';\n\nexport const useFetchData = (data, destination) => {\n let [returnData, setReturnData] = useState([]);\n\n useEffect(() => {\n if (destination === 'expert-insight' && data && data.length === 0) return;\n let url = `${urls.cms}/${destination}/?_fields=title,acf`;\n data.forEach((pl) => {\n url += '&include[]=' + pl;\n });\n const controller = new AbortController();\n fetch(url, { signal: controller.signal })\n .then((response) => response.json())\n .then((data) => {\n setReturnData(data);\n });\n return () => {\n controller.abort();\n };\n }, [data, destination]);\n\n return returnData || [];\n};\n\nexport default useFetchData;\n","import axios from 'axios';\nimport { REQUEST, SUCCESS, FAILURE, CANCELLED } from './constants';\n\nconst getRequestConfig = (method, url, params, cancelTokenSource) => {\n if (['PUT', 'POST', 'DELETE', 'PATCH'].includes(method.toUpperCase())) {\n const data = new FormData();\n Object.keys(params).forEach((key) => {\n data.set(key, params[key]);\n });\n return {\n method,\n headers: { 'Content-Type': 'multipart/form-data' },\n url,\n data,\n cancelToken: cancelTokenSource.token,\n };\n }\n return {\n method,\n url,\n params,\n cancelToken: cancelTokenSource.token,\n };\n};\n\nconst handleSuccess = (response, dispatch, actionType, params, requestId) => {\n // Catch server errors that return 200 code and treat them as failures\n if (response && response.data && response.data.success === 0) {\n throw response;\n }\n\n const action = {\n type: actionType + SUCCESS,\n payload: {\n params,\n requestId,\n response,\n },\n };\n dispatch(action);\n return action;\n};\n\nconst handleFailure = (response, dispatch, actionType, params, requestId, throwOnError) => {\n if (axios.isCancel(response)) return; // Do not throw failure actions for cancelled requests\n\n const action = {\n type: actionType + FAILURE,\n payload: {\n errors: response && response.data && response.data.errors,\n params,\n requestId,\n response,\n status: response.status || 0,\n },\n };\n dispatch(action);\n\n if (throwOnError) {\n throw action;\n } else {\n return action;\n }\n};\n\nconst handleCancel = (dispatch, actionType, params, requestId, cancelTokenSource, throwOnError) => {\n const action = {\n type: actionType + CANCELLED,\n payload: {\n params,\n requestId,\n status: -1,\n },\n };\n dispatch(action);\n\n cancelTokenSource.cancel(); // This actually cancels the request with Axios\n\n if (throwOnError) {\n throw action;\n } else {\n return action;\n }\n};\n\nconst makeRequest = (dispatch, actionType, url, params = {}, requestId = '@', method = 'get', throwOnError = true) => {\n dispatch({\n type: actionType + REQUEST,\n payload: { method, url, params, requestId },\n });\n\n const cancelTokenSource = axios.CancelToken.source();\n let requestActive = true;\n\n const config = getRequestConfig(method, url, params, cancelTokenSource);\n const request = axios\n .request(config)\n .then((response) => handleSuccess(response, dispatch, actionType, params, requestId))\n .catch((response) => handleFailure(response, dispatch, actionType, params, requestId, throwOnError))\n .finally(() => {\n requestActive = false;\n });\n return {\n request,\n cancel: () => {\n if (requestActive) {\n handleCancel(dispatch, actionType, params, requestId, cancelTokenSource, throwOnError);\n requestActive = false;\n }\n },\n };\n};\n\nexport const apiRequest = (dispatch, actionType, url, params = {}, requestId = '@', method = 'get') => {\n return makeRequest(dispatch, actionType, url, params, requestId, method, false);\n};\n\nexport const callbackApiRequest = (dispatch, actionType, url, params = {}, requestId = '@', method = 'get') => {\n return makeRequest(dispatch, actionType, url, params, requestId, method, true);\n};\n\n/**\n * Will return true if the given flags would mean a request could be fired\n * @param {Boolean} isReady - If everything needed is available, ready for a request\n * @param {Boolean} isLoading - IF a request is already in progress\n * @param {Boolean} isLoaded - If the resource is already available\n * @param {Boolean} hasFailed - The this request has failed before\n * @param {Boolean} force - Allow re-sending of request if it has failed in the past\n */\nexport const checkRequestNeeded = (isReady, isLoading, isLoaded, hasFailed, force) => {\n return isReady && !isLoading && !isLoaded && (!hasFailed || force);\n};\n","export const getRequestReducerById = (state, actionType) => state.requests[actionType];\n\nexport const getError = (state, actionType, requestId = '@') => {\n const reducer = getRequestReducerById(state, actionType);\n return reducer ? reducer.errors[requestId] : undefined;\n};\n\nexport const getHasError = (state, actionType, requestId = '@') => {\n const reducer = getRequestReducerById(state, actionType);\n return reducer ? !!reducer.errors[requestId] : false;\n};\n\nexport const getIsBusy = (state, actionType) => {\n const reducer = getRequestReducerById(state, actionType);\n return !!reducer.fetching.length;\n};\n\nexport const getIsFetching = (state, actionType, requestId = '@') => {\n const reducer = getRequestReducerById(state, actionType);\n return reducer ? reducer.fetching.includes(requestId) : false;\n};\n\nexport const getRequestStatus = (actionType) => {\n return [\n (state, requestId) => getIsFetching(state, actionType, requestId),\n (state, requestId) => getHasError(state, actionType, requestId),\n (state, requestId) => getError(state, actionType, requestId),\n ];\n};\n","import { GET_OPERATOR_REGIONS, GET_REGIONS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const regions = (state) => state.data.regions.regions;\nexport const channelRegionIds = (state) => state.data.regions.channelRegionIds;\nexport const operatorChannelRegionIds = (state) => state.data.regions.operatorChannelRegionIds;\n\n// Utils to be used by other selectors\nexport const [getRegionsIsLoading, getRegionsHasFailed, getRegionsError] = getRequestStatus(GET_REGIONS);\nexport const getRegionsIsLoaded = (state, channelId) => !!channelRegionIds(state)[channelId];\n\nexport const [getOperatorRegionsIsLoading, getOperatorRegionsHasFailed, getOperatorRegionsError] = getRequestStatus(\n GET_OPERATOR_REGIONS,\n);\nexport const getOperatorRegionsIsLoaded = (state, channelId, operatorId) => {\n return !!operatorChannelRegionIds(state)[operatorId]?.[channelId];\n};\n","import React, { useEffect, useState } from 'react';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Col, Container, Button, Form, Row } from 'react-bootstrap';\nimport ChannelSelect from './ChannelSelect';\nimport RegionSelect from './RegionSelect';\nimport DateDurationSelect from './DateDurationSelect';\nimport GuestsSelect from './GuestsSelect';\nimport { channels } from '../../redux/data/channels/selectors';\nimport {\n channelId,\n regionId,\n currentRegions,\n regionsLoading,\n regionsNeedToBeLoaded,\n adults,\n children,\n under5s,\n arrivalDate,\n duration,\n petFriendly,\n params,\n requestParams,\n} from '../../redux/search/form/selectors';\nimport {\n selectChannel,\n selectRegion,\n selectGuestsAdults,\n selectGuestsChildren,\n selectGuestsUnder5s,\n selectDate,\n selectDuration,\n selectPetFriendly,\n startSearch,\n cancelSearch,\n resetArrival,\n} from '../../redux/search/form/actions';\nimport { cancelGetResults } from '../../redux/search/results/actions';\nimport { getRegions } from '../../redux/data/regions/actions';\nimport t from '../../../text';\nimport { resetBFilters, resetNFilters, setState } from '../../redux/appState/actions';\n\nconst NoPopupSearchBox = (props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const location = useLocation();\n\n const selectedChannelId = useSelector(channelId);\n const selectedRegionId = useSelector(regionId);\n\n const _regionsLoading = useSelector(regionsLoading);\n const _regionsNeedToBeLoaded = useSelector(regionsNeedToBeLoaded);\n const _currentRegions = useSelector(currentRegions) || [];\n\n const sortedRegions = _currentRegions.sort((a, b) => {\n return a.name.localeCompare(b.name);\n });\n\n const _params = useSelector(params);\n const _requestParams = useSelector(requestParams);\n const _petFriendly = useSelector(petFriendly);\n const { parkId } = useParams();\n\n const _nFilterArray = useSelector((state) => state.appState.nFiltersStateArray);\n const _bFilterArray = useSelector((state) => state.appState.bFiltersStateArray);\n\n const [allowSearchAll, setAllowSearchAll] = useState(false);\n\n const dealOfTheWeek = location.pathname.search('/deal-of-the-week/') !== -1;\n const doFullSearch = !dealOfTheWeek || allowSearchAll;\n\n // Util functions\n const getRegionLabel = () => {\n if (selectedChannelId === 'boats') return t('search.route');\n return t('search.region');\n };\n\n const fetchSearchResults = () => {\n cancelGetResults(); // Cancel last request to get search results\n cancelSearch(); // Cancel last request to start a search\n if (props.parkId) {\n startSearch(dispatch, _params, _requestParams, props.parkId);\n } else {\n startSearch(dispatch, _params, _requestParams, doFullSearch ? undefined : parkId);\n }\n };\n\n const updateRoute = () => {\n let searchQuery = Object.keys(_requestParams)\n .filter((key) => typeof _requestParams[key] !== 'undefined')\n .filter((key) => key !== 'partysize')\n .filter((key) => doFullSearch || (key !== 'channel' && key !== 'region'))\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(_requestParams[key])}`)\n .join('&');\n if (props.parkId) searchQuery = searchQuery + '&park=' + props.parkId;\n\n if (doFullSearch) {\n history.push({ pathname: '/results', search: searchQuery });\n } else {\n history.push({ pathname: location.pathname, search: searchQuery });\n }\n };\n\n const submitAndCloseDropdown = (value, func, selectFunc) => {\n func(dispatch, value);\n setTimeout(() => {\n selectFunc(false);\n }, 650);\n };\n\n // Channels\n const [showChannelSelect, setShowChannelSelect] = useState(false);\n const handleChannelToggle = () => setShowChannelSelect(!showChannelSelect);\n const handleChannelSelect = (event) => {\n const channelChosen = event.target.value;\n const previousChannel = selectedChannelId;\n submitAndCloseDropdown(channelChosen, selectChannel, setShowChannelSelect);\n calculateShouldResetArrival(previousChannel, channelChosen);\n };\n\n // Regions\n const [showRegionSelect, setShowRegionSelect] = useState(false);\n const handleRegionToggle = () => setShowRegionSelect(!showRegionSelect);\n const handleRegionSelect = (event) => {\n const previousChannel = selectedChannelId;\n submitAndCloseDropdown(event.target.value, selectRegion, setShowRegionSelect);\n calculateShouldResetArrival(previousChannel);\n };\n\n // Dates\n const [showDatePanel, setShowDatePanel] = useState(false);\n const handleDateToggle = () => setShowDatePanel(!showDatePanel);\n const handleDateChange = (date, modifiers) => {\n if (modifiers.disabled) return; // Do nothing if date is disabled.\n submitAndCloseDropdown(date, selectDate, setShowDatePanel);\n };\n\n // Pet friendly\n const handlePetFriendlyToggle = (event) => {\n selectPetFriendly(dispatch, event.target.checked);\n };\n\n const handleSearch = () => {\n updateRoute();\n fetchSearchResults();\n resetNFilters(dispatch, _nFilterArray);\n resetBFilters(dispatch, _bFilterArray);\n setState(\n dispatch,\n 'searchResultsPetFriendlyFilters',\n _petFriendly ? ['y'] : ['n'],\n );\n };\n\n // Load regions, if required\n useEffect(() => {\n if (_regionsNeedToBeLoaded) {\n getRegions(dispatch, selectedChannelId);\n }\n }, [dispatch, _regionsNeedToBeLoaded, selectedChannelId]);\n\n // Select default region if it has been wiped out (happens after chaning channel)\n useEffect(() => {\n if (\n !_regionsNeedToBeLoaded &&\n !_regionsLoading &&\n Object.keys(_currentRegions).length &&\n selectedChannelId &&\n !selectedRegionId\n ) {\n selectRegion(dispatch, sortedRegions[0].id);\n }\n });\n\n const calculateShouldResetArrival = (previousChannel, channelSelected = null) => {\n // reset arrival if user just selected cottages\n if (channelSelected === 'ukcottages') return resetArrival(dispatch);\n\n // reset arrival if user just came off of cottages or switched regions whilst on ukcottages\n if (selectedChannelId === 'ukcottages') return resetArrival(dispatch);\n\n // prevents the possibility of a race case bug\n if (previousChannel === 'ukcottages') return resetArrival(dispatch);\n };\n\n return (\n <>\n\n\n \n
\n \n \n \n \n \n \n \n \n \n \n selectDuration(dispatch, parseInt(e.target.value))}\n onDateChange={handleDateChange}\n onToggle={handleDateToggle}\n show={showDatePanel}\n disabled={!doFullSearch}\n />\n \n \n selectGuestsAdults(dispatch, num)}\n onChildrenChange={(num) => selectGuestsChildren(dispatch, num)}\n onUnder5sChange={(num) => selectGuestsUnder5s(dispatch, num)}\n selectedChannel={selectedChannelId}\n />\n \n {_params.channelId !== 'eurocaravan' && (\n \n {dealOfTheWeek ? (\n
\n \n {t('search.letMeSearch')}\n \n setAllowSearchAll(!allowSearchAll)}\n />\n
\n ) : (\n
\n )}\n\n
\n \n {t('search.showMePetFriendly')}\n \n \n
\n \n )}\n
\n \n\n \n  \n \n {t('search.search')}\n \n \n
\n
\n
\n \n );\n};\n\nNoPopupSearchBox.defaultProps = {\n text: 'white',\n bg: 'dark',\n isInPopup: false,\n};\n\nexport default NoPopupSearchBox;\n","/**\n * Takes the given HTML string and Returns a new one with all of the HTML tags stripped\n * @param {string} html - HTML string to strip the tags from\n */\nexport function decodeHtml(html) {\n var txt = document.createElement('textarea');\n txt.innerHTML = html;\n return txt.value;\n}\n\n/**\n * Takes a string and applies various conversions, returning a new slug-friendly string\n * @param {*} string - The string to generate the slug-friendly string from\n */\nexport function slugify(string) {\n return string\n .toString()\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, '-') // Replace spaces with -\n .replace(/&/g, '-and-') // Replace & with 'and'\n .replace(/[^\\w-]+/g, '') // Remove all non-word characters\n .replace(/--+/g, '-') // Replace multiple - with single -\n .replace(/^-+/, '') // Trim - from start of text\n .replace(/-+$/, '') // Trim - from end of text\n .replace('-amp-', '-'); // -and-amp- now says -and-\n}\n\n/**\n * Takes a URL string and returns a new one with the protocol (E.G. https://) removed\n * @param {string} url\n */\nexport function stripProtocol(url) {\n if (typeof url !== 'string') return url;\n return url.split('//')[1] || url;\n}\n\n/**\n * Takes the given number / number string and converts it to a 2DP number string (useful for prices)\n * @param {string|number} stringNum - Number or number string to convert\n */\nexport function to2dp(stringNum) {\n return parseFloat(stringNum).toFixed(2);\n}\n","const namespace = 'SEARCH/FORM/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\nexport const SELECT_REGION = namespace + 'SELECT_REGION';\nexport const SELECT_DATE = namespace + 'SELECT_DATE';\nexport const SELECT_DURATION = namespace + 'SELECT_DURATION';\nexport const SELECT_GUESTS_ADULTS = namespace + 'SELECT_GUESTS_ADULTS';\nexport const SELECT_GUESTS_CHILDREN = namespace + 'SELECT_GUESTS_CHILDREN';\nexport const SELECT_GUESTS_UNDER5S = namespace + 'SELECT_GUESTS_UNDER5S';\nexport const SELECT_PET_FRIENDLY = namespace + 'SELECT_PET_FRIENDLY';\nexport const START_SEARCH = namespace + 'START_SEARCH';\nexport const STORE_COTTAGE_DATES = namespace + 'STORE_COTTAGE_DATES';\nexport const RESET_ARRIVAL = namespace + 'RESET_ARRIVAL';\n","module.exports = __webpack_public_path__ + \"static/media/payment-methods.95982c3a.png\";","module.exports = __webpack_public_path__ + \"static/media/visa.01fa7d33.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/white-star.05ec4294.svg\";","const namespace = 'INIT/';\n\nexport const APP_INIT = namespace + 'APP_INIT';\nexport const GET_INIT_DATA = namespace + 'GET_INIT_DATA';\n","import React from 'react';\nimport Slider from 'react-slick';\nimport { Link } from 'react-router-dom';\nimport Card from 'react-bootstrap/Card';\nimport { config } from '../../../config';\nimport A from '../A';\n\nfunction ColumnSlider(props) {\n const maxSlides = props.parent === 'opRegions' ? 3 : 4;\n const settings = {\n dots: false,\n arrows: true,\n infinite: true,\n lazyLoad: true,\n speed: 500,\n slidesToShow: maxSlides,\n slidesToScroll: 1,\n className: 'homepage-slide',\n responsive: [\n {\n breakpoint: 992,\n settings: {\n slidesToShow: 3,\n },\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 2,\n },\n },\n {\n breakpoint: 576,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n };\n\n const sliderItems = props.items.map((item, index) => {\n const cardImage = (\n
\n \n {item.overlay_text !== undefined && item.overlay_text.length > 0 && (\n
{item.overlay_text}
\n )}\n
\n );\n return (\n \n {/^http/.test(item.url) ? (\n \n {cardImage}\n \n

{item.title}

\n

{item.text}

\n
\n
\n ) : (\n \n {cardImage}\n \n

{item.title}

\n

{item.text}

\n
\n \n )}\n
\n );\n });\n\n return {sliderItems};\n}\n\nexport default ColumnSlider;\n","import React, { useState, useEffect } from 'react';\nimport _debounce from 'lodash.debounce';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport ColumnSlider from './ColumnSlider';\nimport { config } from '../../../config';\nimport A from '../A';\n\nconst BREAKPOINTS = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n};\n\nfunction ColumnComponent({ heading, columns, background, parent }) {\n const [width, setWidth] = useState(window.innerWidth);\n const noOfItems = columns.length;\n //const imageHeightClass = noOfItems > 3 ? 'image-height-3' : `image-height-${noOfItems}`;\n let imageClasses = ['column-image', 'fixed-image-height'];\n\n const regionPage = parent === 'opRegions';\n if (regionPage) imageClasses.push('img-max-height');\n\n const extraClasses = imageClasses.join(' ');\n\n const sliderComponent = (\n \n \n \n );\n const columnComponent = columns.map((c, index) => {\n const cardImage = (\n
\n \n {c.overlay_text !== undefined && c.overlay_text.length > 0 && (\n
{c.overlay_text}
\n )}\n
\n );\n return (\n \n \n {/^http/.test(c.url) ? (\n \n {cardImage}\n \n

{c.title}

\n

{c.text}

\n
\n
\n ) : (\n \n {cardImage}\n \n

{c.title}

\n

{c.text}

\n
\n \n )}\n
\n \n );\n });\n\n useEffect(() => {\n const handleWindowResize = _debounce(() => setWidth(window.innerWidth), 100);\n window.addEventListener('resize', handleWindowResize);\n\n // Return a function from the effect that removes the event listener\n return () => window.removeEventListener('resize', handleWindowResize);\n }, []);\n\n const getComponent = () => {\n const max = regionPage ? 3 : 4;\n if (\n noOfItems > max ||\n (noOfItems === 4 && width < BREAKPOINTS.lg) ||\n (noOfItems === 3 && width < BREAKPOINTS.md) ||\n (noOfItems === 2 && width < BREAKPOINTS.sm)\n ) {\n return sliderComponent;\n } else {\n return columnComponent;\n }\n };\n\n if (regionPage) return {getComponent()};\n\n return (\n \n \n \n {parent !== 'opRegions' && (\n \n

\n \n )}\n {getComponent()}\n \n \n \n );\n}\n\nColumnComponent.defaultProps = {\n heading: 'No title set',\n columns: [\n {\n image: 'https://placeimg.com/640/320/nature',\n title: 'Column One Title',\n text: 'Some text goes here',\n url: '#',\n },\n {\n image: 'https://placeimg.com/640/320/nature',\n title: 'Column Two Title',\n text: 'Some text goes here',\n url: '#',\n },\n ],\n};\n\nexport default ColumnComponent;\n","/**\n * Takes an array of objects and converts it to an object\n * @param {array} arr - The source array\n * @param {*} key - The property of each source object to use as the destination object key (E.G: you might use the 'id' property for this)\n * @param {*} valueKey - Optional. The property of each source object to use as the value of each key in the output object. If omitted, the entire source object will be used as the value.\n */\nexport const arrayToObject = (arr, key, valueKey) => {\n const output = {};\n arr.forEach((item) => {\n output[item[key]] = valueKey ? item[valueKey] : item;\n });\n return output;\n};\n\n/**\n * Takes a boolean input and converts it to 'y' or 'n'. Any other type of input will just be returned (useful for undefined).\n * @param {bool} input - input to convert\n */\nexport const boolToyn = (input) => {\n if (input === true) {\n return 'y';\n }\n if (input === false) {\n return 'n';\n }\n return input;\n};\n\n/**\n * Return true if there is only 1 holiday, otherwise returns false\n * @param {number} dateMatch - number of date-match holidays (can be null / undefined)\n * @param {number} altDate - number of alternative date holidays (can be null / undefined)\n */\nexport const isSingleResult = (dateMatch, altDate) => {\n const evaluateValue = parseInt(dateMatch, 10) || parseInt(altDate, 10);\n return evaluateValue === 1;\n};\n\n/**\n * Takes 'y' or 'n' and coverts it to boolean. Any other type of input will just be returned (useful for undefined).\n * @param {bool} input - input to convert\n */\nexport const ynToBool = (input) => {\n if (input === 'y') {\n return true;\n }\n if (input === 'n') {\n return false;\n }\n return input;\n};\n\n/**\n * Takes a channelid and returns the correct type of accommodation for that channel.\n * Channelid's include ukcaravan, eurocaravan, uklodge, uktouring, boats and ukcottages.\n * @param {string} channel - channel to convert\n */\nexport const parkMatcher = (channel) => {\n switch (channel) {\n case 'boats':\n return 'Route';\n case 'ukcottages':\n return 'Cottage';\n default:\n return 'Park';\n }\n};\n\n/**\n * Takes a word and an amount and returns the word with relevant pluralization.\n * If count is 1, return word, else add an 's' to the word.\n * @param {string} word - word to convert\n * @param {number} count - amount of the word\n */\nexport const shouldItPluralize = (word, count) => {\n return count === 1 ? word : word + 's';\n};\n\n/**\n * Takes a word and a boolean and returns the word with relevant pluralization.\n * If boolean is true, return word, else add an 's' to the word.\n * @param {string} word - word to convert\n * @param {boolean} boolean - should it be singular\n */\nexport const forceSingular = (word, boolean) => {\n return boolean ? word : word + 's';\n};\n\n/**\n * Takes a channelid and returns the correct type of accommodationType for that channel.\n * Channelid's include boats, ukcottages, ukcaravan, uklodge and uktouring.\n * @param {string} channel - channel name\n */\nexport const accommodationType = (channel) => {\n switch (channel) {\n case 'boats':\n return 'Boating Holidays';\n case 'ukcottages':\n return 'Cottages';\n default:\n return 'Holiday Parks';\n }\n};\n\n/**\n * Creates an array of numbers from min to max, inclusive.\n * i.e. arrayFromXtoY(6, 9) would return [6, 7, 8, 9].\n * @param {number} min - array start\n * @param {number} max - array end\n */\nexport const arrayFromXtoY = (min, max) => {\n return [...new Array(max - min + 1)].map((_, i) => i + min);\n};\n","import { SET_STATE, RESET_N_FILTERS, RESET_B_FILTERS } from './action-types';\n\nexport const setState = (dispatch, key, data) => {\n dispatch({\n type: SET_STATE,\n payload: { key, data },\n });\n};\n\nexport const resetNFilters = (dispatch) => {\n dispatch({ type: RESET_N_FILTERS });\n};\n\nexport const resetBFilters = (dispatch) => {\n dispatch({ type: RESET_B_FILTERS });\n};\n","export const selfCancellingAction = (actionFunc) => {\n let lastRequest;\n\n const cancelLastRequest = () => {\n if (lastRequest) lastRequest.cancel();\n };\n\n const actionFuncWrapper = (...args) => {\n cancelLastRequest();\n lastRequest = actionFunc(...args);\n return lastRequest;\n };\n\n return [actionFuncWrapper, cancelLastRequest];\n};\n\nexport default selfCancellingAction;\n","import { GET_CHANNELS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const channels = (state) => state.data.channels.channels;\nexport const [isFetching, hasError, errorData] = getRequestStatus(GET_CHANNELS);\n","export const getRegionById = (regions, regionId) => {\n return regions[regionId];\n};\n\nexport const getRegionsByChannelId = (regions, channelRegionIds, channelId) => {\n return channelRegionIds[channelId]?.map((regionId) => regions[regionId]);\n};\n\nexport const getOperatorRegionsById = (regions, operatorChannelRegionIds, channelId, operatorId) => {\n return operatorChannelRegionIds[operatorId]?.[channelId]?.map((regionId) => regions[regionId]);\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction getUrlWithParams(src, params) {\n const href = src.split('?')[0];\n const combinedParams = {\n ...Object.fromEntries(new URLSearchParams(src.split('?')[1] || '')),\n ...params,\n };\n\n // Remove anything that is null / undefined / empty string\n Object.keys(combinedParams).forEach((key) => {\n if (combinedParams[key] === null || combinedParams[key] === undefined || combinedParams[key] === '') {\n delete combinedParams[key];\n }\n });\n\n // Using encodeURIComponent here instead of URLSearchParams as URLSearchParams encodes things like spaces differently\n const encodedParamString = Object.keys(combinedParams)\n .map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(combinedParams[k])}`)\n .join('&');\n\n return `${href}?${encodedParamString}`;\n}\n\nconst RedEye = ({ src, params }) => \"\";\n\nRedEye.propTypes = {\n src: PropTypes.string,\n params: PropTypes.object,\n};\n\nRedEye.defaultProps = {\n src: 'https://reporting.breakfreeholidays.co.uk/cgi-bin/rr/blank.gif',\n params: {},\n};\n\nexport default RedEye;\n","import { GET_RESULTS } from '../action-types';\nimport { START_SEARCH } from '../../form/action-types';\nimport { getIsFetching, getRequestStatus } from '../../../requests/selectors';\n\n// Selectors\nexport const [isFetching, hasError, errorData] = getRequestStatus(GET_RESULTS);\nexport const isSearchRequestPending = (state) => getIsFetching(state, START_SEARCH);\nexport const isSearching = (state) => state.search.results.isSearching;\nexport const isWaiting = (state) => state.search.results.isWaiting;\n","const namespace = 'SEARCH/RESULTS/';\n\nexport const GET_RESULTS = namespace + 'GET_RESULTS';\n","import React, { useEffect, useState } from 'react';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Col, Container, Button, Form, Row } from 'react-bootstrap';\nimport ChannelSelect from './ChannelSelect';\nimport RegionSelect from './RegionSelect';\nimport DateDurationSelect from './DateDurationSelect';\nimport GuestsSelect from './GuestsSelect';\nimport { config } from '../../../config';\nimport { channels } from '../../redux/data/channels/selectors';\nimport {\n channelId,\n regionId,\n currentRegions,\n regionsLoading,\n regionsNeedToBeLoaded,\n adults,\n children,\n under5s,\n arrivalDate,\n duration,\n petFriendly,\n params,\n requestParams,\n} from '../../redux/search/form/selectors';\nimport {\n selectChannel,\n selectRegion,\n selectGuestsAdults,\n selectGuestsChildren,\n selectGuestsUnder5s,\n selectDate,\n selectDuration,\n selectPetFriendly,\n startSearch,\n cancelSearch,\n resetArrival,\n} from '../../redux/search/form/actions';\nimport { cancelGetResults } from '../../redux/search/results/actions';\nimport { getRegions } from '../../redux/data/regions/actions';\nimport t from '../../../text';\nimport { resetBFilters, resetNFilters, setState } from '../../redux/appState/actions';\n\nconst SearchBox = (props) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const location = useLocation();\n\n const selectedChannelId = useSelector(channelId);\n const selectedRegionId = useSelector(regionId);\n\n const _regionsLoading = useSelector(regionsLoading);\n const _regionsNeedToBeLoaded = useSelector(regionsNeedToBeLoaded);\n const _currentRegions = useSelector(currentRegions) || [];\n\n const sortedRegions = _currentRegions.sort((a, b) => {\n return a.name.localeCompare(b.name);\n });\n\n const _params = useSelector(params);\n const _requestParams = useSelector(requestParams);\n const _petFriendly = useSelector(petFriendly);\n const { parkId } = useParams();\n\n const _nFilterArray = useSelector((state) => state.appState.nFiltersStateArray);\n const _bFilterArray = useSelector((state) => state.appState.bFiltersStateArray);\n\n const [allowSearchAll, setAllowSearchAll] = useState(false);\n const [showSearchModal, setShowSearchModal] = useState(false);\n const toggleSearchModal = () => setShowSearchModal(!showSearchModal);\n\n const dealOfTheWeek = location.pathname.search('/deal-of-the-week/') !== -1;\n const doFullSearch = !dealOfTheWeek || allowSearchAll;\n\n // Util functions\n const getRegionLabel = () => {\n if (selectedChannelId === 'boats') return t('search.route');\n return t('search.region');\n };\n\n const fetchSearchResults = () => {\n cancelGetResults(); // Cancel last request to get search results\n cancelSearch(); // Cancel last request to start a search\n if (props.parkId) {\n startSearch(dispatch, _params, _requestParams, props.parkId);\n } else {\n startSearch(dispatch, _params, _requestParams, doFullSearch ? undefined : parkId);\n }\n };\n\n const updateRoute = () => {\n let searchQuery = Object.keys(_requestParams)\n .filter((key) => typeof _requestParams[key] !== 'undefined')\n .filter((key) => key !== 'partysize')\n .filter((key) => doFullSearch || (key !== 'channel' && key !== 'region'))\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(_requestParams[key])}`)\n .join('&');\n if (props.parkId) searchQuery = searchQuery + '&park=' + props.parkId;\n\n if (doFullSearch) {\n history.push({ pathname: '/results', search: searchQuery });\n } else {\n history.push({ pathname: location.pathname, search: searchQuery });\n }\n };\n\n const submitAndCloseDropdown = (value, func, selectFunc) => {\n func(dispatch, value);\n setTimeout(() => {\n selectFunc(false);\n }, 650);\n };\n\n // Channels\n const [showChannelSelect, setShowChannelSelect] = useState(false);\n const handleChannelToggle = () => setShowChannelSelect(!showChannelSelect);\n const handleChannelSelect = (event) => {\n const channelChosen = event.target.value;\n const previousChannel = selectedChannelId;\n submitAndCloseDropdown(channelChosen, selectChannel, setShowChannelSelect);\n calculateShouldResetArrival(previousChannel, channelChosen);\n };\n\n // Regions\n const [showRegionSelect, setShowRegionSelect] = useState(false);\n const handleRegionToggle = () => setShowRegionSelect(!showRegionSelect);\n const handleRegionSelect = (event) => {\n const previousChannel = selectedChannelId;\n submitAndCloseDropdown(event.target.value, selectRegion, setShowRegionSelect);\n calculateShouldResetArrival(previousChannel);\n };\n\n // Dates\n const [showDatePanel, setShowDatePanel] = useState(false);\n const handleDateToggle = () => setShowDatePanel(!showDatePanel);\n const handleDateChange = (date, modifiers) => {\n if (modifiers.disabled) return; // Do nothing if date is disabled.\n submitAndCloseDropdown(date, selectDate, setShowDatePanel);\n };\n\n // Pet friendly\n const handlePetFriendlyToggle = (event) => {\n selectPetFriendly(dispatch, event.target.checked);\n };\n\n const handleSearch = () => {\n setShowSearchModal(false);\n updateRoute();\n fetchSearchResults();\n resetNFilters(dispatch, _nFilterArray);\n resetBFilters(dispatch, _bFilterArray);\n setState(\n dispatch,\n 'searchResultsPetFriendlyFilters',\n _petFriendly ? ['y'] : ['n'],\n );\n };\n\n // Load regions, if required\n useEffect(() => {\n if (_regionsNeedToBeLoaded) {\n getRegions(dispatch, selectedChannelId);\n }\n }, [dispatch, _regionsNeedToBeLoaded, selectedChannelId]);\n\n // Select default region if it has been wiped out (happens after chaning channel)\n useEffect(() => {\n if (\n !_regionsNeedToBeLoaded &&\n !_regionsLoading &&\n Object.keys(_currentRegions).length &&\n selectedChannelId &&\n !selectedRegionId\n ) {\n selectRegion(dispatch, sortedRegions[0].id);\n }\n });\n\n useEffect(() => {\n if (window.location.pathname === '/') {\n selectChannel(dispatch, \"ukcaravan\");\n }\n }, []);\n\n const calculateShouldResetArrival = (previousChannel, channelSelected = null) => {\n // reset arrival if user just selected cottages\n if (channelSelected === 'ukcottages') return resetArrival(dispatch);\n\n // reset arrival if user just came off of cottages or switched regions whilst on ukcottages\n if (selectedChannelId === 'ukcottages') return resetArrival(dispatch);\n\n // prevents the possibility of a race case bug\n if (previousChannel === 'ukcottages') return resetArrival(dispatch);\n };\n\n useEffect(() => {\n const hideSearchModalOnResize = () => {\n if(window.outerWidth < 429) return; // Don't do this on mobile phones.\n let timeout;\n window.clearInterval(timeout);\n timeout = setTimeout(() => setShowSearchModal(false), 200); // debounce for performance\n };\n window.addEventListener('resize', hideSearchModalOnResize);\n return () => {\n window.removeEventListener('resize', hideSearchModalOnResize);\n };\n });\n\n return (\n <>\n \n\n \n \n\n
\n \n \n \n \n \n \n \n \n \n \n selectDuration(dispatch, parseInt(e.target.value))}\n onDateChange={handleDateChange}\n onToggle={handleDateToggle}\n show={showDatePanel}\n disabled={!doFullSearch}\n />\n \n \n selectGuestsAdults(dispatch, num)}\n onChildrenChange={(num) => selectGuestsChildren(dispatch, num)}\n onUnder5sChange={(num) => selectGuestsUnder5s(dispatch, num)}\n selectedChannel={selectedChannelId}\n />\n \n {_params.channelId !== 'eurocaravan' && (\n \n {dealOfTheWeek ? (\n
\n \n {t('search.letMeSearch')}\n \n setAllowSearchAll(!allowSearchAll)}\n />\n
\n ) : (\n
\n )}\n\n
\n \n {t('search.showMePetFriendly')}\n \n \n
\n \n )}\n
\n \n\n \n  \n \n {t('search.search')}\n \n \n
\n
\n
\n \n );\n};\n\nSearchBox.defaultProps = {\n text: 'white',\n bg: 'dark',\n isInPopup: false,\n};\n\nexport default SearchBox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Icon = (props) => (\n \n);\n\nIcon.propTypes = {\n className: PropTypes.string,\n icon: PropTypes.string.isRequired,\n size: PropTypes.oneOf(['h1', 'h2', 'h3', 'h4', 'text-sm']),\n theme: PropTypes.oneOf(['primary', 'secondary', 'dark', 'darker', 'white']),\n};\n\nexport default Icon;\n","const namespace = 'DATA/REGIONS/';\n\nexport const GET_REGIONS = namespace + 'GET_REGIONS';\nexport const GET_OPERATOR_REGIONS = namespace + 'GET_OPERATOR_REGIONS';\n","//import { slugify } from './utils/string';\n\n/**\n * Returns an array of data containing all the settings to go in headerLinks\n * Takes an array of what links should be in the dropdown and in what order\n * @param {array} array - List of numbers representing links and their ordering\n * @param {boolean} boolean - Boolean to hide offers tab or not in main header, defaults to showing\n */\nexport const getHeaderLinks = (order, hideOffers) => {\n const linkOptions = {\n 1: {\n label: 'Ferries',\n href: '/ferry-deals',\n },\n 2: {\n label: 'Hotels',\n href: '/hotels',\n },\n 3: {\n label: 'UK Attractions',\n href: '/attractions',\n },\n 4: {\n label: 'Inspiration',\n href: '/inspiration',\n },\n 5: {\n label: 'Themed Breaks',\n href: '/themed-breaks',\n },\n 6: {\n label: 'Caravan Sales',\n href: '/holiday-home-sales',\n },\n 7: {\n label: 'Breakfree Blog',\n href: 'https://www.breakfreeholidays.co.uk/blog/',\n },\n };\n\n const linksToReturn = [];\n order.forEach((numb) => {\n linksToReturn.push(linkOptions[numb]);\n });\n\n return [\n !hideOffers && {\n label: 'Offers',\n href: '/offers',\n },\n {\n type: 'channels',\n },\n linksToReturn.length && {\n label: 'More',\n items: linksToReturn,\n },\n ];\n};\n\n/**\n * Returns an object that contains all of the API endpoint URLs used by the site\n * @param {object} config - The site config object\n * @param {string} source - The source to use for the API (api or mocks). Default: api.\n */\nexport const getApi = (config, source = 'api') => {\n switch (source) {\n case 'mocks':\n return {\n init: '/mocks/init.json',\n channels: '/mocks/data/channels.json',\n regions: '/mocks/data/regions.json',\n channelregions: '/mocks/data/channelRegions.json',\n parkDetails: '/mocks/park/parkdetails.json',\n parkResults: '/mocks/park/parkresults.json',\n parkReviews: '/mocks/park/parkreviews.json',\n parks: '/mocks/data/parks.json',\n login: '/mocks/user/login.json', // Wont currently work with mocks as this is a POST request\n logout: '/mocks/user/logout.json',\n operators: '/mocks/data/operators.json',\n filters: '/mocks/data/filters.json',\n search: '/mocks/search/search.json',\n searchResults: '/mocks/search/searchresults.json',\n booking: '/mocks/booking/booking.json',\n bookingGetDeposit: '/mocks/booking/getdeposit.json',\n bookingGetExtras: '/mocks/booking/getextras.json',\n bookingSetExtras: '/mocks/booking/setextras.json',\n bookingSetPartyDetails: '/mocks/booking/setpartydetails.json',\n bookingPrePayment: '/mocks/booking/prepayment.json',\n bookingPostPayment: '/mocks/booking/postpayment.json',\n userSetDetails: '/mocks/user/setuserdetails.json', // Wont currently work with mocks as this is a POST request\n passwordReset: '/mocks/user/requestpasswordreset.json', // Wont currently work with mocks as this is a POST request\n };\n default:\n return {\n init: `${config['api.url']}/api/initial`,\n regions: '/api/channelregions',\n parkDetails: '/api/parkdetails',\n parkResults: '/api/parkresults',\n parkReviews: '/api/tripadvisor',\n parks: '/api/parks',\n login: '/api/login',\n logout: '/api/logout',\n operators: '/api/operators',\n search: '/api/search',\n searchResults: '/api/searchresults',\n booking: '/api/book',\n bookingGetDeposit: '/api/getdeposit',\n bookingGetExtras: '/api/getextras',\n bookingSetExtras: '/api/setextras',\n bookingSetPartyDetails: '/api/setpartydetails',\n bookingPrePayment: '/api/prepayment',\n bookingPostPayment: '/api/postpayment',\n bookingSetDiscount: '/api/setdiscount',\n userGetBookings: '/api/mybookings',\n userSetDetails: '/api/setuserdetails',\n passwordReset: '/api/resetpassword',\n newsletterSignup: '/api/newsletter',\n contact: '/api/contact',\n cottageDates: '/api/getcottagedates',\n cms: `${config['cms.url']}`, // This should point to the CMS used for content (currently headless wordpress)\n nav: '/nav.json',\n unitTypesExtraData: (operatorName, parkName) =>\n `https://content.breakfreeholidays.co.uk/json/accom-types/${operatorName}/${parkName}.json`,\n unitTypesExtraDataPID: (parkID) =>\n `https://content.breakfreeholidays.co.uk/json/accom-types/new/${parkID}.json`,\n };\n }\n};\n\n/**\n * Returns an object that contains all of the default CMS content route data\n * @param {object} config - The site config object\n */\nexport const getContentRoutes = () => {\n return [\n { path: '/insurance', url: 'age/83' },\n { path: '/ferry-deals', url: 'age/212' },\n { path: '/attractions', url: 'age/656' },\n { path: '/weekend-breaks', url: 'age/1876' },\n { path: '/holiday-home-sales', url: 'age/1386' },\n { path: '/uk-spa-breaks', url: 'age/2290' },\n { path: '/themed-breaks', url: 'age/1265' },\n ];\n};\n\n/**\n * Returns an object that contains all of the footer links\n * @param {object} config - The site config object\n */\nexport const getFooterLinks = (config) => ({\n findAHoliday1: {\n title: 'footer.nav.holidayType',\n links: [\n { id: 'ukHolidayParks', title: 'UK Holiday Parks', path: '/channel/ukcaravan' },\n { id: 'campingTouring', title: 'Camping & Touring', path: '/channel/uktouring' },\n { id: 'hotels', title: 'Hotels', path: '/hotels' },\n { id: 'lodges', title: 'Lodges', path: '/channel/uklodge' },\n { id: 'boats', title: 'Boating Holidays', path: '/region/boats' },\n { id: 'europeanHolidays', title: 'European Holidays', path: '/channel/eurocaravan' },\n { id: 'ferryDeals', title: 'Ferry Deals', path: '/ferry-deals' },\n { id: 'cheapercaravan', title: 'Cheap Caravan Holidays', path: '/cheap-caravan-holidays-uk-europe' },\n {\n id: 'offers',\n title: 'Holiday Offers',\n path: '/offers',\n },\n ],\n },\n findAHoliday2: {\n title: 'footer.nav.findAHoliday',\n links: [\n { id: 'byBrand', title: 'Holidays by Brand', path: '/a/3559/brands' },\n { id: 'holidaysSuffolk', title: 'Holidays in Suffolk', path: '/holidays/ukcaravan/4/suffolk' },\n ],\n },\n holidays: {\n title: 'footer.nav.companyName',\n links: [\n { id: 'contact', title: 'Contact Us', path: '/contact-us' },\n { id: 'faqs', title: 'FAQs', path: '/faq' },\n {\n id: 'blog',\n title: 'Holiday Blog',\n path: `${config['global.siteUrl']}/blog`,\n external: true,\n },\n { id: 'about', title: 'About us', path: '/about-us' },\n { id: 'becomeAffiliate', title: 'Become an Affiliate', path: 'https://ui.awin.com/merchant-profile/2594', external: true, },\n ],\n },\n information: {\n title: 'footer.nav.information',\n links: [\n { id: 'insurance', title: 'Insurance', path: '/insurance' },\n { id: 'terms', title: 'Terms & Conditions', path: '/terms' },\n { id: 'privacy', title: 'Privacy & Cookie Policy', path: '/privacy-policy' },\n { id: 'charter', title: 'Customer Charter & Price Promise', path: '/customer-charter' },\n ],\n },\n});\n\n// NOTES\n\n// Choose if you want to use 3D Secure for payments or not. Please note that this has liability implications.\n// See https://developer.paypal.com/docs/business/checkout/add-capabilities/3d-secure for more info.\n\n// The avoid CORS errors, the local dev enviroment will proxy requests to the API server.\n// To change API server that local dev environment proxies to, change the 'proxy' field in package.json.\n// CRA only supports one proxy server, so we use it for the API server. Requests to the CMS are not proxied.\n\nexport const defaultConfig = {\n 'awin.enable': false,\n 'awin.trackingId': '2594',\n 'cms.url': undefined,\n 'footer.showReviews': true,\n 'footer.showTrust': true,\n 'footer.newsletter.bgColour': 'dark-blue',\n 'footer.trust.logoHeight': 32,\n 'forms.enableNewsletterSignup': true,\n googleMapsApiKey: 'AIzaSyB7PsauX1x8tFPwX-6zd5BSVvFHBtuRclc',\n 'google.gtm': undefined,\n 'global.brandName': undefined,\n 'global.feefoReviews': true,\n 'global.spinnerIcon': 'spinner-circle',\n 'global.spinnerTheme': 'primary',\n 'global.siteUrl': undefined,\n 'global.email': undefined,\n 'global.textHighlight': 'alt-primary',\n 'header.logo.height': 40,\n 'header.static': false,\n 'header.style': 'dark',\n 'header.megaMenu': 'megamenu-default.min.json',\n 'header.showOffersLink': true,\n 'homepage.dotw.colour': 'primary',\n 'parks.showFeefoRating': true,\n 'parks.showReviews': true,\n 'payment.enable3DSecure': true,\n 'payment.paypal': true,\n 'payment.paypalCard': true,\n 'payment.payit': false,\n siteCode: 'BF',\n 'searchBox.buttonColour': 'secondary',\n 'searchBox.allowFiveDays': false,\n 'socialMedia.telephone': undefined,\n 'socialMedia.facebook': undefined,\n 'socialMedia.instagram': undefined,\n 'socialMedia.twitter': undefined,\n 'socialMedia.youtube': undefined,\n 'urls.privacyPolicy': '/privacy-policy',\n 'urls.termsAndConditions': '/terms',\n 'user.optin.emailOpt': true,\n 'user.optin.smsOpt': true,\n 'user.optin.postOpt': false,\n 'user.optin.thirdOpt': true,\n 'user.optin.firstOpt': false,\n};\n","import { defaultConfig, getApi, getContentRoutes, getFooterLinks, getHeaderLinks } from '../../base/defaultConfig';\nimport { slugify } from '../../base/utils/string';\n\nimport logoDark from './images/logo-dark.svg';\nimport logoLight from './images/logo-light.svg';\n\nexport const config = {\n ...defaultConfig,\n 'cms.url': '/wp-json/wp/v2',\n 'footer.trust.logoHeight': 22,\n 'global.brandName': 'Breakfree Holidays',\n 'global.siteUrl': 'https://www.breakfreeholidays.co.uk',\n 'global.email': 'enquiries@breakfreeholidays.co.uk',\n 'google.gtm': 'GTM-K92HRPS',\n 'header.logo.height': 40,\n //'payment.payit': true,\n siteCode: 'SN',\n 'socialMedia.telephone': '',\n 'socialMedia.facebook': 'https://www.facebook.com/breakfreeholidays/',\n 'socialMedia.instagram': 'https://www.instagram.com/breakfreeholidaysofficial/',\n 'socialMedia.twitter': 'https://twitter.com/BreakFreeHols',\n 'socialMedia.youtube': 'https://www.youtube.com/user/BreakFreeHolidays',\n 'user.optin.emailOpt': false,\n 'user.optin.smsOpt': false,\n 'user.optin.firstOpt': true,\n 'payment.enable3DSecure': true,\n 'api.url': '',\n};\n\nexport const contentRoutes = [\n ...getContentRoutes(config),\n { path: '/privacy-policy', url: 'age/3' },\n { path: '/customer-charter', url: 'age/84' },\n { path: '/offers', url: 'age/1824' },\n { path: `/${slugify(config['global.brandName'])}-offers`, url: 'age/221' },\n { path: '/about-us', url: 'age/1512' },\n { path: '/european-holiday-parks', url: 'age/1572' },\n { path: '/hotels', url: 'age/1828' },\n { path: '/cheap-caravan-holidays-uk-europe', url: 'age/225' },\n];\n\nconst footerData = getFooterLinks(config);\nfooterData.findAHoliday1.links[5].path = '/european-holiday-parks';\nexport const footerLinks = {\n ...footerData,\n findAHoliday1: {\n ...footerData.findAHoliday1,\n links: footerData.findAHoliday1.links,\n },\n holidays: {\n title: 'footer.nav.companyName',\n links: [\n { id: 'contact', title: 'Contact Us', path: '/contact-us' },\n { id: 'faqs', title: 'FAQs', path: '/faq' },\n { id: 'about', title: 'About us', path: '/about-us' },\n { id: 'becomeAffiliate', title: 'Become an Affiliate', path: 'https://ui.awin.com/merchant-profile/2594', external: true, },\n ],\n },\n};\n\nexport const images = {\n headerLogoDark: logoDark,\n headerLogoLight: logoLight,\n logoDark: logoDark,\n logoLight: logoLight,\n};\n\nexport const urls = {\n ...getApi(config, 'api'),\n};\n\nexport const HeaderLinks = getHeaderLinks([1, 2, 3, 4, 5, 7]);\n","const namespace = 'PAGES/BROWSE_PARKS/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\nexport const SELECT_REGION = namespace + 'SELECT_REGION';\n","import { SET_STATE, RESET_N_FILTERS, RESET_B_FILTERS } from './action-types';\nimport { GET_RESULTS } from '../../redux/search/results/action-types';\nimport { SELECT_CHANNEL, SELECT_REGION } from '../../redux/pages/browseParks/action-types';\nimport { SUCCESS } from '../../redux/constants';\n\nconst defaultState = {\n bFiltersStateArray: [],\n nFiltersStateArray: [],\n};\n\nfunction deleteFromState(state, key) {\n delete state[key];\n return state;\n}\n\n//const resetNFilters = (state) => {\n// if (!state || !state.length) return;\n// return Array(state.length).fill(-1);\n//}\n\nexport const reducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_STATE:\n return {\n ...state,\n [action.payload.key]: action.payload.data,\n };\n case RESET_N_FILTERS:\n return {\n ...state,\n nFiltersStateArray: [],\n };\n case RESET_B_FILTERS:\n return {\n ...state,\n bFiltersStateArray: [],\n };\n case GET_RESULTS + SUCCESS:\n return deleteFromState({ ...state }, 'searchResultsOperatorFilters');\n case SELECT_CHANNEL:\n case SELECT_REGION:\n return deleteFromState({ ...state }, 'parksOperatorFilters');\n default:\n return state;\n }\n};\n\nexport default reducer;\n","const namespace = 'HEADER/';\n\nexport const GET_NAV = namespace + 'GET_NAV';\n","import { GET_NAV } from './action-types';\nimport { SUCCESS } from '../constants';\n\nconst defaultState = {\n nav: [],\n navExpiryTime: 0,\n};\n\nexport const reducer = (state = defaultState, action) => {\n switch (action.type) {\n case GET_NAV + SUCCESS:\n return {\n ...state,\n nav: action.payload.response.data,\n navExpiryTime: Date.now(), // add to this number to enable caching\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_INIT_DATA } from '../init/action-types';\nimport { SUCCESS } from '../constants';\n\nconst initialState = {\n content: [],\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n return {\n ...state,\n content: action.payload.response.data.data.homepageLayout,\n feefo: action.payload.response.data.data.feefo,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_INIT_DATA } from './action-types';\nimport { SUCCESS } from '../constants';\n\nconst initialState = {\n ready: false,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n return {\n ready: true,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { APP_INIT } from '../init/action-types';\nimport { CANCELLED, FAILURE, REQUEST, RESET, SUCCESS } from '../constants';\n\nconst initialState = {\n fetching: [],\n errors: {},\n};\n\nexport const apiReducerFactory = (actionType) => (state = initialState, action) => {\n switch (action.type) {\n case APP_INIT:\n case actionType + RESET:\n return initialState;\n case actionType + REQUEST:\n const errors = { ...state.errors };\n delete errors[action.payload.requestId];\n\n return {\n fetching: [...state.fetching, action.payload.requestId],\n errors,\n };\n case actionType + SUCCESS:\n case actionType + CANCELLED:\n return {\n ...state,\n fetching: state.fetching.filter((id) => id !== action.payload.requestId),\n };\n case actionType + FAILURE:\n const output = {\n fetching: state.fetching.filter((id) => id !== action.payload.requestId),\n errors: {\n ...state.errors,\n [action.payload.requestId]: action.payload,\n },\n };\n delete output.errors[action.payload.requestId].params.passwd; // Do not store passwords\n return output;\n default:\n return state;\n }\n};\n\nexport default apiReducerFactory;\n","const namespace = 'BOOKING/BOOKING/';\n\nexport const COMPLETE_BOOKING = namespace + 'COMPLETE_BOOKING';\nexport const CREATE_BOOKING = namespace + 'CREATE_BOOKING';\nexport const GET_DEPOSIT = namespace + 'GET_DEPOSIT';\nexport const SET_DISCOUNT_CODE = namespace + 'SET_DISCOUNT_CODE';\nexport const SET_DISCOUNT_VALUE = namespace + 'SET_DISCOUNT_VALUE';\nexport const LOAD_BOOKING = namespace + 'LOAD_BOOKING';\nexport const STEP_COMPLETED = namespace + 'STEP_COMPLETED';\nexport const STEP_NOT_COMPLETED = namespace + 'STEP_NOT_COMPLETED';\n","const namespace = 'BOOKING/EXTRAS/';\n\nexport const GET_EXTRAS = namespace + 'GET_EXTRAS';\nexport const SET_EXTRAS = namespace + 'SET_EXTRAS';\n","const namespace = 'BOOKING/FORM/';\n\nexport const CHANGE_DETAIL = namespace + 'CHANGE_DETAIL';\nexport const CHANGE_PARTY_DETAIL = namespace + 'CHANGE_PARTY_DETAIL';\nexport const SELECT_ARE_YOU_GOING = namespace + 'SELECT_ARE_YOU_GOING';\nexport const SELECT_EXTRA = namespace + 'SELECT_EXTRA';\nexport const SELECT_PAYMENT_OPTION = namespace + 'SELECT_PAYMENT_OPTION';\nexport const SELECT_OFFERS_OPTION = namespace + 'SELECT_OFFERS_OPTION';\nexport const SET_PARTY_DETAILS = namespace + 'SET_PARTY_DETAILS';\n\n","const namespace = 'BOOKING/PAYMENT/';\n\nexport const PRE_PAYMENT = namespace + 'PRE_PAYMENT';\nexport const POST_PAYMENT = namespace + 'POST_PAYMENT';\nexport const SET_PAYMENT_USED = namespace + 'SET_PAYMENT_USED';\n","const namespace = 'DATA/FILTERS/';\n\nexport const GET_FILTERS = namespace + 'GET_FILTERS';\n","const namespace = 'DATA/OPERATORS/';\n\nexport const GET_OPERATORS = namespace + 'GET_OPERATORS';\n","const namespace = 'DATA/PARKS/';\n\nexport const GET_PARKS = namespace + 'GET_PARKS';\n","const namespace = 'PARK/DETAILS/';\n\nexport const GET_PARK_DETAILS = namespace + 'GET_PARK_DETAILS';\n","const namespace = 'PARK/RESULTS/';\n\nexport const GET_PARK_RESULTS = namespace + 'GET_PARK_RESULTS';\n","const namespace = 'PARK/REVIEWS/';\n\nexport const GET_PARK_REVIEWS = namespace + 'GET_PARK_REVIEWS';","const namespace = 'UNIT_TYPES/';\n\nexport const GET_EXTRA_DATA = namespace + 'GET_EXTRA_DATA';\n","const namespace = 'USER/';\n\nexport const CHANGE_PASSWORD = namespace + 'CHANGE_PASSWORD';\nexport const CREATE_USER = namespace + 'CREATE_USER';\nexport const GET_BOOKINGS = namespace + 'GET_BOOKINGS';\nexport const LOGIN = namespace + 'LOGIN';\nexport const LOGOUT = namespace + 'LOGOUT';\nexport const REQUEST_PASSWORD_RESET = namespace + 'REQUEST_PASSWORD_RESET';\nexport const UPDATE_USER = namespace + 'UPDATE_USER';\n","import { combineReducers } from 'redux';\nimport apiReducerFactory from './apiReducerFactory';\n\nimport * as booking from '../booking/booking/action-types';\nimport * as bookingExtras from '../booking/extras/action-types';\nimport * as bookingForm from '../booking/form/action-types';\nimport * as bookingPayment from '../booking/payment/action-types';\n\nimport * as dataChannels from '../data/channels/action-types';\nimport * as dataFilters from '../data/filters/action-types';\nimport * as dataOperators from '../data/operators/action-types';\nimport * as dataParks from '../data/parks/action-types';\nimport * as dataParkDetails from '../data/park/details/action-types';\nimport * as dataParkResults from '../data/park/results/action-types';\nimport * as dataParkReviews from '../data/park/reviews/action-types';\nimport * as dataRegions from '../data/regions/action-types';\nimport * as dataUnitTypes from '../data/unitTypes/action-types';\n\nimport * as header from '../header/action-types';\nimport * as init from '../init/action-types';\n\nimport * as searchForm from '../search/form/action-types';\nimport * as searchResults from '../search/results/action-types';\n\nimport * as user from '../user/action-types';\n\nexport const reducer = combineReducers({\n [booking.CREATE_BOOKING]: apiReducerFactory(booking.CREATE_BOOKING),\n [booking.GET_DEPOSIT]: apiReducerFactory(booking.GET_DEPOSIT),\n [booking.SET_DISCOUNT_CODE]: apiReducerFactory(booking.SET_DISCOUNT_CODE),\n [bookingExtras.GET_EXTRAS]: apiReducerFactory(bookingExtras.GET_EXTRAS),\n [bookingExtras.SET_EXTRAS]: apiReducerFactory(bookingExtras.SET_EXTRAS),\n [bookingForm.SET_PARTY_DETAILS]: apiReducerFactory(bookingForm.SET_PARTY_DETAILS),\n [bookingPayment.PRE_PAYMENT]: apiReducerFactory(bookingPayment.PRE_PAYMENT),\n [bookingPayment.POST_PAYMENT]: apiReducerFactory(bookingPayment.POST_PAYMENT),\n [dataChannels.GET_CHANNELS]: apiReducerFactory(dataChannels.GET_CHANNELS),\n [dataFilters.GET_FILTERS]: apiReducerFactory(dataFilters.GET_FILTERS),\n [dataOperators.GET_OPERATORS]: apiReducerFactory(dataOperators.GET_OPERATORS),\n [dataParks.GET_PARKS]: apiReducerFactory(dataParks.GET_PARKS),\n [dataParkDetails.GET_PARK_DETAILS]: apiReducerFactory(dataParkDetails.GET_PARK_DETAILS),\n [dataParkResults.GET_PARK_RESULTS]: apiReducerFactory(dataParkResults.GET_PARK_RESULTS),\n [dataParkReviews.GET_PARK_REVIEWS]: apiReducerFactory(dataParkReviews.GET_PARK_REVIEWS),\n [dataRegions.GET_OPERATOR_REGIONS]: apiReducerFactory(dataRegions.GET_OPERATOR_REGIONS),\n [dataRegions.GET_REGIONS]: apiReducerFactory(dataRegions.GET_REGIONS),\n [dataUnitTypes.GET_EXTRA_DATA]: apiReducerFactory(dataUnitTypes.GET_EXTRA_DATA),\n [header.GET_NAV]: apiReducerFactory(header.GET_NAV),\n [init.GET_INIT_DATA]: apiReducerFactory(init.GET_INIT_DATA),\n [searchForm.START_SEARCH]: apiReducerFactory(searchForm.START_SEARCH),\n [searchResults.GET_RESULTS]: apiReducerFactory(searchResults.GET_RESULTS),\n [user.CHANGE_PASSWORD]: apiReducerFactory(user.CHANGE_PASSWORD),\n [user.CREATE_USER]: apiReducerFactory(user.CREATE_USER),\n [user.GET_BOOKINGS]: apiReducerFactory(user.GET_BOOKINGS),\n [user.LOGIN]: apiReducerFactory(user.LOGIN),\n [user.LOGOUT]: apiReducerFactory(user.LOGOUT),\n [user.REQUEST_PASSWORD_RESET]: apiReducerFactory(user.REQUEST_PASSWORD_RESET),\n [user.UPDATE_USER]: apiReducerFactory(user.UPDATE_USER),\n})\n\nexport default reducer;\n","import { SUCCESS } from '../../constants';\nimport {\n COMPLETE_BOOKING,\n CREATE_BOOKING,\n GET_DEPOSIT,\n LOAD_BOOKING,\n SET_DISCOUNT_CODE,\n SET_DISCOUNT_VALUE,\n STEP_COMPLETED,\n STEP_NOT_COMPLETED,\n} from './action-types';\n\nconst initialState = {\n pendingParams: {},\n type: undefined,\n channelId: undefined,\n unitId: undefined,\n unitTypeId: undefined,\n unitPrice: undefined, // new bookings only\n totalCost: undefined, // existing bookings only\n amountPaid: undefined, // exiting bookings only\n parkId: undefined,\n arrivalDate: undefined,\n duration: undefined,\n bookingId: undefined,\n message: undefined,\n deposit: undefined,\n compulsoryDeposit: undefined,\n depositText: undefined,\n discountApplied: false,\n discountCode: '',\n discountValue: 0,\n dueDate: undefined,\n stepsCompleted: [],\n confirmationId: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case CREATE_BOOKING:\n return {\n ...initialState,\n pendingParams: action.payload,\n };\n case CREATE_BOOKING + SUCCESS:\n return {\n ...state,\n pendingParams: {},\n ...state.pendingParams,\n message: action.payload.response.data.data.booking.message,\n bookingId:\n action.payload.response.data.data.booking.bookId ||\n action.payload.response.data.data.booking.bookID, // Hack for backend bug where we get bookID instead of bookId\n };\n case LOAD_BOOKING:\n return {\n ...initialState,\n ...action.payload,\n };\n case GET_DEPOSIT + SUCCESS:\n return {\n ...state,\n deposit: parseFloat(action.payload.response.data.data.deposit) || null,\n depositText: action.payload.response.data.data.depositMsg,\n dueDate: action.payload.response.data.data.dueDate,\n compulsoryDeposit: action.payload.response.data.data.compulsoryDeposit,\n };\n case SET_DISCOUNT_CODE:\n return {\n ...state,\n discountCode: action.payload,\n };\n case SET_DISCOUNT_VALUE:\n return {\n ...state,\n discountValue: action.payload,\n discountApplied: action.payload > 0 ? true : false,\n };\n case STEP_COMPLETED:\n return {\n ...state,\n stepsCompleted: [...state.stepsCompleted, action.payload],\n };\n case STEP_NOT_COMPLETED:\n return {\n ...state,\n stepsCompleted: state.stepsCompleted.filter((item) => item !== action.payload),\n };\n case COMPLETE_BOOKING:\n return {\n ...state,\n bookingId: undefined,\n confirmationId: state.bookingId,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import {\n CHANGE_DETAIL,\n CHANGE_PARTY_DETAIL,\n SELECT_ARE_YOU_GOING,\n SELECT_EXTRA,\n SELECT_OFFERS_OPTION,\n SELECT_PAYMENT_OPTION,\n} from './action-types';\nimport { CREATE_BOOKING, GET_DEPOSIT, LOAD_BOOKING } from '../booking/action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n details: {},\n extras: {},\n offers: {\n emailOpt: 'N',\n smsOpt: 'N',\n postOpt: 'N',\n thirdOpt: 'N',\n },\n party: {\n areYouGoing: undefined,\n values: {},\n },\n payment: {\n paymentOption: 'deposit',\n },\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case CHANGE_DETAIL:\n return {\n ...state,\n details: {\n ...state.details,\n [action.payload.key]: action.payload.value,\n },\n };\n case CHANGE_PARTY_DETAIL:\n return {\n ...state,\n party: {\n ...state.party,\n values: {\n ...state.party.values,\n [action.payload.key]: action.payload.value,\n },\n },\n };\n case CREATE_BOOKING + SUCCESS:\n case LOAD_BOOKING:\n return {\n ...state,\n extras: {},\n };\n case GET_DEPOSIT + SUCCESS:\n if (action.payload.response.data.data.deposit !== '') {\n return state;\n } else {\n return {\n ...state,\n payment: {\n ...state.payment,\n paymentOption: 'full',\n },\n };\n }\n case SELECT_ARE_YOU_GOING:\n return {\n ...state,\n party: {\n ...state.party,\n areYouGoing: action.payload.value,\n values:\n action.payload.value === 'Y'\n ? {\n ...state.party.values,\n ...action.payload.user,\n }\n : state.party.values,\n },\n };\n case SELECT_EXTRA:\n return {\n ...state,\n extras: {\n ...state.extras,\n [action.payload.key]: action.payload.value,\n },\n };\n case SELECT_OFFERS_OPTION:\n return {\n ...state,\n offers: {\n ...state.offers,\n [action.payload.key]: action.payload.value,\n },\n };\n case SELECT_PAYMENT_OPTION:\n return {\n ...state,\n payment: {\n ...state.payment,\n paymentOption: action.payload,\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_EXTRAS } from './action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n extras: [],\n showDiscountBox: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_EXTRAS + SUCCESS:\n return {\n ...initialState,\n extras: action.payload.response.data.data.extras || [],\n showDiscountBox: action.payload.response.data.data.showDiscountBox,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { PRE_PAYMENT, POST_PAYMENT, SET_PAYMENT_USED } from './action-types';\nimport { CREATE_BOOKING, LOAD_BOOKING } from '../booking/action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n paypal: {},\n postPayment: undefined,\n paymntRecId: undefined,\n paymntUsed: undefined,\n cardinal: {},\n payit: {},\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case CREATE_BOOKING:\n case LOAD_BOOKING:\n return {\n ...initialState,\n };\n case PRE_PAYMENT:\n case POST_PAYMENT:\n return {\n ...state,\n postPayment: undefined,\n };\n case PRE_PAYMENT + SUCCESS:\n return {\n ...state,\n postPayment: undefined,\n paymntRecId:\n action.payload.response.data.data.paymntRecId ||\n action.payload.response.data.data.paypal.paymntRecId, // Slight hack as paymntRecId moved\n ...action.payload.response.data.data,\n };\n case SET_PAYMENT_USED:\n return {\n ...state,\n paymntUsed: action.payload,\n };\n case POST_PAYMENT + SUCCESS:\n return {\n ...state,\n postPayment: action.payload.response.data.data || {},\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_INIT_DATA } from '../../init/action-types';\nimport { GET_CHANNELS } from './action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n channels: [],\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n case GET_CHANNELS + SUCCESS:\n if (action.payload.response.data.data.channels) {\n return {\n channels: [...action.payload.response.data.data.channels],\n };\n }\n return state;\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_INIT_DATA } from '../../init/action-types';\nimport { GET_OPERATOR_REGIONS, GET_REGIONS } from './action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n regions: {},\n channelRegionIds: {},\n operatorChannelRegionIds: {},\n};\n\nconst getRegionsFromChannel = (regions) => {\n const output = {};\n Object.keys(regions).forEach((regionId) => {\n output[regionId] = {\n id: regionId,\n ...regions[regionId],\n };\n });\n return output;\n};\n\nconst getRegions = (initRegionData) => {\n let output = {};\n Object.keys(initRegionData).forEach((channelId) => {\n output = {\n ...output,\n ...getRegionsFromChannel(initRegionData[channelId]),\n };\n });\n return output;\n};\n\nconst getChannelRegionIds = (regions) => {\n const output = {};\n Object.keys(regions).forEach((channelId) => {\n output[channelId] = Object.keys(regions[channelId]);\n });\n return output;\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n case GET_REGIONS + SUCCESS:\n if (action.payload.response.data.data.regions) {\n return {\n ...state,\n regions: {\n ...state.regions,\n ...getRegions(action.payload.response.data.data.regions),\n },\n channelRegionIds: {\n ...state.channelRegionIds,\n ...getChannelRegionIds(action.payload.response.data.data.regions),\n },\n };\n }\n return state;\n case GET_OPERATOR_REGIONS + SUCCESS:\n if (action.payload.response.data.data.regions) {\n return {\n ...state,\n regions: {\n ...state.regions,\n ...getRegions(action.payload.response.data.data.regions),\n },\n operatorChannelRegionIds: {\n ...state.operatorChannelRegionIds,\n [action.payload.params.opId]: {\n ...(state.operatorChannelRegionIds[action.payload.params.opId] || {}),\n ...getChannelRegionIds(action.payload.response.data.data.regions),\n },\n },\n };\n }\n return state;\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_INIT_DATA } from '../../init/action-types';\nimport { GET_FILTERS } from './action-types';\nimport { SUCCESS } from '../../constants';\n\nconst initialState = {\n filters: {},\n};\n\nconst getFilters = (filters) => {\n let newFilters = filters.map((f,i) => {\n return ({...f, id: i, type: 'compare' in f ? 'nFilt' : 'bFilt'});\n });\n return newFilters;\n};\n\nconst fixFilterGroups = (fg) => { // TODO: Delete this when filterGroups already includes 5\n if (!Object.keys(fg).includes('5')) fg['5'] = {};\n return fg;\n}\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n case GET_FILTERS + SUCCESS:\n if (action.payload.response.data.data.Filters) {\n \n return {\n filters: {\n ...state.filters,\n ...getFilters(action.payload.response.data.data.Filters),\n },\n bFilters: {\n ...state.bFilters,\n ...action.payload.response.data.data.bFilters,\n },\n nFilters: {\n ...state.nFilters,\n ...action.payload.response.data.data.nFilters,\n },\n filterGroups: {\n ...state.filterGroups,\n ...fixFilterGroups(action.payload.response.data.data.filterGroups),\n },\n };\n }\n return state;\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_OPERATORS } from './action-types';\nimport { GET_INIT_DATA } from '../../init/action-types';\nimport { SUCCESS } from '../../constants';\nimport { arrayToObject } from '../../../utils/utils';\n\nconst initialState = {\n operators: {},\n channelOperatorIds: {},\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n if (action.payload.response.data.data.operators) {\n let operators = { ...state.operators };\n let channelOperatorIds = { ...state.channelOperatorIds };\n\n Object.keys(action.payload.response.data.data.operators).forEach((channel) => {\n channelOperatorIds[channel] = [];\n action.payload.response.data.data.operators[channel].forEach((operator) => {\n operators[operator.opId] = operator;\n channelOperatorIds[channel].push(operator.opId);\n });\n });\n\n return {\n ...state,\n operators,\n channelOperatorIds,\n };\n }\n return state;\n case GET_OPERATORS + SUCCESS:\n return {\n ...state,\n operators: {\n ...state.operators,\n ...arrayToObject(action.payload.response.data.data.operators, 'opId'),\n },\n channelOperatorIds: {\n ...state.channelOperatorIds,\n [action.payload.params.channel]: action.payload.response.data.data.operators.map((op) => op.opId),\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","export const getParkById = (parks, parkId) => {\n return parks[parkId];\n};\n\nexport const getParksByRegionId = (parks, regionParkIds, regionId) => {\n return regionParkIds[regionId]?.map((id) => parks[id]);\n};\n\nexport const processPark = (park) => ({\n ...park,\n pos: {\n lat: parseFloat(park.lat),\n lng: parseFloat(park.lon),\n },\n});\n","import { GET_PARK_DETAILS } from './action-types';\nimport { SUCCESS } from '../../../constants';\nimport { processPark } from '../../parks/utils';\n\nconst initialState = {\n parkDetails: {},\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_PARK_DETAILS + SUCCESS:\n return {\n ...state,\n parkDetails: {\n ...state.parkDetails,\n [action.payload.params.parkId]: processPark(action.payload.response.data.data.park),\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_PARK_RESULTS } from './action-types';\nimport { GET_RESULTS } from '../../../search/results/action-types';\nimport { SUCCESS } from '../../../constants';\n\nconst initialState = {\n parkResults: {},\n};\n\nfunction processResults(data) {\n const output = { ...data };\n delete output['unitTypes'];\n output.timeLoaded = Date.now();\n return output;\n}\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_RESULTS + SUCCESS:\n return initialState;\n case GET_PARK_RESULTS + SUCCESS:\n return {\n ...state,\n parkResults: {\n ...state.parkResults,\n [action.payload.params.parkId]: processResults(action.payload.response.data.data),\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_PARK_REVIEWS } from './action-types';\nimport { SUCCESS } from '../../../constants';\n\nconst initialState = {\n parkReviews: {},\n bubbles: \"\"\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_PARK_REVIEWS + SUCCESS:\n return {\n ...state,\n parkReviews: {\n ...state.parkReviews,\n [action.payload.params.parkId]: action.payload.response.data.data.reviews,\n },\n bubbles: action.payload.response.data.data.bubbles\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_PARKS } from './action-types';\nimport { GET_INIT_DATA } from '../../init/action-types';\nimport { SUCCESS } from '../../constants';\nimport { processPark } from './utils';\nimport { arrayToObject } from '../../../utils/utils';\n\nconst initialState = {\n parks: {},\n regionParkIds: {},\n townList: {},\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n if (action.payload.response.data.data.parks) {\n let parks = { ...state.parks };\n let regionParkIds = { ...state.regionParkIds };\n\n Object.keys(action.payload.response.data.data.parks).forEach((region) => {\n regionParkIds[region] = [];\n action.payload.response.data.data.parks[region].forEach((park) => {\n parks[park.parkId] = processPark(park);\n regionParkIds[region].push(park.parkId);\n });\n });\n\n return {\n ...state,\n parks,\n regionParkIds,\n };\n }\n return state;\n case GET_PARKS + SUCCESS:\n return {\n ...state,\n parks: {\n ...state.parks,\n ...arrayToObject(\n action.payload.response.data.data.parks.map((park) => processPark(park)),\n 'parkId',\n ),\n },\n regionParkIds: {\n ...state.regionParkIds,\n [action.payload.params.region]: action.payload.response.data.data.parks.map((park) => park.parkId),\n },\n townList: {\n ...state.townList,\n ...action.payload.response.data.data.townList,\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { GET_EXTRA_DATA } from './action-types';\nimport { GET_PARK_RESULTS } from '../park/results/action-types';\nimport { SUCCESS } from '../../constants';\nimport { GET_BOOKINGS } from '../../user/action-types';\n// import { arrayToObject } from '../../../utils/utils'\n\nconst forceToArray = (arr) => [arr].flat();\n\nconst initialState = {\n extraData: {},\n parkExtraDataIds: {},\n unitTypes: {},\n};\n\nfunction convertExtraData(data) {\n const output = {};\n data.forEach((item) => {\n forceToArray(item.code).forEach((unitType) => {\n output[unitType] = {\n ...item,\n code: unitType,\n image: item.image,\n };\n });\n });\n return output;\n}\n\nfunction convertUnitTypes(data) {\n const output = {};\n data.forEach((item) => {\n output[item.unitType] = {\n ...item,\n };\n });\n return output;\n}\n\nfunction getExtraDataIds(data) {\n const output = new Set();\n data.forEach((item) => {\n forceToArray(item.code).forEach((unitType) => {\n output.add(unitType);\n });\n });\n return [...output];\n}\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_EXTRA_DATA + SUCCESS:\n return {\n ...state,\n extraData: {\n ...state.extraData,\n ...convertExtraData(action.payload.response.data),\n },\n parkExtraDataIds: {\n ...state.parkExtraDataIds,\n [action.payload.params.parkId]: getExtraDataIds(action.payload.response.data),\n },\n };\n case GET_PARK_RESULTS + SUCCESS:\n case GET_BOOKINGS + SUCCESS:\n return {\n ...state,\n unitTypes: {\n ...state.unitTypes,\n // ...arrayToObject(action.payload.response.data.data.unitTypes, 'unitType')\n ...convertUnitTypes(action.payload.response.data.data.unitTypes),\n },\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","const namespace = 'PAGES/BROWSE_OPERATOR_REGIONS/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\nexport const SELECT_OPERATOR = namespace + 'SELECT_OPERATOR';\n","import { SELECT_CHANNEL, SELECT_OPERATOR } from './action-types';\n\nconst initialState = {\n channelId: undefined,\n operatorId: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n };\n case SELECT_OPERATOR:\n return {\n ...state,\n operatorId: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { SELECT_CHANNEL } from './action-types';\n\nexport const initialState = {\n channelId: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","const namespace = 'PAGES/BROWSE_OPERATORS/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\n","import { SELECT_CHANNEL, SELECT_REGION } from './action-types';\n\nconst initialState = {\n channelId: undefined,\n regionId: undefined,\n operatorFilters: [],\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n };\n case SELECT_REGION:\n return {\n ...state,\n regionId: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { SELECT_CHANNEL } from './action-types';\n\nexport const initialState = {\n channelId: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","const namespace = 'PAGES/BROWSE_REGIONS/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\n","const namespace = 'PARK/CURRENT_PARK/';\n\nexport const SELECT_CHANNEL = namespace + 'SELECT_CHANNEL';\nexport const SELECT_DATE = namespace + 'SELECT_DATE';\nexport const SELECT_PARK = namespace + 'SELECT_PARK';\n","import { SELECT_CHANNEL, SELECT_DATE, SELECT_PARK } from './action-types';\nimport { START_SEARCH } from '../search/form/action-types';\n\nconst initialState = {\n channelId: undefined,\n parkId: undefined,\n selectedDate: undefined,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n };\n case SELECT_PARK:\n return {\n ...state,\n parkId: action.payload,\n };\n case SELECT_DATE:\n return {\n ...state,\n selectedDate: action.payload,\n };\n case START_SEARCH:\n return {\n ...state,\n selectedDate: action.payload.arrivalDate,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import {\n SELECT_CHANNEL,\n SELECT_REGION,\n SELECT_DATE,\n SELECT_DURATION,\n SELECT_GUESTS_ADULTS,\n SELECT_GUESTS_CHILDREN,\n SELECT_GUESTS_UNDER5S,\n SELECT_PET_FRIENDLY,\n STORE_COTTAGE_DATES,\n RESET_ARRIVAL,\n} from './action-types';\n\nconst initialState = {\n channelId: 'ukcaravan',\n regionId: undefined,\n arrivalDate: undefined,\n duration: 4,\n adults: 0,\n children: 0,\n under5s: 0,\n petFriendly: false,\n searchNeeded: false,\n partySizeModal: false,\n cottageDates: {},\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case SELECT_CHANNEL:\n return {\n ...state,\n channelId: action.payload,\n regionId: undefined,\n };\n case SELECT_REGION:\n return {\n ...state,\n regionId: action.payload,\n };\n case SELECT_DATE:\n return {\n ...state,\n arrivalDate: action.payload,\n };\n case SELECT_DURATION:\n return {\n ...state,\n arrivalDate: undefined,\n duration: action.payload,\n };\n case SELECT_GUESTS_ADULTS:\n return {\n ...state,\n adults: action.payload,\n };\n case SELECT_GUESTS_CHILDREN:\n return {\n ...state,\n children: action.payload,\n };\n case SELECT_GUESTS_UNDER5S:\n return {\n ...state,\n under5s: action.payload,\n };\n case SELECT_PET_FRIENDLY:\n return {\n ...state,\n petFriendly: action.payload,\n };\n case STORE_COTTAGE_DATES:\n return {\n ...state,\n cottageDates: action.payload,\n };\n case RESET_ARRIVAL:\n return {\n ...state,\n arrivalDate: undefined,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { SUCCESS, FAILURE } from '../../constants';\nimport { START_SEARCH } from '../form/action-types';\nimport { GET_RESULTS } from './action-types';\n\nconst initialState = {\n pendingParams: {},\n params: {},\n requestPayload: {},\n count: 0,\n results: [],\n isSearching: false,\n isWaiting: false,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case START_SEARCH:\n return {\n ...state,\n pendingParams: { ...action.payload },\n count: 0,\n results: [],\n requestPayload: {},\n };\n case START_SEARCH + SUCCESS:\n return {\n ...state,\n pendingParams: {},\n requestPayload: { ...action.payload.params },\n params: { ...state.pendingParams },\n isSearching: true,\n };\n case START_SEARCH + FAILURE:\n return {\n ...state,\n pendingParams: {},\n isSearching: false,\n };\n case GET_RESULTS + SUCCESS: {\n if (!action.payload.response.data.data.wait) {\n return {\n ...state,\n count: action.payload.response.data.data.count,\n results: [...action.payload.response.data.data.results],\n isSearching: false,\n isWaiting: false,\n };\n } else {\n return {\n ...state,\n count: action.payload.response.data.data.count,\n isWaiting: true,\n };\n }\n }\n default: {\n return state;\n }\n }\n};\n\nexport default reducer;\n","import { CREATE_USER, GET_BOOKINGS, LOGIN, LOGOUT, UPDATE_USER } from './action-types';\nimport { GET_INIT_DATA } from '../init/action-types';\nimport { SUCCESS } from '../constants';\nimport { COMPLETE_BOOKING } from '../booking/booking/action-types';\n\nconst initialState = {\n loggedIn: false,\n bookings: undefined,\n details: {},\n selectedContactPreferencesInBooking: false,\n};\n\nexport const reducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_INIT_DATA + SUCCESS:\n if (action.payload.response.data.data.account) {\n return {\n ...state,\n loggedIn: true,\n details: {\n ...action.payload.response.data.data.account,\n dobMnth: parseInt(action.payload.response.data.data.account.dobMnth).toString(), // Hack to work around padded values from server\n },\n };\n } else {\n return initialState;\n }\n case CREATE_USER + SUCCESS:\n case UPDATE_USER + SUCCESS:\n localStorage.setItem('hasAccountData', true);\n return {\n ...state,\n loggedIn: true,\n selectedContactPreferencesInBooking: window.location.href.indexOf(\"booking\") > -1 ? true : false,\n details: {\n ...action.payload.response.data.data,\n dobMnth: parseInt(action.payload.response.data.data.dobMnth).toString(), // Hack to work around padded values from server\n },\n };\n case LOGIN + SUCCESS:\n localStorage.setItem('hasAccountData', true);\n return {\n ...state,\n loggedIn: true,\n selectedContactPreferencesInBooking: false,\n details: {\n ...action.payload.response.data.data,\n dobMnth: parseInt(action.payload.response.data.data.dobMnth).toString(), // Hack to work around padded values from server\n },\n };\n case LOGOUT + SUCCESS:\n localStorage.setItem('hasAccountData', false);\n return initialState;\n case GET_BOOKINGS + SUCCESS:\n return {\n ...state,\n bookings: action.payload.response.data.data.bookings,\n };\n case COMPLETE_BOOKING:\n return {\n ...state,\n bookings: undefined,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { combineReducers, createStore, applyMiddleware } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport persistState from 'redux-sessionstorage';\nimport thunk from 'redux-thunk';\n\nimport appStateReducer from './appState/reducer';\nimport headerReducer from './header/reducer';\nimport homepageReducer from './homepage/reducer';\nimport initReducer from './init/reducer';\nimport requestsReducer from './requests/reducer';\n\nimport bookingReducer from './booking/booking/reducer';\nimport bookingFormReducer from './booking/form/reducer';\nimport bookingExtrasReducer from './booking/extras/reducer';\nimport bookingPaymentReducer from './booking/payment/reducer';\n\nimport channelsReducer from './data/channels/reducer';\nimport regionsReducer from './data/regions/reducer';\nimport filtersReducer from './data/filters/reducer';\nimport operatorsReducer from './data/operators/reducer';\nimport parkDetailsReducer from './data/park/details/reducer';\nimport parkResultsReducer from './data/park/results/reducer';\nimport parkReviewsReducer from './data/park/reviews/reducer';\nimport parksReducer from './data/parks/reducer';\nimport unitTypesReducer from './data/unitTypes/reducer';\n\nimport pageBrowseOperatorRegionsReducer from './pages/browseOperatorRegions/reducer';\nimport pageBrowseOperatorsReducer from './pages/browseOperators/reducer';\nimport pageBrowseParksReducer from './pages/browseParks/reducer';\nimport pageBrowseRegionsReducer from './pages/browseRegions/reducer';\n\nimport parkReducer from './park/reducer';\n\nimport searchFormReducer from './search/form/reducer';\nimport searchResultsReducer from './search/results/reducer';\n\nimport userReducer from './user/reducer';\n\nconst rootReducer = combineReducers({\n appState: appStateReducer,\n booking: combineReducers({\n booking: bookingReducer,\n form: bookingFormReducer,\n extras: bookingExtrasReducer,\n payment: bookingPaymentReducer,\n }),\n data: combineReducers({\n channels: channelsReducer,\n filters: filtersReducer,\n operators: operatorsReducer,\n parks: parksReducer,\n park: combineReducers({\n details: parkDetailsReducer,\n results: parkResultsReducer,\n reviews: parkReviewsReducer,\n }),\n regions: regionsReducer,\n unitTypes: unitTypesReducer,\n }),\n header: headerReducer,\n homepage: homepageReducer,\n init: initReducer,\n pages: combineReducers({\n browseOperatorRegions: pageBrowseOperatorRegionsReducer,\n browseOperators: pageBrowseOperatorsReducer,\n browseParks: pageBrowseParksReducer,\n browseRegions: pageBrowseRegionsReducer,\n }),\n park: parkReducer,\n requests: requestsReducer,\n search: combineReducers({\n form: searchFormReducer,\n results: searchResultsReducer,\n }),\n user: userReducer,\n});\n\nexport const store = createStore(rootReducer, composeWithDevTools(persistState(), applyMiddleware(thunk)));\n\nexport default store;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n}\n","import React, { Suspense, lazy } from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport t from '../../../text';\n\nconst Hero = lazy(() => import('../../components/HomePage/Hero'));\nconst Banner = lazy(() => import('../../components/HomePage/Banner'));\nconst DealOfTheWeek = lazy(() => import('../../components/HomePage/DealOfTheWeek'));\nconst ColumnComponent = lazy(() => import('../../components/Common/ColumnComponent'));\nconst Countdown = lazy(() => import('../../components/HomePage/Countdown'));\n\nfunction Home({ content }) {\n const components = content.map((block, index) => {\n if (block.type === 'Countdown' && block.data.status === false) return
; // This shouldn't be here but getting inactive countdowns?!\n switch (block.type) {\n case 'HeroText':\n return (\n } key={`suspense-${index}`}>\n \n \n );\n case 'Banner':\n return (\n } key={`suspense-${index}`}>\n \n \n );\n case 'Countdown':\n return (\n } key={`suspense-${index}`}>\n \n \n );\n case 'HomeColumns':\n return (\n } key={`suspense-${index}`}>\n \n \n );\n case 'DealOfTheWeek':\n return (\n } key={`suspense-${index}`}>\n \n \n );\n default:\n return
;\n }\n });\n\n return (\n <>\n \n {t('home.page.title')}\n \n \n {components}\n \n );\n}\n\nexport default Home;\n","export const content = (state) => state.homepage.content;\n","import { connect } from 'react-redux';\nimport Home from './Home';\nimport { content } from '../../redux/homepage/selectors';\n\nconst mapStateToProps = (state) => ({\n content: content(state),\n});\n\nconst mapDispatchToProps = () => ({});\n\nexport const HomeConnected = connect(mapStateToProps, mapDispatchToProps)(Home);\nexport default HomeConnected;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col, ButtonGroup } from 'react-bootstrap';\n\nimport Icon from './Icon';\n\nexport const PageTitle = ({ title, subTitle, viewMode, onChangeViewMode }) => (\n \n \n \n \n

{title}

\n {subTitle &&

{subTitle}

}\n \n {viewMode && onChangeViewMode && (\n \n \n onChangeViewMode('list')}\n >\n List\n \n onChangeViewMode('grid')}\n >\n Grid\n \n onChangeViewMode('map')}\n >\n Map\n \n \n \n )}\n
\n
\n
\n);\n\nPageTitle.propTypes = {\n title: PropTypes.string,\n subTitle: PropTypes.string,\n viewMode: PropTypes.oneOf(['list', 'grid', 'map']),\n onChangeViewMode: PropTypes.func,\n};\n\nPageTitle.defaultProps = {\n title: 'The Page Title has not been set.',\n};\n\nexport default PageTitle;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { Alert, Container, Row, Col, Form, Button } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport { config, urls } from '../../../config';\nimport t from '../../../text';\n\nfunction ContactUs() {\n const [validated, setValidated] = useState(false);\n const [isValid, setIsValid] = useState(false);\n const [hideText, setHideText] = useState(false);\n\n const [apiFeedback, setFeedback] = useState([]);\n const [apiFeedbackStatus, setFeedbackStatus] = useState('');\n const [ticketNumber, setTicketNumber] = useState('');\n const [bookingReference, setBookingReference] = useState('');\n const [email, setEmail] = useState('');\n const [enquiry, setEnquiry] = useState('');\n const [title, setTitle] = useState('');\n const [initials, setFirstName] = useState('');\n const [lastName, setSurname] = useState('');\n const [address, setAddress] = useState('');\n const [postcode, setPostcode] = useState('');\n const [comment, setComment] = useState('');\n const [checkbox, setCheckbox] = useState(false);\n\n // Refs\n const contactForm = useRef(null);\n\n const resetState = () => {\n setTicketNumber('');\n setBookingReference('');\n setEmail('');\n setEnquiry('');\n setTitle('');\n setFirstName('');\n setSurname('');\n setAddress('');\n setPostcode('');\n setComment('');\n setCheckbox(false);\n setValidated(false);\n setHideText(false);\n };\n\n const handleReset = () => {\n setFeedback([]);\n };\n\n const sendFormData = () => {\n if (validated) {\n let url = urls.contact;\n\n url += '?tickNum=' + encodeURIComponent(ticketNumber);\n url += '&bookRef=' + encodeURIComponent(bookingReference);\n url += '&email=' + encodeURIComponent(email);\n url += '&queryType=' + encodeURIComponent(enquiry);\n url += '&title=' + encodeURIComponent(title);\n url += '&initials=' + encodeURIComponent(initials);\n url += '&lastName=' + encodeURIComponent(lastName);\n url += '&addrLn1=' + encodeURIComponent(address);\n url += '&postCode=' + encodeURIComponent(postcode);\n url += '&comments=' + encodeURIComponent(comment);\n\n fetch(url)\n .then((resp) => resp.json())\n .then((data) => {\n if (data.success === 0) {\n data.errors.map((e) => setFeedback([...apiFeedback, e.message]));\n setFeedbackStatus('danger');\n } else {\n if (data.data.infoMsg) {\n setFeedback([\n 'We previously recieved your email and we will be in touch as soon as possible.',\n ]);\n setFeedbackStatus('secondary');\n contactForm.current.reset();\n resetState();\n } else {\n setFeedbackStatus('success');\n setFeedback(['Thank you, we will be in touch as soon as possible.']);\n contactForm.current.reset();\n resetState();\n }\n }\n })\n .catch((e) => {\n console.error('There was a problem', e);\n });\n }\n if (!validated) {\n setHideText(false);\n }\n };\n\n useEffect(sendFormData, [isValid]);\n\n const handleSubmit = (event) => {\n event.preventDefault();\n event.stopPropagation();\n setFeedback([]);\n setValidated(true);\n setIsValid(event.currentTarget.checkValidity());\n };\n\n const handleSelect = () => {\n setHideText(true);\n };\n\n return (\n <>\n \n Contact Us\n \n \n \n \n\n \n \n \n

We'd love to hear from you

\n \n
\n
\n\n \n \n {/* Start of Form */}\n \n \n

Fill in our contact form

\n

You can contact us using our enquiry form, it’s easy and quick.

\n

We will respond to all enquiries as soon as possible.

\n\n \n \n \n Ticket Number (if known)\n setTicketNumber(e.target.value)}\n value={ticketNumber}\n />\n \n \n \n \n Booking Reference\n setBookingReference(e.target.value)}\n value={bookingReference}\n />\n \n \n \n\n \n Email address\n setEmail(e.target.value)}\n value={email}\n required\n />\n Enter your email\n \n \n Type of Enquiry\n setEnquiry(e.target.value))}\n required\n >\n \n \n \n \n \n \n \n \n \n Please select a type of enquiry\n \n {!hideText && (\n \n In order to help us answer your query more efficiently, please select a type of\n query from the list above.\n \n )}\n \n \n \n \n setTitle(e.target.value)}\n >\n \n \n \n \n \n \n \n Pick your title\n \n \n \n \n setFirstName(e.target.value)}\n />\n \n \n \n \n setSurname(e.target.value)}\n required\n />\n Enter your surname\n \n \n setAddress(e.target.value)}\n />\n \n \n setPostcode(e.target.value)}\n />\n \n \n setComment(e.target.value)}\n />\n \n \n setCheckbox(!checkbox)}\n label=\"I am happy to receive marketing materials\"\n />\n \n \n {apiFeedback && apiFeedbackStatus && (\n 0}\n onClose={handleReset}\n dismissible\n >\n {apiFeedbackStatus === 'success' && }\n {apiFeedback}\n \n )}\n \n \n {/* End of Form */}\n\n {/* Start of Contact Info */}\n \n

Other ways to contact us

\n

\n There are a number of ways you can contact us, but we recommend you refer to our FAQs first.\n If you cannot find the answer you are looking for here then you can chat to us online, email\n us or send us a letter. We will respond to all enquiries as soon as possible.\n

\n\n

FAQS

\n

\n Our frequently asked questions section contains answers to the most popular questions. Most\n questions can be answered using this guide.\n

\n \n \n \n Read FAQ\n \n \n \n

Email

\n

\n Have a question that cannot be found in our FAQs section? Our Customer Service Team are\n always ready to answer your questions by email.\n

\n \n \n \n Email Us\n \n \n \n

Talk to us now

\n

\n Looking to book? Or have any questions about your holiday? Call one of our expert team now\n on {t('header.cs.tel')}\n

\n

Write to us

\n

\n When writing to us please enclose as much information about your booking as possible\n including your contact details (email & contact number), so we can respond to you\n quickly.\n

\n
\n

\n BreakFree Holidays,
\n 42 Phoenix Court,
\n Hawkins Road,
\n Colchester,
\n CO2 8JY\n

\n
\n\n

Live Chat

\n

We are open Monday to Friday, 9am - 5pm.

\n \n \n \n Manage Your Booking\n \n \n \n \n {/* End of Contact Info */}\n
\n
\n \n );\n}\n\nexport default ContactUs;\n","import React from 'react';\nimport { Col, Container, Row } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../components/PageTitle';\nimport ScrollToTop from '../components/ScrollToTop';\n\nfunction NotFound() {\n return (\n <>\n \n Page not found\n \n \n \n \n \n \n

\n \n 😵\n {' '}\n Oops!\n

\n

\n The page you are looking for currently doesn't exist, has been changed or was removed.\n

\n

But don't panic, return to the homepage by clicking the button below.

\n \n Return to Homepage\n \n \n
\n
\n \n );\n}\n\nexport default NotFound;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Accordion } from 'react-bootstrap';\n\nexport const CardPanel = (props) => (\n <>\n {props.accordion ? (\n \n \n \n

{!props.noTitle && props.title}

\n
\n \n {props.children}\n \n
\n
\n ) : (\n \n {!props.noTitle && {props.title}}\n\n {props.children}\n \n )}\n \n);\n\nCardPanel.defaultProps = {\n className: '',\n title: '',\n noTitle: false,\n};\n\nCardPanel.propTypes = {\n className: PropTypes.string,\n title: PropTypes.string,\n noTitle: PropTypes.bool,\n};\n\nexport default CardPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nexport const TextInput = (props) => (\n \n {props.label && (\n \n {props.label}\n \n )}\n\n \n\n {props.invalid && {props.validationMessage}}\n \n);\n\nTextInput.defaultProps = {\n groupClassName: '',\n labelClassName: '',\n className: 'col',\n type: 'text',\n attrs: {},\n value: '',\n};\n\nTextInput.propTypes = {\n groupClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n className: PropTypes.string,\n controlId: PropTypes.string,\n label: PropTypes.string,\n hideLabel: PropTypes.bool,\n name: PropTypes.string,\n type: PropTypes.string,\n placeholder: PropTypes.string,\n attrs: PropTypes.object,\n onChange: PropTypes.func,\n invalid: PropTypes.bool,\n validationMessage: PropTypes.string,\n};\n\nexport default TextInput;\n","const EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^$*.[\\]{}()?\\-\"!@#%&/,><':;|_~`])[A-Za-z\\d^$*.[\\]{}()?\\-\"!@#%&/,><':;|_~`]{8,}$/;\nconst POSTCODE_REGEX = /[A-Z]{1,2}[0-9][0-9A-Z]?\\s?[0-9][A-Z][A-Z]/i;\nconst DATE_REGEX = /^([0-2][0-9]|(3)[0-1])(\\/)(((0)[0-9])|((1)[0-2]))(\\/)\\d{4}$/; // tests for dd/mm/yyyy\n\nexport const email = (val) => !val || EMAIL_REGEX.test(val);\nexport const integer = (val) => !val || /^[0-9]+$/.test(val);\nexport const password = (val) => !val || PASSWORD_REGEX.test(val);\nexport const postcode = (val) => !val || POSTCODE_REGEX.test(val);\nexport const required = (val) => !!val;\nexport const telephone = (val) => !val || /^[0-9 ]+$/.test(val);\nexport const dateValidator = (val) => !val || DATE_REGEX.test(val);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'react-bootstrap';\n\nexport const RequestErrors = (props) => (\n \n \n {props.requestError && !props.requestError.errors && (\n

Network error. Please check your internet connection and try again.

\n )}\n {props.requestError && Array.isArray(props.requestError.errors) && (\n
    \n {props.requestError.errors.map((error) => (\n
  • \n {error.message}\n {props.showCodes && ` (code ${error.code})`}\n
  • \n ))}\n
\n )}\n \n
\n);\n\nRequestErrors.propTypes = {\n redText: PropTypes.bool,\n requestError: PropTypes.object, // Get this by using getError selector in redux/requests/selectors.js\n classes: PropTypes.string,\n showCodes: PropTypes.bool,\n};\n\nRequestErrors.defaultProps = {\n classes: 'text-danger mt-2 mb-0 list-unstyled',\n redText: true,\n};\n\nexport default RequestErrors;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Col, Button, Row } from 'react-bootstrap';\n\nimport TextInput from '../../../FormElements/TextInput';\nimport { required, email, password, integer } from '../../../../utils/validation';\nimport RequestErrors from '../../../RequestErrors';\n\nimport t from '../../../../../text';\n\nexport const validateFields = (values) => {\n const errors = {};\n if (!required(values.email) || !email(values.email)) {\n errors.email = t('forms.user.invalidEmail');\n }\n if (!required(values.email)) {\n errors.email = t('forms.user.blankEmail');\n }\n if (!required(values.passwd) || !password(values.passwd)) {\n errors.passwd = t('forms.user.invalidPassword');\n }\n if (!required(values.passwd)) {\n errors.passwd = t('forms.user.blankPassword');\n }\n if (!required(values.passwd2) || values.passwd !== values.passwd2) {\n errors.passwd2 = t('forms.changePassword.passwordMismatch');\n }\n if (!required(values.passwd2)) {\n errors.passwd2 = t('forms.changePassword.confirmPassword');\n }\n if (!required(values.resetCode) || !integer(values.resetCode)) {\n errors.resetCode = t('forms.changePassword.invalidResetCode');\n }\n if (!required(values.resetCode)) {\n errors.resetCode = t('forms.changePassword.blankResetCode');\n }\n return errors;\n};\n\nexport const ChangePasswordForm = (props) => (\n
\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.email}\n validationMessage={props.errors.email}\n attrs={{ 'aria-label': t('forms.user.emailAddress'), disabled: props.busy, autoComplete: 'username' }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.passwd}\n validationMessage={props.errors.passwd}\n attrs={{\n 'aria-label': t('forms.changePassword.newPassword'),\n disabled: props.busy,\n autoComplete: 'new-password',\n }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.passwd2}\n validationMessage={props.errors.passwd2}\n attrs={{\n 'aria-label': t('forms.changePassword.confirmNewPassword'),\n disabled: props.busy,\n autoComplete: 'new-password',\n }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.resetCode}\n validationMessage={props.errors.resetCode}\n attrs={{\n 'aria-label': t('forms.changePassword.resetCode'),\n maxLength: 6,\n disabled: props.busy,\n }}\n />\n\n \n \n \n \n \n\n {props.failure && }\n \n);\n\nChangePasswordForm.defaultProps = {\n busy: false,\n errors: {},\n values: {},\n};\n\nChangePasswordForm.propTypes = {\n busy: PropTypes.bool,\n errors: PropTypes.object,\n failure: PropTypes.object,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n onViewRegister: PropTypes.func,\n onViewReset: PropTypes.func,\n values: PropTypes.object,\n};\n\nexport default ChangePasswordForm;\n","import { getRequestStatus } from '../requests/selectors';\nimport {\n CHANGE_PASSWORD,\n CREATE_USER,\n GET_BOOKINGS,\n LOGIN,\n LOGOUT,\n REQUEST_PASSWORD_RESET,\n UPDATE_USER,\n} from './action-types';\n\nexport const loggedIn = (state) => state.user.loggedIn;\nexport const selectedContactPreferencesInBooking = (state) => state.user.selectedContactPreferencesInBooking;\nexport const redeyeUrl = (state) => state.user.details.redeyeUrl;\nexport const title = (state) => state.user.details.title;\nexport const firstName = (state) => state.user.details.firstName;\nexport const lastName = (state) => state.user.details.lastName;\nexport const email = (state) => state.user.details.email;\nexport const addrLn1 = (state) => state.user.details.addrLn1;\nexport const addrLn2 = (state) => state.user.details.addrLn2;\nexport const addrLn3 = (state) => state.user.details.addrLn3;\nexport const town = (state) => state.user.details.town;\nexport const city = (state) => state.user.details.city;\nexport const county = (state) => state.user.details.county;\nexport const country = (state) => state.user.details.country;\nexport const postCode = (state) => state.user.details.postCode;\nexport const tel = (state) => state.user.details.tel;\nexport const emailOpt = (state) => state.user.details.emailOpt;\nexport const smsOpt = (state) => state.user.details.smsOpt;\nexport const postOpt = (state) => state.user.details.postOpt;\nexport const thirdOpt = (state) => state.user.details.thirdOpt;\nexport const dobDay = (state) => state.user.details.dobDay;\nexport const dobMnth = (state) => state.user.details.dobMnth;\nexport const dobYr = (state) => state.user.details.dobYr;\n\nexport const bookings = (state) => state.user.bookings;\nexport const details = (state) => state.user.details;\n\nexport const [changePasswordPending, changePasswordFailed, changePasswordError] = getRequestStatus(CHANGE_PASSWORD);\n\nexport const [createUserPending, createUserFailed, createUserError] = getRequestStatus(CREATE_USER);\n\nexport const getBookingsLoaded = (state) => typeof bookings(state) !== 'undefined';\nexport const [getBookingsPending, getBookingsFailed, getBookingsError] = getRequestStatus(GET_BOOKINGS);\n\nexport const [loggingIn, loginFailed, loginError] = getRequestStatus(LOGIN);\n\nexport const [loggingOut, logoutFailed, logoutError] = getRequestStatus(LOGOUT);\n\nexport const [requestPasswordResetPending, requestPasswordResetFailed, requestPasswordResetError] = getRequestStatus(\n REQUEST_PASSWORD_RESET,\n);\n\nexport const [updateUserPending, updateUserFailed, updateUserError] = getRequestStatus(UPDATE_USER);\n","import {\n CHANGE_PASSWORD,\n CREATE_USER,\n GET_BOOKINGS,\n LOGIN,\n LOGOUT,\n REQUEST_PASSWORD_RESET,\n UPDATE_USER,\n} from './action-types';\nimport { getBookingsFailed, getBookingsLoaded, getBookingsPending } from './selectors';\nimport { apiRequest, callbackApiRequest } from '../apiRequest';\nimport selfCancellingAction from '../selfCancellingAction';\nimport { urls } from '../../../config';\n\nexport const [changePassword, cancelChangePassword] = selfCancellingAction((dispatch, email, passwd, resetCode) => {\n return callbackApiRequest(\n dispatch,\n CHANGE_PASSWORD,\n urls.passwordReset,\n { action: 'reset', email, passwd, resetCode },\n undefined,\n 'post',\n );\n});\n\nexport const [createUser, cancelCreateUser] = selfCancellingAction((dispatch, data) => {\n return callbackApiRequest(\n dispatch,\n CREATE_USER,\n urls.userSetDetails,\n { ...data, method: 'create' },\n undefined,\n 'post',\n );\n});\n\nexport const [getBookings, cancelGetBookings] = selfCancellingAction((dispatch, force) => {\n dispatch((d, getState) => {\n const state = getState();\n const hasFailed = getBookingsFailed(state);\n const isLoaded = getBookingsLoaded(state);\n const isLoading = getBookingsPending(state);\n\n if (!isLoaded && !isLoading && (!hasFailed || force)) {\n apiRequest(d, GET_BOOKINGS, urls.userGetBookings);\n }\n });\n});\n\nexport const [login, cancelLogin] = selfCancellingAction((dispatch, email, password) => {\n return apiRequest(dispatch, LOGIN, urls.login, { email, passwd: password }, undefined, 'post');\n});\n\nexport const [logout, cancelLogout] = selfCancellingAction((dispatch) => {\n return apiRequest(dispatch, LOGOUT, urls.logout);\n});\n\nexport const [requestPasswordReset, cancelRequestPasswordReset] = selfCancellingAction((dispatch, email) => {\n return callbackApiRequest(\n dispatch,\n REQUEST_PASSWORD_RESET,\n urls.passwordReset,\n { action: 'request', email },\n undefined,\n 'post',\n );\n});\n\nexport const [updateUser, cancelUpdateUser] = selfCancellingAction((dispatch, data) => {\n return callbackApiRequest(\n dispatch,\n UPDATE_USER,\n urls.userSetDetails,\n { ...data, method: 'update' },\n undefined,\n 'post',\n );\n});\n","import { useState } from 'react';\n\nexport const useLocalFormState = (validator, initialValues = {}, initialErrors = {}) => {\n const [errors, setErrors] = useState({ ...initialErrors });\n const [values, setValues] = useState({ ...initialValues });\n\n function isValid() {\n const _errors = typeof validator === 'function' ? validator(values) : {};\n return Object.keys(_errors).length === 0;\n }\n\n // Pass an object to set multiple form properties, or pass key and value to set one property\n function onChange(key, value) {\n if (typeof key === 'object') {\n setValues({ ...values, ...key });\n } else {\n setValues({ ...values, [key]: value });\n }\n }\n\n function validate() {\n const _errors = typeof validator === 'function' ? validator(values) : {};\n setErrors(_errors);\n return _errors;\n }\n\n return {\n values,\n onChange,\n validate,\n isValid,\n errors,\n };\n};\n\nexport default useLocalFormState;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { changePassword } from '../../../../redux/user/actions';\nimport { changePasswordError, changePasswordFailed, changePasswordPending } from '../../../../redux/user/selectors';\nimport { validateFields } from './ChangePasswordForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const useChangePasswordFormActions = () => {\n const dispatch = useDispatch();\n return {\n changePassword: (email, passwd, resetCode) => {\n return changePassword(dispatch, email, passwd, resetCode);\n },\n };\n};\n\nexport const useChangePasswordFormState = () => ({\n ...useLocalFormState(validateFields),\n changePasswordError: useSelector(changePasswordError),\n changePasswordFailed: useSelector(changePasswordFailed),\n changePasswordPending: useSelector(changePasswordPending),\n});\n\nexport default useChangePasswordFormState;\n","import React, { useEffect, useState } from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nimport CardPanel from '../../components/CardPanel';\nimport ChangePasswordForm from '../../components/Forms/User/ChangePasswordForm/ChangePasswordForm';\nimport {\n useChangePasswordFormActions,\n useChangePasswordFormState,\n} from '../../components/Forms/User/ChangePasswordForm/useChangePasswordForm';\n\nexport const ChangePasswordPage = () => {\n const [firstRun, setFirstRun] = useState(false);\n const [success, setSuccess] = useState(false);\n\n const { changePassword } = useChangePasswordFormActions();\n const {\n values,\n onChange,\n validate,\n isValid,\n errors,\n changePasswordError,\n changePasswordPending,\n } = useChangePasswordFormState();\n\n const handleSubmit = (event) => {\n event.preventDefault();\n setSuccess(false);\n setFirstRun(false);\n validate();\n\n if (isValid()) {\n changePassword(values.email, values.passwd, values.resetCode)\n .request.then(() => {\n setSuccess(true);\n })\n .catch(() => {\n /* Do nothing on failure, form will react to redux state */\n });\n }\n };\n\n const resetState = () => {\n setFirstRun(true);\n setSuccess(false);\n };\n\n // Reset any messages when form is first opened (including re-opened)\n useEffect(resetState, []);\n\n return (\n \n \n \n \n {success ? (\n <>\n
\n \n

\n Your password has been changed. Please click here to\n log in.\n

\n
\n \n ) : (\n <>\n

\n Please enter your details below. Your reset code can be found in the email that was\n sent to you.\n

\n \n \n )}\n
\n \n
\n
\n );\n};\n\nexport default ChangePasswordPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { InputGroup } from 'react-bootstrap';\n\nexport const InputRadioButton = (props) => {\n const handleChange = () => {\n if (props.onChange && !props.checked) {\n props.onChange(props.name, props.value);\n }\n };\n\n return (\n \n \n {}}\n className=\"cursor-pointer\"\n checked={props.checked}\n aria-label={props.ariaLabel || props.label}\n />\n \n \n \n );\n};\n\nInputRadioButton.defaultProps = {};\n\nInputRadioButton.propTypes = {\n id: PropTypes.string,\n name: PropTypes.string,\n label: PropTypes.string,\n value: PropTypes.string,\n className: PropTypes.string,\n ariaLabel: PropTypes.string,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n};\n\nexport default InputRadioButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Col } from 'react-bootstrap';\n\nimport InputRadioButton from './InputRadioButton';\n\nexport const InputRadioGroup = (props) => (\n \n \n {props.text &&

{props.text}

}\n\n {props.options.map((option, i) => {\n const checked = props.values[props.name] === option.value;\n const isLast = i !== props.options.length - 1;\n\n return (\n \n \n \n );\n })}\n\n {props.validationMessage &&
{props.validationMessage}
}\n
\n
\n);\n\nInputRadioGroup.propTypes = {\n className: PropTypes.string,\n groupClassName: PropTypes.string,\n invalid: PropTypes.bool,\n name: PropTypes.string,\n onChange: PropTypes.func,\n options: PropTypes.array, // [{label: '', value ''}, ...]\n text: PropTypes.string,\n validationMessage: PropTypes.string,\n values: PropTypes.object,\n};\n\nInputRadioGroup.defaultProps = {\n className: '',\n groupClassName: '',\n options: [],\n values: {},\n};\n\nexport default InputRadioGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { InputGroup } from 'react-bootstrap';\n\nexport const InputCheckbox = (props) => {\n const handleChange = props.onChange ? () => props.onChange(!props.checked) : undefined;\n\n return (\n \n \n \n \n \n \n );\n};\n\nInputCheckbox.defaultProps = {\n id: 'not-set',\n};\n\nInputCheckbox.propTypes = {\n id: PropTypes.string,\n label: PropTypes.string,\n className: PropTypes.string,\n ariaLabel: PropTypes.string,\n checked: PropTypes.bool,\n onChange: PropTypes.func,\n};\n\nexport default InputCheckbox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport InputRadioGroup from '../../../FormElements/InputRadioGroup';\nimport InputCheckbox from '../../../FormElements/InputCheckbox';\nimport t from '../../../../../text';\nimport { config } from '../../../../../config';\nimport { Form } from 'react-bootstrap';\n\nexport const ContactPreferencesInputs = (props) => (\n
\n

{!props.hideTitle && t('forms.contactPrefs.title')}

\n

{t('forms.contactPrefs.offers')}

\n {config['user.optin.emailOpt'] && (\n \n \n
\n props.onChange('emailOpt', \"Y\")}\n />\n
\n
\n props.onChange('emailOpt', \"N\")}\n />\n
\n {props.errors?.emailOpt &&
{props.errors?.emailOpt}
}\n
\n )}\n {config['user.optin.firstOpt'] && (\n \n )}\n {config['user.optin.smsOpt'] && (\n \n \n
\n props.onChange('smsOpt', \"Y\")}\n />\n
\n
\n props.onChange('smsOpt', \"N\")}\n />\n
\n {props.errors?.smsOpt &&
{props.errors?.smsOpt}
}\n
\n )}\n {config['user.optin.thirdOpt'] && (\n \n )}\n
\n);\n\nContactPreferencesInputs.propTypes = {\n errors: PropTypes.object,\n values: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default ContactPreferencesInputs;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport { dateToDDMMYYYY, DDMMYYYYToDate } from '../../utils/date';\n\nconst currentYear = new Date().getFullYear();\nconst fromMonth = new Date(currentYear - 100, 0);\nconst toMonth = new Date();\n\nexport const YearMonthForm = ({ date, localeUtils, onChange, ageGroup }) => {\n const months = localeUtils.getMonths();\n\n // Use appropriate years for age group\n let minusYears = 100;\n switch (ageGroup) {\n case 'under5s':\n minusYears = 5;\n break;\n case 'children':\n minusYears = 17;\n break;\n default:\n minusYears = 100;\n break;\n }\n const fromYear = new Date(currentYear - minusYears, 0);\n\n const years = [];\n for (let i = fromYear.getFullYear(); i <= toMonth.getFullYear(); i += 1) {\n years.push(i);\n }\n\n const handleChange = function handleChange(e) {\n const { year, month } = e.target.form;\n onChange(new Date(year.value, month.value));\n };\n\n return (\n
\n \n \n
\n );\n};\n\nexport const DateInput = (props) => {\n const [month, setMonth] = useState(new Date());\n\n const handleYearMonthChange = (newMonth) => {\n setMonth(newMonth);\n };\n\n return (\n \n {props.label && (\n \n {props.label}\n \n )}\n\n
\n props.onChange(props.name, dateToDDMMYYYY(day))}\n parseDate={DDMMYYYYToDate}\n formatDate={dateToDDMMYYYY}\n value={props.value}\n fromMonth={fromMonth}\n toMonth={toMonth}\n keepFocus={false}\n dayPickerProps={\n props.dob\n ? {\n captionElement: ({ date, localeUtils }) => (\n \n ),\n disabledDays: [{ after: new Date() }],\n month,\n }\n : undefined\n }\n />\n
\n\n {props.invalid && {props.validationMessage}}\n
\n );\n};\n\nDateInput.defaultProps = {\n groupClassName: '',\n labelClassName: '',\n className: 'col form-control',\n onChange: () => {},\n attrs: {},\n dob: false,\n};\n\nDateInput.propTypes = {\n groupClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n className: PropTypes.string,\n controlId: PropTypes.string,\n label: PropTypes.string,\n hideLabel: PropTypes.bool,\n name: PropTypes.string,\n placeholder: PropTypes.string,\n attrs: PropTypes.object,\n onChange: PropTypes.func,\n invalid: PropTypes.bool,\n validationMessage: PropTypes.string,\n dob: PropTypes.bool,\n};\n\nexport default DateInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nexport const SelectInput = (props) => (\n \n {props.label && (\n \n {props.label}\n \n )}\n\n \n {props.children}\n \n\n {props.invalid && {props.validationMessage}}\n \n);\n\nSelectInput.defaultProps = {\n groupClassName: '',\n labelClassName: '',\n className: 'col',\n useAriaLabel: false,\n attrs: {},\n};\n\nSelectInput.propTypes = {\n groupClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n className: PropTypes.string,\n controlId: PropTypes.string,\n label: PropTypes.string,\n hideLabel: PropTypes.bool,\n name: PropTypes.string,\n attrs: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default SelectInput;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport ContactPreferencesInputs from './ContactPreferencesInputs';\nimport t from '../../../../../text';\nimport { config } from '../../../../../config';\nimport { required } from '../../../../utils/validation';\n\nexport const validateFields = (values) => {\n const errors = {};\n if (!required(values.emailOpt) && config['user.optin.emailOpt']) {\n errors.emailOpt = t('forms.forms.noValueSelected');\n }\n if (!required(values.smsOpt) && config['user.optin.smsOpt']) {\n errors.smsOpt = t('forms.forms.noValueSelected');\n }\n if (!required(values.thirdOpt) && config['user.optin.thirdOpt']) {\n errors.thirdOpt = t('forms.forms.noValueSelected');\n }\n if (!required(values.emailOpt) && config['user.optin.firstOpt']) {\n errors.emailOpt = t('forms.forms.noValueSelected');\n }\n return errors;\n};\n\nexport const ContactPreferencesForm = (props) => (\n
\n

{t('forms.contactPrefs.stayUpdated')}

\n \n \n);\n\nContactPreferencesForm.propTypes = {\n values: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default ContactPreferencesForm;\n","import React from 'react';\nimport { Form, Button, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport ContactPreferencesInputs from '../ContactPreferencesForm/ContactPreferencesInputs';\nimport DateInput from '../../../FormElements/DateInput';\nimport RequestErrors from '../../../RequestErrors';\nimport SelectInput from '../../../FormElements/SelectInput';\nimport TextInput from '../../../FormElements/TextInput';\n\nimport countries from '../../../../Data/Countries.json';\nimport titles from '../../../../Data/Titles.json';\n\nimport { validateFields as validateContactPrefsFields } from '../ContactPreferencesForm/ContactPreferencesForm';\nimport { required, email, telephone, password, postcode, dateValidator } from '../../../../utils/validation';\nimport t from '../../../../../text';\n\nexport const validateFields = (values = {}) => {\n const errors = {};\n if (!required(values.title)) {\n errors.title = t('forms.forms.noValueSelected');\n }\n if (!required(values.firstName)) {\n errors.firstName = t('forms.user.blankFirstName');\n }\n if (!required(values.lastName)) {\n errors.lastName = t('forms.user.blankSurname');\n }\n if (!required(values.email) || !email(values.email)) {\n errors.email = t('forms.user.invalidEmail');\n }\n if (!required(values.email)) {\n errors.email = t('forms.user.blankEmail');\n }\n if (!required(values.passwd) || !password(values.passwd)) {\n errors.passwd = t('forms.user.invalidPassword');\n }\n if (!required(values.passwd)) {\n errors.passwd = t('forms.user.blankPassword');\n }\n if (!required(values.tel) || !telephone(values.tel)) {\n errors.tel = t('forms.user.invalidTelephone');\n }\n if (!required(values.dob) || !dateValidator(values.dob)) {\n errors.dob = t('forms.user.blankDob');\n }\n if (!required(values.addrLn1)) {\n errors.addrLn1 = t('forms.address.blankAddress');\n }\n if (!required(values.town)) {\n errors.town = t('forms.address.blankTown');\n }\n if (!required(values.postCode) || !postcode(values.postCode)) {\n errors.postCode = t('forms.address.invalidPostcode');\n }\n if (!required(values.county)) {\n errors.county = t('forms.address.blankCounty');\n }\n if (!required(values.country)) {\n errors.country = t('forms.forms.noValueSelected');\n }\n\n // Validate contact prefs fields\n Object.assign(errors, validateContactPrefsFields(values));\n\n return errors;\n};\n\nexport const isValid = (values = {}) => !Object.keys(validateFields(values)).length;\n\nexport const CreateUserForm = (props) => {\n const handleDobChange = (field, value = '') => {\n const dobParts = value.split('/');\n props.onChange({\n [field]: value,\n dobDay: dobParts[0],\n dobMnth: dobParts[1],\n dobYr: dobParts[2],\n });\n };\n\n return (\n
\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.title}\n validationMessage={props.errors.title}\n attrs={{ disabled: props.busy }}\n >\n \n {Object.keys(titles).map((key) => (\n \n ))}\n \n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.firstName}\n validationMessage={props.errors.firstName}\n attrs={{ disabled: props.busy }}\n />\n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.lastName}\n validationMessage={props.errors.lastName}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.tel}\n validationMessage={props.errors.tel}\n attrs={{ disabled: props.busy }}\n />\n\n \n \n\n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.email}\n validationMessage={props.errors.email}\n attrs={{ disabled: props.busy }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.passwd}\n validationMessage={props.errors.passwd}\n attrs={{ disabled: props.busy }}\n />\n \n\n\n

Your Address

\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.addrLn1}\n validationMessage={props.errors.addrLn1}\n attrs={{ disabled: props.busy }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.town}\n validationMessage={props.errors.town}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.county}\n validationMessage={props.errors.county}\n attrs={{ disabled: props.busy }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.country}\n validationMessage={props.errors.country}\n attrs={{ disabled: props.busy }}\n >\n \n {Object.keys(countries).map((key) => (\n \n ))}\n \n \n\n \n props.onChange(e.target.name, e.target.value)}\n attrs={{ maxLength: 8, disabled: props.busy }}\n invalid={!!props.errors.postCode}\n validationMessage={props.errors.postCode}\n />\n \n\n \n\n {(props.onBack || props.onSubmit) && (\n \n {props.onBack && (\n \n \n \n )}\n {props.onSubmit && (\n \n \n \n )}\n \n )}\n\n {props.failure && }\n \n );\n};\n\nCreateUserForm.defaultProps = {\n busy: false,\n errors: {},\n values: {},\n};\n\nCreateUserForm.propTypes = {\n busy: PropTypes.bool,\n errors: PropTypes.object,\n failure: PropTypes.object,\n onBack: PropTypes.func,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n values: PropTypes.object,\n};\n\nexport default CreateUserForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport RedEye from './RedEye';\n\nexport const RedEyeUserRegistrationTag = ({ details }) => (\n \n);\n\nRedEyeUserRegistrationTag.propTypes = {\n details: PropTypes.object,\n};\n\nexport default RedEyeUserRegistrationTag;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { createUser } from '../../../../redux/user/actions';\nimport { createUserError, createUserFailed, createUserPending } from '../../../../redux/user/selectors';\nimport { validateFields } from './CreateUserForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const useCreateUserFormActions = () => {\n const dispatch = useDispatch();\n return {\n createUser: (data) => {\n return createUser(dispatch, data);\n },\n };\n};\n\nexport const useCreateUserFormState = () => ({\n ...useLocalFormState(validateFields),\n createUserError: useSelector(createUserError),\n createUserFailed: useSelector(createUserFailed),\n createUserPending: useSelector(createUserPending),\n});\n\nexport default useCreateUserFormState;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport CreateUserForm from '../../Forms/User/CreateUserForm/CreateUserForm';\nimport RedEyeUserRegistrationTag from '../../RedEye/RedEyeUserRegistrationTag';\nimport { useCreateUserFormActions, useCreateUserFormState } from '../../Forms/User/CreateUserForm/useCreateUserForm';\n\nfunction Login(props) {\n const {\n values,\n onChange,\n validate,\n isValid,\n errors,\n createUserError,\n createUserPending,\n } = useCreateUserFormState();\n const { createUser } = useCreateUserFormActions();\n const [firstRun, setFirstRun] = useState(true); // Used to hide error messages if just opened\n const [doTagging, setDoTagging] = useState(false);\n useEffect(() => {\n setFirstRun(true);\n }, []);\n\n const handleRegister = (event) => {\n event.preventDefault();\n setFirstRun(false);\n validate();\n if (isValid()) {\n setDoTagging(true);\n fetch('/api/logout') // Fixes 'Already logged in'.\n .then(() => {\n createUser(values)\n .request.catch(() => {})\n .finally(() => {\n setDoTagging(false);\n });\n })\n }\n };\n\n return (\n <>\n \n {doTagging && }\n \n );\n}\n\nLogin.propTypes = {\n onBack: PropTypes.func,\n};\n\nexport default Login;\n","import React from 'react';\nimport RedEye from '../../../components/RedEye/RedEye';\nimport { useSelector } from 'react-redux';\n\nexport const LoggedInView = () => {\n const redEyeUrl = useSelector((state) => state.user.details.redeyeUrl);\n\n return (\n <>\n
\n \n

You're logged in!

\n
\n \n \n );\n};\n\nexport default LoggedInView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Col, Button } from 'react-bootstrap';\nimport TextInput from '../../../FormElements/TextInput';\nimport { required, email, password } from '../../../../utils/validation';\nimport RequestErrors from '../../../RequestErrors';\nimport t from '../../../../../text';\n\nexport const validateFields = (values) => {\n const errors = {};\n if (!required(values.email) || !email(values.email)) {\n errors.email = t('forms.user.invalidEmail');\n }\n if (!required(values.email)) {\n errors.email = t('forms.user.blankEmail');\n }\n if (!required(values.password) || !password(values.password)) {\n errors.password = t('forms.login.invalidPassword');\n }\n if (!required(values.password)) {\n errors.password = t('forms.login.blankPassword');\n }\n return errors;\n};\n\nexport const LoginForm = (props) => (\n
\n \n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.email}\n validationMessage={props.errors.email}\n attrs={{ 'aria-label': t('forms.user.emailAddress'), disabled: props.busy, autoComplete: 'username' }}\n />\n \n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.password}\n validationMessage={props.errors.password}\n attrs={{ 'aria-label': t('forms.user.password'), disabled: props.busy, autoComplete: 'current-password' }}\n />\n \n \n \n \n \n \n \n \n \n \n\n {props.failure && }\n\n {!props.isBookingPage && (\n <>\n
{t('forms.login.notAMember')}
\n \n \n )}\n \n);\n\nLoginForm.defaultProps = {\n busy: false,\n errors: {},\n values: {},\n};\n\nLoginForm.propTypes = {\n busy: PropTypes.bool,\n errors: PropTypes.object,\n failure: PropTypes.object,\n onChange: PropTypes.func,\n onLogin: PropTypes.func,\n onViewRegister: PropTypes.func,\n onViewReset: PropTypes.func,\n values: PropTypes.object,\n};\n\nexport default LoginForm;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { login } from '../../../../redux/user/actions';\nimport { loggedIn, loggingIn, loginError, loginFailed } from '../../../../redux/user/selectors';\nimport { validateFields } from './LoginForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const useLoginFormActions = () => {\n const dispatch = useDispatch();\n return {\n login: (email, passwd) => {\n return login(dispatch, email, passwd);\n },\n };\n};\n\nexport const useLoginFormState = () => ({\n ...useLocalFormState(validateFields),\n loggedIn: useSelector(loggedIn),\n loggingIn: useSelector(loggingIn),\n loginError: useSelector(loginError),\n loginFailed: useSelector(loginFailed),\n});\n\nexport default useLoginFormState;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport LoginForm, { validateFields as loginValidator } from '../../Forms/User/LoginForm/LoginForm';\nimport { useLoginFormActions, useLoginFormState } from '../../Forms/User/LoginForm/useLoginForm';\n\nfunction LoginFormView(props) {\n const { values, onChange, validate, isValid, errors, loggingIn, loginError } = useLoginFormState(loginValidator);\n const { login } = useLoginFormActions();\n\n const [firstRun, setFirstRun] = useState(true); // Used to hide error messages if just opened\n useEffect(() => {\n setFirstRun(true);\n }, []);\n\n const handleLogin = (event) => {\n event.preventDefault();\n setFirstRun(false);\n validate();\n if (isValid()) {\n login(values.email, values.password).request.finally(() => props.isBookingPage && window.location.reload());\n }\n };\n\n return (\n \n );\n}\n\nLoginFormView.propTypes = {\n onViewRegister: PropTypes.func,\n onViewReset: PropTypes.func,\n};\n\nexport default LoginFormView;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory, Redirect } from 'react-router';\nimport { Form, Col, Button } from 'react-bootstrap';\nimport TextInput from '../../../FormElements/TextInput';\nimport { required, email } from '../../../../utils/validation';\nimport RequestErrors from '../../../RequestErrors';\nimport t from '../../../../../text';\n\nexport const validateFields = (values) => {\n const errors = {};\n if (!required(values.email) || !email(values.email)) {\n errors.email = t('forms.user.invalidEmail');\n }\n if (!required(values.email)) {\n errors.email = t('forms.user.blankEmail');\n }\n return errors;\n};\n\nexport const PasswordResetForm = (props) => {\n let history = useHistory();\n\n const { success, handleClose, loggedIn, errors, busy, values, onChange, format, onBack, failure, onSubmit } = props;\n\n useEffect(() => {\n if (success && handleClose) {\n handleClose();\n }\n }, [success, handleClose, history]);\n\n return (\n
\n {!loggedIn && (\n \n \n
Reset Your Password
\n

Enter the email address associated with your account to receive a password reset email.

\n \n
\n )}\n \n \n onChange(e.target.name, e.target.value)}\n invalid={!!errors.email}\n validationMessage={errors.email}\n attrs={{ disabled: busy || loggedIn, autoComplete: 'username' }}\n />\n \n \n\n \n {format !== 'noback' && !loggedIn && (\n \n \n \n )}\n\n \n \n \n \n\n {failure && }\n {success &&

{t('forms.resetPassword.success', loggedIn)}

}\n {success && }\n \n );\n};\n\nPasswordResetForm.defaultProps = {\n busy: false,\n errors: {},\n success: false,\n values: {},\n};\n\nPasswordResetForm.propTypes = {\n busy: PropTypes.bool,\n errors: PropTypes.object,\n failure: PropTypes.object,\n loggedIn: PropTypes.bool,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n success: PropTypes.bool,\n values: PropTypes.object,\n};\n\nexport default PasswordResetForm;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { requestPasswordReset } from '../../../../redux/user/actions';\nimport {\n email,\n loggedIn,\n requestPasswordResetError,\n requestPasswordResetFailed,\n requestPasswordResetPending,\n} from '../../../../redux/user/selectors';\n\nimport { validateFields } from './PasswordResetForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const usePasswordResetFormActions = () => {\n const dispatch = useDispatch();\n return {\n requestPasswordReset: (email) => {\n return requestPasswordReset(dispatch, email);\n },\n };\n};\n\nexport const usePasswordResetFormState = () => {\n const loggedInEmail = useSelector(email);\n const lfs = useLocalFormState(validateFields);\n const isLoggedIn = useSelector(loggedIn);\n\n if (isLoggedIn && lfs.values.email !== loggedInEmail) {\n lfs.onChange('email', loggedInEmail);\n }\n\n return {\n ...lfs,\n loggedIn: isLoggedIn,\n requestPasswordResetError: useSelector(requestPasswordResetError),\n requestPasswordResetFailed: useSelector(requestPasswordResetFailed),\n requestPasswordResetPending: useSelector(requestPasswordResetPending),\n };\n};\n\nexport default usePasswordResetFormState;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport PasswordResetForm from '../../Forms/User/PasswordResetForm/PasswordResetForm';\nimport {\n usePasswordResetFormActions,\n usePasswordResetFormState,\n} from '../../Forms/User/PasswordResetForm/usePasswordResetForm';\n\nfunction PasswordResetFormView(props) {\n const {\n values,\n onChange,\n validate,\n isValid,\n errors,\n loggedIn,\n requestPasswordResetError,\n requestPasswordResetPending,\n } = usePasswordResetFormState();\n const { requestPasswordReset } = usePasswordResetFormActions();\n\n const [firstRun, setFirstRun] = useState(true); // Used to hide error messages if just opened\n useEffect(() => {\n setFirstRun(true);\n setSuccess(false);\n }, []);\n\n const [success, setSuccess] = useState(false);\n\n const handleResetPassword = (event) => {\n event.preventDefault();\n setSuccess(false);\n setFirstRun(false);\n validate();\n\n if (isValid()) {\n requestPasswordReset(values.email)\n .request.then(() => {\n setSuccess(true);\n })\n .catch(() => {\n /* Do nothing on failure, form will react to redux state */\n });\n }\n };\n\n return (\n \n );\n}\n\nPasswordResetFormView.propTypes = {\n onBack: PropTypes.func,\n};\n\nexport default PasswordResetFormView;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nimport { loggedIn } from '../../redux/user/selectors';\n\nimport CreateUserFormView from './views/CreateUserFormView';\nimport LoggedInView from './views/LoggedInView';\nimport LoginFormView from './views/LoginFormView';\nimport PasswordResetFormView from './views/PasswordResetFormView';\n\nfunction Login(props) {\n const history = useHistory();\n const location = useLocation();\n const query = new URLSearchParams(location.search);\n const [viewMode, setViewMode] = useState(query.has(\"forgot-password\") ? 'reset' : 'login'); // One of login|register|loggedin|reset\n const _loggedIn = useSelector(loggedIn);\n const redirectToPage = () => {\n if (_loggedIn && props.redirectOnLogin) {\n const params = new URLSearchParams(history.location.search);\n const redirect = params.get('redirect');\n history.replace(redirect || '/my-account');\n }\n };\n\n useEffect(redirectToPage, [props.redirectOnLogin, history, _loggedIn]);\n\n return (\n <>\n {_loggedIn ? (\n \n ) : (\n <>\n {viewMode === 'login' && (\n setViewMode('register')}\n onViewReset={() => setViewMode('reset')}\n />\n )}\n {viewMode === 'register' && setViewMode('login')} />}\n {viewMode === 'reset' && (\n setViewMode('login')} handleClose={props.handleClose} />\n )}\n \n )}\n \n );\n}\n\nLogin.propTypes = {\n redirectOnLogin: PropTypes.bool,\n};\n\nLogin.defaultProps = {\n redirectOnLogin: true,\n};\n\nexport default Login;\n","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport CardPanel from '../../components/CardPanel';\nimport Login from '../../components/Login/Login';\nimport ScrollToTop from '../../components/ScrollToTop';\n\nexport const LoginPage = () => {\n return (\n <>\n \n Login\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LoginPage;\n","import { connect } from 'react-redux';\nimport { loggedIn } from '../../redux/user/selectors';\nimport Login from './Login';\n\nconst mapStateToProps = (state) => ({\n loggedIn: loggedIn(state),\n});\n\nconst mapDispatchToProps = () => ({});\n\nexport const LoginConnected = connect(mapStateToProps, mapDispatchToProps)(Login);\nexport default LoginConnected;\n","import React from 'react';\nimport { Card, Row, Col, Button } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport NoImage from '../../assets/images/no-image.png';\nimport { DDMMYYYYToDate, getDayMonthYearFromDate, getDepartureDate } from '../../utils/date';\nimport t from '../../../text';\n\nconst formatDate = (date, checkout = 0) => {\n const formatDate = DDMMYYYYToDate(date);\n const departureDate = getDepartureDate(formatDate, checkout);\n return getDayMonthYearFromDate(departureDate);\n};\n\nexport const BookingCard = (props) => {\n const outstandingPayment = parseFloat(props.booking.outstandingPayment) > 0;\n\n return (\n \n \n \n \n

{props.booking.parkName}

\n \n \n {!outstandingPayment && (\n

\n \n {t('myAccount.bookings.paid')}\n

\n )}\n {/*props.booking.amountPaid > props.booking.totalCost && (\n

\n Overpaid?\n

\n )*/}\n {outstandingPayment && (\n

\n \n {t('myAccount.bookings.outstandingAmount')}\n

\n )}\n \n
\n
\n \n \n \n {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n className=\"w-100\"\n />\n \n \n

\n {props.booking.accomodation}\n

\n

\n £{props.booking.totalCost}\n

\n \n \n {t('myAccount.bookings.holidayBookingRef')}\n \n {props.booking.bookId}\n \n {t('myAccount.bookings.checkIn')}\n \n {formatDate(props.booking.holidayDate)}\n \n {t('myAccount.bookings.checkOut')}\n \n {formatDate(props.booking.holidayDate, parseInt(props.booking.nights))}\n \n {t('myAccount.bookings.nights')}\n \n {props.booking.nights}\n \n\n {outstandingPayment && (\n \n )}\n \n
\n
\n
\n );\n};\n\nBookingCard.propTypes = {\n booking: PropTypes.object,\n onPayBalance: PropTypes.func,\n};\n\nexport default BookingCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from './Icon';\n\nimport { config } from '../../config';\n\nexport const Spinner = (props) => {\n return (\n
\n \n

{props.message}

\n
\n );\n};\n\nSpinner.defaultProps = {\n center: false,\n message: 'Loading, please wait...',\n};\n\nSpinner.propTypes = {\n center: PropTypes.bool,\n message: PropTypes.string,\n};\n\nexport default Spinner;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col } from 'react-bootstrap';\n\nimport ScrollToTop from '../ScrollToTop';\nimport Spinner from '../Spinner';\nimport t from '../../../text';\n\nconst Wrap = ({ children, useContainer }) => (\n <>\n {useContainer ? (\n \n \n {children}\n \n \n ) : (\n <>{children}\n )}\n \n);\n\nexport const WithLoadingStates = (props) => (\n <>\n {props.isFetching ? (\n \n {props.scrollToTop && }\n \n \n ) : (\n <>\n {!props.hasErrorFetching ? (\n props.children\n ) : (\n \n

\n \n {props.loadingErrorMessage || t('global.errorLoading')}\n

\n \n
\n )}\n \n )}\n \n);\n\nWithLoadingStates.defaultProps = {\n hasErrorFetching: false,\n isFetching: false,\n useContainer: false,\n};\n\nWithLoadingStates.propTypes = {\n hasErrorFetching: PropTypes.bool,\n isFetching: PropTypes.bool,\n loadingErrorMessage: PropTypes.string,\n onRetry: PropTypes.func,\n scrollToTop: PropTypes.bool,\n spinnerMessage: PropTypes.string,\n useContainer: PropTypes.bool,\n};\n\nexport default WithLoadingStates;\n","import { Children, cloneElement, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\n\nexport function useDataLoader(props, getData, hasFailed, isLoaded, isLoading, isReady, extraProps, allowFailure) {\n const dispatch = useDispatch();\n\n const isFetching = (isReady && !isLoaded && !hasFailed) || isLoading;\n\n const load = (ignoreFail = false) => {\n if (isReady && !isLoaded && !isLoading && (!hasFailed || ignoreFail)) {\n getData(dispatch, ignoreFail);\n }\n };\n\n const retry = () => {\n load(true);\n if (props.onRetry) props.onRetry();\n };\n\n useEffect(load);\n\n // Now we need to inject props into the child element(s)\n return Children.map(props.children || [], (child) => {\n return cloneElement(child, {\n ...props,\n ...child.props,\n isFetching: isFetching || !!props.isFetching,\n hasErrorFetching: (hasFailed && !allowFailure) || !!props.hasErrorFetching,\n onRetry: retry,\n ...(extraProps ? extraProps({ hasFailed, isLoaded, isLoading, isReady, isFetching }) : {}),\n });\n });\n}\n\nexport default useDataLoader;\n","import { useSelector } from 'react-redux';\n\nimport { getBookings } from '../../redux/user/actions';\nimport { getBookingsFailed, getBookingsLoaded, getBookingsPending } from '../../redux/user/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithUserBookings(props) {\n const getData = (dispatch, force) => getBookings(dispatch, force);\n const _hasFailed = useSelector((state) => getBookingsFailed(state));\n const _isLoaded = useSelector((state) => getBookingsLoaded(state));\n const _isLoading = useSelector((state) => getBookingsPending(state));\n const _isReady = true;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nexport default WithUserBookings;\n","import {\n COMPLETE_BOOKING,\n CREATE_BOOKING,\n GET_DEPOSIT,\n SET_DISCOUNT_CODE,\n SET_DISCOUNT_VALUE,\n LOAD_BOOKING,\n STEP_COMPLETED,\n STEP_NOT_COMPLETED,\n} from './action-types';\nimport { apiRequest, callbackApiRequest } from '../../apiRequest';\nimport selfCancellingAction from '../../selfCancellingAction';\nimport { urls } from '../../../../config';\n\nexport const [createBooking, cancelCreateBooking] = selfCancellingAction(\n (dispatch, channelId, parkId, unitId, unitTypeId, unitPrice, arrivalDate, duration, party = {}) => {\n dispatch({\n type: CREATE_BOOKING,\n payload: {\n type: 'new',\n channelId,\n unitId: unitId,\n unitTypeId,\n unitPrice,\n parkId,\n arrivalDate,\n duration,\n party,\n discountValue: null,\n },\n });\n return apiRequest(dispatch, CREATE_BOOKING, urls.booking, { unitId: unitId, ...party });\n },\n);\n\nexport const [getDeposit, cancelGetDeposit] = selfCancellingAction((dispatch, bookingId) => {\n return apiRequest(dispatch, GET_DEPOSIT, urls.bookingGetDeposit, { bookId: bookingId });\n});\n\nexport const storeDiscountCode = (dispatch, code) => {\n return dispatch({\n type: SET_DISCOUNT_CODE,\n payload: code.toString(),\n });\n};\n\nexport const storeDiscountValue = (dispatch, value) => {\n return dispatch({\n type: SET_DISCOUNT_VALUE,\n payload: parseFloat(value),\n });\n};\n\nexport const completeBooking = (dispatch) => {\n return dispatch({\n type: COMPLETE_BOOKING,\n payload: {},\n });\n};\n\nexport const loadBooking = (\n dispatch,\n bookingId,\n channelId,\n parkId,\n unitId,\n unitTypeId,\n totalCost,\n amountPaid,\n arrivalDate,\n duration,\n) => {\n dispatch({\n type: LOAD_BOOKING,\n payload: {\n type: 'existing',\n bookingId,\n channelId,\n unitId: unitId,\n unitTypeId,\n totalCost,\n amountPaid,\n parkId,\n arrivalDate,\n duration,\n },\n });\n};\n\nexport const stepCompleted = (dispatch, step) => {\n dispatch({ type: STEP_COMPLETED, payload: step });\n};\n\nexport const stepNotCompleted = (dispatch, step) => {\n dispatch({ type: STEP_NOT_COMPLETED, payload: step });\n};\n\nexport const [setDiscount, cancelSetDiscount] = selfCancellingAction((dispatch, bookingId, dCode) => {\n let obj = {\n bookId: bookingId,\n discountCode: dCode,\n };\n return callbackApiRequest(dispatch, SET_DISCOUNT_CODE, urls.bookingSetDiscount, obj, undefined, 'post');\n});\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport BookingCard from '../../components/MyAccount/BookingCard';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithUserBookings from '../../components/MyAccount/WithUserBookings';\n\nimport { loadBooking } from '../../redux/booking/booking/actions';\nimport { DDMMYYYYToDate } from '../../utils/date';\nimport t from '../../../text';\n\nexport const Bookings = ({ bookings }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n\n const onPayBalance = (booking) => {\n loadBooking(\n dispatch,\n booking.bookId,\n booking.channelId,\n booking.parkId,\n booking.unitId,\n booking.unitTypeId,\n booking.totalCost,\n booking.amountPaid,\n DDMMYYYYToDate(booking.holidayDate),\n booking.nights,\n );\n history.push('/booking');\n };\n\n return (\n \n \n {bookings.length === 0 ? (\n <>\n

{t('myAccount.bookings.noBookings.title')}

\n

{t('myAccount.bookings.noBookings.text')}

\n \n ) : (\n bookings.map((booking) => (\n \n ))\n )}\n
\n
\n );\n};\n\nexport default Bookings;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { updateUser } from '../../../../redux/user/actions';\nimport { details, updateUserError, updateUserFailed, updateUserPending } from '../../../../redux/user/selectors';\n\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\nimport { validateFields } from './ContactPreferencesForm';\n\nexport const useContactPreferencesFormActions = () => {\n const dispatch = useDispatch();\n return {\n updateUser: (values) => {\n return updateUser(dispatch, values);\n },\n };\n};\n\nexport const useContactPreferencesFormState = () => {\n const _details = useSelector(details);\n const initialFormValues = {\n emailOpt: _details.emailOpt,\n smsOpt: _details.smsOpt,\n postOpt: _details.postOpt,\n thirdOpt: _details.thirdOpt,\n };\n\n return {\n ...useLocalFormState(validateFields, initialFormValues),\n updateUserError: useSelector(updateUserError),\n updateUserFailed: useSelector(updateUserFailed),\n updateUserPending: useSelector(updateUserPending),\n };\n};\n\nexport default useContactPreferencesFormState;\n","import React, { useState } from 'react';\nimport { Card, Button } from 'react-bootstrap';\n\nimport ContactPreferencesForm from '../../components/Forms/User/ContactPreferencesForm/ContactPreferencesForm';\nimport {\n useContactPreferencesFormActions,\n useContactPreferencesFormState,\n} from '../../components/Forms/User/ContactPreferencesForm/useContactPreferencesForm';\nimport t from '../../../text';\n\nexport function PreferencesCentre() {\n const [firstRun, setFirstRun] = useState(true);\n const preferences = useContactPreferencesFormState();\n const { updateUser } = useContactPreferencesFormActions();\n\n const handleSubmit = (event) => {\n event.preventDefault();\n updateUser(preferences.values).request.finally(() => setFirstRun(false));\n };\n\n return (\n \n \n

{t('myAccount.preferences.title')}

\n
\n \n \n \n {!firstRun && (\n <>\n {preferences.updateUserFailed ? (\n

{t('myAccount.preferences.updateFail')}

\n ) : (\n

{t('myAccount.preferences.updateSuccess')}

\n )}\n \n )}\n
\n
\n );\n}\n\nexport default PreferencesCentre;\n","import PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useLocation } from 'react-router-dom';\n\nimport { loggedIn } from '../../redux/user/selectors';\n\nexport const WithLogin = (props) => {\n const history = useHistory();\n const location = useLocation();\n const _loggedIn = useSelector(loggedIn);\n\n if (!_loggedIn && location.pathname !== '/login') {\n const redirectPath = props.redirect || location.pathname;\n history.replace(`/login?redirect=${redirectPath}`);\n return null;\n }\n\n return props.children;\n};\n\nWithLogin.propTypes = {\n redirect: PropTypes.string,\n};\n\nexport default WithLogin;\n","import React from 'react';\nimport { Form, Button, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport RequestErrors from '../../../RequestErrors';\nimport SelectInput from '../../../FormElements/SelectInput';\nimport TextInput from '../../../FormElements/TextInput';\n\nimport countries from '../../../../Data/Countries.json';\nimport months from '../../../../Data/Months.json';\nimport titles from '../../../../Data/Titles.json';\n\nimport { calculateAge, DDMMYYYYToDate } from '../../../../utils/date';\nimport { required, email, telephone, postcode } from '../../../../utils/validation';\nimport t from '../../../../../text';\n\nconst generateDayOptions = () => {\n const values = [...new Array(31)].map((num, i) => (i + 1 < 10 ? '0' : '') + (i + 1).toString());\n return values.map((value) => (\n \n ));\n};\n\nconst generateYearOptions = () => {\n const end = new Date().getFullYear();\n return [...new Array(120)].map((item, i) => (\n \n ));\n};\n\nexport const validateFields = (values = {}) => {\n const errors = {};\n if (!required(values.title)) {\n errors.title = t('forms.forms.noValueSelected');\n }\n if (!required(values.firstName)) {\n errors.firstName = t('forms.user.blankFirstName');\n }\n if (!required(values.lastName)) {\n errors.lastName = t('forms.user.blankSurname');\n }\n if (!required(values.email) || !email(values.email)) {\n errors.email = t('forms.user.invalidEmail');\n }\n if (!required(values.email)) {\n errors.email = t('forms.user.blankEmail');\n }\n if (!required(values.tel) || !telephone(values.tel)) {\n errors.tel = t('forms.user.invalidTelephone');\n }\n if (!required(values.dobDay)) {\n errors.dobDay = t('forms.forms.noValueSelected');\n }\n if (!required(values.dobMnth)) {\n errors.dobMnth = t('forms.forms.noValueSelected');\n }\n if (!required(values.dobYr)) {\n errors.dobYr = t('forms.forms.noValueSelected');\n }\n if (!required(values.addrLn1)) {\n errors.addrLn1 = t('forms.address.blankAddress');\n }\n if (!required(values.town)) {\n errors.town = t('forms.address.blankTown');\n }\n if (!required(values.postCode) || !postcode(values.postCode)) {\n errors.postCode = t('forms.address.invalidPostcode');\n }\n if (!required(values.county)) {\n errors.county = t('forms.address.blankCounty');\n }\n if (!required(values.country)) {\n errors.country = t('forms.forms.noValueSelected');\n }\n\n if (!errors.dobDay && !errors.dobMnth && !errors.dobYr) {\n const age = calculateAge(DDMMYYYYToDate(`${values.dobDay}/${values.dobMnth}/${values.dobYr}`));\n if (age < 18) {\n errors.dobDay = t('forms.user.mustBeOver18');\n errors.dobMnth = ' ';\n errors.dobYr = ' ';\n }\n }\n\n return errors;\n};\n\nexport const isValid = (values = {}) => !Object.keys(validateFields(values)).length;\n\nexport const UpdateUserForm = (props) => (\n
\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.title}\n validationMessage={props.errors.title}\n attrs={{ disabled: props.busy }}\n >\n \n {Object.keys(titles).map((key) => (\n \n ))}\n \n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.firstName}\n validationMessage={props.errors.firstName}\n attrs={{ disabled: props.busy }}\n />\n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.lastName}\n validationMessage={props.errors.lastName}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.email}\n validationMessage={props.errors.email}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.tel}\n validationMessage={props.errors.tel}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.dobDay}\n validationMessage={props.errors.dobDay}\n >\n \n {generateDayOptions()}\n \n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.dobMnth}\n validationMessage={props.errors.dobMnth}\n >\n \n {months.map((month) => (\n \n ))}\n \n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.dobYr}\n validationMessage={props.errors.dobYr}\n >\n \n {generateYearOptions()}\n \n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.addrLn1}\n validationMessage={props.errors.addrLn1}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.town}\n validationMessage={props.errors.town}\n attrs={{ disabled: props.busy }}\n />\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.county}\n validationMessage={props.errors.county}\n attrs={{ disabled: props.busy }}\n />\n \n\n \n props.onChange(e.target.name, e.target.value)}\n attrs={{ maxLength: 8, disabled: props.busy }}\n invalid={!!props.errors.postCode}\n validationMessage={props.errors.postCode}\n />\n\n props.onChange(e.target.name, e.target.value)}\n invalid={!!props.errors.country}\n validationMessage={props.errors.country}\n attrs={{ disabled: props.busy }}\n >\n \n {Object.keys(countries).map((key) => (\n \n ))}\n \n \n\n {(props.onBack || props.onSubmit) && (\n \n {props.onBack && (\n \n \n \n )}\n {props.onSubmit && (\n \n \n \n )}\n \n )}\n\n {props.failure && }\n \n);\n\nUpdateUserForm.defaultProps = {\n busy: false,\n errors: {},\n values: {},\n};\n\nUpdateUserForm.propTypes = {\n busy: PropTypes.bool,\n errors: PropTypes.object,\n failure: PropTypes.object,\n onBack: PropTypes.func,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n values: PropTypes.object,\n};\n\nexport default UpdateUserForm;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { updateUser } from '../../../../redux/user/actions';\nimport { details, updateUserError, updateUserFailed, updateUserPending } from '../../../../redux/user/selectors';\nimport { validateFields } from './UpdateUserForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const useUpdateUserFormActions = () => {\n const dispatch = useDispatch();\n return {\n updateUser: (values) => {\n return updateUser(dispatch, values);\n },\n };\n};\n\nexport const useUpdateUserFormState = () => {\n const _details = useSelector(details);\n const initialFormValues = {\n title: _details.title,\n firstName: _details.firstName,\n lastName: _details.lastName,\n email: _details.email,\n addrLn1: _details.addrLn1,\n town: _details.town,\n city: _details.city,\n county: _details.county,\n country: _details.country,\n postCode: _details.postCode,\n tel: _details.tel,\n dobDay: _details.dobDay,\n dobMnth: _details.dobMnth,\n dobYr: _details.dobYr,\n };\n\n return {\n ...useLocalFormState(validateFields, initialFormValues),\n updateUserError: useSelector(updateUserError),\n updateUserFailed: useSelector(updateUserFailed),\n updateUserPending: useSelector(updateUserPending),\n };\n};\n\nexport default useUpdateUserFormState;\n","import React, { useState } from 'react';\nimport { Card, Button } from 'react-bootstrap';\n\nimport RequestErrors from '../../components/RequestErrors';\nimport UpdateUserForm from '../../components/Forms/User/UpdateUserForm/UpdateUserForm';\nimport {\n useUpdateUserFormActions,\n useUpdateUserFormState,\n} from '../../components/Forms/User/UpdateUserForm/useUpdateUserForm';\nimport t from '../../../text';\n\nexport function YourDetails() {\n const details = useUpdateUserFormState();\n const [firstRun, setFirstRun] = useState(true);\n const { updateUser } = useUpdateUserFormActions();\n\n const handleSubmit = (event) => {\n event.preventDefault();\n details.validate();\n\n if (details.isValid()) {\n updateUser(details.values).request.finally(() => setFirstRun(false));\n }\n };\n\n return (\n \n \n

{t('myAccount.yourDetails.title')}

\n

{t('myAccount.yourDetails.text')}

\n
\n \n \n \n {!firstRun && (\n <>\n {details.updateUserFailed ? (\n <>\n

There was an error while updating your details:

\n \n \n ) : (\n

Your details have been updated successfully.

\n )}\n \n )}\n
\n
\n );\n}\n\nexport default YourDetails;\n","import React, { useState } from 'react';\nimport { Dropdown, Col, Tab, Nav } from \"react-bootstrap\";\nconst TabNavigation = (props) => {\n const itemClasses = ['cursor-pointer', 'd-flex', 'justify-content-between', 'text-lg', 'p-3'];\n const [activeTab, setActiveTab] = useState(props.active || props.Tabs[0]);\n const handleMenuClick = (key) => {\n setActiveTab(key);\n };\n return (\n <>\n \n \n \n {/* Visible only on xs */}\n \n \n {props.Tabs.filter((obj) => obj.key === activeTab)[0].name}\n \n \n {props.Tabs.map((item) => (\n handleMenuClick(item.key)} eventKey={item.key}>\n {item.name}\n \n ))}\n \n \n \n {props.content(activeTab)}\n \n \n \n\n\n );\n}\n\nexport default TabNavigation;","import React from 'react';\nimport { Card, Container, Row, Tab } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { Helmet } from 'react-helmet-async';\nimport { bookings, details } from '../../redux/user/selectors';\n\nimport Bookings from './Bookings';\nimport PageTitle from '../../components/PageTitle';\nimport PasswordResetForm from '../../components/Login/views/PasswordResetFormView';\nimport PreferencesCentre from './PreferencesCentre';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport WithLogin from '../../components/HOC/WithLogin';\nimport YourDetails from './YourDetails';\nimport t from '../../../text';\nimport TabNavigation from '../../components/Common/TabNavigation';\n\nfunction MyAccount() {\n const allBookings = useSelector(bookings);\n const futureBookings = allBookings?.future || [];\n const pastBookings = allBookings?.past || [];\n const user = useSelector(details);\n\n const MyAccountTabs = () => {\n return (\n\n \n \n \n \n\n \n \n \n\n \n \n \n

{t('myAccount.password.title')}

\n

{t('myAccount.password.text')}

\n
\n \n \n \n
\n
\n \n \n \n\n \n \n \n
\n );\n\n }\n\n const availableTabs = [\n { name: t('myAccount.menu.details'), key: 'details' },\n { name: t('myAccount.menu.changePassword'), key: 'change-password' },\n { name: t('myAccount.menu.currentBookings'), key: 'c-bookings' },\n { name: t('myAccount.menu.pastBookings'), key: 'p-bookings' },\n ];\n\n return (\n \n \n {t('myAccount.page.title')}\n \n \n \n \n \n \n \n \n \n );\n}\n\nMyAccount.defaultProps = {\n firstname: 'Firstname',\n};\n\nexport default MyAccount;\n","import React from 'react';\nimport { Badge } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport { slugify } from '../../utils/string';\nimport t from '../../../text';\nimport Slider from 'react-slick';\nimport { Link } from 'react-router-dom';\nimport { config } from '../../../config';\n\nexport const ParkImage = ({ channelId, regionId, park, url, parkRoute, isSticky, isPremium }) => {\n const boatBgImage = `//content.breakfreeholidays.co.uk/images/boats/routes/${park.parkId}.jpg`;\n const internalUrl = `/${parkRoute}/${channelId}/${regionId}/${park.parkId}/${slugify(park.name)}`;\n const linkUrl = url ? url + `${/\\?/.test(url) ? '&' : '?'}utm_campaign=${config['siteCode']}` : internalUrl;\n const images = 'imgs' in park ? park.imgs : park.img.split();\n\n // Boats Images\n if (channelId === 'boats') images.push(boatBgImage);\n\n const SliderItems = images.map((img, i) => {\n let image = \"Images\";\n if (url) {\n return (\n \n {image}\n \n );\n } else {\n return (\n \n {image}\n \n );\n }\n });\n return (\n
\n {isSticky && (\n \n {t('searchResults.sticky')}\n \n )}\n {isPremium && (\n \n {t('searchResults.premium')}\n \n )}\n {SliderItems}\n
\n );\n};\n\nParkImage.propTypes = {\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n park: PropTypes.object,\n url: PropTypes.string,\n parkRoute: PropTypes.string,\n isSticky: PropTypes.bool,\n isPremium: PropTypes.bool,\n};\n\nexport default ParkImage;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { slugify } from '../../utils/string';\nimport t from '../../../text';\nimport RedEye from '../../components/RedEye/RedEye';\nimport { stripProtocol } from '../../utils/string';\nimport { config, urls } from '../../../config';\nimport A from '../A';\nimport { Button, Modal, Form, Col } from 'react-bootstrap';\nimport Logo from '../Logo';\nimport ReactGa from 'react-ga';\n\nexport const ParkLink = ({ channelId, regionId, park, url, parkRoute, specialButtonClass, smallText, minPrice }) => {\n const [show, setShow] = useState(false);\n const [validated, setValidated] = useState(false);\n const [fName, setFName] = useState('');\n const [email, setEmail] = useState('');\n const [success, setSuccess] = useState(0);\n const [message, setMessage] = useState('');\n const [displayRedEye, setDisplayRedEye] = useState(false);\n\n const handleShowPartnerPopup = () => setShow(true);\n const handleHidePartnerPopup = () => setShow(false);\n const handleSubmit = (event) => {\n const form = event.currentTarget;\n event.preventDefault();\n event.stopPropagation();\n\n if (form.checkValidity() === true) {\n fetch(\n `${urls.newsletterSignup}?email=${encodeURIComponent(email)}&fname=${encodeURIComponent(\n fName,\n )}&type=OPID-${park.opId}`,\n )\n .then((response) => response.json())\n .then((data) => {\n setSuccess(data.success);\n if (data.success === 1) setMessage('');\n if (data.success === 0) {\n setMessage(data.errors[0].message);\n setDisplayRedEye(true);\n }\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n setDisplayRedEye(true);\n });\n }\n\n setValidated(true);\n setDisplayRedEye(true);\n };\n\n const extLinkText = (minPrice, channelId) => {\n if (+minPrice >= 1) return t('searchResults.viewPark', channelId, minPrice);\n return t('searchResults.viewPark', channelId);\n };\n\n const clickToHavenHandler = () => {\n ReactGa.event({\n category: \"External links\",\n action: \"Clicked link to the Haven website\",\n label: \"Park link on Search result\"\n })\n };\n\n if (url) {\n return (\n <>\n \n \n \n \n \n

We are sending you to our trusted partner to complete your booking.

\n clickToHavenHandler()}\n href={url + `&utm_campaign=${config['siteCode']}`}\n >\n Continue to Booking\n \n
\n \n

\n {t('parks.popup.newsletter')}\n

\n
\n {success !== 1 && (\n \n \n \n First Name\n setFName(e.target.value)}\n type=\"text\"\n placeholder=\"First Name\"\n required\n />\n \n Please add your first name.\n \n \n \n \n \n Email address\n setEmail(e.target.value)}\n type=\"email\"\n placeholder=\"Email address\"\n required\n />\n \n Please choose a valid email address.\n \n \n \n \n \n \n \n )}\n {message.length > 0 && (\n \n \n

\n {message}\n

\n \n
\n )}\n\n {success === 1 && (\n \n \n

\n Thank you for\n subscribing! You will now receive the latest holiday offers straight to your\n inbox\n

\n \n
\n )}\n\n {displayRedEye && success === 1 && (\n \n )}\n

\n \n {t('footer.newsletter.termsAndConditions')}\n {' '}\n apply\n

\n \n
\n
\n {/*\n \n {t('searchResults.viewPark', channelId)}\n \n */}\n \n );\n }\n return (\n \n {t('searchResults.viewPark', channelId, minPrice)}\n \n );\n};\n\nParkLink.propTypes = {\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n park: PropTypes.object,\n url: PropTypes.string,\n parkRoute: PropTypes.string,\n specialButtonClass: PropTypes.string,\n};\n\nParkLink.defaultProps = {\n parkRoute: 'park-result',\n specialButtonClass: 'btn-primary',\n};\n\nexport default ParkLink;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isSingleResult } from '../../utils/utils';\nimport t from '../../../text';\n\nexport const ParkResultCountPrice = ({\n dateMatchCount,\n altDateCount,\n minPrice,\n altDateMinPrice,\n specialTextClass,\n priceOnly,\n countOnly,\n}) => (\n <>\n {!priceOnly && (\n <>\n

\n {dateMatchCount || altDateCount}\n  \n {dateMatchCount ? t('searchResults.accomodationLeft', isSingleResult(dateMatchCount, altDateCount)) : t('searchResults.holidaysFoundOn', dateMatchCount, isSingleResult(dateMatchCount, altDateCount))}\n

\n {!countOnly && (\n

\n {t('searchResults.from')}\n \n  £{dateMatchCount ? minPrice : altDateMinPrice}\n \n

\n )}\n \n )}\n {priceOnly && (\n <>\n

\n {t('searchResults.from')}\n

\n

\n £{dateMatchCount ? minPrice : altDateMinPrice}\n

\n \n )}\n \n);\n\nParkResultCountPrice.propTypes = {\n dateMatchCount: PropTypes.number,\n altDateCount: PropTypes.number,\n minPrice: PropTypes.string,\n altDateMinPrice: PropTypes.string,\n specialTextClass: PropTypes.string,\n};\n\nParkResultCountPrice.defaultProps = {\n specialTextClass: 'text-primary',\n};\n\nexport default ParkResultCountPrice;\n","import React, { useState } from \"react\";\nimport { Button, Modal, Alert, Container, Row, Col } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { selectRegion } from \"../../redux/search/form/actions\";\nimport NoPopupSearchBox from \"../SearchBox/NoPopupSearchBox\";\n\nexport const SearchPopup = (props) => {\n /* TODO:\n 1. Props\n - size\n - variant\n - region id (optional)\n - park id (optional)\n - op id?\n 2. Update search form params\n 3. Use existing search form?\n */\n\n const [show, setShow] = useState(false);\n const dispatch = useDispatch();\n const handleButtonClick = () => {\n // Set region if applicable\n if (props.regionId ) selectRegion(dispatch, props.regionId);\n // Set Park ID if applicable\n\n // Show the popup\n handleModal();\n }\n const handleModal = () => setShow(!show);\n\n return (\n <>\n Check Availability\n \n \n Check Availability\n \n \n {props.parkId && (\n \n \n \n Checking availability of {props.parkName}.\n \n \n \n )}\n \n \n \n \n );\n}\n\nexport default SearchPopup;\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Col, Container, Row } from 'react-bootstrap';\n\n// import FacilitiesIcon from '../FacilitiesIcon';\nimport ParkImage from './ParkImage';\nimport ParkLink from './ParkLink';\nimport ParkResultCountPrice from './ParkResultCountPrice';\n\nimport { config } from '../../../config';\nimport SearchPopup from '../Browse/SearchPopup';\n\nfunction ParkCard({\n channelId,\n regionId,\n operator,\n park,\n minPrice,\n altDateMinPrice,\n dateMatchCount,\n altDateCount,\n url,\n //visible,\n parkRoute,\n viewMode,\n}) {\n const isSticky = park.pri === 1;\n const isPremium = park.pri === 2;\n const specialClass = isSticky ? ' is-sticky-result' : isPremium ? ' is-premium' : '';\n const specialButtonClass = isSticky ? 'btn-secondary' : 'btn-primary';\n const specialTextClass = isSticky ? 'text-secondary' : `text-${config['global.textHighlight']}`;\n const availableDates = !!(dateMatchCount || altDateCount);\n const linkPrice = minPrice === undefined ? altDateMinPrice : minPrice;\n\n return (\n <>\n {viewMode === 'list' && (\n \n \n \n \n \n\n \n \n \n

{park.name}

\n

\n \n  {park.sAdd}\n

\n \n
\n\n \n {Array.isArray(park.features) && (\n
    \n {park.features.map((feature, i) => (\n
  • \n ))}\n
\n )}\n
\n\n \n {availableDates ? (\n \n \n \n ) : (\n \n {parkRoute === 'holidays' && (\n \n )}\n \n \n )}\n \n \n \n \n \n
\n
\n )}\n {viewMode === 'grid' && (\n \n
\n \n
\n

\n \n  {park.sAdd}\n

\n
\n
\n \n

{park.name}

\n {availableDates && (\n
\n \n
\n )}\n {Array.isArray(park.features) && (\n
    \n {park.features.map((feature, i) => (\n
  • \n ))}\n
\n )}\n
\n \n \n \n {parkRoute === 'holidays' && (\n \n )}\n \n \n \n \n
\n )}\n \n );\n}\n\nParkCard.propTypes = {\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n operator: PropTypes.object,\n park: PropTypes.object,\n minPrice: PropTypes.string,\n altDateMinPrice: PropTypes.string,\n dateMatchCount: PropTypes.number,\n altDateCount: PropTypes.number,\n features: PropTypes.array,\n url: PropTypes.string,\n visible: PropTypes.bool,\n parkRoute: PropTypes.string,\n};\n\nParkCard.defaultProps = {\n features: [],\n operator: {},\n park: {},\n};\n\nexport default memo(ParkCard);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Card, Form } from 'react-bootstrap';\n\nexport const FilterPanel = ({\n filters,\n className,\n title,\n idKey,\n onToggleFilter,\n selectedFilters,\n onClearFilters,\n arrPos,\n}) => {\n //const filtersChecked = filters && filters.find((filter) => filter.selected);\n\n const evaluateChecked = (filter, arrPos) => {\n if (arrPos !== undefined) {\n return selectedFilters[arrPos] === filter[idKey];\n }\n return selectedFilters.includes(filter[idKey]);\n };\n\n return (\n \n {title}\n\n \n
\n {filters.map((filter) => (\n onToggleFilter(filter[idKey], arrPos)}\n checked={evaluateChecked(filter, arrPos)}\n />\n ))}\n \n
\n\n {/*filtersChecked && (\n \n \n Clear\n \n \n )*/}\n
\n );\n};\n\nFilterPanel.defaultProps = {\n filters: [],\n selectedFilters: [],\n idKey: 'id',\n};\n\nFilterPanel.propTypes = {\n className: PropTypes.string,\n title: PropTypes.string,\n filters: PropTypes.array,\n selectedFilters: PropTypes.array,\n onToggleFilter: PropTypes.func,\n onClearFilters: PropTypes.func,\n id: PropTypes.string,\n idKey: PropTypes.string,\n};\n\nexport default FilterPanel;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\n\nimport FilterPanel from '../FilterPanel';\n\nimport { setState } from '../../redux/appState/actions';\n\nexport const AppStateFilterPanel = (props) => {\n const dispatch = useDispatch();\n\n const onToggleFilter = (key, arrPos) => {\n //if(window.innerWidth >= 992) {\n // props.scrollTo.current.scrollIntoView({\n // behavior: \"smooth\",\n // block: \"start\",\n // inline: \"nearest\"\n // });\n //}\n\n if (typeof arrPos === 'number') {\n const nFiltLength = props.nFiltLength;\n key = parseInt(key);\n\n const nFilt = props.selectedFilters;\n\n const arrayPosIsKey = nFilt[arrPos] === key;\n nFilt[arrPos] = arrayPosIsKey ? -1 : key;\n\n // Ensure array is correct length and values are integer or -1\n for (let i = 0; i < nFiltLength; i++) {\n nFilt[i] = nFilt[i] || -1;\n }\n\n const newValue = [...nFilt];\n\n setState(dispatch, props.stateKey, newValue);\n }\n\n if (typeof arrPos === 'undefined') {\n if (props.selectedFilters.includes(key)) {\n setState(\n dispatch,\n props.stateKey,\n props.selectedFilters.filter((val) => val !== key),\n );\n } else {\n setState(dispatch, props.stateKey, [...props.selectedFilters, key]);\n }\n }\n };\n\n const onClearFilters = () => {\n setState(dispatch, props.stateKey, []);\n };\n\n // If there are params given in the URL, set them\n useEffect(() => {\n if (props.urlKey) {\n const urlFilterValues = new URLSearchParams(document.location.search).get(props.urlKey);\n if (urlFilterValues) {\n setState(dispatch, props.stateKey, urlFilterValues.toLowerCase().split(','));\n }\n }\n }, [dispatch, props.urlKey, props.stateKey]);\n\n return ;\n};\n\nAppStateFilterPanel.propTypes = {\n ...FilterPanel.propTypes,\n selectedFilters: PropTypes.array,\n stateKey: PropTypes.string,\n};\n\nAppStateFilterPanel.defaultProps = {\n selectedFilters: [],\n};\n\nexport default AppStateFilterPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, FormControl } from 'react-bootstrap';\n\nexport const SortPanel = (props) => {\n return (\n \n \n {props.title}\n \n props.onChange(e)}\n value={`${props.appliedSort?.field},${props.appliedSort?.direction}`}\n >\n {props.sortOptions.map((opt) => (\n \n ))}\n \n \n );\n};\n\nSortPanel.propTypes = {\n className: PropTypes.string,\n title: PropTypes.string,\n sortOptions: PropTypes.array,\n appliedSort: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default SortPanel;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\n\nimport SortPanel from '../SortPanel';\n\nimport { setState } from '../../redux/appState/actions';\n\nexport const AppStateSortPanel = (props) => {\n const dispatch = useDispatch();\n\n const onChange = (event) => {\n const [field, direction] = event.target.value.split(',');\n const selectedSortOption = props.sortOptions.find((opt) => opt.field === field && opt.direction === direction);\n setState(dispatch, props.stateKey, selectedSortOption);\n };\n\n // If there are params given in the URL, set them\n useEffect(() => {\n if (props.urlKey) {\n const urlFilterValues = new URLSearchParams(document.location.search).get(props.urlKey);\n if (urlFilterValues) {\n setState(dispatch, props.stateKey, urlFilterValues.split(','));\n }\n }\n }, [dispatch, props.urlKey, props.stateKey]);\n\n return ;\n};\n\nAppStateSortPanel.propTypes = {\n ...SortPanel.propTypes,\n selectedFilters: PropTypes.array,\n stateKey: PropTypes.string,\n};\n\nAppStateSortPanel.defaultProps = {\n selectedFilters: [],\n};\n\nexport default AppStateSortPanel;\n","const MapStyle = [\n {\n elementType: 'geometry',\n stylers: [\n {\n color: '#f5f5f5',\n },\n ],\n },\n {\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#616161',\n },\n ],\n },\n {\n elementType: 'labels.text.stroke',\n stylers: [\n {\n color: '#f5f5f5',\n },\n ],\n },\n {\n featureType: 'administrative.land_parcel',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#bdbdbd',\n },\n ],\n },\n {\n featureType: 'poi',\n elementType: 'geometry',\n stylers: [\n {\n color: '#eeeeee',\n },\n ],\n },\n {\n featureType: 'poi',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#757575',\n },\n ],\n },\n {\n featureType: 'poi.park',\n elementType: 'geometry',\n stylers: [\n {\n color: '#e5e5e5',\n },\n ],\n },\n {\n featureType: 'poi.park',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e',\n },\n ],\n },\n {\n featureType: 'road',\n elementType: 'geometry',\n stylers: [\n {\n color: '#ffffff',\n },\n ],\n },\n {\n featureType: 'road.arterial',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#757575',\n },\n ],\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry',\n stylers: [\n {\n color: '#dadada',\n },\n ],\n },\n {\n featureType: 'road.highway',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#616161',\n },\n ],\n },\n {\n featureType: 'road.local',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e',\n },\n ],\n },\n {\n featureType: 'transit.line',\n elementType: 'geometry',\n stylers: [\n {\n color: '#e5e5e5',\n },\n ],\n },\n {\n featureType: 'transit.station',\n elementType: 'geometry',\n stylers: [\n {\n color: '#eeeeee',\n },\n ],\n },\n {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [\n {\n color: '#c9c9c9',\n },\n ],\n },\n {\n featureType: 'water',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#A6D4DE',\n },\n ],\n },\n {\n featureType: 'water',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#9e9e9e',\n },\n ],\n },\n];\n\nexport default MapStyle;\n","import React from 'react';\nimport { Marker } from '@react-google-maps/api';\nimport PropTypes from 'prop-types';\n\nexport const MapMarker = (props) => (\n \n {props.children}\n \n);\n\nMapMarker.propTypes = {\n colour: PropTypes.string,\n onClick: PropTypes.func,\n onLoad: PropTypes.func,\n position: PropTypes.object,\n};\n\nMapMarker.defaultProps = {\n colour: '#000',\n};\n\nexport default MapMarker;\n","import React from 'react';\nimport { InfoWindow } from '@react-google-maps/api';\nimport PropTypes from 'prop-types';\n\nimport ParkLink from '../ParkCard/ParkLink';\n\nimport { isSingleResult } from '../../utils/utils';\nimport t from '../../../text';\n\nexport const MultipleLocationsInfoWindow = (props) => {\n return (\n \n <>\n

{props.result.park.name}

\n

{props.result.park.sAdd}

\n {!props.removeMapCardMid && (\n

\n {props.result.dateMatchCount || props.result.altDateCount}{' '}\n {t(\n 'searchResults.holidaysFoundOn',\n !!props.result.dateMatchCount,\n isSingleResult(props.result.dateMatchCount, props.result.altDateCount),\n )}\n
\n {t('searchResults.from')} £\n {props.result.minPrice || props.result.altDateMinPrice}\n

\n )}\n \n \n \n );\n};\n\nMultipleLocationsInfoWindow.propTypes = {\n anchor: PropTypes.object,\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n result: PropTypes.object,\n parkRoute: PropTypes.string,\n onClose: PropTypes.func,\n removeMapCardMid: PropTypes.bool,\n};\n\nexport default MultipleLocationsInfoWindow;\n","import React from 'react';\nimport { Row, Col, Card } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport t from '../../../text';\n\nexport const MultipleLocationsOperatorKey = (props) => {\n const uniqueOpIds = [...new Set(props.results.map((result) => result.park.opId))];\n\n // TODO: filter out any id's that don't have a colour\n\n const operatorPin = (oid) => {\n if (!props.operatorData[oid]?.colour) return;\n return \n \n {props.operatorData[oid]?.name}\n ;\n }\n\n return (\n \n \n \n {uniqueOpIds.map((operatorId) => operatorPin(operatorId))}\n\n \n \n {t('searchResults.clickMarkerForDetails')}\n \n \n \n \n );\n};\n\nMultipleLocationsOperatorKey.propTypes = {\n operatorData: PropTypes.object,\n results: PropTypes.array,\n};\n\nexport default MultipleLocationsOperatorKey;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { GoogleMap, useLoadScript } from '@react-google-maps/api';\nimport PropTypes from 'prop-types';\nimport MapStyle from '../../Data/GoogleMapStyle';\n\nimport MapMarker from './MapMarker';\nimport MultipleLocationsInfoWindow from './MultipleLocationsInfoWindow';\nimport MultipleLocationsOperatorKey from './MultipleLocationsOperatorKey';\n\nimport { config } from '../../../config';\n\nconst containerStyle = {\n width: '100%',\n height: '640px',\n};\n\nconst operatorData = {\n 0: {\n colour: '#000000',\n name: '---',\n },\n 2: {\n colour: '#28a789',\n name: 'Haven',\n },\n 8: {\n colour: '#9c151c',\n name: 'Park Holidays UK',\n },\n 119: {\n colour: '#bb2e53',\n name: 'Parkdean Resorts',\n },\n};\n\nfunction MultipleLocations(props) {\n const [mapRef, setMapRef] = useState(null);\n const [selectedResult, setSelectedResult] = useState(null);\n const [markerMap, setMarkerMap] = useState({});\n const [infoOpen, setInfoOpen] = useState(false);\n\n const { isLoaded, loadError } = useLoadScript({\n googleMapsApiKey: config.googleMapsApiKey,\n });\n\n if (loadError) console.error(loadError);\n\n const fitBounds = useCallback(\n (map) => {\n const bounds = new window.google.maps.LatLngBounds();\n props.results.map((result) => {\n bounds.extend(result.park.pos);\n return result.park.parkId;\n });\n map.fitBounds(bounds);\n },\n [props.results],\n );\n\n const loadHandler = (map) => {\n setMapRef(map);\n fitBounds(map);\n };\n\n const markerLoadHandler = (marker, result) => {\n return setMarkerMap((prevState) => {\n return { ...prevState, [result.park.parkId]: marker };\n });\n };\n\n const markerClickHandler = (result) => {\n setSelectedResult(result);\n if (infoOpen) setInfoOpen(false);\n setInfoOpen(true);\n };\n\n const closeInfoWindow = () => {\n setInfoOpen(false);\n };\n\n useEffect(() => {\n if (mapRef) {\n fitBounds(mapRef);\n }\n }, [props.results, fitBounds, mapRef]);\n\n const renderMap = () => {\n return (\n <>\n \n {props.results.map((result) => (\n markerLoadHandler(marker, result)}\n onClick={() => markerClickHandler(result)}\n />\n ))}\n\n {infoOpen && selectedResult && (\n \n )}\n \n \n \n );\n };\n\n return isLoaded ? renderMap() : 'Loading...';\n}\n\nMultipleLocations.propTypes = {\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n results: PropTypes.array,\n parkRoute: PropTypes.string,\n removeMapCardMid: PropTypes.bool,\n};\n\nMultipleLocations.defaultProps = {\n parkRoute: 'park-result',\n};\n\nexport default MultipleLocations;\n","export const getState = (state, key) => state.appState[key];\n","//import { useSelector } from 'react-redux';\n//import { filters as standardFilters } from '../../redux/data/filters/selectors';\n\nconst sortOptions = [\n {\n label: 'Price Low to High',\n field: 'minPrice',\n altField: 'altDateMinPrice',\n direction: 'asc',\n },\n {\n label: 'Price High to Low',\n field: 'minPrice',\n altField: 'altDateMinPrice',\n direction: 'desc',\n },\n {\n label: 'Name',\n field: 'name',\n direction: 'asc',\n },\n];\n\n//function applyStandardFilters(standardFilters, selectedFilters, results) {\n// if (!selectedFilters.length) return results;\n// const filtersToApply = standardFilters.filter((filter) => filter.selected);\n// const filterMask = filtersToApply.reduce((acc, val) => acc | val.filt, 0);\n// return results.filter((result) => parseInt(result.park.filt & filterMask) === filterMask);\n//}\n\nfunction applyOperatorFilters(selectedFilters, results) {\n if (!selectedFilters.length) return results;\n return results.filter((result) => selectedFilters.includes(result.park.opId));\n}\n\nfunction applyPetFriendlyFilters(selectedFilters, results) {\n if (!selectedFilters.length || (selectedFilters[0].toLowerCase() === 'n' && selectedFilters.length === 1))\n return results;\n return results.filter((result) => result.park.dogs === 'Y');\n}\n\nfunction applyNFilters(nFilters, results, compareTypes) {\n if (!nFilters || !nFilters.length) return results;\n\n const compareArray = compareTypes.map((filt) => filt.compare);\n const nFiltersFixed = [...nFilters];\n\n return results.filter((result) => {\n let makeArray = Array.isArray(result.park.nFilt) ? result.park.nFilt : [];\n\n let parkFilts = fixNFilt(makeArray);\n nFilters = nFiltersFixed;\n\n parkFilts = parkFilts.map((num, index) => {\n const relevantNFilt = nFilters[index];\n const compare = compareArray[index];\n if (relevantNFilt === -1) return true;\n return compareTwoNumbers(num, compare, relevantNFilt);\n });\n\n // Are all parkFilt values true?\n return parkFilts.every((x) => x);\n });\n}\n\nfunction applyBFilters(selectedBFilters, results) {\n selectedBFilters.map(\n (filter) => (results = results.filter((result) => parseInt(result.park.bFilt) & parseInt(filter))),\n );\n return results;\n}\n\nfunction applyTownFilter(townId, results) {\n return results.filter((result) => result.park.towns.includes(+townId));\n}\n\nconst compareTwoNumbers = (num1, compare, num2) => {\n switch (compare) {\n case '>=':\n return num1 >= num2;\n case '>':\n return num1 > num2;\n case '==':\n return num1 === num2;\n case '<':\n return num1 < num2;\n case '<=':\n return num1 <= num2;\n default:\n return true;\n }\n};\n\nfunction applySort(selectedSort, results) {\n if (!selectedSort || !results) return results;\n\n const { field, altField, direction } = selectedSort;\n\n if (field === 'name') {\n results.sort((a, b) => {\n if (a.park.pri === 1 && b.park.pri !== 1) return -1;\n if (a.park.pri !== 1 && b.park.pri === 1) return 1;\n return a.park.name.localeCompare(b.park.name);\n });\n return;\n }\n\n if (direction === 'asc') {\n results.sort((a, b) => {\n if (a.park.pri === 1 && b.park.pri !== 1) return -1;\n if (a.park.pri !== 1 && b.park.pri === 1) return 1;\n return parseFloat(a[field] || a[altField]) - parseFloat(b[field] || b[altField]);\n });\n } else {\n results.sort((a, b) => {\n if (a.park.pri === 1 && b.park.pri !== 1) return -1;\n if (a.park.pri !== 1 && b.park.pri === 1) return 1;\n return parseFloat(b[field] || b[altField]) - parseFloat(a[field] || a[altField]);\n });\n }\n}\n\nfunction cleanSelectedOperatorsFilters(selectedFilters, results) {\n if (!results) return results;\n const operatorIds = [\n ...new Set(\n results\n .map((result) => result.operator)\n .filter((operator) => !!operator)\n .map((operator) => operator.opId),\n ),\n ];\n\n return selectedFilters.filter((id) => operatorIds.includes(id));\n}\n\nfunction getOperatorFilters(results, selectedOperators) {\n if (!results) return results;\n const operators = new Set(results.map((result) => result.operator).filter((operator) => !!operator));\n\n return [...operators]\n .map((operator) => ({\n ...operator,\n selected: selectedOperators.includes(operator.opId),\n }))\n .sort((a, b) => {\n if (a.name < b.name) return -1;\n if (a.name > b.name) return 1;\n return 0;\n });\n}\n\nfunction getPetFriendlyFilters(selectedFilters) {\n return [\n {\n id: 'y',\n name: 'Pet friendly',\n selected: selectedFilters.includes('y'),\n },\n ];\n}\n\n//function getStandardFilters(filters, selectedFilters) {\n// if (!filters) return filters;\n// return Object.keys(filters).map((filterId) => ({\n// ...filters[filterId],\n// selected: selectedFilters.includes(filterId),\n// }));\n//}\n\n// Convert [\"2\", \"\", \"2\"] => [2,2] because bad data currently\n// Will leave a correct array alone [4, 3] wont be altered for example\nfunction fixNFilt(arr = []) {\n return arr.filter((num) => num !== '').map((n) => +n);\n}\n\n//function findMaxValue(results, index) {\n// if (!results.length) return [];\n// let maxValue = 0;\n// results.forEach((result) => {\n// let neverNull = result.park.nFilt === null ? [] : result.park.nFilt;\n// const arr = fixNFilt(neverNull);\n// if (arr[index] > maxValue) {\n// maxValue = arr[index];\n// }\n// });\n// return maxValue;\n//}\n\n//function findAndSortUniqueValues(results, index) {\n// const allValues = results.map((r) => fixNFilt(r.park.nFilt)[index]);\n// return [...new Set(allValues.sort())];\n//}\n\n// Because this is dynamic, make an array of arrays of objects,\n// Inner array is each filter panel,\n// Object is an option { id: 1, label: '1' }\n//function makeNFilters(nFilt, results) {\n// if (!nFilt.length) return;\n//\n// const compareArray = nFilt.map((filt) => filt.compare);\n// const filterList = [];\n//\n// for (let ca = 0; ca < compareArray.length; ca++) {\n// let labelSuffix = '';\n// if (compareArray[ca] === '>=') labelSuffix = ' +'; // replace with switch block when need arises?\n//\n// // Calculate for all non equals comparisons\n// if (compareArray[ca] !== '==') {\n// const maxValue = findMaxValue(results, ca);\n// const tempFilters = [];\n//\n// for (let i = 1; i <= maxValue; i++) {\n// tempFilters.push({ id: i, label: `${i}${labelSuffix}` });\n// }\n// filterList.push(tempFilters);\n// }\n//\n// // Calculate for equals comparisons\n// if (compareArray[ca] === '==') {\n// const neededValues = findAndSortUniqueValues(results, ca);\n// const tempFilters = [];\n//\n// for (let i = 0; i < neededValues.length; i++) {\n// const value = neededValues[i];\n// tempFilters.push({ id: value, label: `${value}` });\n// }\n// filterList.push(tempFilters);\n// }\n// }\n// return filterList;\n//}\n\nexport function useFilters(\n results, // 0\n channelId, // 1\n //selectedStandardFilters = [], // 2\n selectedOperatorFilters = [], // 3\n selectedPetFriendlyFilters = [], // 4\n selectedNFilters = [], // 5\n selectedBFilters = [], // 6\n nFilt = [], // 7\n appliedSort = sortOptions[0], // 8\n sortByName, // 9\n isTown, // 10\n) {\n //const _standardFiltersObj = useSelector(standardFilters);\n //const fixedResults = [...results];\n\n // Ensure we dont try and filter by operator Ids that are not present in the results set\n const _selectedOperatorFilters = cleanSelectedOperatorsFilters(selectedOperatorFilters, results);\n\n //const _standardFilters = getStandardFilters(_standardFiltersObj, selectedStandardFilters);\n const _operatorFilters = getOperatorFilters(results, _selectedOperatorFilters);\n const _petFriendlyFilters = getPetFriendlyFilters(selectedPetFriendlyFilters);\n //let _nFilters;\n //let _bFilters = [];\n //if (channelId === 'ukcottages') {\n //_nFilters = makeNFilters(nFilt, fixedResults);\n //}\n\n // Filtering\n let newResults = applyOperatorFilters(_selectedOperatorFilters, results);\n //if (channelId !== 'boats') {\n // newResults = applyStandardFilters(_standardFilters, selectedStandardFilters, newResults);\n //}\n if (channelId !== 'eurocaravan') {\n newResults = applyPetFriendlyFilters(selectedPetFriendlyFilters, newResults);\n }\n //if (channelId === 'ukcottages') {\n newResults = applyNFilters(selectedNFilters, newResults, nFilt);\n newResults = applyBFilters(selectedBFilters, newResults);\n //}\n\n // If is a town page, exclude other towns (isTown is either false or the townId)\n if (isTown) {\n newResults = applyTownFilter(isTown, newResults);\n }\n\n // Sorting\n if (appliedSort) {\n applySort(appliedSort || sortOptions[0], newResults);\n }\n\n if (sortByName) {\n newResults.sort((a, b) => {\n if (a.park.pri === 1 && b.park.pri !== 1) return -1;\n if (a.park.pri !== 1 && b.park.pri === 1) return 1;\n return a.park.name.localeCompare(b.park.name);\n });\n }\n\n return [_operatorFilters, _petFriendlyFilters, sortOptions, newResults];\n}\n\nexport default useFilters;\n","import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { Button } from 'react-bootstrap';\n\nexport const TruncatedTextAlt = (props) => {\n const [disableTruncate, setDisableTruncate] = useState(false)\n const copyBox = useRef(null);\n\n const removeTruncate = () => {\n copyBox.current.classList.remove('truncated');\n setDisableTruncate(true);\n };\n\n const isIOS = [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ].includes(navigator.platform);\n\n useLayoutEffect(() => {\n if (props.text == null) return;\n if (!disableTruncate) copyBox.current.classList.add('truncated');\n let diff = copyBox.current.scrollHeight - copyBox.current.getClientRects()[0].height;\n if (diff < 2 && props.text !== null) removeTruncate();\n }, [copyBox, props.text]);\n\n useEffect(() => {\n setDisableTruncate(isIOS);\n }, []);\n\n return (\n props.text !== null && (\n
\n {props.isHTML ? (\n \n ) : (\n \n {props.text}\n
\n )}\n \n \n )\n );\n};\n\nTruncatedTextAlt.defaultProps = {\n lines: 3,\n text:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras pulvinar, diam ut blandit efficitur, augue arcu congue urna, eu hendrerit magna tortor sit amet sem. Nunc ultrices, tellus at pretium rutrum, ex nulla ornare nibh, nec finibus nunc lacus vel eros. Quisque commodo turpis id odio facilisis, quis blandit odio rhoncus. Sed faucibus dignissim nisi vel vulputate. Duis consequat laoreet quam in sagittis. Quisque et felis ut magna lobortis elementum semper dignissim nibh. Curabitur eu convallis sem. Pellentesque non lacus nibh. Duis sed aliquam nunc. Fusce tristique, lacus sit amet viverra accumsan, tortor sem finibus dolor, quis eleifend massa ligula et orci.',\n};\n\nexport default TruncatedTextAlt;\n","import React, { useState, useEffect } from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { urls } from '../../../config';\nimport TruncatedTextAlt from '../TruncatedTextAlt';\n\nfunction FetchSeoSearchText(props) {\n const [hasText, setHasText] = useState(false);\n const [seoText, setSeoText] = useState(props.region);\n\n const Content = (seoText) => {\n return (\n \n \n \n \n \n \n \n );\n };\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/region-text?per_page=1&_fields=acf.seo_text,acf.area_seo_text&filter[meta_query][1][key]=region_id&filter[meta_query][1][value]=${props.region}`,\n { signal: controller.signal }\n )\n .then((response) => response.json())\n .then((data) => {\n if (data.length > 0) {\n if (\n props.isArea &&\n 'area_seo_text' in data[0].acf &&\n data[0].acf.area_seo_text &&\n data[0].acf.area_seo_text.some((a) => a.area_id === props.isArea)\n ) {\n setSeoText(\n

\n {data[0].acf.area_seo_text.find((a) => a.area_id === props.isArea).area_text}\n

,\n );\n } else {\n setSeoText(

{data[0].acf.seo_text}

);\n }\n setHasText(true);\n }\n });\n return () => {\n controller.abort();\n };\n }, [props.region, props.isArea]);\n\n return hasText ? Content(seoText) : null;\n}\n\nexport default FetchSeoSearchText;\n","import { GET_FILTERS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const filters = (state) => state.data.filters.filters;\nexport const getNFilters = (state) => state.data.filters.nFilters;\nexport const getBFilters = (state) => state.data.filters.bFilters;\nexport const getfilterGroups = (state) => state.data.filters.filterGroups;\nexport const [isFetching, hasError, errorData] = getRequestStatus(GET_FILTERS);\n","import { GET_PARKS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const parks = (state) => state.data.parks.parks;\nexport const towns = (state) => state.data.parks.townList;\nexport const regionParkIds = (state) => state.data.parks.regionParkIds;\n\n// Utils to be used by other selectors\nexport const [getIsLoading, getHasFailed, getErrorData] = getRequestStatus(GET_PARKS);\nexport const getIsLoaded = (state, regionId) => !!regionParkIds(state)[regionId];\n\nexport const getSpecificParks = (state, idArr) => {\n const parks = [];\n idArr.forEach((id) => {\n const park = state.data.parks.parks[id];\n parks.push(park);\n });\n\n return parks;\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { slugify } from '../../utils/string';\n\nfunction TownsList({ towns, region, channel, forwardClassNames = '' }) {\n const RegionName = useSelector((state) => state.data.regions.regions[region]?.name);\n if(RegionName !== undefined){\n return (\n
\n {towns.length > 0 && (\n <>\n

Towns & Cities in {RegionName}

\n

Use the links below to view results for a specific area.

    \n {towns.map((t, i) => (\n
  • \n {t.name}\n
  • \n ))}\n
\n \n )}\n
\n )\n } else {\n return (<>);\n }\n}\n\nexport default TownsList;\n","import React, { useState, Suspense, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row, Col, Card, Form, Collapse, Button } from 'react-bootstrap';\n\nimport AppStateFilterPanel from './AppStateFilterPanel';\nimport AppStateSortPanel from './AppStateSortPanel';\nimport MultipleLocations from '../Maps/MultipleLocations';\nimport PageTitle from '../PageTitle';\n//import RangeSlider from '../Common/RangeSlider';\n\nimport { getState } from '../../redux/appState/selectors';\nimport t from '../../../text';\nimport useFilters from './useFilters';\nimport FetchSeoSearchText from '../SearchResults/FetchSeoSearchText';\nimport { getNFilters } from '../../redux/data/filters/selectors';\nimport { channels } from '../../redux/data/channels/selectors';\nimport { setState } from '../../redux/appState/actions';\nimport { towns } from '../../redux/data/parks/selectors';\nimport TownsList from './TownsList';\n//import { contentRoutes } from '../../../config';\n\n// Component\nexport const ParksListFilterView = (props) => {\n const filtersColumn = useRef();\n const dispatch = useDispatch();\n const nFiltersStateKey = 'nFiltersStateArray';\n const bFiltersStateKey = 'bFiltersStateArray';\n const [activeFilters, setActiveFilters] = useState({ nFilt: [0, 0], bFilt: [] });\n const [maxNFiltValues, setMaxNFiltValues] = useState(null);\n const [collapseFilters, setCollapseFilters] = useState(Boolean(window.innerWidth >= 992));\n const channelsData = useSelector(channels);\n const townsList = useSelector(towns);\n const correctChannel = channelsData.find((channel) => channel.code === props.channelId);\n const filterGroup = correctChannel.filterSet;\n const allFilters = useSelector((state) => state.data.filters.filters);\n const chanFilterSet = useSelector((state) => state.data.filters.filterGroups[correctChannel.filterSet]);\n const nFilt = useSelector((state) => getNFilters(state))[filterGroup];\n const selectedNFilters = useSelector((state) => getState(state, nFiltersStateKey));\n const selectedBFilters = useSelector((state) => getState(state, bFiltersStateKey));\n\n if (!Array.isArray(selectedNFilters) || selectedNFilters.length < 1) {\n setState(\n dispatch,\n nFiltersStateKey,\n Array(Object.values(allFilters).filter((o) => o.type === 'nFilt').length).fill(0),\n );\n }\n\n const updateFilters = (type, value, idx) => {\n if (window.innerWidth >= 992) {\n /* TODO:\n 1. Move this to utils\n 2. Make it a scrollTo ref function\n 3. Include viewport size options\n e.g. scroll to on lg or higher\n */\n /*filtersColumn.current.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\",\n inline: \"nearest\"\n });*/\n }\n\n if (type === 'bFilt') {\n let current = selectedBFilters;\n !current.includes(parseInt(value))\n ? current.push(parseInt(value))\n : current.splice(current.indexOf(parseInt(value)), 1);\n setState(dispatch, bFiltersStateKey, current);\n }\n\n if (type === 'nFilt') {\n let current = selectedNFilters;\n current[idx] = parseInt(value);\n setState(dispatch, nFiltersStateKey, current);\n\n /*\n const onToggleFilter = (key, arrPos) => {\n if (typeof arrPos === 'number') {\n const nFiltLength = props.nFiltLength;\n key = parseInt(key);\n \n const nFilt = props.selectedFilters;\n \n const arrayPosIsKey = nFilt[arrPos] === key;\n nFilt[arrPos] = arrayPosIsKey ? -1 : key;\n \n // Ensure array is correct length and values are integer or -1\n for (let i = 0; i < nFiltLength; i++) {\n nFilt[i] = nFilt[i] || -1;\n }\n \n const newValue = [...nFilt];\n \n setState(dispatch, props.stateKey, newValue);\n }\n\n if (typeof arrPos === 'undefined') {\n if (props.selectedFilters.includes(key)) {\n setState(\n dispatch,\n props.stateKey,\n props.selectedFilters.filter((val) => val !== key),\n );\n } else {\n setState(dispatch, props.stateKey, [...props.selectedFilters, key]);\n }\n }\n };\n */\n }\n if (activeFilters) setActiveFilters([]); // Required, forces useFilters hook to run for some reason?\n };\n\n // Get an array of max values for all nFillters\n useEffect(() => {\n if (maxNFiltValues !== null) return;\n const getMaxValues = () => {\n if (!props.results.length) return [];\n\n // Setup initial array with zero values to the length of nFilts for this product type.\n const arrLength = Array.isArray(props.results[0].park.nFilt) ? props.results[0].park.nFilt.length : 0;\n let maxValues = Array(arrLength).fill(0);\n props.results.forEach((result) => {\n let neverNull = result.park.nFilt === null ? Array(arrLength).fill(0) : result.park.nFilt;\n neverNull.forEach((val, i) => {\n if (val > maxValues[i]) maxValues[i] = val;\n });\n });\n return maxValues;\n };\n setMaxNFiltValues(getMaxValues());\n }, [maxNFiltValues, props.results]);\n\n const appliedSortStateKey = props.id + 'AppliedSort';\n //const standardFiltersStateKey = props.id + 'StandardFilters';\n const operatorFiltersStateKey = props.id + 'OperatorFilters';\n const petFriendlyFiltersStateKey = props.id + 'PetFriendlyFilters';\n const appliedSort = useSelector((state) => getState(state, appliedSortStateKey));\n //const selectedStandardFilters = useSelector((state) => getState(state, standardFiltersStateKey));\n const selectedOperatorFilters = useSelector((state) => getState(state, operatorFiltersStateKey));\n const selectedPetFriendlyFilters = useSelector((state) => getState(state, petFriendlyFiltersStateKey));\n\n const [operatorFilters, petFriendlyFilters, sortOptions, filteredResults] = useFilters(\n props.results, // 0\n props.channelId, // 1\n //selectedStandardFilters, // 2\n selectedOperatorFilters, // 3\n selectedPetFriendlyFilters, // 4\n selectedNFilters, // 5\n selectedBFilters, // 6\n nFilt, // 7\n props.allowSorting ? appliedSort : false, // 8\n props.sortByName, // 9\n props.isTown, //10\n );\n\n const [viewMode, setViewMode] = useState('grid');\n const url = new URL(window.location.href);\n const petSearch = url.searchParams.get('dogs') === 'y'; // bool. Hides pet filter if true\n\n useEffect(() => {\n const showFiltersForLarge = () => {\n if (/iPad|iPhone|iPod/.test(navigator.platform)) return;\n let timeout;\n window.clearInterval(timeout);\n timeout = setTimeout(() => setCollapseFilters(Boolean(window.innerWidth >= 768)), 200); // debounce for performance\n };\n window.addEventListener('resize', showFiltersForLarge);\n return () => {\n window.removeEventListener('resize', showFiltersForLarge);\n };\n });\n\n // Get list of unique towns\n const getTowns = (fr) => {\n let temp = [];\n fr.forEach((park) => {\n if ('towns' in park.park) {\n park.park.towns.forEach((town) => {\n temp = [\n ...temp,\n {\n id: town,\n name: townsList[town],\n },\n ];\n });\n }\n });\n\n const uniq = new Set(temp.map((e) => JSON.stringify(e)));\n const res = Array.from(uniq).map((e) => JSON.parse(e));\n\n return [\n ...new Set(\n res.sort((a, b) => {\n let fa = a.name.toLowerCase();\n let fb = b.name.toLowerCase();\n if (fa < fb) return -1;\n if (fa > fb) return 1;\n return 0;\n }),\n ),\n ];\n };\n\n return (\n <>\n \n\n \n \n \n \n
\n {props.allowSorting && (\n <>\n \n
\n \n )}\n {operatorFilters.length > 1 &&\n !['boats', 'ukcottages'].includes(correctChannel.code) &&\n !props.isTown && (\n \n )}\n\n {Object.keys(chanFilterSet).map((set, i) => {\n return (\n \n {chanFilterSet[set]}\n \n {Object.values(allFilters)\n .filter(\n (f) =>\n parseInt(f.filterSet) === parseInt(filterGroup) &&\n parseInt(f.filterGroup) === parseInt(set),\n )\n .map((f, i) => {\n return (\n
\n {'compare' in f ? ( // is Number type\n \n \n {f.name}\n \n \n \n \n updateFilters(\n f.type,\n e.target.value,\n f.value,\n )\n }\n />\n \n \n \n \n {selectedNFilters[f.value]}+\n \n \n \n \n \n ) : (\n // is Bool type\n updateFilters(f.type, f.value)}\n />\n )}\n
\n );\n })}\n
\n
\n );\n })}\n\n {props.channelId !== 'eurocaravan' && (\n \n )}\n
\n
\n setCollapseFilters(!collapseFilters)}\n aria-controls=\"collapse-filters-inner\"\n aria-expanded={collapseFilters}\n >\n {`${collapseFilters ? 'Hide' : 'Show'} filters`}\n \n {!props.isTown && correctChannel.code === 'ukcaravan' && props.regionId && (\n \n )}\n \n\n \n {filteredResults.length ? (\n <>\n {viewMode === 'list' &&\n filteredResults.map((result) => props.generateOutput(result, viewMode))}\n {viewMode === 'grid' && (\n \n {filteredResults.map((result) => (\n \n {props.generateOutput(result, viewMode)}\n \n ))}\n \n )}\n {viewMode === 'map' && (\n \n )}\n \n ) : (\n <>\n {props.noResults || (\n

⚠ {t('parks.filters.noResults')}

\n )}\n \n )}\n \n \n
\n\n
\n Loading...
}>\n \n \n \n
\n \n );\n};\n\nParksListFilterView.propTypes = {\n id: PropTypes.string,\n channelId: PropTypes.string,\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n results: PropTypes.array,\n parkRoute: PropTypes.string,\n generateOutput: PropTypes.func,\n allowSorting: PropTypes.bool,\n};\n\nParksListFilterView.defaultProps = {\n id: '',\n channelId: 'ukcaravan',\n results: [],\n parkRoute: 'park-result',\n};\n\nexport default ParksListFilterView;\n","// Selectors\nexport const channelId = (state) => state.search.results.params.channelId;\nexport const regionId = (state) => state.search.results.params.regionId;\nexport const arrivalDate = (state) => state.search.results.params.arrivalDate;\nexport const duration = (state) => state.search.results.params.duration;\nexport const adults = (state) => state.search.results.params.adults;\nexport const children = (state) => state.search.results.params.children;\nexport const under5s = (state) => state.search.results.params.under5s;\nexport const petFriendly = (state) => state.search.results.params.petFriendly;\n\nexport const requestPayload = (state) => state.search.results.requestPayload;\nexport const results = (state) => state.search.results.results;\nexport const count = (state) => state.search.results.count;\n\nexport const params = (state) => state.search.results.params;\nexport const pendingParams = (state) => state.search.results.pendingParams;\n","import { GET_OPERATORS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const operators = (state) => state.data.operators.operators;\nexport const channelOperatorIds = (state) => state.data.operators.channelOperatorIds;\n\n// To be used by other selectors\nexport const [getIsLoading, getHasFailed, getErrorData] = getRequestStatus(GET_OPERATORS);\nexport const getIsLoaded = (state, channelId) => !!channelOperatorIds(state)[channelId];\n\nexport const getSpecificOperatorName = (state, id) => {\n return state.data.operators.operators[id].name;\n};\n","export const getOperatorById = (operators, operatorId) => {\n return operators[operatorId];\n};\n\nexport const getOperatorsByChannelId = (operators, channelOperatorIds, channelId) => {\n return channelOperatorIds[channelId]?.map((id) => operators[id]);\n};\n","import { createSelector } from 'reselect';\n\nimport { channelId, regionId, results } from './selectors';\nimport { channels } from '../../../data/channels/selectors';\nimport { parks, regionParkIds } from '../../../data/parks/selectors';\nimport { operators } from '../../../data/operators/selectors';\nimport { regions } from '../../../data/regions/selectors';\n\nimport { getChannelById } from '../../../data/channels/utils';\nimport { getParkById, getParksByRegionId } from '../../../data/parks/utils';\nimport { getOperatorById } from '../../../data/operators/utils';\nimport { getRegionById } from '../../../data/regions/utils';\n\n// Selectors\nexport const currentParks = createSelector(parks, regionParkIds, regionId, (_parks, _regionParkIds, _regionId) => {\n return getParksByRegionId(_parks, _regionParkIds, _regionId);\n});\n\nexport const currentRegion = createSelector(regions, regionId, (_regions, _regionId) => {\n return getRegionById(_regions, _regionId);\n});\n\nexport const processedResults = createSelector(\n channelId,\n channels,\n regions,\n operators,\n parks,\n results,\n (_channelId, _channels, _regions, _operators, _parks, _results) => {\n return _results.map((result) => {\n const park = getParkById(_parks, result.parkUrn);\n\n return {\n ...result,\n channel: getChannelById(_channels, _channelId),\n park,\n operator: getOperatorById(_operators, park?.opId),\n region: getRegionById(_regions, park?.regn),\n };\n });\n },\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport RedEye from './RedEye';\n\nimport { processedResults } from '../../redux/search/results/selectors/results';\nimport { stripProtocol, to2dp } from '../../utils/string';\n\nexport const RedEyeSearchResultsTag = () => {\n const _results = useSelector(processedResults);\n const results = _results.slice(0, 5);\n\n const resultsTags = {};\n results.forEach((result, i) => {\n resultsTags[`search_r_name${i + 1}`] = result.park.name;\n // resultsTags[`search_r_destinationa${i + 1}`] = result.channel.code;\n resultsTags[`search_r_destinationb${i + 1}`] = result.region.name;\n resultsTags[`search_r_destinationc${i + 1}`] = result.park.sAdd;\n resultsTags[`search_r_price_from${i + 1}`] = to2dp(result.minPrice || result.altDateMinPrice);\n resultsTags[`search_r_image${i + 1}`] = stripProtocol(result.park?.img);\n });\n\n return (\n \n );\n};\n\nexport default RedEyeSearchResultsTag;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport RedEye from './RedEye';\n\nimport { regions } from '../../redux/data/regions/selectors';\nimport { pendingParams } from '../../redux/search/results/selectors/selectors';\nimport { dateToDDMMYYYY } from '../../utils/date';\nimport { config } from '../../../config';\n\nimport { getRegionById } from '../../redux/data/regions/utils';\n\nexport const RedEyeStartSearchTag = () => {\n const _pendingParams = useSelector(pendingParams);\n const _region = getRegionById(useSelector(regions), _pendingParams.regionId);\n const searchInProgress = Object.keys(_pendingParams).length > 0;\n\n if (searchInProgress) {\n return (\n \n );\n }\n\n return null;\n};\n\nexport default RedEyeStartSearchTag;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { startSearch } from '../../redux/search/form/actions';\nimport { cancelGetResults } from '../../redux/search/results/actions';\nimport { params as formParams, requestParams as formRequestParams } from '../../redux/search/form/selectors';\nimport { isSearchRequestPending } from '../../redux/search/results/selectors/data';\nimport {\n params as searchParams,\n pendingParams as pendingSearchParams,\n} from '../../redux/search/results/selectors/selectors';\nimport { DDMMYYYYToDate, datesAreEqual } from '../../utils/date';\n\nexport const WithAutoSearchFromParams = (props) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const _formParams = useSelector(formParams);\n const _formRequestParams = useSelector(formRequestParams);\n\n const _isSearchRequestPending = useSelector(isSearchRequestPending);\n const _searchParams = useSelector(searchParams);\n const _pendingSearchParams = useSelector(pendingSearchParams);\n\n const query = new URLSearchParams(location.search);\n const parkParam = query.get('park') || undefined;\n\n const autoSearchNeeded = () => {\n const fields = ['channel', 'region', 'date', 'nights', 'adults', 'children', 'infants'];\n\n let allFieldsPresent = true;\n fields.forEach((field) => {\n if (!query.has(field)) allFieldsPresent = false;\n });\n\n if (allFieldsPresent) {\n const p = _isSearchRequestPending ? _pendingSearchParams : _searchParams;\n\n return (\n query.get('channel') !== p.channelId?.toString() ||\n query.get('region') !== p.regionId?.toString() ||\n !datesAreEqual(DDMMYYYYToDate(query.get('date')), p.arrivalDate) ||\n query.get('nights') !== p.duration?.toString() ||\n query.get('adults') !== p.adults?.toString() ||\n query.get('children') !== p.children?.toString() ||\n query.get('infants') !== p.under5s?.toString() ||\n !!((parkParam || p.parkId?.toString()) && parkParam !== p.parkId?.toString())\n );\n }\n\n return false;\n };\n\n useEffect(() => {\n if (autoSearchNeeded()) {\n cancelGetResults();\n startSearch(dispatch, _formParams, _formRequestParams, parkParam);\n }\n }, []);\n\n return props.children;\n};\n\nexport default WithAutoSearchFromParams;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getOperators } from '../../redux/data/operators/actions';\nimport { getHasFailed, getIsLoading, getIsLoaded } from '../../redux/data/operators/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithOperators(props) {\n const getData = (dispatch, force) => getOperators(dispatch, props.channelId, force);\n const _hasFailed = useSelector((state) => getHasFailed(state, props.channelId));\n const _isLoaded = useSelector((state) => getIsLoaded(state, props.channelId));\n const _isLoading = useSelector((state) => getIsLoading(state, props.channelId));\n const _isReady = !!props.channelId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithOperators.propTypes = {\n channelId: PropTypes.string,\n};\n\nexport default WithOperators;\n","import { GET_OPERATORS } from './action-types';\n\nimport { apiRequest, checkRequestNeeded } from '../../apiRequest';\nimport { urls } from '../../../../config';\nimport { getHasFailed, getIsLoading, getIsLoaded } from './selectors';\n\nexport const getOperators = (dispatch, channelId, force = false) => {\n return dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getIsLoaded(state, channelId);\n const isLoading = getIsLoading(state, channelId);\n const hasFailed = getHasFailed(state, channelId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n return apiRequest(d, GET_OPERATORS, urls.operators, { channel: channelId }, channelId);\n }\n });\n};\n","import { GET_PARKS } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../../apiRequest';\nimport { urls } from '../../../../config';\nimport { getHasFailed, getIsLoading, getIsLoaded } from './selectors';\n\nexport const getParks = (dispatch, regionId, force = false) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getIsLoaded(state, regionId);\n const isLoading = getIsLoading(state, regionId);\n const hasFailed = getHasFailed(state, regionId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n return apiRequest(d, GET_PARKS, urls.parks, { region: regionId }, regionId);\n }\n });\n};\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getParks } from '../../redux/data/parks/actions';\nimport { getHasFailed, getIsLoading, getIsLoaded } from '../../redux/data/parks/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithParks(props) {\n const getData = (dispatch, force) => getParks(dispatch, props.regionId, force);\n const _hasFailed = useSelector((state) => getHasFailed(state, props.regionId));\n const _isLoaded = useSelector((state) => getIsLoaded(state, props.regionId));\n const _isLoading = useSelector((state) => getIsLoading(state, props.regionId));\n const _isReady = !!props.regionId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithParks.propTypes = {\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithParks;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Col } from 'react-bootstrap';\n\nimport InputNumber from '../../../FormElements/InputNumber';\nimport t from '../../../../../text';\n\nexport const PartyMembersForm = (props) => (\n
\n \n \n {t('forms.party.checkPartySizeDetails')}\n \n \n\n \n \n

{t('forms.party.adults')}

\n \n \n props.onChangeAdults(num)}\n />\n \n
\n\n \n \n

{t('forms.party.children')}

\n \n \n props.onChangeChildren(num)}\n />\n \n
\n\n \n \n

{t('forms.party.infants')}

\n \n \n props.onChangeUnder5s(num)}\n />\n \n
\n
\n);\n\nPartyMembersForm.propTypes = {\n id: PropTypes.string,\n maxGuests: PropTypes.number,\n adults: PropTypes.number,\n children: PropTypes.number,\n under5s: PropTypes.number,\n onChangeAdults: PropTypes.func,\n onChangeChildren: PropTypes.func,\n onChangeUnder5s: PropTypes.func,\n};\n\nPartyMembersForm.defaultProps = {\n id: 'PartyMembersForm',\n maxGuests: 10,\n};\n\nexport default PartyMembersForm;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport {\n selectGuestsAdults,\n selectGuestsChildren,\n selectGuestsUnder5s,\n startSearch,\n} from '../../../../redux/search/form/actions';\nimport { cancelGetResults } from '../../../../redux/search/results/actions';\nimport { adults, children, params, requestParams, under5s } from '../../../../redux/search/form/selectors';\n\nexport const usePartyMembersFormActions = () => {\n const dispatch = useDispatch();\n\n return {\n cancelGetResults: () => cancelGetResults(dispatch),\n startSearch: (params, requestParams) => startSearch(dispatch, params, requestParams),\n selectGuestsAdults: (num) => selectGuestsAdults(dispatch, num),\n selectGuestsChildren: (num) => selectGuestsChildren(dispatch, num),\n selectGuestsUnder5s: (num) => selectGuestsUnder5s(dispatch, num),\n };\n};\n\nexport const usePartyMembersFormState = () => {\n return {\n adults: useSelector(adults),\n children: useSelector(children),\n params: useSelector(params),\n requestParams: useSelector(requestParams),\n under5s: useSelector(under5s),\n };\n};\n\nexport default usePartyMembersFormState;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { Modal, Button, Row, Col } from 'react-bootstrap';\n\nimport PartyMembersForm from '../Forms/Search/PartyMembersForm/PartyMembersForm';\nimport {\n usePartyMembersFormActions,\n usePartyMembersFormState,\n} from '../Forms/Search/PartyMembersForm/usePartyMembersForm';\nimport t from '../../../text';\n\nexport const PartyMembersModal = ({ show, onClose }) => {\n const actions = usePartyMembersFormActions();\n const history = useHistory();\n const location = useLocation();\n const state = usePartyMembersFormState();\n\n const handleSubmit = () => {\n actions.cancelGetResults();\n actions.startSearch(state.params, state.requestParams);\n\n const params = new URLSearchParams(location.search);\n Object.keys(state.requestParams).forEach((key) => {\n params.set(key, state.requestParams[key]);\n });\n history.push({ pathname: '/results', search: params.toString() });\n\n onClose();\n };\n\n return (\n <>\n \n \n \n {t('forms.party.checkYourPartySize')}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nPartyMembersModal.propTypes = {\n handleSearch: PropTypes.func,\n};\n\nPartyMembersModal.defaultProps = {};\n\nexport default PartyMembersModal;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport PartyMembersModal from '../../components/SearchResults/PartyMembersModal';\n\nexport const WithPartyMembersModal = (props) => {\n const location = useLocation();\n const [showPartySizeModal, setShowPartySizeModal] = useState(false);\n\n const partySizeModalNeeded = useCallback(() => {\n const query = new URLSearchParams(location.search);\n return (\n query.has('channel') &&\n query.has('region') &&\n query.has('date') &&\n query.has('nights') &&\n !query.has('adults') &&\n !query.has('children') &&\n !query.has('infants')\n );\n }, [location.search]);\n\n useEffect(() => {\n setShowPartySizeModal(partySizeModalNeeded());\n }, [partySizeModalNeeded]);\n\n return (\n <>\n {props.children}\n setShowPartySizeModal(false)} />\n \n );\n};\n\nexport default WithPartyMembersModal;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getRegions } from '../../redux/data/regions/actions';\nimport { getRegionsHasFailed, getRegionsIsLoading, getRegionsIsLoaded } from '../../redux/data/regions/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithRegions(props) {\n const getData = (dispatch, force) => getRegions(dispatch, props.channelId, force);\n const _hasFailed = useSelector((state) => getRegionsHasFailed(state, props.channelId));\n const _isLoaded = useSelector((state) => getRegionsIsLoaded(state, props.channelId));\n const _isLoading = useSelector((state) => getRegionsIsLoading(state, props.channelId));\n const _isReady = !!props.channelId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithRegions.propTypes = {\n channelId: PropTypes.string,\n};\n\nexport default WithRegions;\n","import { useSelector } from 'react-redux';\n\nimport { getResults } from '../../redux/search/results/actions';\nimport {\n hasError,\n isFetching,\n isSearching,\n isSearchRequestPending,\n isWaiting,\n} from '../../redux/search/results/selectors/data';\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithSearchResults(props) {\n const _hasError = useSelector(hasError);\n const _isFetching = useSelector(isFetching);\n const _isSearching = useSelector(isSearching);\n const _isSearchRequestPending = useSelector(isSearchRequestPending);\n const _isWaiting = useSelector(isWaiting);\n\n const getData = (dispatch, force) => getResults(dispatch, force);\n const _hasFailed = _hasError;\n const _isLoaded = !_isSearchRequestPending && !_isSearching;\n const _isLoading = _isSearchRequestPending || _isFetching;\n const _isReady = !_isSearchRequestPending && _isSearching;\n const extraProps = () => ({\n isSearching: _isSearching,\n isSearchRequestPending: _isSearchRequestPending,\n isWaiting: _isWaiting,\n });\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady, extraProps);\n}\n\nexport default WithSearchResults;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container } from 'react-bootstrap';\n\nimport { getDayNameFromDate, getDayAndMonthNameFromDate } from '../utils/date';\n\nconst getCriteria = (regionName, date, duration) => {\n const _date = new Date(date);\n let output = '';\n\n if (regionName) output += `${regionName}, `;\n if (date) output += `${getDayNameFromDate(_date)} ${getDayAndMonthNameFromDate(_date)} ${_date.getFullYear()}`;\n if (duration) output += ` for ${duration} nights`;\n\n return output;\n};\n\nfunction Loading(props) {\n const _criteria = getCriteria(props.regionName, props.date, props.duration);\n\n return (\n \n \n

We are now finding your perfect holiday

\n {_criteria && (\n

\n {_criteria}\n

\n )}\n
\n \n \n \n
\n
\n );\n}\n\nLoading.defaultProps = {\n count: 0,\n status: '...',\n};\n\nLoading.propTypes = {\n count: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n date: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.string]),\n duration: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n regionName: PropTypes.string,\n status: PropTypes.string,\n};\n\nexport default Loading;\n","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\n\nimport { count, params } from '../../redux/search/results/selectors/selectors';\nimport { currentRegion } from '../../redux/search/results/selectors/results';\n\nimport Loading from '../Loading';\nimport t from '../../../text';\n\nexport const WithSearchResultsLoadingStates = (props) => {\n const _count = useSelector(count);\n const _params = useSelector(params);\n const _region = useSelector(currentRegion);\n\n if (props.hasErrorFetching) {\n return (\n \n \n \n

\n \n {t('searchResults.errorLoadingResults')}\n

\n \n
\n
\n );\n } else if (props.isFetching || props.isSearching) {\n return (\n \n );\n }\n return props.children;\n};\n\nexport default WithSearchResultsLoadingStates;\n","import { SELECT_CHANNEL, SELECT_DATE, SELECT_PARK } from './action-types';\n\nexport const selectChannel = (dispatch, channelId) => {\n dispatch({ type: SELECT_CHANNEL, payload: channelId });\n};\n\nexport const selectDate = (dispatch, date) => {\n dispatch({ type: SELECT_DATE, payload: date });\n};\n\nexport const selectPark = (dispatch, parkId) => {\n dispatch({ type: SELECT_PARK, payload: parkId });\n};\n","import React, { lazy, Suspense, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Container } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport ParkCard from '../../components/ParkCard/ParkCard';\nimport ParksListFilterView from '../../components/ParksListFilterView/ParksListFilterView';\nimport RedEyeSearchResultsTag from '../../components/RedEye/RedEyeSearchResultsTag';\nimport RedEyeStartSearchTag from '../../components/RedEye/RedEyeStartSearchTag';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport WithAutoSearchFromParams from '../../components/SearchResults/WithAutoSearchFromParams';\nimport WithOperators from '../../components/HOC/WithOperators';\nimport WithParks from '../../components/HOC/WithParks';\nimport WithPartyMembersModal from '../../components/SearchResults/WithPartyMembersModal';\nimport WithRegions from '../../components/HOC/WithRegions';\nimport WithSearchResults from '../../components/SearchResults/WithSearchResults';\nimport WithSearchResultsLoadingStates from '../../components/SearchResults/WithSearchResultsLoadingStates';\n\nimport { selectDate } from '../../redux/park/actions';\nimport { currentRegion, processedResults } from '../../redux/search/results/selectors/results';\nimport { arrivalDate } from '../../redux/search/form/selectors';\nimport { channelId, params } from '../../redux/search/results/selectors/selectors';\nimport t from '../../../text';\n\nconst FetchTravelGuide = lazy(() => import('../../components/SearchResults/FetchTravelGuide'));\n\nconst SearchResults = () => {\n const dispatch = useDispatch();\n const _channelId = useSelector(channelId);\n const _params = useSelector(params);\n const originalDate = useSelector(arrivalDate);\n const parkRoute = `${_channelId === 'boats' ? 'boat' : 'park'}-result`;\n const region = useSelector(currentRegion);\n const searchResults = useSelector((state) => processedResults(state)) || [];\n const title = t('searchResults.title', searchResults.length, region?.name);\n\n useEffect(() => {\n // If a user comes back to this page, reset the selected holiday date used on the park page\n // (the user may have chosen an alternative date)\n selectDate(dispatch, originalDate);\n });\n\n return (\n \n \n \n {t('searchResults.page.title', region?.name)}\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n (\n \n )}\n allowSorting\n />\n \n {t('travelGuide.checkingForTravelGuide')}\n }\n >\n \n \n \n \n \n \n \n \n\n \n \n );\n};\n\nexport default SearchResults;\n","import { GET_PARK_DETAILS } from './action-types';\nimport { getRequestStatus } from '../../../requests/selectors';\n\nexport const parkDetails = (state) => state.data.park.details.parkDetails;\n\n// Utils to be used by other selectors\nexport const [getIsLoading, getHasFailed, getErrorData] = getRequestStatus(GET_PARK_DETAILS);\nexport const getIsLoaded = (state, parkId) => !!parkDetails(state)[parkId];\n","import { GET_PARK_RESULTS } from './action-types';\nimport { getRequestStatus } from '../../../requests/selectors';\n\n// Selectors\nexport const parkResults = (state) => state.data.park.results.parkResults;\n\n// Utils to be used by other selectors\nexport const [getIsLoading, getHasFailed, getErrorData] = getRequestStatus(GET_PARK_RESULTS);\nexport const getIsLoaded = (state, parkId) => !!parkResults(state)[parkId];\n","import { GET_PARK_REVIEWS } from './action-types';\nimport { getRequestStatus } from '../../../requests/selectors';\n\nexport const parkReviews = (state) => state.data.park.reviews.parkReviews;\nexport const parkBubbles = (state) => state.data.park.reviews.bubbles;\n\n// Utils to be used by other selectors\nexport const [getIsLoading, getHasFailed, getErrorData] = getRequestStatus(GET_PARK_REVIEWS);\nexport const getIsLoaded = (state, parkId) => !!parkReviews(state)[parkId];\n","import { GET_EXTRA_DATA } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const extraData = (state) => state.data.unitTypes.extraData;\nexport const parkExtraDataIds = (state) => state.data.unitTypes.parkExtraDataIds;\nexport const unitTypes = (state) => state.data.unitTypes.unitTypes;\n\n// Utils to be used by other selectors\nexport const [getExtraDataIsLoading, getExtraDataHasFailed, getExtraDataError] = getRequestStatus(GET_EXTRA_DATA);\nexport const getExtraDataIsLoaded = (state, parkId) => !!parkExtraDataIds(state)[parkId];\n","export const getParkDetailsById = (parkDetails, parkId) => parkDetails[parkId];\n","export const getExtraDataById = (extraData, unitTypeId) => extraData[unitTypeId];\nexport const getExtraDataByParkId = (extraData, parkExtraDataIds, parkId) => {\n return parkExtraDataIds[parkId]?.map((id) => extraData[id]);\n};\n\nexport const getUnitTypeById = (unitTypes, unitTypeId) => unitTypes[unitTypeId];\n\nexport const getAllUnitTypeDataById = (unitTypes, extraData, unitTypeId) => {\n const _extraData = getExtraDataById(extraData, unitTypeId) || {};\n const _unitTypeData = getUnitTypeById(unitTypes, unitTypeId);\n return { ..._unitTypeData, ..._extraData };\n};\n","import { createSelector } from 'reselect';\n\nimport { operators } from '../data/operators/selectors';\nimport { parkDetails } from '../data/park/details/selectors';\nimport { parkResults } from '../data/park/results/selectors';\nimport { parkReviews } from '../data/park/reviews/selectors';\nimport { extraData, unitTypes } from '../data/unitTypes/selectors';\n\nimport { getOperatorById } from '../data/operators/utils';\nimport { getParkDetailsById } from '../data/park/details/utils';\nimport { getParkResultsById } from '../data/park/results/utils';\nimport { getParkReviewsById } from '../data/park/reviews/utils';\nimport { getAllUnitTypeDataById } from '../data/unitTypes/utils';\n\nimport { dateToDDMMYYYY, DDMMYYYYToDate } from '../../utils/date';\n\nfunction getResultsData(result, date, unitTypes, extraData) {\n const nights = Object.keys(result)[0];\n const units = result[nights].map((unit) => ({\n ...unit,\n ...(getAllUnitTypeDataById(unitTypes, extraData, unit.unitType) || {}),\n arrivalDate: date,\n nights,\n }));\n\n return {\n date,\n nights,\n lowestPrice: units.map((unit) => +unit.unitPrice).sort((a, b) => a - b)[0],\n units,\n };\n}\n\nexport const channelId = (state) => state.park.channelId;\nexport const parkId = (state) => state.park.parkId;\nexport const selectedDate = (state) => state.park.selectedDate;\n\nexport const details = (state) => getParkDetailsById(parkDetails(state), parkId(state));\nexport const results = (state) => getParkResultsById(parkResults(state), parkId(state));\nexport const reviews = (state) => getParkReviewsById(parkReviews(state), parkId(state));\n\nexport const operator = createSelector(details, operators, (_details, _operators) => {\n return getOperatorById(_operators, _details?.opId);\n});\n\nexport const processedResults = createSelector(\n results,\n selectedDate,\n unitTypes,\n extraData,\n (_parkResults, _selectedDateStr, _unitTypes, _extraData) => {\n const _selectedDate = new Date(_selectedDateStr);\n const results = _parkResults?.results;\n if (!results) return undefined;\n\n const all = {};\n const alternativeDates = {};\n\n Object.keys(results).forEach((dateKey) => {\n all[dateKey] = getResultsData(results[dateKey], DDMMYYYYToDate(dateKey), _unitTypes, _extraData);\n if (isNaN(_selectedDate.getTime()) || DDMMYYYYToDate(dateKey).getTime() !== _selectedDate.getTime()) {\n alternativeDates[dateKey] = all[dateKey];\n }\n });\n\n return {\n all: Object.keys(all).length ? all : undefined,\n alternativeDates: Object.keys(alternativeDates).length ? alternativeDates : undefined,\n selectedDate: !isNaN(_selectedDate.getTime()) ? all[dateToDDMMYYYY(_selectedDate)] : undefined,\n };\n },\n);\n","export const getParkReviewsById = (parkReviews, parkId) => parkReviews[parkId];\n","export const areResultsStale = (parkResults) => {\n return typeof parkResults?.timeLoaded === 'number' && parkResults.timeLoaded + 60 * 1000 <= Date.now(); // 1 min cache\n};\nexport const getParkResultsById = (parkResults, parkId) => parkResults[parkId];\n","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport Icon from '../../Icon';\nimport t from '../../../../text';\n\n//import styles from './DealOfTheWeekBanner.module.scss';\n\nexport const DealOfTheWeekBanner = () => (\n \n \n \n \n
\n
\n \n
\n
\n

{t('dotw.dealOfTheWeek')}

\n

{t('dotw.allPricesBasedUpon')}

\n
\n
\n \n
\n
\n
\n);\n\nexport default DealOfTheWeekBanner;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Modal } from 'react-bootstrap';\nimport Slider from 'react-slick';\nimport { ACCOM_BASE_URL } from './AccommodationListing';\n\nexport const AccommodationModal = ({ holiday, onHide, show, images, description }) => {\n const {\n features,\n floorPlan,\n heading,\n sleeps,\n unitDesc,\n image,\n bedrooms,\n kitchen,\n livingRoom,\n showerRoom,\n outdoor,\n other,\n cleaning,\n } = holiday ?? {};\n\n const floorPlanImages = useMemo(() => {\n if (floorPlan === undefined) return [];\n return floorPlan.map((img, i) => {\n const imgUrl = img.startsWith('http') ? img : `${ACCOM_BASE_URL}${img}`;\n return {`Accommodation;\n });\n }, [floorPlan]);\n\n const renderItems = (items, heading) => {\n if (!items) return null;\n return (\n
\n
{heading}
\n {items.map((item) => (\n
\n \n {item}\n
\n ))}\n
\n );\n };\n\n const unitFeatures = useMemo(() => renderItems(features, 'Features'), [features]);\n const unitBedrooms = useMemo(() => renderItems(bedrooms, 'Bedrooms'), [bedrooms]);\n const unitKitchen = useMemo(() => renderItems(kitchen, 'Kitchen'), [kitchen]);\n const unitLivingRoom = useMemo(() => renderItems(livingRoom, 'Living Room'), [livingRoom]);\n const unitShowerRoom = useMemo(() => renderItems(showerRoom, 'Shower Room'), [showerRoom]);\n const unitOutdoor = useMemo(() => renderItems(outdoor, 'Outdoor'), [outdoor]);\n const unitOther = useMemo(() => renderItems(other, 'Other'), [other]);\n const unitCleaning = useMemo(() => renderItems(cleaning, 'Cleaning'), [cleaning]);\n\n const hasAnyImages = images?.length > 0 || floorPlanImages?.length > 0;\n\n return (\n \n \n {unitDesc}\n \n\n \n \n {hasAnyImages && (\n \n \n {images?.length > 0 && (\n \n {images}\n \n )}\n\n {floorPlanImages?.length > 0 && (\n \n {floorPlanImages}\n \n )}\n \n \n )}\n \n {heading &&

{heading}

}\n {description &&
}\n {sleeps &&

{sleeps}

}\n {unitFeatures}\n {unitBedrooms}\n {unitKitchen}\n {unitLivingRoom}\n {unitShowerRoom}\n {unitOutdoor}\n {unitOther}\n {unitCleaning}\n \n \n \n \n );\n};\n\nAccommodationModal.propTypes = {\n holiday: PropTypes.object,\n onHide: PropTypes.func,\n show: PropTypes.bool,\n images: PropTypes.array,\n description: PropTypes.array,\n};\n\nexport default AccommodationModal;","import React, { useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Button } from 'react-bootstrap';\n\nimport AccommodationModal from './AccommodationModal';\nimport t from '../../../../text';\nimport { config } from '../../../../config';\nimport { Alert } from 'react-bootstrap';\nimport Icon from '../../Icon';\nimport Slider from 'react-slick';\nimport { decodeHtml } from '../../../utils/string';\n\nconst SLIDER_SETTINGS = {\n infinite: true,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1,\n adaptiveHeight: false,\n};\n\nexport const ACCOM_BASE_URL = 'https://content.breakfreeholidays.co.uk/images/accom-types/';\n\nfunction AccommodationListing({ holiday, onBook }) {\n const [show, setShow] = useState(false);\n\n const unitImages = useMemo(() => {\n if (holiday.image === undefined) return [];\n return holiday.image.map((img, i) => {\n const imgUrl = img.startsWith('http') ? img : `${ACCOM_BASE_URL}${img}`;\n return {`Accommodation;\n });\n }, [holiday.image]);\n\n const lowUnitCountRemaining = +holiday.unitQuantity < 5;\n const isDiscounted = +holiday.unitPriceSave > 0;\n\n const description = [holiday.desc].flat();\n // We have to split these up otherwise there is inconsistent space on the listings\n const processedDescriptionListing = description\n .map((sentence) => `

${decodeHtml(sentence)}

`)\n .join('');\n const processedDescriptionModal = description.map((sentence) => `

${decodeHtml(sentence)}

`).join('');\n\n return (\n \n \n {unitImages}\n\n {lowUnitCountRemaining && (\n \n {t('park.accommodation.onlyXLeft', holiday.unitQuantity)}\n \n )}\n \n\n \n {unitImages.length === 0 && lowUnitCountRemaining && (\n \n {t('park.accommodation.onlyXLeft', holiday.unitQuantity)}\n \n )}\n
\n

{holiday.unitDesc}

\n

\n {' '}\n {t('park.accommodation.sleepsX', holiday.unitMaxOccupancy)}\n {holiday.unitDisabled === 'Y' && (\n \n {' '}\n {t('park.accommodation.disabledAccess')}\n \n )}\n {holiday.unitAdultsOnly === 'Y' && (\n \n \n Please Note: This unit is adults only.\n \n )}\n

\n\n {holiday.desc && (\n <>\n {
}\n \n {show && (\n setShow(false)}\n show={show}\n images={unitImages}\n description={processedDescriptionModal}\n />\n )}\n \n )}\n
\n\n \n {isDiscounted && (\n \n
\n

\n {t(\n 'park.accommodation.wasX',\n (parseFloat(holiday.unitPrice) + parseFloat(holiday.unitPriceSave)).toFixed(2),\n )}\n

\n

\n {t('park.accommodation.saveX', holiday.unitPriceSave)}\n

\n
\n \n )}\n \n \n \n
\n \n \n );\n}\n\nAccommodationListing.propTypes = {\n holiday: PropTypes.object,\n onBook: PropTypes.func,\n};\n\nAccommodationListing.defaultProps = {};\n\nexport default AccommodationListing;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport AccommodationListing from './AccommodationListing';\n\nimport { getDayNameFromDate, getDayAndMonthNameFromDate } from '../../../utils/date';\nimport t from '../../../../text';\nimport { Col, Container, Form, FormControl, Row } from 'react-bootstrap';\n\nexport const Accommodation = (props) => {\n const sortOptions = [\n {\n label: 'Price Low to High',\n value: 'asc',\n },\n {\n label: 'Price High to Low',\n value: 'desc',\n },\n ];\n const shortDate = true;\n const [sortOption, setSortOption] = useState(sortOptions[0]);\n\n const onChange = (val) => {\n const correctOption = sortOptions.find((option) => option.value === val);\n setSortOption(correctOption);\n };\n\n const sortResults = (accomodations) => {\n const isItAscending = sortOption.value === 'asc';\n return accomodations.sort((a, b) => (isItAscending ? a.unitPrice - b.unitPrice : b.unitPrice - a.unitPrice));\n };\n\n // Get lowest price\n let lowestPrice = '';\n if(props.result){\n lowestPrice = props.result.units.reduce((prev, curr) => {\n return (+prev.unitPrice <= +curr.unitPrice) ? prev : curr\n });\n }\n\n return props.result ? (\n <>\n \n \n {props.result && (\n \n

{props.result.units.length} {props.result.units.length > 1 ? \"Holidays\" : \"Holiday\"} found from £{lowestPrice.unitPrice}

\n

{`${getDayNameFromDate(props.result.date, shortDate)} ${getDayAndMonthNameFromDate(props.result.date, shortDate)} for ${props.result.nights} nights`}

\n \n )}\n \n \n onChange(e.target.value)}>\n {sortOptions.map((opt) => (\n \n ))}\n \n \n \n
\n
\n\n {sortResults(props.result.units).map((unit) => (\n props.onBook(unit)}\n />\n ))}\n \n ) : (\n
\n

{t('park.accommodation.accommodation')}

\n {t('park.accommodation.noResults')}\n
\n );\n};\n\nAccommodation.propTypes = {\n onBook: PropTypes.func,\n parkDetails: PropTypes.object,\n result: PropTypes.object,\n};\n\nAccommodation.defaultProps = {};\n\nexport default Accommodation;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card } from 'react-bootstrap';\nimport t from '../../../../text';\n\nconst HolidayDateCard = ({ clicked, day, date, year, price, selected, preferred }) => (\n \n \n

\n {day}, {date}
\n {year}\n

\n

{t('park.dates.fromX', price.toFixed(2))}

\n {selected ? (\n

{t('park.dates.selectedDate')}

\n ) : (\n

\n {t('park.dates.dateType', preferred)}\n

\n )}\n
\n \n);\n\nHolidayDateCard.propTypes = {\n clicked: PropTypes.func,\n date: PropTypes.string,\n day: PropTypes.string,\n year: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n price: PropTypes.number,\n selected: PropTypes.bool,\n preferred: PropTypes.bool,\n};\n\nexport default HolidayDateCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport HolidayDateCard from './HolidayDateCard';\nimport { getDayNameFromDate, getDayAndMonthNameFromDate } from '../../../utils/date';\nimport t from '../../../../text';\nimport { requestPayload } from '../../../redux/search/results/selectors/selectors';\nimport Slider from 'react-slick';\n//import AltDatesCalendar from './AltDatesCalendar';\n//import { config } from '../../../../config';\n\nconst sortByDate = (arr) => {\n return arr.sort((a, b) => {\n return new Date(a.date) - new Date(b.date);\n });\n};\n\nfunction AlternativeDates(props) {\n //const [cottageAltDates, setCottageAltDates] = useState(false);\n const searchDate = useSelector(requestPayload).date;\n\n // Find the preferred date park data\n const allParks = props.results;\n const preferredDate = allParks[searchDate];\n\n // Find the alternative date parks data\n const allDates = Object.values(props.results);\n const filteredDates = allDates.filter((date) => date !== preferredDate);\n const alternativeDates = sortByDate(filteredDates);\n preferredDate && alternativeDates.splice(1, 0, preferredDate)\n\n const settings = {\n dots: false,\n arrows: true,\n infinite: false,\n lazyLoad: true,\n speed: 500,\n slidesToShow: 3,\n slidesToScroll: 1,\n className: 'alt-dates-slider w-100',\n responsive: [\n {\n breakpoint: 992,\n settings: {\n slidesToShow: 2,\n },\n },\n {\n breakpoint: 576,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n };\n\n return (\n alternativeDates.length !== 0 && (\n \n \n \n \n

{t('park.dates.alternativeDates')}

\n \n \n {/*\n {alternativeDates.map((result) => (\n \n props.onSelect(result)}\n />\n \n ))}\n */}\n \n {alternativeDates.map((result, i) => (\n props.onSelect(result)}\n />\n ))}\n \n {/*cottageAltDates && (\n \n \n \n \n \n )*/}\n \n
\n
\n
\n )\n );\n}\n\nAlternativeDates.propTypes = {\n onSelect: PropTypes.func,\n results: PropTypes.object,\n selectedResult: PropTypes.object,\n};\n\nAlternativeDates.defaultProps = {};\n\nexport default AlternativeDates;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getParkResults } from '../../redux/data/park/results/actions';\nimport { getHasFailed, getIsLoading, getIsLoaded } from '../../redux/data/park/results/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithParkResults(props) {\n const getData = (dispatch, force) => getParkResults(dispatch, props.parkId, force);\n const _hasFailed = useSelector((state) => getHasFailed(state, props.parkId));\n const _isLoaded = useSelector((state) => getIsLoaded(state, props.parkId));\n const _isLoading = useSelector((state) => getIsLoading(state, props.parkId));\n const _isReady = !!props.parkId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithParkResults.propTypes = {\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithParkResults;\n","import { GET_PARK_RESULTS } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../../../apiRequest';\nimport { urls } from '../../../../../config';\nimport { getIsLoaded, getIsLoading, getHasFailed } from './selectors';\n\nexport const getParkResults = (dispatch, parkId, force = false) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getIsLoaded(state, parkId);\n const isLoading = getIsLoading(state, parkId);\n const hasFailed = getHasFailed(state, parkId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n apiRequest(d, GET_PARK_RESULTS, urls.parkResults, { parkId }, parkId);\n }\n });\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { selectDate } from '../../redux/park/actions';\nimport { parkId, processedResults } from '../../redux/park/selectors';\n\nimport AlternativeDates from '../../components/ParkPage/AlternativeDates/AlternativeDates';\nimport WithParkResults from '../../components/HOC/WithParkResults';\n\nfunction AlternativeDatesSection(props) {\n const dispatch = useDispatch();\n const _parkId = useSelector(parkId);\n const _processedResults = useSelector(processedResults);\n\n const showAlternativeDates = !!_processedResults?.alternativeDates;\n const selectedResult = _processedResults?.selectedDate;\n\n const changeSelectedResultHandler = (result) => {\n selectDate(dispatch, result.date);\n props.clicked('accommodation');\n };\n\n return (\n \n {showAlternativeDates && (\n changeSelectedResultHandler(result)}\n channel={props.channel}\n />\n )}\n \n );\n}\n\nexport default AlternativeDatesSection;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card } from 'react-bootstrap';\nimport TruncatedTextAlt from '../../../components/TruncatedTextAlt';\n\nexport const Facilities = (props) => {\n return (\n \n \n

{props.title}

\n
\n \n
    \n {props.facilities.map((facility, i) => (\n
  • \n \n \n
  • \n ))}\n
\n {props.overview && props.overview.length > 0 && (\n \n )}\n {props.importantInfo && props.importantInfo.length > 0 && (\n \n )}\n
\n
\n );\n};\n\nFacilities.propTypes = {\n facilities: PropTypes.array,\n};\n\nFacilities.defaultProps = {\n facilities: [' '],\n};\n\nexport default Facilities;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction ImportantInfo(props) {\n return (\n
\n

{props.content}

\n
\n );\n}\n\nImportantInfo.propTypes = {\n content: PropTypes.string,\n};\n\nexport default ImportantInfo;\n","import TagManager from 'react-gtm-module';\n\n/**\n * Makes a best-effort attempt to produce 'opName - ParkName' (removing duplicated operator names within park names)\n * @param {string} opName - The operator name\n * @param {string} parkName - The park name\n */\nexport function getOperatorParkNameString(opName, parkName) {\n const parts = parkName.split(opName);\n return `${opName} - ${parts.length === 2 ? parts[1].trim() : parkName}`;\n}\n\nexport function initGTM(siteCode) {\n TagManager.initialize({\n gtmId: siteCode,\n });\n}\n\nexport function tagSaleCompleted(bookingId, amountPaid, unitTypeId, operatorId, regionId, parkName, channelId) {\n TagManager.dataLayer({\n dataLayer: {\n ecommerce: {\n purchase: {\n actionField: {\n id: bookingId, // 'the booking reference' - Transaction ID. Required for purchases and refunds\n affiliation: 'BreakFree Holidays Booking', // (static)\n revenue: amountPaid, // 'Booking cost' - Total transaction value (incl. tax and shipping)\n },\n products: [\n {\n // List of productFieldObjects.\n name: unitTypeId, // 'accommodation unit name' - Name or ID is required\n id: bookingId, // 'booking reference'\n price: amountPaid, // 'booking cost'\n brand: `${operatorId} - ${regionId}`, // 'operator - region'\n category: parkName, //'park name'\n variant: channelId, //'Channel Type'\n quantity: 1,\n },\n ],\n },\n },\n },\n });\n TagManager.dataLayer({\n dataLayer: {\n event: 'gtmBFH.saleCompleted',\n },\n });\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport RedEye from './RedEye';\n\nimport { regions } from '../../redux/data/regions/selectors';\nimport { details, operator, processedResults as parkResults } from '../../redux/park/selectors';\nimport { params } from '../../redux/search/form/selectors';\nimport { processedResults as searchResults } from '../../redux/search/results/selectors/results';\n\nimport { getRegionById } from '../../redux/data/regions/utils';\nimport { dateToDDMMYYYY, getDepartureDate } from '../../utils/date';\nimport { stripProtocol, to2dp } from '../../utils/string';\nimport { getOperatorParkNameString } from '../../utils/tracking';\nimport { config } from '../../../config';\n\nexport const RedEyeParkResultsTag = () => {\n const _details = useSelector(details);\n const _operator = useSelector(operator);\n const _parkResults = useSelector(parkResults);\n const _region = getRegionById(useSelector(regions), _details.regn);\n const _searchParams = useSelector(params);\n const _searchResult = useSelector(searchResults).find((result) => result.parkUrn === _details.parkId);\n\n const facilitiesTags = {};\n if (Array.isArray(_details?.facilities)) {\n _details.facilities\n .filter((facility, i) => i < 4)\n .forEach((facility, i) => {\n facilitiesTags[`select_attribute${String.fromCharCode(97 + i)}`] = facility;\n });\n }\n\n const unitInfoTags = {};\n if (Array.isArray(_parkResults?.selectedDate?.units)) {\n _parkResults.selectedDate.units\n .filter((unitInfo, i) => i < 5)\n .forEach((unitInfo, i) => {\n unitInfoTags[`select_accomodation${i + 1}`] = unitInfo.unitDesc;\n unitInfoTags[`select_sleeps${i + 1}`] = unitInfo.unitMaxOccupancy;\n unitInfoTags[`select_accom_value${i + 1}`] = to2dp(unitInfo.unitPrice);\n });\n }\n\n return (\n \n );\n};\n\nexport default RedEyeParkResultsTag;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction Review(props) {\n return (\n <>\n
\n {props.rating}\n

\n {props.name}\n - {props.date}\n

\n
\n

{props.review}

\n \n );\n}\n\nReview.propTypes = {\n date: PropTypes.string,\n name: PropTypes.string,\n rating: PropTypes.number,\n review: PropTypes.string,\n};\n\nexport default Review;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Review from './Review';\nimport t from '../../../../text';\nimport { Card } from 'react-bootstrap';\n\nfunction Reviews({ parkDetails, reviews }) {\n let renderedReviews =

{t('park.reviews.noReviews')}

;\n if (reviews?.length) {\n renderedReviews = reviews.map((rev, index) => (\n
\n \n
\n
\n ));\n }\n\n return (\n \n \n

{parkDetails.name}

\n
\n \n {renderedReviews}\n \n
\n );\n}\n\nReviews.propTypes = {\n parkDetails: PropTypes.object,\n parkId: PropTypes.string,\n reviews: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n};\n\nReviews.defaultProps = {\n parkDetails: {},\n reviews: {},\n};\n\nexport default Reviews;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport CardPanel from '../CardPanel';\nimport Spinner from '../Spinner';\nimport t from '../../../text';\nimport { Alert } from 'react-bootstrap';\n\nexport const WithLoadingStates = (props) => (\n <>\n {props.isFetching ? (\n \n ) : (\n <>\n {props.errorResponse && Array.isArray(props.errorResponse.errors) && (\n \n {props.errorResponse.errors.map((error) => (\n

\n {`${error.message}${error.additional ? ' (' + error.additional + ')' : ''}`}\n

\n ))}\n
\n )}\n {!props.hasErrorFetching && props.children}\n {props.hasErrorFetching && props.isExtras && (\n \n

{props.loadingErrorMessage || t('global.errorLoading')}

\n \n
\n )}\n {props.hasErrorFetching && !props.isExtras && (\n \n

{props.loadingErrorMessage || t('global.errorLoading')}

\n \n {props.isPayment && \n Search for another holiday\n }\n
\n )}\n {!props.isFetching &&\n !props.isSaving &&\n !props.hasErrorFetching &&\n props.hasErrorSaving &&\n typeof props.errorResponse !== 'object' && (

{props.savingErrorMessage || t('global.errorSaving')}

)}\n \n )}\n \n);\n\nWithLoadingStates.defaultProps = {\n hasErrorFetching: false,\n hasErrorSaving: false,\n isFetching: false,\n isSaving: false,\n};\n\nWithLoadingStates.propTypes = {\n errorResponse: PropTypes.object,\n hasErrorFetching: PropTypes.bool,\n hasErrorSaving: PropTypes.bool,\n isFetching: PropTypes.bool,\n isSaving: PropTypes.bool,\n loadingErrorMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n savingErrorMessage: PropTypes.string,\n onRetry: PropTypes.func,\n};\n\nexport default WithLoadingStates;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getParkReviews } from '../../redux/data/park/reviews/actions';\nimport { getHasFailed, getIsLoading, getIsLoaded } from '../../redux/data/park/reviews/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithParkReviews(props) {\n const getData = (dispatch, force) => getParkReviews(dispatch, props.parkId, force);\n const _hasFailed = useSelector((state) => getHasFailed(state, props.parkId));\n const _isLoaded = useSelector((state) => getIsLoaded(state, props.parkId));\n const _isLoading = useSelector((state) => getIsLoading(state, props.parkId));\n const _isReady = !!props.parkId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithParkReviews.propTypes = {\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithParkReviews;\n","import { GET_PARK_REVIEWS } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../../../apiRequest';\nimport { urls } from '../../../../../config';\nimport { getIsLoaded, getIsLoading, getHasFailed } from './selectors';\n\nexport const getParkReviews = (dispatch, parkId, force = false) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getIsLoaded(state, parkId);\n const isLoading = getIsLoading(state, parkId);\n const hasFailed = getHasFailed(state, parkId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n return apiRequest( d, GET_PARK_REVIEWS, urls.parkReviews, { parkId }, parkId);\n }\n });\n};\n","import { GET_EXTRA_DATA } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../../apiRequest';\nimport { getExtraDataHasFailed, getExtraDataIsLoading, getExtraDataIsLoaded } from './selectors';\nimport { urls } from '../../../../config';\n\nconst getExtraDataUrl = (parkID) => urls.unitTypesExtraDataPID(parkID);\n\nexport const getExtraData = (dispatch, parkId, force = false) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getExtraDataIsLoaded(state, parkId);\n const isLoading = getExtraDataIsLoading(state, parkId);\n const hasFailed = getExtraDataHasFailed(state, parkId);\n const url = getExtraDataUrl(parkId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n return apiRequest(d, GET_EXTRA_DATA, url, { parkId }, parkId);\n }\n });\n};\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getExtraData } from '../../redux/data/unitTypes/actions';\nimport {\n getExtraDataHasFailed,\n getExtraDataIsLoading,\n getExtraDataIsLoaded,\n} from '../../redux/data/unitTypes/selectors';\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithUnitTypesExtraData(props) {\n const { parkId, parkName, operatorName } = props;\n\n const getData = (dispatch, force) => getExtraData(dispatch, parkId, parkName, operatorName, force);\n const _hasFailed = useSelector((state) => getExtraDataHasFailed(state, parkId));\n const _isLoaded = useSelector((state) => getExtraDataIsLoaded(state, parkId));\n const _isLoading = useSelector((state) => getExtraDataIsLoading(state, parkId));\n const _isReady = parkId && parkName && operatorName;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady, undefined, true);\n}\n\nWithUnitTypesExtraData.propTypes = {\n allowFailure: PropTypes.bool,\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n parkName: PropTypes.string,\n operatorName: PropTypes.string,\n};\n\nWithUnitTypesExtraData.defaultProps = {\n allowFailure: true,\n};\n\nexport default WithUnitTypesExtraData;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { selectChannel, selectRegion } from '../../redux/search/form/actions';\nimport { channelId, regionId } from '../../redux/search/form/selectors';\n\nexport const WithUpdatedSearchParams = (props) => {\n const dispatch = useDispatch();\n const [firstRun, setFirstRun] = useState(true);\n\n const _selectedChannelId = useSelector(channelId);\n const _selectedRegionId = useSelector(regionId);\n\n useEffect(() => {\n if (firstRun) {\n if (props.channelId && props.channelId !== _selectedChannelId) {\n selectChannel(dispatch, props.channelId);\n }\n\n if (props.regionId && props.regionId !== _selectedRegionId) {\n selectRegion(dispatch, props.regionId);\n }\n\n setFirstRun(false);\n }\n }, [_selectedChannelId, _selectedRegionId, props.channelId, props.regionId, dispatch, firstRun]);\n\n return props.children || null;\n};\n\nWithUpdatedSearchParams.propTypes = {\n channelId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n regionId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nexport default WithUpdatedSearchParams;\n","import React from 'react';\nimport { Button, Card, Col, Row } from 'react-bootstrap';\n\nexport const ThingsToDo = (props) => (\n \n \n

Things To Do

\n
\n \n \n {props.ttdPosts.map((ttd, i) => {\n return (\n \n

\n {ttd.title.rendered}\n

{ttd.acf.description}

\n \n \n );\n })}\n \n \n \n);\n\nexport default ThingsToDo;\n","import React from 'react';\nimport { Card } from 'react-bootstrap';\nimport Slider from 'react-slick';\n\nfunction Videos(props) {\n const videoAttributes = '?byline=0&title=0&transparent=0';\n const SliderItems = props.content.map((video, i) => {\n return ;\n });\n\n return (\n \n \n

{`Video${props.count > 1 ? 's' : ''}`}

\n
\n \n {SliderItems}\n \n
\n );\n}\n\nexport default Videos;\n","import React from 'react';\nimport { Card } from 'react-bootstrap';\n\nfunction QandA(props) {\n return (\n \n \n

Questions and Answers

\n
\n \n

\n \n \n );\n}\n\nexport default QandA;\n","import React, { useState } from 'react';\nimport { GoogleMap, InfoWindow, useLoadScript } from '@react-google-maps/api';\nimport PropTypes from 'prop-types';\n\nimport MapMarker from './MapMarker';\nimport MapStyle from '../../Data/GoogleMapStyle';\n\nimport { config } from '../../../config';\n\nconst containerStyle = {\n width: '100%',\n height: '500px',\n};\n\nfunction SingleLocation(props) {\n const { isLoaded, loadError } = useLoadScript({\n googleMapsApiKey: config.googleMapsApiKey,\n });\n\n // Log errors\n if (loadError) console.error(loadError);\n\n const [isInfowWindowOpen, setIsInfoWindowOpen] = useState(false);\n\n const renderMap = () => {\n return (\n \n setIsInfoWindowOpen(true)} position={props.position}>\n {isInfowWindowOpen && (\n setIsInfoWindowOpen(false)}>\n
{props.name}
\n
\n )}\n
\n \n );\n };\n\n return isLoaded ? renderMap() : 'Loading...';\n}\n\nSingleLocation.propTypes = {\n id: PropTypes.string,\n position: PropTypes.object,\n name: PropTypes.string,\n zoom: PropTypes.number,\n};\n\nSingleLocation.defaultProps = {\n id: 'park-marker',\n position: { lat: 0, lng: 0 },\n name: 'No park name set',\n zoom: 8,\n};\n\nexport default SingleLocation;\n","import React from 'react';\nimport { Card } from 'react-bootstrap';\nimport SingleLocation from '../../Maps/SingleLocation';\n\nfunction Location(props) {\n return (\n <>\n \n \n

Location

\n
\n \n \n \n
\n {props.directions.length > 0 && (\n \n \n

Directions

\n
\n \n
\n
\n
\n )}\n \n );\n}\n\nexport default Location;\n","import React from 'react';\nimport { Card } from 'react-bootstrap';\n\nfunction AltAccommodation(props) {\n return (\n \n \n

{props.channel === 'boats' ? 'Boats' : 'Accommodation'}

\n
\n \n
\n
\n
\n );\n}\n\nexport default AltAccommodation;\n","import React from 'react';\nimport { Card } from 'react-bootstrap';\n\nfunction ChannelExtra(props) {\n let title = '',\n content = '';\n switch (props.channel) {\n case 'boats':\n title = 'New to Boating?';\n content =\n '

If you've never been on a boating holiday before, the concept is simple. We provide you with a boat via our partners at Le Boat, which will be your home and transport for the duration of your holiday. Pick it up from one of the many bases, situated along some of the most beautiful waterways in Europe and Canada, and the rest is entirely up to you. Go where you want; do as you please. The only requirement is that you return it back to the base on time. The boats have been designed to make them easy to use, with a steering wheel for left and right and a forward and reverse throttle! No previous boating experience or a licence is required. Learn more now on our Ultimate Guide to Boating for Beginners.

';\n break;\n default:\n title = '';\n content = '';\n }\n return (\n \n \n

{title}

\n
\n \n
\n
\n
\n );\n}\n\nexport default ChannelExtra;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, Tab, Tabs } from 'react-bootstrap';\n\nfunction ParkInformationTabs(props) {\n return (\n <>\n props.clicked(k)}\n id=\"qwerty\"\n >\n {props.availableTabs.map((tab, i) =>\n props.clicked(tab.key)}\n title={tab.name}\n />\n )}\n \n {\n (props.availableTabs.filter((obj) => obj.key === props.active).length > 0) ? (\n \n \n {props.availableTabs.filter((obj) => obj.key === props.active)[0].name}\n \n \n {props.availableTabs.map((item) => (\n props.clicked(item.key)}>\n {item.name}\n \n ))}\n \n \n ) : <>\n }\n \n );\n}\n\nParkInformationTabs.propTypes = {\n active: PropTypes.string,\n clicked: PropTypes.func,\n availableTabs: PropTypes.array,\n};\n\nexport default ParkInformationTabs;\n","import React, { useState, useEffect, forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { channelId, details, operator, parkId, processedResults, reviews } from '../../redux/park/selectors';\nimport { urls } from '../../../config';\nimport Accommodation from '../../components/ParkPage/ParkInformation/Accommodation';\nimport AlternativeDatesSection from './AlternativeDatesSection';\nimport Facilities from '../../components/ParkPage/ParkInformation/Facilities';\nimport ImportantInfo from '../../components/ParkPage/ParkInformation/ImportantInfo';\n//import ParkInformationMenu from '../../components/ParkPage/ParkInformation/ParkInformationMenu';\nimport RedEyeParkResultsTag from '../../components/RedEye/RedEyeParkResultsTag';\nimport Reviews from '../../components/ParkPage/ParkInformation/Reviews';\nimport WithLoadingStates from '../../components/Booking/WithLoadingStates';\nimport WithParkResults from '../../components/HOC/WithParkResults';\nimport WithParkReviews from '../../components/HOC/WithParkReviews';\nimport WithUnitTypesExtraData from '../../components/HOC/WithUnitTypesExtraData';\nimport WithUpdatedSearchParams from '../../components/HOC/WithUpdatedSearchParams';\nimport t from '../../../text';\nimport ThingsToDo from '../../components/ParkPage/ParkInformation/ThingsToDo';\nimport Videos from '../../components/ParkPage/ParkInformation/Videos';\nimport QandA from '../../components/ParkPage/ParkInformation/QandA';\nimport Location from '../../components/ParkPage/ParkInformation/Location';\nimport AltAccommodation from '../../components/ParkPage/ParkInformation/AltAccommodation';\nimport ChannelExtra from '../../components/ParkPage/ParkInformation/ChannelExtra';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\nimport ParkInformationTabs from '../../components/ParkPage/ParkInformation/ParkInformationTabs';\nimport SearchPopup from '../../components/Browse/SearchPopup';\nimport { config } from '../../../config';\n\nconst ParkInformation = forwardRef(({ onNext, searchResult }, ref) => {\n const _channelId = useSelector(channelId);\n const _operator = useSelector(operator);\n const _parkDetails = useSelector(details);\n const _parkId = useSelector(parkId);\n const _processedResults = useSelector(processedResults);\n const _reviews = useSelector(reviews);\n const RegionName = useSelector((state) => state.data.regions.regions);\n const selectedResult = _processedResults?.selectedDate;\n const isBoat = _channelId === 'boats';\n const showAccommodation = searchResult;\n const parkObject = useSelector(details);\n const showImportantInfo = parkObject.importantInfo.length > 0;\n\n // Video\n const videos = parkObject.vid ? parkObject.vid.split(/\\r?\\n/) : [];\n const videoCount = videos.length;\n\n // Q&A\n const showQA = parkObject.qa.length > 0;\n const qaContent = parkObject.qa;\n\n // Location\n const position = parkObject.pos;\n const directions = parkObject.directions;\n const showLocation = position.length > 0 || directions.length > 0;\n\n // Alt Accommodation\n let showAltAccommodation = !showAccommodation;\n if (_parkDetails.accommodation.length === 0) showAltAccommodation = false;\n\n // State\n const [activeTab, setActiveTab] = useState();\n const [showReviewsTab, setShowReviewsTab] = useState(false);\n const [ttdData, setTtdData] = useState([]);\n const [ttdPosts, setTtdPosts] = useState([]);\n const handleMenuClick = (key) => {\n setActiveTab(key);\n };\n\n // Available tabs\n const doChannelExtra = ['boats'];\n const availableTabs = [];\n\n if (_parkDetails.facilities.length > 0) {\n availableTabs.push({\n name: _channelId === 'ukcottages' ? 'Property Information' : `${t('park.info.facilities')}`,\n key: 'facilities',\n })\n }\n\n if (config['global.feefoReviews'] && config['parks.showReviews'] && _channelId !== 'boats' && showReviewsTab) {\n availableTabs.push({ name: t('park.info.reviews'), key: 'reviews' });\n }\n if (showAccommodation)\n availableTabs.unshift({\n name: _channelId === 'boats' ? 'Boats' : 'Accommodation',\n key: 'accommodation',\n });\n if (showAltAccommodation)\n availableTabs.push({\n name: _channelId === 'boats' ? 'Boats' : 'Accommodation',\n key: 'altaccommodation',\n });\n if (showImportantInfo) {\n availableTabs.push({ name: t('park.info.importantInfo'), key: 'importantInfo' });\n }\n\n if (showLocation) availableTabs.push({ name: 'Location', key: 'location' });\n if (videoCount > 0) availableTabs.push({ name: `Video${videoCount > 1 ? 's' : ''}`, key: 'videos' });\n if (ttdPosts.length > 0) availableTabs.push({ name: 'Things to Do', key: 'ttd' });\n if (showQA) availableTabs.push({ name: 'Q & A', key: 'qa' });\n if (doChannelExtra.includes(_channelId)) availableTabs.push({ name: 'New to Boating', key: 'channelExtra' });\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/travel-guides/?filter[meta_key]=region-id&filter[meta_value]=${RegionName[_parkDetails.regn].id\n }&_fields=acf`,\n { signal: controller.signal },\n )\n .then((response) => response.json())\n .then((data) => {\n if (data.length > 0) {\n const wpData = data[0];\n setTtdData(wpData.acf['things-to-do']);\n }\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n return () => {\n controller.abort();\n };\n }, [RegionName, _parkDetails.regn]);\n\n useEffect(() => {\n const controller = new AbortController();\n // And now, we get the things to do:\n let ttdUrl = `${urls.cms}/things-to-do/?_fields=title,acf`;\n ttdData.forEach((ttd) => {\n ttdUrl = ttdUrl + '&include[]=' + ttd;\n });\n if (ttdData.length > 0) {\n fetch(ttdUrl, { signal: controller.signal })\n .then((response) => response.json())\n .then((data) => {\n setTtdPosts(data);\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n }\n return () => {\n controller.abort();\n };\n }, [ttdData]);\n\n useEffect(() => {\n setActiveTab(availableTabs[0].key);\n }, [])\n\n useEffect(() => {\n setShowReviewsTab(_reviews ? _reviews.length > 0 : false);\n }, [_reviews])\n\n if (!isBoat) {\n document.getElementsByTagName('meta')['description'].content = t(\n 'park.info.metaDescription',\n _parkDetails.name,\n RegionName[_parkDetails.regn].name,\n );\n }\n\n const getContent = () => {\n switch (activeTab) {\n case 'accommodation':\n return (\n \n \n \n onNext({ unit })}\n />\n \n \n \n );\n case 'altaccommodation':\n return ;\n case 'facilities':\n return (\n \n );\n case 'reviews':\n return (\n \n \n \n );\n case 'importantInfo':\n return ;\n case 'ttd':\n return ;\n case 'videos':\n return ;\n case 'qa':\n return ;\n case 'location':\n return (\n \n );\n case 'channelExtra':\n return ;\n default:\n return
;\n }\n };\n\n return (\n
\n {searchResult && (\n \n )}\n\n {!searchResult && (\n \n \n \n \n

Book your next {_parkDetails.name} break

\n \n \n \n \n
\n
\n
\n )}\n\n \n \n \n \n \n \n {getContent()}\n \n {/* Redeye tag */}\n {showAccommodation && (\n
\n \n \n \n \n \n \n \n
\n )}\n \n \n

Overview

\n \n \n
\n
\n
\n );\n});\n\nexport default ParkInformation;\n","import React, { useEffect, useState } from 'react';\nimport { Alert, Modal, Tab, Tabs } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport t from '../../../text';\n\nimport { requestParams } from '../../redux/search/form/selectors';\n\nexport const ToolsModal = () => {\n const location = useLocation();\n const _requestParams = useSelector(requestParams);\n\n const [show, setShow] = useState(false);\n\n const onClose = () => {\n setShow(false);\n };\n\n const onKeyPress = (e) => {\n if (e.keyCode === 84 && e.altKey) setShow(true); // ALT + t to show modal\n };\n\n useEffect(() => {\n document.addEventListener('keydown', onKeyPress);\n return () => {\n document.removeEventListener('keydown', onKeyPress);\n };\n });\n\n function getParkFromSearchLink(dealOfTheWeek, internal) {\n const DOTWParams = {\n ..._requestParams,\n adults: 2,\n children: 2,\n infants: 0,\n };\n const searchQuery = Object.keys(DOTWParams)\n .filter((key) => typeof DOTWParams[key] !== 'undefined')\n .filter((key) => key !== 'channel' && key !== 'region' && key !== 'partysize')\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(DOTWParams[key])}`)\n .join('&');\n\n let route = location.pathname.split('/');\n route[1] = dealOfTheWeek ? 'deal-of-the-week' : 'park-from-search';\n route = route.join('/');\n if (internal) return `${route}?${searchQuery}`;\n\n return `${window.location.origin}${route}?${searchQuery}`;\n }\n\n return (\n \n \n \n {t('park.tools.tools')}\n \n \n \n

{t('park.tools.dealOfTheWeekLink')}

\n\n \n \n \n \n ⚠️\n {' '}\n Use this for internal links, i.e Wordpress CMS pages or DOTW on homepage.\n \n {getParkFromSearchLink(true, true)}\n \n \n \n \n ⚠️\n {' '}\n Use this for external links, i.e emails or social.\n \n {getParkFromSearchLink(true)}\n \n \n\n
\n

{t('park.tools.parkFromSearchLink')}

\n {getParkFromSearchLink()}\n
\n
\n );\n};\n\nexport default ToolsModal;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getParkDetails } from '../../redux/data/park/details/actions';\nimport { getHasFailed, getIsLoading, getIsLoaded } from '../../redux/data/park/details/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithParkDetails(props) {\n const getData = (dispatch, force) => getParkDetails(dispatch, props.parkId, props.regionId, force);\n const _hasFailed = useSelector((state) => getHasFailed(state, props.parkId));\n const _isLoaded = useSelector((state) => getIsLoaded(state, props.parkId));\n const _isLoading = useSelector((state) => getIsLoading(state, props.parkId));\n const _isReady = !!props.parkId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithParkDetails.propTypes = {\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n regionId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithParkDetails;\n","import { GET_PARK_DETAILS } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../../../apiRequest';\nimport { urls } from '../../../../../config';\nimport { getIsLoaded, getIsLoading, getHasFailed } from './selectors';\n\nexport const getParkDetails = (dispatch, parkId, regionId, force = false) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = getIsLoaded(state, parkId);\n const isLoading = getIsLoading(state, parkId);\n const hasFailed = getHasFailed(state, parkId);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n apiRequest(d, GET_PARK_DETAILS, urls.parkDetails, { parkId, region: regionId }, parkId);\n }\n });\n};\n","import { Children, cloneElement, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { selectChannel, selectPark } from '../../redux/park/actions';\nimport { channelId as selectedChannelId, parkId as selectedParkId } from '../../redux/park/selectors';\n\nfunction WithParkSelected(props) {\n const dispatch = useDispatch();\n const { channelId, parkId } = useParams();\n\n const _selectedChannelId = useSelector(selectedChannelId);\n const _selectedParkId = useSelector(selectedParkId);\n\n const _channelNeedsSelecting = channelId && channelId !== _selectedChannelId;\n const _parkNeedsSelecting = parkId && parkId !== _selectedParkId;\n\n const updateSelectedParams = () => {\n if (_channelNeedsSelecting) {\n selectChannel(dispatch, channelId);\n }\n if (_parkNeedsSelecting) {\n selectPark(dispatch, parkId);\n }\n };\n\n useEffect(updateSelectedParams, [dispatch, channelId, parkId, _channelNeedsSelecting, _parkNeedsSelecting]);\n\n return Children.map(props.children || [], (child) => {\n return cloneElement(child, {\n isFetching: _channelNeedsSelecting || _parkNeedsSelecting || !!props.isFetching,\n hasErrorFetching: !!props.hasErrorFetching,\n onRetry: props.onRetry,\n });\n });\n}\n\nWithParkSelected.propTypes = {\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithParkSelected;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col, Button, Modal } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\n\nimport SingleLocation from '../../components/Maps/SingleLocation';\nimport t from '../../../text';\nimport { parkBubbles } from '../../redux/data/park/reviews/selectors';\n\nconst fixLocation = (location) => {\n if (location.charAt(0) === ',') {\n return location.slice(1).replace(/^\\s+|\\s+$/, '');\n }\n return location;\n};\n\nfunction ParkTitle(props) {\n const [show, setShow] = useState(false);\n const mapAvailable = !(parseFloat(props.lat).toString() === '0' && parseFloat(props.lon).toString() === '0');\n let locationFix = fixLocation(props.location); // Fix location. TODO: Can this be fixed in the backend?\n const _bubbles = useSelector(parkBubbles);\n\n return (\n \n \n \n \n

{props.name}

\n

\n {locationFix}\n

\n \n\n \n {/*\n TODO: Park Info || View Accomodation button\n */}\n {props.scrollToParkInfo()}}\n variant=\"alt-primary\"\n >\n {props.searchResult ? 'View Holidays' : 'More Information'} \n \n\n {mapAvailable && (\n <>\n setShow(true)}\n size=\"sm\"\n >\n {t('buttons.map')}\n \n setShow(false)} size=\"lg\" centered>\n \n {props.name}\n \n \n \n \n \n \n )}\n {props.showReviewsBadge && {_bubbles}}\n \n
\n
\n
\n );\n}\n\nParkTitle.propTypes = {\n name: PropTypes.string,\n location: PropTypes.string,\n position: PropTypes.object,\n sku: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n opid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n showReviewsBadge: PropTypes.bool,\n};\n\nParkTitle.defaultProps = {\n position: { lat: 0, lng: 0 },\n showReviewsBadge: true,\n};\n\nexport default ParkTitle;\n","import React, { useState, useEffect, Suspense } from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col } from 'react-bootstrap';\n\nconst Slider = React.lazy(() => import('react-slick'));\n\nconst ParkGallery = (props) => {\n const videoAttributes = '?byline=0&title=0&transparent=0';\n const [videoUrl, setVideoUrl] = useState(props.video + videoAttributes);\n const [images, setImages] = useState();\n\n const resetVideo = () => {\n if (!props.video) return;\n setVideoUrl('');\n };\n\n const gallerySettings = {\n className: \"park-page-gallery\",\n lazyLoad: true,\n infinite: true,\n centerMode: true,\n centerPadding: \"0\",\n slidesToShow: 3,\n responsive: [\n {\n breakpoint: 960,\n settings: {\n className: 'park-page-gallery-unset',\n centerMode: false,\n slidesToShow: 1,\n }\n }\n ]\n };\n\n useEffect(() => {\n setVideoUrl(props.video + videoAttributes);\n }, [videoUrl, props.video]);\n\n useEffect(() => {\n setImages(\n props.images.map((img, i) => (\n {props.parkname}\n )),\n );\n }, [props.images, props.parkname]);\n\n return (\n \n \n resetVideo()} style={{ minHeight: '246px' }}>\n }>\n \n {images}\n \n \n \n \n \n );\n}\n\nParkGallery.propTypes = {\n description: PropTypes.string,\n images: PropTypes.array,\n parkname: PropTypes.string,\n video: PropTypes.string,\n};\n\nexport default ParkGallery;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { channelId, details, parkId } from '../../redux/park/selectors';\nimport { operators } from '../../redux/data/operators/selectors';\nimport { slugify } from '../../utils/string';\nimport { config } from '../../../config';\nimport { Helmet } from 'react-helmet-async';\nimport ParkTitle from '../../components/ParkPage/ParkTitle';\nimport ParkGallery from '../../components/ParkPage/ParkGallery';\n\nexport const ParkTitleAndGallery = ({searchResult, scrollToParkInfo}) => {\n const _channelId = useSelector(channelId);\n const _parkDetails = useSelector(details);\n const _parkId = useSelector(parkId);\n const _operators = useSelector(operators);\n\n const isBoat = _channelId === 'boats';\n\n const _parkName = useSelector((state) => state.data.park.details.parkDetails[_parkId].name);\n const _regionId = useSelector((state) => state.data.park.details.parkDetails[_parkId].regn);\n\n // Images - Fixes loop issue in slider\n let images = [..._parkDetails.imgs];\n if (images.length === 2) images = [...images, ...images];\n if (images.length === 1) images = [...images,...images,...images,...images,];\n\n // Create JSON Schema\n const structuredJSON = JSON.stringify({\n '@context': 'https://schema.org/',\n '@type': 'LocalBusiness',\n name: _parkDetails.name,\n image: _parkDetails.imgs[0],\n description: _parkDetails.overview,\n address: {\n '@type': 'PostalAddress',\n addressLocality: _parkDetails.sAdd.split(',')[0],\n addressRegion: _parkDetails.sAdd.split(',')[1],\n },\n geo: {\n '@type': 'GeoCoordinates',\n latitude: _parkDetails.lat,\n longitude: _parkDetails.lon,\n },\n brand: {\n '@type': 'Brand',\n name: _operators[_parkDetails.opId].name,\n },\n });\n\n return (\n <>\n \n {_parkName}\n \n \n \n \n \n \n \n );\n};\n\nexport default ParkTitleAndGallery;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Container } from 'react-bootstrap';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { parkId, processedResults } from '../../redux/park/selectors';\nimport { duration } from '../../redux/search/form/selectors';\nimport { createBooking } from '../../redux/booking/booking/actions';\nimport DealOfTheWeekBanner from '../../components/ParkPage/DealOfTheWeekBanner/DealOfTheWeekBanner';\nimport ParkInformation from './ParkInformation';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport ToolsModal from '../../components/ParkPage/ToolsModal';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithOperators from '../../components/HOC/WithOperators';\nimport WithParkDetails from '../../components/HOC/WithParkDetails';\nimport WithParkSelected from '../../components/ParkPage/WithParkSelected';\n//import WithPartyDetailsViaModal from '../../components/ParkPage/WithPartyDetailsViaModal';\n//import WithLoginViaModal from '../../components/HOC/WithLoginViaModal';\nimport WithRegions from '../../components/HOC/WithRegions';\nimport t from '../../../text';\nimport ParkTitleAndGallery from './ParkTitleAndGallery';\n\nfunction ParkPage(props) {\n const dispatch = useDispatch();\n const history = useHistory();\n const location = useLocation();\n const { channelId, regionId } = useParams();\n const _duration = useSelector(duration);\n const _parkId = useSelector(parkId);\n const _processedResults = useSelector(processedResults);\n const isBoat = channelId === 'boats';\n const searchResult = /(park-result|boat-result|deal-of-the-week|park-from-search)/.test(location.pathname);\n const handleCreateBooking = (data) => {\n createBooking(\n dispatch,\n channelId,\n _parkId,\n data.unit.unitId,\n data.unit.unitType,\n data.unit.unitPrice,\n _processedResults.selectedDate?.date,\n _duration,\n data.party,\n );\n history.push('/booking', { prevPath: window.location.pathname });\n };\n\n const parkInfoSection = useRef(null);\n const scrollToParkInfo = () => {\n window.scrollTo({top: parkInfoSection.current.getBoundingClientRect().top + window.pageYOffset - 88, behavior: \"smooth\"});\n };\n\n return (\n <>\n \n \n \n\n \n \n \n \n \n {props.dealOfTheWeek && }\n \n {/* OLD METHOD\n \n \n \n \n \n */}\n \n \n \n \n \n \n\n \n \n );\n}\n\nParkPage.propTypes = {\n dealOfTheWeek: PropTypes.bool,\n};\n\nexport default ParkPage;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { startSearch } from '../../redux/search/form/actions';\nimport { cancelGetResults } from '../../redux/search/results/actions';\nimport { params as newParams, requestParams } from '../../redux/search/form/selectors';\nimport { isSearchRequestPending } from '../../redux/search/results/selectors/data';\nimport { params as oldParams, pendingParams as oldPendingParams } from '../../redux/search/results/selectors/selectors';\n\nimport { datesAreEqual } from '../../utils/date';\n\nexport const WithAutoSearch = (props) => {\n const dispatch = useDispatch();\n\n const _isSearchRequestPending = useSelector(isSearchRequestPending);\n const _oldParams = useSelector(oldParams);\n const _oldPendingParams = useSelector(oldPendingParams);\n const _newParams = useSelector(newParams);\n const _newRequestParams = useSelector(requestParams);\n\n const autoSearchNeeded = () => {\n const fields = ['channelId', 'regionId', 'arrivalDate', 'duration', 'adults', 'children', 'under5s'];\n const params = _isSearchRequestPending ? _oldPendingParams : _oldParams;\n\n let allFieldsPresent = true;\n fields.forEach((field) => {\n if (typeof _newParams[field] === 'undefined') allFieldsPresent = false;\n });\n\n if (allFieldsPresent) {\n return (\n params.channelId !== _newParams.channelId ||\n params.regionId !== _newParams.regionId ||\n !datesAreEqual(params.arrivalDate, _newParams.arrivalDate) ||\n params.duration !== _newParams.duration ||\n params.adults !== _newParams.adults ||\n params.children !== _newParams.children ||\n params.under5s !== _newParams.under5s ||\n (props.parkId && params.parkId !== props.parkId)\n );\n }\n\n return false;\n };\n\n useEffect(() => {\n if (autoSearchNeeded()) {\n cancelGetResults();\n startSearch(dispatch, _newParams, _newRequestParams, props.parkId);\n }\n }, []);\n\n return props.children;\n};\n\nWithAutoSearch.propTypes = {\n parkId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithAutoSearch;\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport ParkPage from './HolidayPark/ParkPage';\nimport WithAutoSearch from '../components/SearchResults/WithAutoSearch';\nimport WithPartyMembersModal from '../components/SearchResults/WithPartyMembersModal';\nimport WithSearchResults from '../components/SearchResults/WithSearchResults';\nimport WithSearchResultsLoadingStates from '../components/SearchResults/WithSearchResultsLoadingStates';\nimport WithUpdatedSearchParams from '../components/HOC/WithUpdatedSearchParams';\n\nimport t from '../../text';\n\nconst ParkFromSearch = () => {\n const { channelId, regionId, parkId } = useParams();\n\n return (\n <>\n \n {t('dotw.pageTitle')}\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ParkFromSearch;\n","import { createSelector } from 'reselect';\n\nimport { CREATE_BOOKING, GET_DEPOSIT, SET_DISCOUNT_CODE } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\nimport { operators } from '../../data/operators/selectors';\nimport { regions } from '../../data/regions/selectors';\nimport { parkDetails } from '../../data/park/details/selectors';\nimport { extraData, unitTypes } from '../../data/unitTypes/selectors';\n\nimport { getOperatorById } from '../../data/operators/utils';\nimport { getRegionById } from '../../data/regions/utils';\nimport { getParkDetailsById } from '../../data/park/details/utils';\nimport { getAllUnitTypeDataById } from '../../data/unitTypes/utils';\n\nexport const pendingParams = (state) => state.booking.booking.pendingParams;\nexport const type = (state) => state.booking.booking.type;\nexport const channelId = (state) => state.booking.booking.channelId;\nexport const parkId = (state) => state.booking.booking.parkId;\nexport const unitId = (state) => state.booking.booking.unitId;\nexport const unitTypeId = (state) => state.booking.booking.unitTypeId;\nexport const unitPrice = (state) => state.booking.booking.unitPrice; // new bookings only!\nexport const totalCost = (state) => state.booking.booking.totalCost; // existing bookings only!\nexport const amountPaid = (state) => state.booking.booking.amountPaid; // existing bookings only!\nexport const discountApplied = (state) => state.booking.booking.discountApplied;\nexport const discountCode = (state) => state.booking.booking.discountCode;\nexport const discountValue = (state) => state.booking.booking.discountValue;\nexport const arrivalDate = (state) => state.booking.booking.arrivalDate;\nexport const duration = (state) => state.booking.booking.duration;\nexport const bookingId = (state) => state.booking.booking.bookingId;\nexport const deposit = (state) => state.booking.booking.deposit;\nexport const compulsoryDepositSelector = (state) => state.booking.booking.compulsoryDeposit;\nexport const depositText = (state) => state.booking.booking.depositText;\nexport const dueDate = (state) => state.booking.booking.dueDate;\nexport const confirmationId = (state) => state.booking.booking.confirmationId;\nexport const message = (state) => state.booking.booking.message;\n\nexport const [bookingIsFetching, bookingHasError, bookingErrorData] = getRequestStatus(CREATE_BOOKING);\nexport const bookingIsLoaded = (state) => typeof bookingId(state) !== 'undefined';\n\nexport const [depositIsFetching, depositHasError, depositErrorData] = getRequestStatus(GET_DEPOSIT);\nexport const depositIsLoaded = (state) => typeof deposit(state) !== 'undefined';\n\nexport const stepsCompleted = (state) => state.booking.booking.stepsCompleted;\n\nexport const park = createSelector(parkDetails, parkId, (_parkDetails, _parkId) => {\n return getParkDetailsById(_parkDetails, _parkId);\n});\n\nexport const region = createSelector(regions, park, (_regions, _park) => {\n return getRegionById(_regions, _park.regn);\n});\n\nexport const operator = createSelector(operators, park, (_operators, _park) => {\n return _park ? getOperatorById(_operators, _park.opId) : undefined;\n});\n\nexport const unit = createSelector(extraData, unitTypes, unitTypeId, (_extraData, _unitTypes, _unitTypeId) => {\n return getAllUnitTypeDataById(_extraData, _unitTypes, _unitTypeId);\n});\n\nexport const unitPriceNum = createSelector(unitPrice, (_unitPrice) => {\n return typeof _unitPrice !== 'undefined' ? parseFloat(_unitPrice) : undefined;\n});\n\nexport const depositAvailable = (state) => typeof deposit(state) === 'number';\n\nexport const depositIsCompulsorySelector = (state) => typeof compulsoryDepositSelector(state) !== 'undefined';\n\nexport const [settingDiscount, settingDiscountFailed, setDiscountError] = getRequestStatus(SET_DISCOUNT_CODE);","import { GET_EXTRAS, SET_EXTRAS } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const [isFetching, hasErrorFetching, errorDataFetching] = getRequestStatus(GET_EXTRAS);\nexport const [isSaving, hasErrorSaving, errorDataSaving] = getRequestStatus(SET_EXTRAS);\n\nexport const extras = (state) => state.booking.extras.extras;\nexport const showDiscountBox = (state) => state.booking.extras.showDiscountBox === \"true\";\n","import { extras as extrasData } from '../extras/selectors';\nimport {\n amountPaid,\n deposit,\n depositAvailable,\n totalCost as existingTotalCost,\n type,\n unitPrice,\n discountValue\n} from '../booking/selectors';\nimport { getRequestStatus } from '../../requests/selectors';\n\nimport { SET_PARTY_DETAILS } from './action-types';\n\nexport const details = (state) => state.booking.form.details;\nexport const offers = (state) => state.booking.form.offers;\nexport const party = (state) => state.booking.form.party;\n\n// Extras\nexport const extras = (state) => state.booking.form.extras;\nexport const extrasWithValues = (state) => {\n return extrasData(state)?.map((extraData) => {\n const value = extras(state)[extraData.code] || 0;\n const totalCost = parseFloat(extraData.cost) * value;\n const totalDepcost = parseFloat(extraData.depcost) * value;\n return { ...extraData, value, totalCost, totalDepcost };\n });\n};\nexport const selectedExtrasWithValues = (state) => {\n return extrasWithValues(state)?.filter((extra) => extra.value > 0);\n};\nexport const selectedExtrasDepositTotal = (state) => {\n return extrasWithValues(state).reduce((total, extra) => {\n return extra.totalDepcost + total;\n }, 0);\n};\nexport const selectedExtrasTotal = (state) => {\n return selectedExtrasWithValues(state)?.reduce((total, extra) => {\n return extra.totalCost + total;\n }, 0);\n};\n\n// Party\nexport const partyAreYouGoing = (state) => state.booking.form.party.areYouGoing;\nexport const partyValues = (state) => state.booking.form.party.values;\nexport const [partyIsSaving, partyHasSaveError, partySaveError] = getRequestStatus(SET_PARTY_DETAILS);\n\n// Payment\nexport const payment = (state) => state.booking.form.payment;\nexport const paymentOption = (state) => state.booking.form.payment.paymentOption;\n\n// Total cost\nexport const remainingBalance = (state) => {\n const _totalCost = +(existingTotalCost(state) || '0');\n const _amountPaid = +(amountPaid(state) || '0');\n return _totalCost - _amountPaid;\n};\n\nexport const totalCostDeposit = (state) => {\n const _deposit = deposit(state) || 0;\n return parseFloat(_deposit) + selectedExtrasDepositTotal(state);\n};\n\nexport const totalCostFull = (state) => {\n const _unitPrice = unitPrice(state) || 0;\n const _discountValue = discountValue(state) || 0;\n return parseFloat(_unitPrice - _discountValue) + selectedExtrasTotal(state);\n};\n\nexport const totalCost = (state) => {\n const _depositAvailable = depositAvailable(state);\n const _paymentOption = paymentOption(state);\n\n return _depositAvailable && _paymentOption === 'deposit' ? totalCostDeposit(state) : totalCostFull(state);\n};\n\nexport const totalCostRemaining = (state) => {\n const _bookingType = type(state);\n if (_bookingType === 'new') {\n return totalCostFull(state) - totalCost(state);\n }\n return remainingBalance(state);\n};\n\nexport const paymentAmount = (state) => {\n const _bookingType = type(state);\n if (_bookingType === 'new') {\n return paymentOption(state) === 'full' ? totalCostFull(state) : totalCostDeposit(state);\n }\n return remainingBalance(state);\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport {\n arrivalDate,\n confirmationId,\n duration,\n operator,\n park,\n region,\n unit,\n} from '../../redux/booking/booking/selectors';\nimport { selectedExtrasWithValues, totalCostFull } from '../../redux/booking/form/selectors';\nimport { adults, children, under5s } from '../../redux/search/form/selectors';\n\nimport { dateToDDMMYYYY, getDepartureDate } from '../../utils/date';\nimport { stripProtocol, to2dp } from '../../utils/string';\nimport { config } from '../../../config';\n\nimport RedEye from './RedEye';\n\nexport const RedEyeBookingConfirmationTag = () => {\n const _adults = useSelector(adults);\n const _arrivalDate = useSelector(arrivalDate);\n const _children = useSelector(children);\n const _confirmationId = useSelector(confirmationId);\n const _duration = useSelector(duration);\n const _operator = useSelector(operator);\n const _park = useSelector(park);\n const _region = useSelector(region);\n const _selectedExtras = useSelector(selectedExtrasWithValues);\n const _totalCostFull = useSelector(totalCostFull);\n const _under5s = useSelector(under5s);\n const _unit = useSelector(unit);\n\n const _insuranceExtra = _selectedExtras.find((extra) => {\n return extra.name.toLowerCase().search('insurance') !== -1; // There isn't a better way AFAIK :(\n });\n\n return (\n \n );\n};\n\nexport default RedEyeBookingConfirmationTag;\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\n\nimport CardPanel from '../CardPanel';\n\nimport { getShortDateFormat } from '../../utils/date';\nimport t from '../../../text';\n\nexport const HolidaySummary = (props) => {\n const arrivalDate = props.arrivalDate ? new Date(props.arrivalDate) : undefined;\n const departureDate = props.arrivalDate ? new Date(props.arrivalDate) : undefined;\n const isNewBooking = props.bookingType === 'new';\n\n if (departureDate) {\n departureDate.setDate(departureDate.getDate() + parseInt(props.duration, 10));\n }\n\n return (\n \n {props.confirmation && (\n <>\n

{t('booking.summary.confirmationOf', isNewBooking)}

\n \n \n )}\n

\n {props.park.name}\n

\n

\n \n {props.park.sAdd}\n

\n
\n

\n {props.channel !== \"ukcottages\" && props.unit.unitDesc}\n {typeof props.unit.unitPrice !== 'undefined' && (\n <>\n
£{parseFloat(props.unit.unitPrice).toFixed(2)}\n \n )}\n

\n
\n {arrivalDate && (\n

\n {t('booking.summary.checkInAt', getShortDateFormat(arrivalDate))}\n

\n )}\n {departureDate && (\n

\n {t('booking.summary.checkOutAt', getShortDateFormat(departureDate))}\n

\n )}\n

{t('booking.summary.xNightStay', props.duration)}

\n
\n );\n};\n\nHolidaySummary.defaultProps = {\n confirmation: false,\n title: 'Your Holiday Summary',\n park: {},\n operator: {},\n unit: {},\n};\n\nHolidaySummary.propTypes = {\n confirmation: PropTypes.bool,\n title: PropTypes.string,\n park: PropTypes.object,\n operator: PropTypes.object,\n unit: PropTypes.object,\n arrivalDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n duration: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default memo(HolidaySummary);\n","import React, { memo } from 'react';\nimport { Card } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport { getDayMonthYearFromDate, DDMMYYYYToDate } from '../../utils/date';\nimport t from '../../../text';\n\nexport const PriceBreakdown = ({\n className,\n extras,\n title,\n total,\n totalRemaining,\n unitPrice,\n useDeposit,\n dueDate,\n channel,\n discValue,\n}) => {\n const isDiscounted = discValue > 0 ? true : false;\n return (\n \n {title}\n \n

{t('booking.breakdown.introText')}

\n \n \n \n \n \n \n {extras.map((extra, i) => {\n return (\n \n \n \n \n )\n })}\n {isDiscounted && (\n \n \n \n \n )}\n \n
{t('booking.breakdown.accommodationPrice')} £{unitPrice.toFixed(2)}
\n \n {extra.name}\n {extra.value > 1 && ` (${extra.value})`}\n \n \n {extra.totalCost > 0 ? `£${extra.totalCost.toFixed(2)}` : ''}\n
\n Discount Amount-\n \n £{discValue.toFixed(2)}\n
\n
\n \n

\n {t('booking.breakdown.amountToPayToday')}\n

\n

\n £{total.toFixed(2)}\n

\n {useDeposit && (\n

\n {t(\n 'booking.breakdown.outstandingAmount',\n getDayMonthYearFromDate(DDMMYYYYToDate(dueDate)),\n totalRemaining.toFixed(2),\n )}\n

\n )}\n
\n
\n );\n};\n\nPriceBreakdown.defaultProps = {\n extras: [],\n title: t('booking.breakdown.currentPriceBreakdown'),\n total: 0,\n totalRemaining: 0,\n unitPrice: 0,\n useDeposit: false,\n};\n\nPriceBreakdown.propTypes = {\n className: PropTypes.string,\n deposit: PropTypes.number,\n dueDate: PropTypes.string,\n extras: PropTypes.array,\n title: PropTypes.string,\n total: PropTypes.number,\n totalRemaining: PropTypes.number,\n unitPrice: PropTypes.number,\n useDeposit: PropTypes.bool,\n};\n\nexport default memo(PriceBreakdown);\n","import React, { memo } from 'react';\nimport { Card } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport t from '../../../text';\n\nexport const PriceBreakdown = ({ className, title, amountPaid, totalCost, remainingBalance }) => (\n \n {title}\n \n
    \n
  • \n {t('booking.breakdown.totalCost')} \n £{parseFloat(totalCost).toFixed(2)}\n
  • \n
  • \n {t('booking.breakdown.amountPaid')} \n £{parseFloat(amountPaid).toFixed(2)}\n
  • \n
\n
\n \n

{t('booking.breakdown.amountToPayToday')}

\n

£{parseFloat(remainingBalance).toFixed(2)}

\n
\n
\n);\n\nPriceBreakdown.defaultProps = {\n amountPaid: 0,\n remainingBalance: 0,\n title: t('booking.breakdown.priceBreakdown'),\n totalCost: 0,\n};\n\nPriceBreakdown.propTypes = {\n amountPaid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n className: PropTypes.string,\n remainingBalance: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n title: PropTypes.string,\n totalCost: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default memo(PriceBreakdown);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Row, Col } from 'react-bootstrap';\n\nimport { useSelector } from 'react-redux';\nimport {\n amountPaid,\n arrivalDate,\n channelId,\n discountValue,\n depositAvailable,\n dueDate,\n duration,\n park,\n operator,\n totalCost as existingTotalCost,\n type,\n unit,\n unitPriceNum,\n} from '../../redux/booking/booking/selectors';\nimport { paymentOption } from '../../redux/booking/form/selectors';\nimport {\n remainingBalance,\n selectedExtrasWithValues,\n totalCost,\n totalCostRemaining,\n} from '../../redux/booking/form/selectors';\n\nimport HolidaySummary from './HolidaySummary';\nimport PriceBreakdown from './PriceBreakdown';\nimport RemainingBalanceBreakdown from './RemainingBalanceBreakdown';\nimport t from '../../../text';\nimport payment from '../../assets/images/payment-methods.png';\n\nexport const WithHolidaySummary = (props) => {\n const booking = {\n park: useSelector(park),\n operator: useSelector(operator),\n unit: useSelector(unit),\n arrivalDate: useSelector(arrivalDate),\n duration: useSelector(duration),\n channelId: useSelector(channelId),\n };\n\n const _depositAvailble = useSelector(depositAvailable);\n const _dueDate = useSelector(dueDate);\n const _paymentOption = useSelector(paymentOption);\n const _unitPrice = useSelector(unitPriceNum);\n const _useDeposit = _depositAvailble && _paymentOption === 'deposit';\n const _selectedExtrasWithValues = useSelector(selectedExtrasWithValues);\n const _totalCost = useSelector(totalCost);\n const _totalCostRemaining = useSelector(totalCostRemaining);\n const _type = useSelector(type);\n const _discountValue = useSelector(discountValue);\n\n const _amountPaid = useSelector(amountPaid);\n const _remainingBalance = useSelector(remainingBalance);\n const _existingTotalCost = useSelector(existingTotalCost);\n\n return (\n \n \n \n {props.children}\n \n \n \n {!props.confirmation && (\n
\n {_type === 'new' ? (\n \n ) : (\n \n )}\n\n {props.onNext && (\n <>\n {props.nextButtonTerms &&

{props.nextButtonTerms}

}\n \n {props.isSaving ? t('global.pleaseWait') : props.nextButtonText}\n \n \n )}\n {!props.payment && \"Secure} \n
\n )}\n \n
\n
\n );\n};\n\nWithHolidaySummary.defaultProps = {\n confirmation: false,\n disableNext: false,\n isSaving: false,\n nextButtonText: t('buttons.continue'),\n};\n\nWithHolidaySummary.propTypes = {\n confirmation: PropTypes.bool,\n disableNext: PropTypes.bool,\n isSaving: PropTypes.bool,\n onNext: PropTypes.func,\n nextButtonText: PropTypes.string,\n};\n\nexport default WithHolidaySummary;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport CardPanel from '../../../components/CardPanel';\nimport RedEyeBookingConfirmationTag from '../../../components/RedEye/RedEyeBookingConfirmationTag';\nimport WithHolidaySummary from '../../../components/Booking/WithHolidaySummary';\nimport { totalCostFull } from '../../../redux/booking/form/selectors';\nimport t from '../../../../text';\nimport { config } from '../../../../config';\nimport { park, operator } from '../../../redux/booking/booking/selectors';\n\nexport const Confirmation = ({ bookingType, confirmationId }) => {\n const isNewBooking = bookingType === 'new';\n const _totalCostFull = useSelector(totalCostFull);\n\n const booking = {\n park: useSelector(park),\n operator: useSelector(operator)\n };\n\n if (confirmationId) {\n if (config['awin.enable']) {\n const triggerAWIN = () => {\n if (!window.AWIN) {\n console.info('No AWIN on window yet, trying again...');\n return;\n } else {\n console.info('Running AWIN.Tracking.Sale...');\n clearInterval(CheckForAWIN);\n window.AWIN.Tracking.Sale = {};\n window.AWIN.Tracking.Sale.amount = _totalCostFull;\n window.AWIN.Tracking.Sale.channel = 'aw';\n window.AWIN.Tracking.Sale.orderRef = confirmationId;\n window.AWIN.Tracking.Sale.parts = `default:${_totalCostFull}`;\n window.AWIN.Tracking.Sale.currency = 'GBP';\n window.AWIN.Tracking.Sale.voucher = '';\n window.AWIN.Tracking.Sale.test = '0';\n window.AWIN.Tracking.run();\n }\n };\n let CheckForAWIN = setInterval(triggerAWIN, 99);\n }\n\n return (\n <>\n \n \n
\n

{t('booking.confirmation.youAreGoingTo', booking.operator.name, booking.park.name)}

\n

\n {t('booking.confirmation.yourBookingReferenceIs')} {confirmationId}\n

\n

{t('booking.confirmation.planAhead')}

\n

{t('booking.confirmation.planAheadText')}

\n \n \n \n {t('booking.confirmation.bookAttractions')}\n \n \n \n \n {t('booking.confirmation.bookAgain')}\n \n \n \n \n {t('booking.confirmation.visitMyAccount')}\n \n \n \n\n
\n\n {/*
\n

Rate your experience

\n

How was your booking experience today? Please rate your experience below and send us any comments you may have.

\n Send a review\n
*/}\n\n
\n
\n\n {isNewBooking && }\n\n {config['awin.enable'] && (\n \n )}\n \n );\n } else {\n return (\n <>\n \n \n \n

{t('booking.confirmation.noBookingConfirmation')}

\n \n
\n
\n \n );\n }\n};\n\nexport default Confirmation;\n","import { connect } from 'react-redux';\nimport Confirmation from './Confirmation';\n\nimport { confirmationId, type } from '../../../redux/booking/booking/selectors';\n\nconst mapStateToProps = (state) => ({\n bookingType: type(state),\n confirmationId: confirmationId(state),\n});\n\nconst mapDispatchToProps = () => ({});\n\nexport const ConfirmationConnected = connect(mapStateToProps, mapDispatchToProps)(Confirmation);\nexport default ConfirmationConnected;\n","export const BOOKING_STEPS = {\n EXTRAS: 'extras',\n DETAILS: 'details',\n PAYMENT: 'payment',\n PAYMENT_ACTION: 'payment-action',\n CONFIRMATION: 'confirmation'\n};\n","import { useSelector } from 'react-redux';\nimport { channelId, stepsCompleted, type } from '../../redux/booking/booking/selectors';\nimport { BOOKING_STEPS } from '../../Constants';\n\nconst standardSequence = [\n BOOKING_STEPS.EXTRAS,\n BOOKING_STEPS.DETAILS,\n BOOKING_STEPS.PAYMENT,\n BOOKING_STEPS.PAYMENT_ACTION,\n];\nconst euroSequence = [BOOKING_STEPS.EXTRAS, BOOKING_STEPS.DETAILS, BOOKING_STEPS.PAYMENT, BOOKING_STEPS.PAYMENT_ACTION];\nconst existingBookingSequence = [BOOKING_STEPS.PAYMENT, BOOKING_STEPS.PAYMENT_ACTION];\n\nexport const useNextStep = (current = false) => {\n const _channelId = useSelector(channelId);\n const _stepsCompleted = useSelector(stepsCompleted);\n const _bookingType = useSelector(type);\n let sequence;\n\n if (_bookingType === 'existing') {\n sequence = existingBookingSequence;\n } else {\n sequence = _channelId === 'eurocaravan' ? euroSequence : standardSequence;\n }\n\n return sequence.filter((step) => !_stepsCompleted.includes(step))[current ? 0 : 1];\n};\n\nexport default useNextStep;\n","import React from 'react';\nimport { Form, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport InputRadioButton from '../../../FormElements/InputRadioButton';\nimport { getDayMonthYearFromDate, DDMMYYYYToDate } from '../../../../utils/date';\nimport t from '../../../../../text';\n\nexport const PaymentOptionsForm = (props) => (\n
\n {props.depositIsCompulsory ? (\n <>\n

{props.compulsoryDepositText}

\n \n \n
\n \n
\n
\n
\n \n ) : (\n <>\n {props.depositAvailable ? (\n <>\n

{t('forms.paymentOptions.introText')}

\n \n \n
\n \n
\n
\n \n
\n
\n
\n {props.selectedOption === 'deposit' && (\n

\n {t(\n 'forms.paymentOptions.outstandingAmountToPay',\n getDayMonthYearFromDate(DDMMYYYYToDate(props.dueDate)),\n props.totalCostRemaining.toFixed(2),\n )}\n

\n )}\n \n ) : (\n

{props.depositText}

\n )}\n \n )}\n
\n);\n\nPaymentOptionsForm.defaultProps = {\n deposit: 0,\n depositIsCompulsory: false,\n compulsoryDepositText:\n 'You will pay a deposit now and the balance will be payable direct to the park operator before the holiday date.',\n depositAvailable: false,\n depositText: t('forms.paymentOptions.depositUnavailable'),\n totalCostDeposit: 0,\n totalCostFull: 0,\n totalCostRemaining: 0,\n};\n\nPaymentOptionsForm.propTypes = {\n deposit: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n depositAvailable: PropTypes.bool,\n depositIsCompulsory: PropTypes.number,\n compulsoryDepositText: PropTypes.string,\n depositText: PropTypes.string,\n totalCostDeposit: PropTypes.number,\n totalCostFull: PropTypes.number,\n totalCostRemaining: PropTypes.number,\n selectedOption: PropTypes.oneOf(['full', 'deposit']),\n onChange: PropTypes.func,\n};\n\nexport default PaymentOptionsForm;\n","import {\n CHANGE_DETAIL,\n CHANGE_PARTY_DETAIL,\n SELECT_ARE_YOU_GOING,\n SELECT_EXTRA,\n SELECT_OFFERS_OPTION,\n SELECT_PAYMENT_OPTION,\n SET_PARTY_DETAILS,\n} from './action-types';\nimport { callbackApiRequest } from '../../apiRequest';\nimport selfCancellingAction from '../../selfCancellingAction';\nimport { urls } from '../../../../config';\n\nexport const changeDetail = (dispatch, key, value) => {\n dispatch({ type: CHANGE_DETAIL, payload: { key, value } });\n};\n\nexport const changePartyDetail = (dispatch, key, value) => {\n dispatch({ type: CHANGE_PARTY_DETAIL, payload: { key, value } });\n};\n\nexport const selectAreYouGoing = (dispatch, key, value, user = {}) => {\n dispatch({ type: SELECT_ARE_YOU_GOING, payload: { value, user } });\n};\n\nexport const selectExtra = (dispatch, key, value) => {\n dispatch({ type: SELECT_EXTRA, payload: { key, value } });\n};\n\nexport const selectOffersOption = (dispatch, key, value) => {\n dispatch({ type: SELECT_OFFERS_OPTION, payload: { key, value } });\n};\n\nexport const selectPaymentOption = (dispatch, key, value) => {\n dispatch({ type: SELECT_PAYMENT_OPTION, payload: value });\n};\n\nexport const [setPartyDetails, cancelSetPartyDetails] = selfCancellingAction((dispatch, bookId, size, details) => {\n return callbackApiRequest(\n dispatch,\n SET_PARTY_DETAILS,\n urls.bookingSetPartyDetails,\n { bookId, 'party-size': `${size}`, ...details },\n undefined,\n 'post',\n );\n});\n","import { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nexport const useReduxFormState = (selector, updateAction, validator, initialErrors = {}) => {\n const dispatch = useDispatch();\n const [errors, setErrors] = useState({ ...initialErrors });\n const values = useSelector(selector);\n\n function isValid() {\n const _errors = typeof validator === 'function' ? validator(values) : {};\n return Object.keys(_errors).length === 0;\n }\n\n function onChange(key, value) {\n if (typeof updateAction === 'function') {\n updateAction(dispatch, key, value);\n }\n }\n\n function validate() {\n const _errors = typeof validator === 'function' ? validator(values) : {};\n setErrors(_errors);\n return _errors;\n }\n\n return {\n values,\n onChange,\n validate,\n isValid,\n errors,\n };\n};\n\nexport default useReduxFormState;\n","import { useSelector } from 'react-redux';\nimport { selectPaymentOption } from '../../../../redux/booking/form/actions';\nimport { deposit, depositAvailable, depositIsCompulsorySelector, depositText, dueDate } from '../../../../redux/booking/booking/selectors';\nimport {\n totalCostDeposit,\n totalCostFull,\n totalCostRemaining,\n paymentOption,\n} from '../../../../redux/booking/form/selectors';\n\nimport useReduxFormState from '../../../../hooks/useReduxFormState';\n\nexport const usePaymentOptionsFormActions = () => {};\n\nexport const usePaymentOptionsFormState = () => ({\n ...useReduxFormState(paymentOption, selectPaymentOption),\n deposit: useSelector(deposit),\n depositAvailable: useSelector(depositAvailable),\n depositIsCompulsory: useSelector(depositIsCompulsorySelector),\n depositText: useSelector(depositText),\n dueDate: useSelector(dueDate),\n totalCostDeposit: useSelector(totalCostDeposit),\n totalCostFull: useSelector(totalCostFull),\n totalCostRemaining: useSelector(totalCostRemaining),\n});\n\nexport default usePaymentOptionsFormState;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { setDiscount } from '../../redux/booking/booking/actions';\nimport { discountCode, settingDiscount, settingDiscountFailed, setDiscountError } from '../../redux/booking/booking/selectors';\n\nimport useLocalFormState from '../../hooks/useLocalFormState';\nimport { validateField } from './DiscountCode';\n\nexport const useDiscountCodeActions = () => {\n const dispatch = useDispatch();\n return {\n setDiscount: (bookingId, code) => setDiscount(dispatch, bookingId, code)\n };\n};\n\nexport const useDiscountCodeState = () => ({\n ...useLocalFormState(validateField, discountCode),\n settingDiscount: useSelector(settingDiscount),\n settingDiscountFailed: useSelector(settingDiscountFailed),\n setDiscountError: useSelector(setDiscountError)\n});\n\nexport default useDiscountCodeState;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Alert, Button, Col, Row } from 'react-bootstrap';\nimport CardPanel from '../CardPanel';\nimport { storeDiscountCode, storeDiscountValue } from '../../redux/booking/booking/actions';\nimport { discountCode, discountApplied } from '../../redux/booking/booking/selectors';\nimport { useDiscountCodeActions, useDiscountCodeState } from './useDiscountCode';\nimport { required } from '../../utils/validation';\nimport t from '../../../text';\nimport TextInput from '../FormElements/TextInput';\n\nexport const validateField = (values) => {\n const errors = {};\n if (!required(values.discountCode)) {\n errors.discountCode = t('forms.booking.blankDiscountCode');\n }\n return errors;\n};\n\nfunction DiscountCode(props) {\n const [showDiscountCodeSuccess, setShowDiscountCodeSuccess] = useState(false);\n const [discountAppliedState, setDiscountAppliedState] = useState(false);\n const { setDiscount } = useDiscountCodeActions();\n const { setDiscountError, isValid, validate, values, errors, onChange } = useDiscountCodeState();\n const reduxDiscountCode = useSelector(discountCode);\n const _discountApplied = useSelector(discountApplied);\n const [queryDiscountCode, setQueryDiscountCode] = useState(values.discountCode);\n const dispatch = useDispatch();\n\n const checkApplyButtton = () => {\n const { discountCode: defaultDiscountCode } = values;\n const changed = reduxDiscountCode !== defaultDiscountCode;\n return changed ? false : true;\n }\n\n const handleApplyDiscountCode = (code) => {\n validate();\n if (isValid()) {\n storeDiscountCode(dispatch, code);\n setDiscount(props.bookID, code)\n .request.then((resp) => {\n if (resp.payload.response.data.data !== undefined) {\n const discountValue = resp.payload.response.data.data.discountValue || 0;\n if (!_discountApplied) storeDiscountValue(dispatch, discountValue);\n }\n setShowDiscountCodeSuccess(true);\n })\n .catch(() => {\n // Do nothing upon error, we'll react to error flags in redux state\n });\n }\n };\n\n useEffect(() => {\n setQueryDiscountCode(reduxDiscountCode);\n }, [reduxDiscountCode]);\n\n useEffect(() => {\n setDiscountAppliedState(_discountApplied)\n }, []);\n\n return (\n \n \n \n {discountAppliedState && (\n Your discount has been applied.\n )}\n \n \n {\n onChange(e.target.name, e.target.value);\n setQueryDiscountCode(e.target.value)\n }}\n validationMessage={errors.discountCode}\n />\n \n \n { handleApplyDiscountCode(values.discountCode) }}\n disabled={_discountApplied || checkApplyButtton()}\n >\n Apply Code\n \n \n \n {setDiscountError && checkApplyButtton() && Array.isArray(setDiscountError.errors) && (\n \n {setDiscountError.errors.map((error) => (\n

\n {`${error.message}${error.additional ? ' (' + error.additional + ')' : ''}`}\n

\n ))}\n
\n )}\n {showDiscountCodeSuccess && (\n \n \n \n \n \n Discount code{' '}\n \n {values.discountCode}\n {' '}\n applied.\n \n \n \n \n \n )}\n
\n );\n}\n\nexport default DiscountCode;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport CardPanel from '../../../components/CardPanel';\nimport t from '../../../../text';\nimport WithHolidaySummary from '../../../components/Booking/WithHolidaySummary';\nimport WithLoadingStates from '../../../components/Booking/WithLoadingStates';\nimport useNextStep from '../../../components/Booking/useNextStep';\n\nimport PaymentOptionsForm from '../../../components/Forms/Booking/PaymentOptionsForm/PaymentOptionsForm';\nimport { usePaymentOptionsFormState } from '../../../components/Forms/Booking/PaymentOptionsForm/usePaymentOptionsForm';\n\nimport ContactPreferencesInputs from '../../../components/Forms/User/ContactPreferencesForm/ContactPreferencesInputs';\nimport {\n useContactPreferencesFormActions,\n useContactPreferencesFormState,\n} from '../../../components/Forms/User/ContactPreferencesForm/useContactPreferencesForm';\n\nimport { useLoginFormState } from '../../../components/Forms/User/LoginForm/useLoginForm';\nimport { loggedIn, selectedContactPreferencesInBooking } from '../../../redux/user/selectors';\n\nimport { config } from '../../../../config';\nimport { channelId } from '../../../redux/booking/booking/selectors';\n\nimport LoginFormView from '../../../components/Login/views/LoginFormView';\nimport CreateUserFormView from '../../../components/Login/views/CreateUserFormView';\n\nimport DiscountCode from '../../../components/Booking/DiscountCode';\nimport { useDiscountCodeState } from '../../../components/Booking/useDiscountCode';\nimport { showDiscountBox } from '../../../redux/booking/extras/selectors';\n\nexport const Details = ({ history, stepCompleted, bookingId }) => {\n const _channelId = useSelector(channelId);\n const nextStep = useNextStep();\n const payment = usePaymentOptionsFormState();\n const { loggingIn, loginError } = useLoginFormState();\n const _loggedIn = useSelector(loggedIn);\n const _selectedContactPreferencesInBooking = useSelector(selectedContactPreferencesInBooking);\n const { setDiscountError } = useDiscountCodeState();\n const _showDiscountBox = useSelector(showDiscountBox);\n const preferences = useContactPreferencesFormState();\n const { updateUser } = useContactPreferencesFormActions();\n const [emailOptedOut] = useState(preferences.values.emailOpt === 'N');\n\n const handleNext = () => {\n if (_loggedIn) {\n preferences.validate();\n if (preferences.isValid()) {\n updateUser(preferences.values);\n stepCompleted();\n history.push(`/booking/${nextStep}`);\n }\n }\n };\n\n const nextButtonTerms = (buttonText) =>\n t('booking.booking.confirmTerms', buttonText, config['urls.termsAndConditions'], config['urls.privacyPolicy']);\n\n useEffect(() => {\n if (emailOptedOut && !_selectedContactPreferencesInBooking) {\n preferences.onChange({ emailOpt: null, smsOpt: null });\n }\n }, []);\n\n return (\n \n \n {!_loggedIn && (\n <>\n \n window.open('/login?forgot-password')} isBookingPage />\n \n \n \n \n \n )}\n {_loggedIn && (emailOptedOut || _selectedContactPreferencesInBooking) && (\n \n \n \n )}\n {_showDiscountBox && }\n \n \n \n \n \n );\n};\n\nexport default Details;\n","import { connect } from 'react-redux';\nimport Details from './Details';\n\nimport { stepCompleted } from '../../../redux/booking/booking/actions';\nimport { updateUser } from '../../../redux/user/actions';\n\nimport { BOOKING_STEPS } from '../../../Constants';\nimport { bookingId } from '../../../redux/booking/booking/selectors';\n\nconst mapStateToProps = (state) => ({\n bookingId: bookingId(state),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n stepCompleted: () => stepCompleted(dispatch, BOOKING_STEPS.DETAILS),\n updateUser: (detailsData, offersData) => updateUser(dispatch, { ...detailsData, ...offersData }),\n});\n\nexport const DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\nexport default DetailsConnected;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport InputCheckbox from '../../../FormElements/InputCheckbox';\nimport InputNumber from '../../../FormElements/InputNumber';\nimport CardPanel from '../../../CardPanel';\n\nexport const ExtrasFormOption = (props) => {\n const parsedCost = (cost) => {\n return parseFloat(cost).toFixed(2);\n }\n\n return (\n \n {props.values.map((extra, index) => (\n
\n {extra.desc &&
}\n \n {extra.type === 'boolean' ? (\n £${parsedCost(extra.cost)}`}\n ariaLabel={`${extra.name}: £${parsedCost(extra.cost)}`}\n checked={!!extra.value}\n onChange={(val) => props.onChange(extra.code, Number(val))}\n />\n ) : (\n <>\n

\n {extra.name} : {`${extra.code === 'extLUXPET' ? '' : `£${parsedCost(extra.cost)}`}`}\n

\n props.onChange(extra.code, val)}\n />\n \n )}\n
\n
\n ))\n }\n\n
\n );\n};\n\nExtrasFormOption.defaultProps = {};\n\nExtrasFormOption.propTypes = {\n className: PropTypes.string,\n onChange: PropTypes.func,\n type: PropTypes.string,\n min: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n max: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n code: PropTypes.string,\n name: PropTypes.string,\n cost: PropTypes.string,\n dep: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n desc: PropTypes.string,\n value: PropTypes.number,\n};\n\nexport default ExtrasFormOption;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport ExtrasFormOption from './ExtrasFormOption';\nimport t from '../../../../../text';\n\nconst sortExtras = (extras) => {\n const sortByOrder = (a, b) => {\n if (a.order < b.order) {\n return -1;\n }\n if (a.order > b.order) {\n return 1;\n }\n return 0;\n };\n\n return extras.sort(sortByOrder);\n}\n\nconst addOrdersToExtras = (extras) => {\n const groupOrders = new Map([\n [\"Insurance\", 1],\n [\"Pets\", 2],\n [\"Dining\", 3],\n [\"Early Check In\", 4],\n [\"Infant\", 5]\n ]);\n\n return extras.map(value => ({\n ...value,\n order: groupOrders.get(value.group) || 6\n }));\n}\n\nconst groupExtras = (extras) => {\n const groupBy = (array, key) => {\n return array.reduce((result, currentValue) => {\n (result[currentValue[key]] = result[currentValue[key]] || []).push(\n currentValue\n );\n return result;\n }, {});\n };\n\n return groupBy(extras, 'group');\n}\n\nexport const ExtrasForm = (props) => {\n const [groupedExtras, setGroupedExtras] = useState(undefined);\n\n useEffect(() => {\n const extrasWithOrders = addOrdersToExtras(props.extras);\n const sortedExtras = sortExtras(extrasWithOrders);\n setGroupedExtras(groupExtras(sortedExtras));\n }, [props.extras]);\n\n\n return (\n <>\n {props.loading ? (\n t('global.loading')\n ) : (\n <>\n

{t('forms.extras.introText')}

\n {groupedExtras && Object.keys(groupedExtras).map((key) => {\n const extras = groupedExtras[key];\n return (\n \n )\n })}\n \n )}\n \n )\n};\n\nExtrasForm.defaultProps = {\n loading: false,\n extras: {},\n};\n\nExtrasForm.propTypes = {\n loading: PropTypes.bool,\n extras: PropTypes.array,\n selectExtra: PropTypes.func,\n};\n\nexport default ExtrasForm;\n","import { apiRequest, callbackApiRequest } from '../../apiRequest';\nimport { GET_EXTRAS, SET_EXTRAS } from './action-types';\nimport selfCancellingAction from '../../selfCancellingAction';\nimport { urls } from '../../../../config';\n\nexport const [getExtras, cancelGetExtras] = selfCancellingAction((dispatch, bookingId) => {\n return apiRequest(dispatch, GET_EXTRAS, urls.bookingGetExtras, { bookId: bookingId });\n});\n\nexport const [setExtras, cancelSetExtras] = selfCancellingAction((dispatch, bookingId, extras, dCode, dApplied) => {\n let obj = {\n bookId: bookingId,\n ...extras,\n };\n if (!dApplied) obj.discountCode = dCode;\n return callbackApiRequest(dispatch, SET_EXTRAS, urls.bookingSetExtras, obj);\n});\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { getExtras, setExtras } from '../../../../redux/booking/extras/actions';\n\nimport { selectExtra } from '../../../../redux/booking/form/actions';\nimport { extrasWithValues } from '../../../../redux/booking/form/selectors';\nimport {\n isFetching,\n isSaving,\n hasErrorFetching,\n hasErrorSaving,\n errorDataSaving,\n} from '../../../../redux/booking/extras/selectors';\n\nimport useReduxFormState from '../../../../hooks/useReduxFormState';\n\nexport const useExtrasFormActions = () => {\n const dispatch = useDispatch();\n return {\n getExtras: (bookingId) => getExtras(dispatch, bookingId, true),\n setExtras: (bookingId, extras) => {\n return setExtras(dispatch, bookingId, extras);\n },\n };\n};\n\nexport const useExtrasFormState = () => ({\n ...useReduxFormState(extrasWithValues, selectExtra),\n errorDataSaving: useSelector(errorDataSaving),\n hasErrorFetching: useSelector(hasErrorFetching),\n hasErrorSaving: useSelector(hasErrorSaving),\n isFetching: useSelector(isFetching),\n isSaving: useSelector(isSaving),\n});\n\nexport default useExtrasFormState;\n","import React from 'react';\nimport { Form, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport DateInput from '../../../FormElements/DateInput';\nimport SelectInput from '../../../FormElements/SelectInput';\nimport TextInput from '../../../FormElements/TextInput';\n\nimport titles from '../../../../Data/Titles.json';\nimport t from '../../../../../text';\nimport { arrayFromXtoY } from '../../../../utils/utils';\n\nconst infantAges = arrayFromXtoY(0, 4);\nconst childAges = arrayFromXtoY(5, 17);\nconst adultAges = arrayFromXtoY(18, 99);\n\nexport const PartyDetailsFormRow = ({ values, errors, onChange, ageGroup, suffix, locked, dob }) => {\n let ages;\n\n if (ageGroup === 'under5s') ages = infantAges;\n if (ageGroup === 'children') ages = childAges;\n if (ageGroup === 'adults') ages = adultAges;\n\n return (\n \n \n onChange(e.target.name, e.target.value) : undefined}\n invalid={!!errors[`pt${suffix}`]}\n validationMessage={errors[`pt${suffix}`]}\n >\n \n {Object.keys(titles).map((key) => (\n \n ))}\n \n \n\n \n onChange(e.target.name, e.target.value) : undefined}\n invalid={!!errors[`pi${suffix}`]}\n validationMessage={errors[`pi${suffix}`]}\n />\n \n\n \n onChange(e.target.name, e.target.value) : undefined}\n invalid={!!errors[`pn${suffix}`]}\n validationMessage={errors[`pn${suffix}`]}\n />\n \n\n \n {dob ? (\n \n ) : (\n onChange(e.target.name, e.target.value) : undefined}\n invalid={!!errors.title}\n validationMessage={errors.title}\n >\n \n {ages.map((age) => (\n \n ))}\n \n )}\n \n \n );\n};\n\nPartyDetailsFormRow.defaultProps = {\n values: {},\n errors: {},\n locked: false,\n ageGroup: 'adults',\n};\n\nPartyDetailsFormRow.propTypes = {\n values: PropTypes.object,\n errors: PropTypes.object,\n onChange: PropTypes.func,\n suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n ageGroup: PropTypes.string,\n locked: PropTypes.bool,\n};\n\nexport default PartyDetailsFormRow;\n","import React from 'react';\nimport { Form, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport InputRadioButton from '../../../FormElements/InputRadioButton';\nimport PartyDetailsFormRow from './PartyDetailsFormRow';\nimport t from '../../../../../text';\n\n// import { required, email, telephone, postcode } from '../../utils/validation';\n\nexport const validateFields = (values = {}) => {\n const errors = {};\n // if(!required(values.title)) {\n // errors.title = 'Please select a value';\n // }\n return errors;\n};\n\nexport const isValid = (values = {}) => !Object.keys(validateFields(values)).length;\n\nexport const PartyDetailsForm = ({\n adults,\n children,\n under5s,\n errors,\n values,\n areYouGoing,\n onChangePartyDetail,\n onSelectAreYouGoing,\n showAreYouGoing,\n dob,\n}) => {\n return (\n
\n {showAreYouGoing && (\n \n \n

{t('forms.party.areYouGoing')}

\n
\n onSelectAreYouGoing(key, value)}\n />\n
\n
\n onSelectAreYouGoing(key, value)}\n />\n
\n
\n
\n )}\n\n

{t('forms.party.pleaseFillInDetails')}

\n\n {adults ? (\n
\n

{t('forms.party.adults')}

\n {[...new Array(adults)].map((item, index) => (\n
\n

Adult {index + 1}

\n \n
\n ))}\n
\n ) : null}\n {children ? (\n
\n

{t('forms.party.children')}

\n {[...new Array(children)].map((item, index) => (\n
\n

Child {index + 1}

\n \n
\n ))}\n
\n ) : null}\n {under5s ? (\n
\n

{t('forms.party.infants')}

\n {[...new Array(under5s)].map((item, index) => (\n
\n

Infant {index + 1}

\n \n
\n ))}\n
\n ) : null}\n
\n );\n};\n\nPartyDetailsForm.defaultProps = {\n adults: 0,\n children: 0,\n under5s: 0,\n values: {},\n errors: {},\n showAreYouGoing: true,\n};\n\nPartyDetailsForm.propTypes = {\n adults: PropTypes.number,\n children: PropTypes.number,\n under5s: PropTypes.number,\n areYouGoing: PropTypes.string,\n values: PropTypes.object,\n errors: PropTypes.object,\n onChangePartyDetail: PropTypes.func,\n onSelectAreYouGoing: PropTypes.func,\n showAreYouGoing: PropTypes.bool,\n dob: PropTypes.bool,\n};\n\nexport default PartyDetailsForm;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { validateFields } from './PartyDetailsForm';\nimport { stepCompleted } from '../../../../redux/booking/booking/actions';\nimport { changePartyDetail, selectAreYouGoing, setPartyDetails } from '../../../../redux/booking/form/actions';\n\nimport { bookingId } from '../../../../redux/booking/booking/selectors';\nimport { details, loggedIn } from '../../../../redux/user/selectors';\nimport {\n partyAreYouGoing,\n partyValues,\n partyHasSaveError,\n partyIsSaving,\n partySaveError,\n} from '../../../../redux/booking/form/selectors';\nimport { adults, children, under5s } from '../../../../redux/search/form/selectors';\n\nimport useReduxFormState from '../../../../hooks/useReduxFormState';\n\nimport { BOOKING_STEPS } from '../../../../Constants';\nimport { calculateAge } from '../../../../utils/date';\n\nexport const usePartyDetailsFormActions = () => {\n const dispatch = useDispatch();\n return {\n selectAreYouGoing: (key, value, userInfo) => selectAreYouGoing(dispatch, key, value, userInfo),\n setPartyDetails: (bookId, size, details) => setPartyDetails(dispatch, bookId, size, details),\n stepComplete: () => stepCompleted(dispatch, BOOKING_STEPS.PARTY),\n };\n};\n\nexport const usePartyDetailsFormState = () => {\n const _details = useSelector(details);\n const _loggedIn = useSelector(loggedIn);\n const ageDate = new Date();\n ageDate.setFullYear(parseInt(_details.dobYr), parseInt(_details.dobMnth) - 1, parseInt(_details.dobDay));\n\n return {\n ...useReduxFormState(partyValues, changePartyDetail, validateFields),\n adults: useSelector(adults),\n areYouGoing: useSelector(partyAreYouGoing),\n bookingId: useSelector(bookingId),\n children: useSelector(children),\n loggedIn: _loggedIn,\n partyHasSaveError: useSelector(partyHasSaveError),\n partyIsSaving: useSelector(partyIsSaving),\n partySaveError: useSelector(partySaveError),\n under5s: useSelector(under5s),\n user: _loggedIn\n ? {\n pt1: _details.title,\n pi1: _details.firstName[0].toUpperCase(),\n pn1: _details.lastName,\n pa1: calculateAge(ageDate),\n dob1: `${_details.dobDay}/${_details.dobMnth}/${_details.dobYr}`,\n }\n : undefined,\n };\n};\n\nexport default usePartyDetailsFormState;\n","import React, { useEffect } from 'react';\n\nimport { Container } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\n\nimport CardPanel from '../../../components/CardPanel';\nimport ExtrasForm from '../../../components/Forms/Booking/ExtrasForm/ExtrasForm';\nimport WithHolidaySummary from '../../../components/Booking/WithHolidaySummary';\nimport WithLoadingStates from '../../../components/Booking/WithLoadingStates';\n\nimport { arrayToObject } from '../../../utils/utils';\nimport { useExtrasFormActions, useExtrasFormState } from '../../../components/Forms/Booking/ExtrasForm/useExtrasForm';\nimport t from '../../../../text';\nimport useNextStep from '../../../components/Booking/useNextStep';\n\nimport PartyDetailsForm from '../../../components/Forms/Booking/PartyDetailsForm/PartyDetailsForm';\nimport {\n usePartyDetailsFormState,\n usePartyDetailsFormActions,\n} from '../../../components/Forms/Booking/PartyDetailsForm/usePartyDetailsForm';\nimport { channelId } from '../../../redux/booking/booking/selectors';\n\nexport const Extras = ({ history, bookingId, stepCompleted, message }) => {\n const { setExtras, getExtras } = useExtrasFormActions();\n const { selectAreYouGoing, setPartyDetails } = usePartyDetailsFormActions();\n const party = usePartyDetailsFormState();\n const _channelId = useSelector(channelId);\n const {\n values: extrasValues,\n onChange,\n isFetching,\n isSaving,\n hasErrorFetching,\n hasErrorSaving,\n errorDataSaving,\n } = useExtrasFormState();\n const nextStep = useNextStep();\n\n const loadExtras = () => {\n getExtras(bookingId);\n };\n\n const partyForm = (\n selectAreYouGoing(key, value, party.user)}\n showAreYouGoing={party.loggedIn}\n dob={_channelId === 'eurocaravan'}\n />\n );\n\n const removeFields = (values, partySize, field) => {\n const output = { ...values };\n let i = 0;\n\n for (i; i <= partySize; i++) {\n delete output[`${field}${i}`];\n }\n\n return output;\n };\n\n const handleNext = () => {\n party.validate();\n if (party.isValid()) {\n const size = party.adults + party.children + party.under5s;\n let partyValues;\n\n partyValues = _channelId === 'eurocaravan' ? party.values : removeFields(party.values, size, 'dob');\n setPartyDetails(party.bookingId, size, partyValues)\n .request.then(() => {\n const extrasObject = arrayToObject(extrasValues, 'code', 'value');\n setExtras(bookingId, extrasObject)\n .request.then(() => {\n stepCompleted();\n history.push(`/booking/${nextStep}`);\n })\n .catch(() => {\n // Do nothing upon error, we'll react to error flags in redux state\n });\n })\n .catch(() => {\n // Do nothing upon error, we'll react to error flags in redux state\n });\n }\n };\n\n useEffect(loadExtras, [bookingId]); // Reload extras on mount / if the booking ID changes\n\n return (\n <>\n {message && (\n \n
\n
\n )}\n \n \n \n {partyForm}\n \n {extrasValues?.length > 0 && (\n \n \n \n )}\n \n \n \n );\n};\n\nexport default Extras;\n","import { connect } from 'react-redux';\nimport Extras from './Extras';\n\nimport { stepCompleted } from '../../../redux/booking/booking/actions';\nimport { bookingId, message } from '../../../redux/booking/booking/selectors';\n\nimport { BOOKING_STEPS } from '../../../Constants';\n\nconst mapStateToProps = (state) => ({\n bookingId: bookingId(state),\n message: message(state)\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n stepCompleted: () => stepCompleted(dispatch, BOOKING_STEPS.EXTRAS),\n});\n\nexport const ExtrasConnected = connect(mapStateToProps, mapDispatchToProps)(Extras);\nexport default ExtrasConnected;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nexport const PaypalFieldContainer = (props) => (\n \n {props.label && (\n
\n {props.label}\n
\n )}\n\n
\n {/* PayPal will insert field here */}\n
\n\n {props.invalid && {props.validationMessage}}\n
\n);\n\nPaypalFieldContainer.defaultProps = {\n groupClassName: '',\n labelClassName: 'form-label',\n className: 'form-control paypal-field',\n};\n\nPaypalFieldContainer.propTypes = {\n groupClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n className: PropTypes.string,\n containerId: PropTypes.string,\n controlId: PropTypes.string,\n label: PropTypes.string,\n invalid: PropTypes.bool,\n validationMessage: PropTypes.string,\n};\n\nexport default PaypalFieldContainer;\n","import React from 'react';\nimport { Form, Button, Col } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\n\nimport Checkbox from '../../../FormElements/InputCheckbox';\nimport PaypalFieldContainer from '../../../FormElements/PaypalFieldContainer';\nimport SelectInput from '../../../FormElements/SelectInput';\nimport TextInput from '../../../FormElements/TextInput';\n\nimport countries from '../../../../Data/Countries.json';\nimport { postcode, required } from '../../../../utils/validation';\nimport t from '../../../../../text';\nimport visa from '../../../../assets/images/visa.png';\nimport mastercard from '../../../../assets/images/mastercard.png';\nimport { Row } from 'react-bootstrap';\n\nexport const validateFields = (values = {}, paypalFormState = {}) => {\n const errors = {};\n if (!required(values.name)) {\n errors.name = t('forms.paypalCard.invalidCardName');\n }\n if (values.billingAddress) {\n if (!required(values.addrLn1)) {\n errors.addrLn1 = t('forms.paypalCard.invalidAddress');\n }\n if (!required(values.town)) {\n errors.town = t('forms.paypalCard.invalidTown');\n }\n if (!required(values.postCode) || !postcode(values.postCode)) {\n errors.postCode = t('forms.paypalCard.invalidPostcode');\n }\n if (!required(values.county)) {\n errors.county = t('forms.paypalCard.invalidCounty');\n }\n if (!required(values.country)) {\n errors.country = t('forms.paypalCard.invalidCountry');\n }\n }\n\n const ppFields = paypalFormState.fields;\n if (!ppFields?.cvv?.isValid) {\n errors.cvv = t('forms.paypalCard.invalidSecurityNumber');\n }\n if (!ppFields?.expirationDate?.isValid) {\n errors.expirationDate = t('forms.paypalCard.invalidExpiryDate');\n }\n if (!ppFields?.number?.isValid) {\n errors.number = t('forms.paypalCard.invalidCardNumber');\n }\n\n return errors;\n};\n\nexport const CardPaymentForm = ({ amount, busy, errors, onChange, onSubmit, values }) => (\n <>\n
\n
\n {t('forms.paypalCard.introText')}\n
\n\n \n onChange(e.target.name, e.target.value) : undefined}\n invalid={!!errors.name}\n validationMessage={errors.name}\n />\n \n \n \n \n \n \n \n \n onChange('billingAddress', checked) : undefined}\n />\n \n \n {!!values.billingAddress && (\n <>\n \n onChange(e.target.name, e.target.value)}\n invalid={!!errors.addrLn1}\n validationMessage={errors.addrLn1}\n attrs={{ disabled: busy }}\n />\n \n\n \n onChange(e.target.name, e.target.value)}\n invalid={!!errors.town}\n validationMessage={errors.town}\n attrs={{ disabled: busy }}\n />\n onChange(e.target.name, e.target.value)}\n invalid={!!errors.county}\n validationMessage={errors.county}\n attrs={{ disabled: busy }}\n />\n \n\n \n onChange(e.target.name, e.target.value)}\n attrs={{ maxLength: 8, disabled: busy }}\n invalid={!!errors.postCode}\n validationMessage={errors.postCode}\n />\n\n onChange(e.target.name, e.target.value)}\n invalid={!!errors.country}\n validationMessage={errors.country}\n attrs={{ disabled: busy }}\n >\n \n {Object.keys(countries).map((key) => (\n \n ))}\n \n \n \n )}\n \n \n \n \n \n \"Visa\"\n \"Mastercard\"\n \n \n
\n
\n \n);\n\nCardPaymentForm.defaultProps = {};\n\nCardPaymentForm.propTypes = {\n amount: PropTypes.number,\n busy: PropTypes.bool,\n errors: PropTypes.object,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n values: PropTypes.object,\n};\n\nexport default CardPaymentForm;\n","import { PRE_PAYMENT, POST_PAYMENT, SET_PAYMENT_USED } from './action-types';\nimport { apiRequest, callbackApiRequest } from '../../apiRequest';\nimport selfCancellingAction from '../../selfCancellingAction';\nimport { urls } from '../../../../config';\n\nexport const [prePayment, cancelPrePayment] = selfCancellingAction((dispatch, bookId, amount) => {\n return callbackApiRequest(\n dispatch,\n PRE_PAYMENT,\n urls.bookingPrePayment,\n { bookId, amount: `${amount}` },\n undefined,\n 'post',\n );\n});\n\nexport const [postPayment, cancelPostPayment] = selfCancellingAction(\n (dispatch, paymntRecId, bookId, method, orderId) => {\n return apiRequest(\n dispatch,\n POST_PAYMENT,\n urls.bookingPostPayment,\n { paymntRecId, bookId, method, orderId },\n undefined,\n 'post',\n );\n },\n);\n\nexport const setPaymentUsed = (dispatch, service, method) => {\n return dispatch({\n type: SET_PAYMENT_USED,\n payload: { service, method },\n });\n};\n","import { PRE_PAYMENT, POST_PAYMENT } from './action-types';\nimport { getRequestStatus } from '../../requests/selectors';\n\nexport const prePaymentNeedsLoading = (state) => typeof state.booking.payment.paymntRecId === 'undefined';\nexport const [prePaymentIsFetching, prePaymentHasError, prePaymentErrorData] = getRequestStatus(PRE_PAYMENT);\nexport const [postPaymentIsFetching, postPaymentHasError, postPaymentErrorData] = getRequestStatus(POST_PAYMENT);\n\nexport const paypal = (state) => state.booking.payment.paypal;\nexport const paymntRecId = (state) => state.booking.payment.paymntRecId;\nexport const paymntUsed = (state) => state.booking.payment.paymntUsed;\nexport const postPayment = (state) => state.booking.payment.postPayment;\nexport const cardinal = (state) => state.booking.payment.cardinal;\nexport const payit = (state) => state.booking.payment.payit;\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { prePayment } from '../../../../redux/booking/payment/actions';\n\nimport { bookingId } from '../../../../redux/booking/booking/selectors';\nimport { paymentAmount } from '../../../../redux/booking/form/selectors';\nimport {\n paymntRecId,\n paypal,\n prePaymentErrorData,\n prePaymentHasError,\n prePaymentIsFetching,\n prePaymentNeedsLoading,\n} from '../../../../redux/booking/payment/selectors';\n\nimport { validateFields } from './PaypalCardPaymentForm';\nimport useLocalFormState from '../../../../hooks/useLocalFormState';\n\nexport const usePaypalCardPaymentFormActions = () => {\n const dispatch = useDispatch();\n\n return {\n prePayment: (bookId, amount) => prePayment(dispatch, bookId, amount),\n };\n};\n\nexport const usePaypalCardPaymentFormState = (paypalForm) => {\n const validator = (values) => validateFields(values, paypalForm?.getState());\n\n return {\n ...useLocalFormState(validator),\n amount: useSelector(paymentAmount),\n bookingId: useSelector(bookingId),\n paypal: useSelector(paypal),\n paymntRecId: useSelector(paymntRecId),\n prePaymentErrorData: useSelector(prePaymentErrorData),\n prePaymentHasError: useSelector(prePaymentHasError),\n prePaymentIsFetching: useSelector(prePaymentIsFetching),\n prePaymentNeedsLoading: useSelector(prePaymentNeedsLoading),\n };\n};\n\nexport default usePaypalCardPaymentFormState;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { usePayPalScriptReducer } from '@paypal/react-paypal-js';\n\nimport PaypalCardPaymentForm from '../../../components/Forms/Booking/PaypalCardPaymentForm/PaypalCardPaymentForm';\nimport Spinner from '../../../components/Spinner';\n\nimport countries from '../../../Data/Countries.json';\nimport { details } from '../../../redux/user/selectors';\nimport { usePaypalCardPaymentFormState } from '../../../components/Forms/Booking/PaypalCardPaymentForm/usePaypalCardPaymentForm';\n\nimport { config } from '../../../../config';\nimport t from '../../../../text';\n\nconst checkPaypalComponentsAreLoaded = (options) => {\n const components = (options?.components || '').split(',');\n if (!components.includes('hosted-fields') || !components.includes('funding-eligibility')) {\n let neededComponents = [];\n if (!components.includes('hosted-fields')) neededComponents.push('hosted-fields');\n if (!components.includes('funding-eligibility')) neededComponents.push('funding-eligibility');\n neededComponents = neededComponents.join(',');\n\n console.error(\n `[CardPayment] - Paypal setup error: You need to add ${neededComponents} to the options parameter of your tag.`,\n );\n return false;\n }\n\n return true;\n};\n\nconst get3DSecureOutcome = ({ authenticationReason, authenticationStatus, liabilityShifted }) => {\n // See https://developer.paypal.com/docs/business/checkout/add-capabilities/3d-secure/#deprecated-3d-secure-parameters\n const states = [\n { lShifted: undefined, authStatus: undefined, authReason: undefined, result: true },\n { lShifted: true, authStatus: 'YES', authReason: 'SUCCESSFUL', result: true },\n { lShifted: false, authStatus: 'ERROR', authReason: 'ERROR', result: false },\n { lShifted: false, authStatus: 'NO', authReason: 'SKIPPED_BY_BUYER', result: false },\n { lShifted: false, authStatus: 'NO', authReason: 'FAILURE', result: false },\n { lShifted: false, authStatus: 'NO', authReason: 'BYPASSED', result: true },\n { lShifted: false, authStatus: 'NO', authReason: 'ATTEMPTED', result: true },\n { lShifted: false, authStatus: 'NO', authReason: 'UNAVAILABLE', result: true },\n { lShifted: false, authStatus: 'NO', authReason: 'CARD_INELIGIBLE', result: true },\n { lShifted: true, authStatus: 'YES', authReason: 'ERROR', result: true },\n ];\n\n const currentState = states.find((state) => {\n return (\n state.lShifted === liabilityShifted &&\n state.authStatus === authenticationStatus &&\n state.authReason === authenticationReason\n );\n });\n\n return currentState ? currentState : false;\n};\n\nconst getErrorMessage = (err) => {\n if (Array.isArray(err?.details)) {\n return (\n
    \n {err.details.map((detail) => (\n
  • \n {`${typeof detail.field !== 'undefined' ? detail.field.replace('/payment_source/card/', '') : 'ERROR'}`} - {detail.description} ({detail.issue})\n
  • \n ))}\n
\n );\n }\n\n const msg = typeof err === 'string' ? err : t('booking.payment.errorSubmittingForm');\n\n return

{msg}

;\n};\n\nexport const CardPayment = ({ disabled, onSuccess }) => {\n const [firstRun, setFirstRun] = useState(true);\n const [paymentError, setPaymentError] = useState(undefined);\n const [paypalForm, setPaypalForm] = useState(undefined);\n const [processing, setProcessing] = useState(false);\n\n const userDetails = useSelector(details);\n const { values, onChange, validate, isValid, errors, amount, bookingId, paypal } = usePaypalCardPaymentFormState(\n paypalForm,\n );\n const [{ isResolved, options }] = usePayPalScriptReducer();\n\n // Event handlers\n const handleCardFormSubmit = () => {\n validate();\n if (isValid() && paypalForm) {\n submitPaypalForm();\n }\n };\n\n const handlePaypalInit = useCallback(() => {\n if (isResolved) {\n if (checkPaypalComponentsAreLoaded(options)) {\n window.paypal.HostedFields.render({\n createOrder: function () {\n return paypal.orderId;\n },\n styles: {\n input: {\n 'font-size': '16px',\n 'font-family':\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n color: '#5B5B5A',\n },\n },\n fields: {\n number: {\n selector: '#cardNumContainer',\n internalLabel: t('booking.payment.cardNumber'),\n maskInput: true,\n placeholder: 'Card Number',\n },\n expirationDate: {\n selector: '#expiryDateContainer',\n internalLabel: t('booking.payment.expirationDate'),\n maskInput: true,\n placeholder: 'Expiry Date - mm/yyyy',\n },\n cvv: {\n selector: '#cvvContainer',\n internalLabel: t('booking.payment.cardSecurityNumber'),\n type: 'password',\n placeholder: '3 Digit Security Number',\n },\n },\n }).then(function (hf) {\n setPaypalForm(hf);\n });\n }\n }\n }, [options, isResolved, paypal.orderId]);\n\n const submitPaypalForm = () => {\n const address = values.billingAddress ? values : userDetails;\n const country = values.billingAddress ? values.country : countries[userDetails.country].iso2;\n\n console.info(config['payment.enable3DSecure'] ? '✔ 3DSecure enabled!' : '❌ 3DSecure disabled.');\n\n setPaymentError(undefined);\n setProcessing(true);\n paypalForm\n .submit({\n // Cardholder Name\n cardholderName: values.name,\n // Billing Address\n billingAddress: {\n streetAddress: address.addrLn1,\n // extendedAddress: address.addrLn1, // address_line_2 - unit\n region: address.county, // admin_area_1 - state\n locality: address.town, // admin_area_2 - town / city\n postalCode: address.postCode, // postal_code - postal_code\n countryCodeAlpha2: country, // country_code - country\n },\n contingencies: config['payment.enable3DSecure'] ? ['3D_SECURE'] : [],\n })\n .then((resp) => {\n setFirstRun(false);\n setProcessing(false);\n\n if (config['payment.enable3DSecure']) {\n const passed3DSecure = get3DSecureOutcome(resp);\n\n console.info('3Dsecure response: ', resp);\n\n if (passed3DSecure.result === true) {\n console.info('3DSecure passed.');\n onSuccess(resp);\n } else {\n console.info('3DSecure failed.');\n switch (passed3DSecure.authReason) {\n //case undefined:\n // setPaymentError('3D Secure did not respond correctly, please try again.');\n // break;\n case 'ERROR':\n setPaymentError('There was an error with 3D Secure, please try again.');\n break;\n case 'FAILURE':\n setPaymentError('3D Secure authentication failed, please try again.');\n break;\n case 'SKIPPED_BY_BUYER':\n setPaymentError('3D Secure cannot be skipped, please try again.');\n break;\n default:\n setPaymentError(t('booking.payment.error3DSecure'));\n break;\n }\n }\n } else {\n console.info('3DSecure skipped. Is 3DSecure enabled?');\n onSuccess(resp);\n }\n })\n .catch(function (err) {\n setPaymentError(err);\n setFirstRun(false);\n setProcessing(false);\n });\n };\n\n // Mark as first run if booking changes / on page refresh\n useEffect(() => setFirstRun(true), [amount, bookingId]);\n\n // Re-init the form if the booking changes\n useEffect(() => handlePaypalInit(), [amount, bookingId, isResolved, handlePaypalInit]);\n\n if (isResolved) {\n return (\n <>\n \n {!firstRun && paymentError && getErrorMessage(paymentError)}\n \n );\n } else {\n return ;\n }\n};\n\nexport default CardPayment;\n","import React, { memo } from 'react';\nimport { Form } from 'react-bootstrap';\nimport PropTypes from 'prop-types';\nimport { PayPalButtons } from '@paypal/react-paypal-js';\nimport t from '../../../../../text';\n\n// Please note: this form needs to be wrapped by somewhere for it to work:\n// \nexport const PaypalPaymentForm = ({ onClick, onCreateOrder, onError, onSuccess }) => (\n
\n

{t('forms.paypal.introText')}

\n
\n \n
\n
\n);\n\nPaypalPaymentForm.defaultProps = {};\n\nPaypalPaymentForm.propTypes = {\n clientId: PropTypes.string,\n onCreateOrder: PropTypes.func,\n onError: PropTypes.func,\n onSuccess: PropTypes.func,\n};\n\nexport default memo(PaypalPaymentForm, (prevProps, nextProps) => prevProps.clientId === nextProps.clientId);\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport { prePayment } from '../../../../redux/booking/payment/actions';\n\nimport { bookingId } from '../../../../redux/booking/booking/selectors';\nimport { paymentAmount } from '../../../../redux/booking/form/selectors';\nimport {\n paymntRecId,\n paypal,\n prePaymentErrorData,\n prePaymentHasError,\n prePaymentIsFetching,\n prePaymentNeedsLoading,\n} from '../../../../redux/booking/payment/selectors';\n\nexport const usePaypalPaymentFormActions = () => {\n const dispatch = useDispatch();\n\n return {\n prePayment: (bookId, amount) => prePayment(dispatch, bookId, amount),\n };\n};\n\nexport const usePaypalPaymentFormState = () => ({\n amount: useSelector(paymentAmount),\n bookingId: useSelector(bookingId),\n paymntRecId: useSelector(paymntRecId),\n paypal: useSelector(paypal),\n prePaymentErrorData: useSelector(prePaymentErrorData),\n prePaymentHasError: useSelector(prePaymentHasError),\n prePaymentIsFetching: useSelector(prePaymentIsFetching),\n prePaymentNeedsLoading: useSelector(prePaymentNeedsLoading),\n});\n\nexport default usePaypalPaymentFormState;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { usePayPalScriptReducer } from '@paypal/react-paypal-js';\n\nimport PaypalPaymentForm from '../../../components/Forms/Booking/PaypalPaymentForm/PaypalPaymentForm';\nimport Spinner from '../../../components/Spinner';\n\nimport { usePaypalPaymentFormState } from '../../../components/Forms/Booking/PaypalPaymentForm/usePaypalPaymentForm';\nimport t from '../../../../text';\n\nexport const PaypalPayment = ({ onSuccess }) => {\n const { amount, bookingId, paypal } = usePaypalPaymentFormState();\n const [firstRun, setFirstRun] = useState(true);\n const [paypalError, setPaypalError] = useState(undefined);\n const [{ isResolved }] = usePayPalScriptReducer();\n\n const handleError = (err) => {\n setFirstRun(false);\n setPaypalError(err);\n };\n\n const handleSuccess = (resp) => {\n setPaypalError(undefined);\n onSuccess(resp);\n };\n\n // Mark as first run if booking changes / on page refresh\n useEffect(() => setFirstRun(true), [amount, bookingId]);\n\n if (isResolved) {\n return (\n <>\n {paypal.clientId && (\n paypal.orderId}\n onError={handleError}\n onSuccess={handleSuccess}\n />\n )}\n {!firstRun && paypalError &&

{paypalError.toString()}

}\n \n );\n } else {\n return ;\n }\n};\n\nPaypalPayment.propTypes = {\n onSuccess: PropTypes.func,\n};\n\nexport default PaypalPayment;\n","import React from 'react';\nimport { Button, Col, Container, Row } from 'react-bootstrap';\n\nfunction PayItPayment(props) {\n return (\n \n \n \n

\n Payit™ is a quick and easy journey with improved control over your finances, reduced exposure to\n fraud and control over data sharing. Payit™ is securely developed by NatWest, but you don’t need\n to bank with NatWest to use it.\n

\n \n \n
\n
\n );\n}\n\nexport default PayItPayment;\n","import React, { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Tabs, Tab } from 'react-bootstrap';\nimport { PayPalScriptProvider } from '@paypal/react-paypal-js';\n\nimport CardPanel from '../../../components/CardPanel';\nimport CardPayment from './CardPayment';\nimport PaypalPayment from './PaypalPayment';\nimport WithHolidaySummary from '../../../components/Booking/WithHolidaySummary';\nimport WithLoadingStates from '../../../components/Booking/WithLoadingStates';\nimport useNextStep from '../../../components/Booking/useNextStep';\nimport RequestErrors from '../../../components/RequestErrors';\n\nimport { stepCompleted } from '../../../redux/booking/booking/actions';\nimport { prePayment, setPaymentUsed } from '../../../redux/booking/payment/actions';\nimport { bookingId } from '../../../redux/booking/booking/selectors';\nimport { paymentAmount } from '../../../redux/booking/form/selectors';\nimport { paypal, payit, prePaymentHasError, prePaymentIsFetching, prePaymentErrorData } from '../../../redux/booking/payment/selectors';\n\nimport { BOOKING_STEPS } from '../../../Constants';\nimport t from '../../../../text';\nimport { config } from '../../../../config';\nimport PayItPayment from './PayItPayment';\n\nexport const Payment = ({ history }) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const _amount = useSelector(paymentAmount);\n const _bookingId = useSelector(bookingId);\n const _paypal = useSelector(paypal);\n const _payit = useSelector(payit);\n const _prePaymentHasError = useSelector(prePaymentHasError);\n const _prePaymentErrorData = useSelector(prePaymentErrorData);\n const _prePaymentIsFetching = useSelector(prePaymentIsFetching);\n\n const nextStep = useNextStep();\n const [prepaymentLoaded, setPrepaymentLoaded] = useState(false);\n\n const paypalProviderOptions = {\n 'client-id': _paypal.clientId,\n components: 'buttons,hosted-fields,funding-eligibility',\n currency: 'GBP',\n 'data-client-token': _paypal.clientToken,\n };\n\n // Initial data load\n const loadPrePaymentData = () => {\n prePayment(dispatch, _bookingId, Math.round(_amount * 100) / 100)\n .request.then(() => setPrepaymentLoaded(true))\n .catch(() => {\n /* do nothing, redner will react to failed flag */\n });\n };\n\n const onPaypalPaymentMethodAdded = (method) => {\n setPaymentUsed(dispatch, 'paypal', method);\n stepCompleted(dispatch, BOOKING_STEPS.PAYMENT);\n history.push(`/booking/${nextStep}`);\n };\n\n // Load new pre-payment data if needed / on page refresh\n useEffect(loadPrePaymentData, [dispatch, _amount, _bookingId]);\n\n return (\n \n }\n onRetry={loadPrePaymentData}\n spinnerMessage={t('booking.payment.loading')}\n >\n \n {paypalProviderOptions?.['client-id'] && (\n \n \n {config['payment.paypalCard'] && (\n \n onPaypalPaymentMethodAdded('card', resp)} />\n \n )}\n {config['payment.paypal'] && (\n \n onPaypalPaymentMethodAdded('buttons', resp)}\n />\n \n )}\n {config['payment.payit'] && (\n \n \n \n )}\n \n \n )}\n \n {location.state?.error && (\n

{t('booking.payment.errorProcessingPayment')}

\n )}\n \n
\n );\n};\n\nexport default Payment;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Button } from 'react-bootstrap';\n\nimport CardPanel from '../../../components/CardPanel';\nimport WithHolidaySummary from '../../../components/Booking/WithHolidaySummary';\nimport WithLoadingStates from '../../../components/Booking/WithLoadingStates';\n\nimport { completeBooking, stepCompleted, stepNotCompleted } from '../../../redux/booking/booking/actions';\nimport { postPayment } from '../../../redux/booking/payment/actions';\nimport { bookingId, channelId, park, unitTypeId } from '../../../redux/booking/booking/selectors';\nimport { paymentAmount } from '../../../redux/booking/form/selectors';\nimport {\n paymntRecId,\n paymntUsed,\n paypal,\n postPayment as postPaymentData,\n postPaymentErrorData,\n postPaymentHasError,\n postPaymentIsFetching,\n} from '../../../redux/booking/payment/selectors';\n\nimport { BOOKING_STEPS } from '../../../Constants';\nimport { tagSaleCompleted } from '../../../utils/tracking';\nimport t from '../../../../text';\n\nexport const PaymentAction = ({ history }) => {\n const dispatch = useDispatch();\n\n const _amount = useSelector(paymentAmount);\n const _bookingId = useSelector(bookingId);\n const _channelId = useSelector(channelId);\n const _park = useSelector(park);\n const _paymntRecId = useSelector(paymntRecId);\n const _paymntUsed = useSelector(paymntUsed);\n const _paypal = useSelector(paypal);\n const _postPaymentErrorData = useSelector(postPaymentErrorData);\n const _postPaymentHasError = useSelector(postPaymentHasError);\n const _postPaymentIsFetching = useSelector(postPaymentIsFetching);\n const _postPaymentData = useSelector(postPaymentData);\n const _unitTypeId = useSelector(unitTypeId);\n\n const [firstRun, setFirstRun] = useState(true);\n const hasError = _postPaymentHasError;\n const isLoading = _postPaymentIsFetching || (_postPaymentData && !_postPaymentData?.action);\n\n // Initial data load\n const loadPostPaymentData = () => {\n const method = _paymntUsed.method === 'buttons' ? 'paypal' : 'direct';\n postPayment(dispatch, _paymntRecId, _bookingId, method, _paypal.orderId);\n setFirstRun(false);\n };\n\n const checkForNextStep = () => {\n if (!firstRun && !_postPaymentIsFetching) {\n if (!_postPaymentHasError) {\n // If no action, payment was successful\n if (!_postPaymentData.action) {\n stepCompleted(dispatch, BOOKING_STEPS.PAYMENT_ACTION);\n completeBooking(dispatch);\n tagSaleCompleted(_bookingId, _amount, _unitTypeId, _park.opId, _park.regn, _park.name, _channelId);\n history.push('/booking/confirmation');\n return;\n }\n } else {\n // If error was from the server (and not a connectivity issue), go back to payment step\n if (_postPaymentErrorData.status > 0) {\n stepNotCompleted(dispatch, BOOKING_STEPS.PAYMENT);\n history.replace({\n pathname: '/booking/payment',\n state: { error: true },\n });\n }\n }\n }\n };\n\n // Load new pre-payment data if paypal order changes / on page refresh\n useEffect(loadPostPaymentData, [dispatch, _bookingId, _paymntRecId, _paypal.orderId, _paymntUsed.method]);\n\n // When we get new info about the order, check if we need to take any action\n useEffect(checkForNextStep, [\n dispatch,\n firstRun,\n history,\n _postPaymentData?.action,\n _paypal.orderId,\n _postPaymentIsFetching,\n _postPaymentHasError,\n _postPaymentErrorData?.status,\n ]);\n\n return (\n \n \n \n {hasError && !_postPaymentErrorData.errors && (\n <>\n

{t('booking.payment.errorAccessingServer')}

\n \n \n )}\n
\n \n
\n );\n};\n\nexport default PaymentAction;\n","import { useSelector } from 'react-redux';\n\nimport {\n bookingHasError,\n bookingIsFetching,\n bookingIsLoaded,\n confirmationId,\n pendingParams,\n} from '../../redux/booking/booking/selectors';\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithBooking(props) {\n const _pendingParams = useSelector(pendingParams);\n const _confirmationId = useSelector(confirmationId);\n const _isNewBooking = _pendingParams.type === 'new';\n\n const getData = () => {}; // This HOC does not dispatch any actions, it reacts to the booking currently in progress\n const _hasFailed = useSelector((state) => bookingHasError(state));\n const _isLoaded = useSelector((state) => bookingIsLoaded(state));\n const _isLoading = useSelector((state) => bookingIsFetching(state));\n const _isReady = _isNewBooking && !_confirmationId && _isLoading; // Is loading in here is needed as this does not fire off requests for data\n const extraProps = (state) => ({\n isBooking: state.isFetching,\n hasBookingError: _isNewBooking && _hasFailed,\n });\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady, extraProps);\n}\n\nexport default WithBooking;\n","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { bookingId, bookingErrorData } from '../../redux/booking/booking/selectors';\n\nimport RequestErrors from '../RequestErrors';\nimport Spinner from '../Spinner';\nimport t from '../../../text';\n\nconst wrap = (content) => (\n \n \n {content}\n \n \n);\n\nexport const WithBookingLoadingStates = ({\n children,\n hasBookingError,\n hasErrorFetching,\n isBooking,\n isFetching,\n onRetry,\n prevPath,\n}) => {\n const _bookingId = useSelector(bookingId);\n const _errorData = useSelector(bookingErrorData);\n\n if (!_bookingId && !isBooking && !hasBookingError) {\n return wrap(

{t('booking.booking.noBookingInProgress')}

);\n }\n\n if (hasBookingError) {\n return wrap(\n <>\n

{t('booking.booking.failed')}

\n

{t('booking.booking.unableToBookHoliday', prevPath)}

\n \n ,\n );\n }\n\n if (hasErrorFetching) {\n return wrap(\n <>\n

\n \n {t('booking.booking.errorLoadingData')}\n

\n \n ,\n );\n }\n\n if (isFetching) {\n return wrap();\n }\n\n return children;\n};\n\nWithBookingLoadingStates.propTypes = {\n isFetching: PropTypes.bool,\n hasBookingError: PropTypes.bool,\n hasErrorFetching: PropTypes.bool,\n onRetry: PropTypes.func,\n prevPath: PropTypes.string,\n};\n\nWithBookingLoadingStates.defaultProps = {\n prevPath: '/',\n};\n\nexport default WithBookingLoadingStates;\n","import { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory, useRouteMatch } from 'react-router-dom';\n\nimport { stepsCompleted } from '../../redux/booking/booking/selectors';\n\nimport useNextStep from './useNextStep';\n\nexport const WithBookingStepOrder = (props) => {\n const history = useHistory();\n const matches = useRouteMatch();\n\n const _stepsCompleted = useSelector(stepsCompleted);\n\n const requestedStep = matches.params.step;\n const requiredStep = useNextStep(true);\n\n const needRedirect = !requiredStep || (!_stepsCompleted.includes(requestedStep) && requestedStep !== requiredStep);\n\n useEffect(() => {\n if (needRedirect) {\n history.replace(`/booking/${requiredStep}`);\n }\n });\n\n return needRedirect ? null : props.children;\n};\n\nexport default WithBookingStepOrder;\n","import { useSelector } from 'react-redux';\n\nimport { getDeposit } from '../../redux/booking/booking/actions';\nimport {\n bookingId,\n depositHasError,\n depositIsFetching,\n depositIsLoaded,\n type,\n} from '../../redux/booking/booking/selectors';\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithDeposit(props) {\n const _bookingId = useSelector(bookingId);\n const _bookingType = useSelector(type);\n\n const getData = (dispatch) => getDeposit(dispatch, _bookingId);\n const _isLoaded = useSelector((state) => depositIsLoaded(state));\n const _isLoading = useSelector((state) => depositIsFetching(state));\n const _hasFailed = useSelector((state) => depositHasError(state));\n const _isReady = _bookingId && _bookingType === 'new';\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nexport default WithDeposit;\n","import React from 'react';\nimport { BOOKING_STEPS } from '../../Constants';\nimport { useRouteMatch } from 'react-router-dom';\nimport { Row, Col, Container } from 'react-bootstrap';\n\nexport const ProgressBar = () => {\n const matches = useRouteMatch();\n\n const steps = [\n {\n index: 0,\n name: BOOKING_STEPS.EXTRAS,\n },\n {\n index: 1,\n name: BOOKING_STEPS.DETAILS,\n },\n {\n index: 2,\n name: BOOKING_STEPS.PAYMENT,\n },\n {\n index: 3,\n name: BOOKING_STEPS.PAYMENT_ACTION,\n },\n {\n index: 4,\n name: BOOKING_STEPS.CONFIRMATION,\n }\n ];\n\n\n const currentStep = steps.filter((step) => step.name === matches.params.step)[0];\n\n const getStepTitle = (step) => {\n switch (step.name) {\n case BOOKING_STEPS.EXTRAS:\n return \"Step 1 of 3 - Party Details and Extras\";\n case BOOKING_STEPS.DETAILS:\n return \"Step 2 of 3 - Your Booking Details\";\n case BOOKING_STEPS.PAYMENT:\n case BOOKING_STEPS.PAYMENT_ACTION:\n return \"Step 3 of 3 - Payment Details\";\n case BOOKING_STEPS.CONFIRMATION:\n return \"Your Holiday Confirmation\";\n default:\n return \"\";\n }\n }\n\n return (\n
\n \n {currentStep ? (\n \n \n

{getStepTitle(currentStep)}

\n \n {currentStep.name !== BOOKING_STEPS.CONFIRMATION && (\n \n
\n {steps.slice(0, 3).map((_, index) => {\n let stepStatus;\n if (index < currentStep.index) {\n stepStatus = \"completed\"\n } else if (index === currentStep.index) {\n stepStatus = \"active\"\n } else {\n stepStatus = \"\"\n }\n return (\n
\n \n {index !== 2 &&
}\n
\n )\n })}\n
\n \n )}\n
\n ) : null}\n
\n
\n )\n};\n\n\nexport default ProgressBar;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Switch, Route, Redirect, useLocation } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport Confirmation from './Confirmation/container';\nimport Details from './Details/container';\nimport Extras from './Extras/container';\nimport Payment from './Payment/Payment';\nimport PaymentAction from './PaymentAction/PaymentAction';\n\nimport ScrollToTop from '../../components/ScrollToTop';\nimport WithBooking from '../../components/Booking/WithBooking';\nimport WithBookingLoadingStates from '../../components/Booking/WithBookingLoadingStates';\nimport WithBookingStepOrder from '../../components/Booking/WithBookingStepOrder';\nimport WithDeposit from '../../components/Booking/WithDeposit';\nimport WithParkDetails from '../../components/HOC/WithParkDetails';\nimport WithUnitTypesExtraData from '../../components/HOC/WithUnitTypesExtraData';\n\nimport { parkId } from '../../redux/booking/booking/selectors';\nimport { BOOKING_STEPS } from '../../Constants';\nimport ProgressBar from '../../components/Booking/ProgressBar';\n\nconst BookingRoutes = () => (\n \n \n \n \n \n \n \n);\n\nexport const Booking = (props) => {\n const location = useLocation();\n const _parkId = useSelector(parkId);\n\n return (\n <>\n \n Booking\n \n \n
\n \n\n {props.match.params.step === 'confirmation' ? (\n \n ) : (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n
\n \n );\n};\n\nexport default Booking;\n","import React, { useState, useEffect } from 'react';\nimport { Accordion, Card, Container } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport { config, urls } from '../../../config';\n\nfunction FAQ() {\n const [termData, setTermData] = useState([]);\n const [active, setActive] = useState('0');\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/faq/?_fields=title.rendered,content.rendered,acf.order&status=publish`,\n { signal: controller.signal },\n )\n .then((response) => response.json())\n .then((data) => {\n data.sort((a, b) => {\n return a.acf.order - b.acf.order;\n });\n setTermData(data);\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n return () => {\n controller.abort();\n };\n }, []);\n\n return (\n <>\n \n Frequently Asked Questions (FAQ)\n \n \n \n\n \n\n \n

\n The list below should answer most of the commonly raised questions. If you cannot find the\n information you’re looking for here, please check out the Terms and Conditions, which may answer\n your question. If you still need further help, click on the Contact Us button at the bottom of this\n page. Please note: Separate terms and conditions apply to our promotional offers.\n

\n \n {termData.map((term, i) => {\n return (\n \n setActive('' + i)}>\n {term.title.rendered}\n \n \n \n \n \n );\n })}\n \n
\n \n );\n}\n\nexport default FAQ;\n","import React, { useState, useEffect } from 'react';\nimport { useParams, useLocation } from 'react-router-dom';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport { urls } from '../../../config';\nimport t from '../../../text';\nimport SearchBox from '../../../base/components/SearchBox/SearchBox';\nimport Axios from 'axios';\n\nconst FetchContent = ({ post, contentData }) => {\n const [theData, setTheData] = useState(false);\n const [postData, setPostData] = useState('Just getting your content...');\n const [titleData, setTitleData] = useState('Loading...');\n const [metaTitle, setMetaTitle] = useState('Loading...');\n const [metaDesc, setMetaDesc] = useState('');\n const [showSearchBox, setShowSearchBox] = useState(false);\n const location = useLocation();\n let { contentType, contentId } = useParams();\n\n if (post && post.length) {\n contentType = post.split('/')[0];\n contentId = post.split('/')[1];\n }\n if (contentData && contentData.length) contentType = contentData;\n\n useEffect(() => {\n const source = Axios.CancelToken.source();\n Axios.get(\n `${urls.cms}/p${contentType}s/${contentId}?_fields=id,date,title,content,acf`,\n {cancelToken: source.token}\n )\n .then((response) => {\n setTheData(response.data);\n });\n return () => {source.cancel()};\n }, [contentId, contentType]);\n\n useEffect(() => {\n if (!theData) return;\n setPostData(theData.content.rendered || 'Sorry, there was a problem fetching the content. Please try again.');\n setTitleData(theData.title.rendered || 'Could not fetch the content.');\n setMetaTitle(theData.acf.document_title || theData.title.rendered);\n setMetaDesc(\n theData.acf.meta_description !== null ? theData.acf.meta_description : t('global.page.defaultMetaDesc'),\n );\n if (theData.acf.show_search_box) setShowSearchBox(theData.acf.show_search_box);\n }, [theData]);\n\n return (\n <>\n \n {metaTitle}\n \n \n \n \n {showSearchBox && (\n \n \n \n )}\n \n \n \n \n \n \n \n );\n};\n\nexport default FetchContent;\n","import React, { useState, useEffect } from 'react';\nimport { Accordion, Card, Container } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport { urls, config } from '../../../config';\nimport { t } from '../../../text';\n\nfunction TermsConditions() {\n const [termData, setTermData] = useState([]);\n const [active, setActive] = useState('0');\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/terms/?_fields=title.rendered,content.rendered,acf.order&status=publish&per_page=99&filter[meta_key]=use_on_site&filter[meta_compare]=LIKE&filter[meta_value]=${config.siteCode}`,\n { signal: controller.signal },\n )\n .then((response) => response.json())\n .then((data) => {\n data.sort((a, b) => {\n return a.acf.order - b.acf.order;\n });\n setTermData(data);\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n\n return () => {\n controller.abort();\n };\n }, []);\n\n return (\n <>\n \n Terms & Conditions\n \n \n \n \n \n {/* Delete these from here and text.js after mid-June or so \n

{t('termsConditions.firstHeading', config)}

\n

{t('termsConditions.firstText')}

\n */}\n

{t('termsConditions.secondHeading', config)}

\n

{t('termsConditions.secondText')}

\n \n {termData.map((term, i) => {\n return (\n \n setActive('' + i)}>\n {term.title.rendered}\n \n \n \n \n \n );\n })}\n \n
\n \n );\n}\n\nexport default TermsConditions;\n","import React from 'react';\nimport { Col, Row, Tab } from 'react-bootstrap';\nimport ParkCard from '../../../components/ParkCard/ParkCard';\n\nconst PopularHolidays = ({ data }) => {\n return (\n \n \n {data.map((result) => (\n \n \n \n ))}\n \n \n );\n};\n\nexport default PopularHolidays;\n","import React from 'react';\nimport { Button, Card, Col, Row, Tab } from 'react-bootstrap';\nimport useFetchData from '../TravelHooks/useFetchData';\n\nconst PopularLocations = ({ popLocData }) => {\n const posts = useFetchData(popLocData, 'popular-locations');\n\n return (\n \n \n \n

Popular Locations

\n
\n \n \n {posts.map((pl, i) => {\n return (\n \n

\n {pl.title.rendered}\n

{pl.acf.description}

\n \n \n );\n })}\n \n \n \n \n );\n};\n\nexport default PopularLocations;\n","import React, { lazy, Suspense, useEffect, useLayoutEffect, useState } from 'react';\nimport { Col, Container, Dropdown, Row, Tab, Tabs } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation, useParams } from 'react-router-dom';\nimport Slider from 'react-slick';\nimport { urls } from '../../../config';\nimport { channels } from '../../redux/data/channels/selectors';\nimport { getSpecificParks } from '../../redux/data/parks/selectors';\nimport t from '../../../text';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport { getParks } from '../../redux/data/parks/actions';\nimport { decodeHtml } from '../../utils/string';\nimport PopularHolidays from './TravelGuideChildren/PopularHolidays';\nimport PopularLocations from './TravelGuideChildren/PopularLocations';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\nimport SearchPopup from '../../components/Browse/SearchPopup';\nimport { selectChannel, selectRegion } from '../../redux/search/form/actions';\n\nfunction TravelGuide() {\n const dispatch = useDispatch();\n const { regionId } = useParams();\n const [descriptionData, setDescriptionData] = useState('Just getting your content...');\n const [popLocData, setPopLocData] = useState([]);\n const [popHolsData, setPopHolsData] = useState([]);\n const [blogData, setBlogData] = useState([]);\n const [ttdData, setTtdData] = useState([]);\n const [expertInsight, setExpertInsight] = useState([]);\n const [sliderItemsRaw, setSliderItemsRaw] = useState([]);\n const [titleData, setTitleData] = useState('Loading...');\n const [metaTitle, setMetaTitle] = useState('Loading...');\n const [bottomText, setBottomText] = useState('');\n const [metaDesc, setMetaDesc] = useState('');\n const ExpertInsight = lazy(() => import('./TravelGuideChildren/ExpertInsight'));\n const ThingsToDo = lazy(() => import('./TravelGuideChildren/ThingsToDo'));\n const [activeTab, setActiveTab] = useState('popular-holidays');\n const availableTabs = [\n { name: 'Popular Holidays', key: 'popular-holidays' },\n { name: 'Popular Locations', key: 'popular-locations' },\n { name: 'Things to Do', key: 'things-to-do' },\n { name: 'Expert Insight', key: 'expert-insight' }\n ];\n const location = useLocation();\n const RegionName = useSelector((state) => state.data.regions.regions[regionId].name);\n\n useLayoutEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/travel-guides/?filter[meta_key]=region-id&filter[meta_value]=${regionId}&_fields=title,content,acf,bottom_text`,\n { signal: controller.signal },\n )\n .then((response) => response.json())\n .then((data) => {\n const wpData = data[0];\n setDescriptionData(wpData.content.rendered);\n setTitleData(wpData.title.rendered);\n setMetaTitle(wpData.acf.document_title || wpData.title.rendered);\n setMetaDesc(wpData.acf.meta_description || t('global.page.defaultMetaDesc'));\n setPopLocData(wpData.acf['popular-locations']);\n setPopHolsData(wpData.acf['popular_holidays'] || []);\n setTtdData(wpData.acf['things-to-do']);\n setExpertInsight(wpData.acf['expert-insight']);\n setBlogData(wpData.acf['travel-blogs'] || []);\n setSliderItemsRaw(wpData.acf['travel_guide_images'] || []);\n if (wpData.acf['bottom_text']) {\n setBottomText(decodeHtml(wpData.acf['bottom_text']).replace(/\\n/g, '
'));\n }\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n setDescriptionData('Sorry, there was a problem fetching the content. Please try again.');\n setTitleData('Could not fetch the content.');\n });\n\n return () => {\n controller.abort();\n };\n }, [regionId]);\n\n useEffect(() => {\n selectChannel(dispatch, 'ukcaravan');\n selectRegion(dispatch, regionId);\n }, [dispatch, regionId]);\n\n // Following code is to determine data and channel codes for popular holidays,\n // done in the parent so the tab can be hidden if there are no results\n\n // This makes sure all the parks for this region are in redux\n getParks(dispatch, regionId, true);\n\n // Get available channels for this skin, filter out bad ones\n const availableChannels = useSelector(channels);\n const channelCodes = availableChannels.map((channel) => channel.code);\n const dataWithCorrectChannels = popHolsData.filter((park) => channelCodes.includes(park.channel_id));\n\n // Get the id's of the park we want and then fetch the parks from redux\n const parkIds = dataWithCorrectChannels.map((park) => parseInt(park.park_id));\n const _parksData = useSelector((state) => getSpecificParks(state, parkIds));\n\n // Get the channels of the parks we have\n const parkChannels = popHolsData.map((park) => park.channel_id);\n\n // Filter and merge the data and channels into an array of objects rather than two arrays\n let mergedData = [];\n _parksData.forEach((park, i) => {\n if (typeof park !== 'undefined' && park.regn === regionId) {\n mergedData.push({ park, channel: parkChannels[i] });\n }\n });\n\n let SliderItems = [];\n\n if (sliderItemsRaw.length > 0) {\n SliderItems = sliderItemsRaw.map((img, i) => (\n \n ));\n }\n\n const gallerySettings = {\n className: \"park-page-gallery\",\n lazyLoad: true,\n infinite: true,\n centerMode: true,\n centerPadding: \"0\",\n slidesToShow: 3,\n responsive: [\n {\n breakpoint: 960,\n settings: {\n className: 'park-page-gallery-unset',\n centerMode: false,\n slidesToShow: 1,\n }\n }\n ]\n };\n\n const getContent = (activeTab) => {\n switch (activeTab) {\n case 'popular-holidays':\n return ;\n case 'popular-locations':\n return ;\n case 'things-to-do':\n return

}>;\n case 'expert-insight':\n return }>;\n default:\n return
;\n }\n };\n\n return (\n <>\n \n {metaTitle}\n 0 ? metaDesc : ''} />\n \n \n \n \n\n \n \n \n }>\n \n {SliderItems}\n \n \n \n \n \n\n \n \n \n \n

Book your next holiday to {RegionName} today...

\n \n \n \n \n
\n
\n
\n\n \n \n \n setActiveTab(k)}\n >\n {availableTabs.map((tab, i) => \n setActiveTab(tab.key)}\n title={tab.name}\n />\n )}\n \n\n \n \n \n {availableTabs.filter((obj) => obj.key === activeTab)[0].name}\n \n \n \n {availableTabs.map((item) => (\n setActiveTab(item.key)}>\n {item.name}\n \n ))}\n \n \n\n {getContent(activeTab)}\n \n \n \n \n \n \n\n\n {bottomText.length > 0 && (\n \n \n \n

\n \n
\n
\n )}\n \n );\n}\n\nexport default TravelGuide;\n","import { createSelector } from 'reselect';\n\nimport { operators } from '../../data/operators/selectors';\nimport { parks, regionParkIds } from '../../data/parks/selectors';\nimport { regions } from '../../data/regions/selectors';\n\nimport { getOperatorById } from '../../data/operators/utils';\nimport { getParksByRegionId } from '../../data/parks/utils';\nimport { getRegionById } from '../../data/regions/utils';\n\n// Selectors\nexport const channelId = (state) => state.pages.browseParks.channelId;\nexport const operatorFilters = (state) => state.pages.browseParks.operatorFilters;\nexport const regionId = (state) => state.pages.browseParks.regionId;\n\nexport const processedResults = createSelector(\n operators,\n parks,\n regionParkIds,\n regionId,\n channelId,\n (_operators, _parks, _regionParkIds, _regionId) => {\n return (getParksByRegionId(_parks, _regionParkIds, _regionId) || []).map((park) => ({\n park,\n operator: getOperatorById(_operators, park.opId),\n }));\n },\n);\n\nexport const region = createSelector(regions, regionId, (_regions, _regionId) => {\n return getRegionById(_regions, _regionId);\n});\n","import React, { useEffect, lazy, Suspense } from 'react';\nimport { Container } from 'react-bootstrap';\nimport { useParams, useLocation } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Helmet } from 'react-helmet-async';\nimport ParkCard from '../../components/ParkCard/ParkCard';\nimport ParksListFilterView from '../../components/ParksListFilterView/ParksListFilterView';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithOperators from '../../components/HOC/WithOperators';\nimport WithParks from '../../components/HOC/WithParks';\nimport WithRegions from '../../components/HOC/WithRegions';\nimport WithUpdatedSearchParams from '../../components/HOC/WithUpdatedSearchParams';\n\nimport { selectChannel, selectRegion } from '../../redux/pages/browseParks/actions';\nimport {\n channelId as selectedChannelId,\n regionId as selectedRegionId,\n processedResults,\n region,\n} from '../../redux/pages/browseParks/selectors';\nimport t from '../../../text';\nimport { resetBFilters, resetNFilters } from '../../redux/appState/actions';\nimport { accommodationType } from '../../utils/utils';\n//import { town } from '../../redux/user/selectors';\n\nconst FetchTravelGuide = lazy(() => import('../../components/SearchResults/FetchTravelGuide'));\n\nexport const Parks = () => {\n const dispatch = useDispatch();\n const { channelId, regionId, townId } = useParams();\n const _parkResults = useSelector(processedResults);\n const _region = useSelector(region);\n const _selectedChannelId = useSelector(selectedChannelId);\n const _selectedRegionId = useSelector(selectedRegionId);\n const isTownPage = townId !== undefined;\n const parkRoute = channelId === 'boats' ? 'boat' : 'holidays';\n const townName = useSelector((state) => state.data.parks.townList[townId]);\n const location = useLocation();\n\n useEffect(() => {\n if (channelId !== _selectedChannelId) selectChannel(dispatch, channelId);\n if (regionId !== _selectedRegionId) selectRegion(dispatch, regionId);\n }, [dispatch, channelId, regionId, _selectedChannelId, _selectedRegionId]);\n\n useEffect(() => {\n resetNFilters(dispatch);\n resetBFilters(dispatch);\n }, [dispatch]);\n\n return (\n <>\n \n {_region?.name && t('browse.parks.title', _region.name, channelId)}\n \n \n \n \n \n \n \n \n \n \n \n (\n \n )}\n sortByName={true}\n />\n {t('travelGuide.checkingForTravelGuide')}}\n >\n \n \n \n \n \n \n \n );\n};\n\nexport default Parks;\n","import { SELECT_CHANNEL, SELECT_REGION } from './action-types';\n\nexport const selectChannel = (dispatch, channelId) => {\n return dispatch({ type: SELECT_CHANNEL, payload: channelId });\n};\n\nexport const selectRegion = (dispatch, regionId) => {\n return dispatch({ type: SELECT_REGION, payload: regionId });\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { Col, Card } from 'react-bootstrap';\n\nimport NoImage from '../../assets/images/no-image-640-320.png';\nimport { slugify } from '../../utils/string';\nimport t from '../../../text';\nimport SearchPopup from './SearchPopup';\n\nexport const RegionCard = ({ name, desc, url, id, channelCode, opId, showPetFriendly }) => {\n const imgUrl = showPetFriendly\n ? `//content.breakfreeholidays.co.uk/images/pet-friendly/${id}.jpg`\n : `//content.breakfreeholidays.co.uk/assets/images/regions/${id}/hero.jpg`;\n\n return (\n \n \n {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n />\n \n \n {name}\n \n {desc}\n \n \n \n \n {t('buttons.viewX', name)}\n \n \n \n \n );\n};\n\nRegionCard.defaultProps = {\n url: '/holidays',\n};\n\nRegionCard.propTypes = {\n name: PropTypes.string,\n desc: PropTypes.string,\n url: PropTypes.string,\n id: PropTypes.string,\n channelCode: PropTypes.string,\n opId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default RegionCard;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { getOperatorRegions } from '../../redux/data/regions/actions';\nimport {\n getOperatorRegionsHasFailed,\n getOperatorRegionsIsLoading,\n getOperatorRegionsIsLoaded,\n} from '../../redux/data/regions/selectors';\n\nimport useDataLoader from '../../hooks/useDataLoader';\n\nexport function WithOperatorRegions(props) {\n const getData = (dispatch, force) => getOperatorRegions(dispatch, props.channelId, props.operatorId, force);\n const _hasFailed = useSelector((state) => getOperatorRegionsHasFailed(state, props.channelId, props.operatorId));\n const _isLoaded = useSelector((state) => getOperatorRegionsIsLoaded(state, props.channelId, props.operatorId));\n const _isLoading = useSelector((state) => getOperatorRegionsIsLoading(state, props.channelId, props.operatorId));\n const _isReady = !!props.channelId && !!props.operatorId;\n\n return useDataLoader(props, getData, _hasFailed, _isLoaded, _isLoading, _isReady);\n}\n\nWithOperatorRegions.propTypes = {\n channelId: PropTypes.string,\n operatorId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n\nexport default WithOperatorRegions;\n","import { createSelector } from 'reselect';\n\nimport { channels } from '../../data/channels/selectors';\nimport { operators } from '../../data/operators/selectors';\nimport { regions, operatorChannelRegionIds } from '../../data/regions/selectors';\n\nimport { getChannelById } from '../../data/channels/utils';\nimport { getOperatorById } from '../../data/operators/utils';\nimport { getOperatorRegionsById } from '../../data/regions/utils';\n\n// Utils\n// const filterResultsWithHiddenOperators = (operators, results) => {\n// if (!operators || !results) return results;\n\n// return results.filter((park) => operators[park.opId]?.list === 'true');\n// };\n\n// Selectors\nexport const channelId = (state) => state.pages.browseOperatorRegions.channelId;\nexport const operatorId = (state) => state.pages.browseOperatorRegions.operatorId;\n\nexport const processedResults = createSelector(\n regions,\n operatorChannelRegionIds,\n channelId,\n operatorId,\n (_regions, _operatorChannelRegionIds, _channelId, _operatorId) => {\n let results = getOperatorRegionsById(_regions, _operatorChannelRegionIds, _channelId, _operatorId);\n\n // if (_channelId === 'ukcaravan') {\n // _regionParks = filterResultsWithHiddenOperators(_operators, _regionParks);\n // }\n\n return results;\n },\n);\n\nexport const channel = createSelector(channels, channelId, (_channels, _channelId) => {\n return getChannelById(_channels, _channelId);\n});\n\nexport const operator = createSelector(operators, operatorId, (_operators, _operatorId) => {\n return getOperatorById(_operators, _operatorId);\n});\n","import { useState, useEffect } from 'react';\nimport { urls } from '../../config';\n\nexport const useSeoText = (format) => {\n const [topText, setTopText] = useState(null);\n const [bottomText, setBottomText] = useState(null);\n\n const currentURLPath = window.location.pathname.slice(1);\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/seo-text/?filter[meta_key]=url_path&filter[meta_value]=${currentURLPath}&_fields=acf.top_text,acf.bottom_text`,\n { signal: controller.signal },\n )\n .then((data) => data.json())\n .then((data) => {\n const seoText = data[0].acf;\n if ('top_text' in seoText && seoText.top_text.length > 0) {\n setTopText(seoText.top_text);\n }\n if ('bottom_text' in seoText && seoText.bottom_text.length > 0) {\n setBottomText(seoText.bottom_text);\n }\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n return () => {\n controller.abort();\n };\n }, [currentURLPath, format]);\n\n return [topText, bottomText];\n};\n\nexport default useSeoText;\n","import { useState, useEffect } from 'react';\nimport { urls, config } from '../../config';\n\nexport const useOfferCols = () => {\n const [offers, setOffers] = useState([]);\n\n const currentURLPath = window.location.pathname.slice(1);\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/offers/?filter[meta_key]=use_on_site&filter[meta_key]=url_path&filter[meta_compare]=LIKE&filter[meta_value]=${config.siteCode}&filter[meta_value]=${currentURLPath}&_fields=acf`,\n { signal: controller.signal }\n )\n .then((data) => data.json())\n .then((data) => {\n if (data.length > 0) setOffers(data[0].acf.offers || []);\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n\n return () => {\n controller.abort();\n };\n }, [currentURLPath]);\n\n return [offers, !!offers.length];\n};\n\nexport default useOfferCols;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport RegionCard from '../../components/Browse/RegionCard';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithOperatorRegions from '../../components/HOC/WithOperatorRegions';\nimport WithOperators from '../../components/HOC/WithOperators';\n\nimport { selectChannel, selectOperator } from '../../redux/pages/browseOperatorRegions/actions';\nimport { channel, operator, processedResults } from '../../redux/pages/browseOperatorRegions/selectors';\n\nimport ColumnComponent from '../../components/Common/ColumnComponent';\n\nimport useSeoText from '../../hooks/useSeoText';\nimport t from '../../../text';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\nimport useOfferCols from '../../hooks/useOfferCols';\n\nconst OperatorRegions = () => {\n const dispatch = useDispatch();\n const { operatorId, channelCode } = useParams();\n\n const operatorRegions = useSelector(processedResults) || [];\n const thisChannel = useSelector(channel);\n const thisOperator = useSelector(operator);\n const [topSeoText, bottomSeoText] = useSeoText();\n\n useEffect(() => {\n selectChannel(dispatch, channelCode);\n selectOperator(dispatch, operatorId);\n }, [dispatch, channelCode, operatorId]);\n\n const [offers, offersExist] = useOfferCols();\n const { pathname } = useLocation();\n\n return (\n <>\n \n {t('browse.operatorRegions.title', thisChannel?.name, thisOperator?.name)}\n \n \n \n
\n \n \n \n \n \n\n \n \n \n \n \n \n {offersExist && }\n \n {operatorRegions.length > 0 &&\n operatorRegions.map((region) => (\n \n ))}\n \n \n \n \n \n \n
\n \n );\n};\n\nOperatorRegions.propTypes = {\n channelRegions: PropTypes.func,\n channelName: PropTypes.func,\n getChannelRegions: PropTypes.func,\n};\n\nexport default OperatorRegions;\n","import { SELECT_CHANNEL, SELECT_OPERATOR } from './action-types';\n\nexport const selectChannel = (dispatch, channelId) => {\n return dispatch({ type: SELECT_CHANNEL, payload: channelId });\n};\n\nexport const selectOperator = (dispatch, operatorId) => {\n return dispatch({ type: SELECT_OPERATOR, payload: operatorId });\n};\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Card } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nimport NoImage from '../../assets/images/no-image.png';\n\nexport const OperatorCard = ({ channelId, operator }) => (\n \n \n {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n />\n \n

{operator.name}

\n
\n
\n \n);\n\nOperatorCard.propTypes = {\n channelId: PropTypes.string,\n operator: PropTypes.object,\n};\n\nexport default memo(OperatorCard);\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport t from '../../../text';\nimport OperatorCard from '../../components/Browse/OperatorCard';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithOperators from '../../components/HOC/WithOperators';\nimport { getOperatorsByChannelId } from '../../redux/data/operators/utils';\n\nconst OperatorRow = ({ channelCode, channelName, allChannelOperatorIds, allOperators }) => {\n const results = getOperatorsByChannelId(allOperators, allChannelOperatorIds, channelCode);\n\n const sortAndFilterResults = (results) => {\n let output = [...results];\n output = output.filter((operator) => operator.list === 'true');\n output.sort((a, b) => +b.seq - +a.seq);\n return output;\n };\n\n const sortedResults = sortAndFilterResults(results);\n\n if (sortedResults.length === 0) return null;\n return (\n \n \n

{channelName}

\n \n \n \n {sortedResults.map((operator) => (\n \n \n \n ))}\n \n \n \n \n
\n );\n};\n\nexport default OperatorRow;\n","import React from 'react';\nimport { Alert, Container } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport t from '../../../text';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\nimport useSeoText from '../../hooks/useSeoText';\nimport { channels } from '../../redux/data/channels/selectors';\nimport { channelOperatorIds, operators } from '../../redux/data/operators/selectors';\nimport OperatorRow from './OperatorRow';\n\nfunction Operators() {\n const { channelCode } = useParams();\n\n let _allChannels = useSelector(channels);\n const _allChannelOperatorIds = useSelector(channelOperatorIds);\n const _allOperators = useSelector(operators);\n\n let channelsToShow = _allChannels;\n // If channelCode is all or undefined show all data, otherwise filter them\n if (channelCode !== 'all' && channelCode !== undefined) {\n channelsToShow = _allChannels.filter((channel) => channel.code === channelCode);\n }\n\n const [topSeoText, bottomSeoText] = useSeoText(window.location.pathname.slice(1));\n\n return (\n <>\n \n {t('operators.document.title')}\n \n \n \n \n \n \n \n \n \n \n \n {channelsToShow.length < 1 && (\n \n \n ⚠️\n {' '}\n You have entered an invalid channel name.\n \n )}\n {channelsToShow.map((channel) => {\n return (\n \n );\n })}\n \n \n \n );\n}\n\nexport default Operators;\n","import { createSelector } from 'reselect';\n\nimport { channels } from '../../data/channels/selectors';\nimport { regions, channelRegionIds } from '../../data/regions/selectors';\n\nimport { getChannelById } from '../../data/channels/utils';\nimport { getRegionsByChannelId } from '../../data/regions/utils';\n\n// utils\nfunction sortAlphabetically(a, b) {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n return 0;\n}\n\nexport const channelId = (state) => state.pages.browseRegions.channelId;\n\nexport const channelRegions = createSelector(\n regions,\n channelRegionIds,\n channelId,\n (_regions, _channelRegionIds, _channelId) => {\n let results = getRegionsByChannelId(_regions, _channelRegionIds, _channelId);\n if (!Array.isArray(results)) return undefined;\n\n results.filter((region) => region.id !== '15'); // Lose Ireland\n results.sort(sortAlphabetically);\n\n return results;\n },\n);\n\nexport const channel = createSelector(channels, channelId, (_channels, _channelId) => {\n return getChannelById(_channels, _channelId);\n});\n","import React, { useEffect, useLayoutEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Container, Row } from 'react-bootstrap';\nimport { useParams, useLocation } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\nimport PageTitle from '../../components/PageTitle';\nimport RedEye from '../../components/RedEye/RedEye';\nimport RegionCard from '../../components/Browse/RegionCard';\nimport ScrollToTop from '../../components/ScrollToTop';\nimport SearchBox from '../../components/SearchBox/SearchBox';\nimport WithLoadingStates from '../../components/HOC/WithLoadingStates';\nimport WithRegions from '../../components/HOC/WithRegions';\nimport { selectChannel } from '../../redux/pages/browseRegions/actions';\nimport { selectChannel as search_selectChannel } from '../../redux/search/form/actions';\nimport { channel, channelId, channelRegions } from '../../redux/pages/browseRegions/selectors';\n\nimport t from '../../../text';\nimport useSeoText from '../../hooks/useSeoText';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\n\nexport const Regions = () => {\n const dispatch = useDispatch();\n const { channelCode } = useParams();\n const _channelId = useSelector(channelId);\n const _channel = useSelector(channel);\n const _channelRegions = useSelector(channelRegions);\n const [topSeoText, bottomSeoText] = useState(useSeoText());\n const { pathname } = useLocation();\n const isPetFriendly = /^\\/dog-friendly/.test(pathname);\n\n useEffect(() => {\n selectChannel(dispatch, channelCode);\n search_selectChannel(dispatch, channelCode);\n }, [dispatch, channelCode]);\n\n useLayoutEffect(() => {\n if (_channelRegions && isPetFriendly) {\n _channelRegions.filter((r) => r.dogs === 'Y');\n }\n }, [_channelRegions, isPetFriendly]);\n\n return (\n <>\n \n {t('browse.regions.title', isPetFriendly, _channel?.name)}\n \n \n \n
\n \n \n \n \n \n\n \n \n \n\n \n \n \n {_channelRegions &&\n _channelRegions.map((region) => (\n \n ))}\n \n \n \n\n \n \n \n
\n \n );\n};\n\nexport default Regions;\n","import { SELECT_CHANNEL } from './action-types';\n\nexport const selectChannel = (dispatch, channelId) => {\n return dispatch({ type: SELECT_CHANNEL, payload: channelId });\n};\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Container, Row, Col, Card } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\nimport NoImage from '../../assets/images/no-image.png';\nimport PageTitle from '../../components/PageTitle';\nimport ScrollToTop from '../../components/ScrollToTop';\n\nimport { decodeHtml, slugify } from '../../utils/string';\nimport { urls } from '../../../config';\n\nimport useSeoText from '../../hooks/useSeoText';\nimport TruncatedTextAlt from '../../components/TruncatedTextAlt';\nimport SearchPopup from '../../components/Browse/SearchPopup';\nimport t from '../../../text';\n\nfunction TravelGuideHome() {\n const [travelGuides, setTravelGuides] = useState([]);\n\n useEffect(() => {\n const controller = new AbortController();\n fetch(\n `${urls.cms}/travel-guides?per_page=100&_fields=title.rendered,acf.travel_guide_images,acf.region-id`,\n { signal: controller.signal },\n )\n .then((response) => response.json())\n .then((data) => {\n data.sort((a, b) => {\n return a.title.rendered.localeCompare(b.title.rendered);\n });\n setTravelGuides(data);\n })\n .catch((e) => {\n console.error('Could not fetch the content.', e);\n });\n return () => {\n controller.abort();\n };\n }, []);\n\n const [topSeoText, bottomSeoText] = useSeoText();\n\n const removeLastTwoWords = (str) => {\n return str.split(' ').slice(0, -2).join(' ');\n };\n\n return (\n <>\n \n Browse all Travel Guides\n \n \n \n \n \n \n \n {travelGuides.map((guide) => (\n \n \n {\n e.target.onerror = null;\n e.target.src = NoImage;\n }}\n />\n \n \n {removeLastTwoWords(decodeHtml(guide.title.rendered))}\n \n \n \n \n \n {t('buttons.viewX', removeLastTwoWords(decodeHtml(guide.title.rendered)))}\n \n \n \n \n ))}\n \n \n \n \n );\n}\n\nexport default TravelGuideHome;\n","import React from 'react';\nimport { Container, Row, Col } from 'react-bootstrap';\nimport { Helmet } from 'react-helmet-async';\n\nfunction Reset() {\n const deleteReduxSessionStorage = () => {\n if (sessionStorage.getItem('redux')) {\n console.info('Deleteing sessionStorage.redux...', sessionStorage.getItem('redux').length);\n sessionStorage.removeItem('redux');\n } else {\n console.info('Deleted sessionStorage.redux. Redirecting...');\n clearInterval(runDelete);\n document.location.href = '/';\n }\n };\n\n const runDelete = setInterval(deleteReduxSessionStorage, 99);\n\n return (\n <>\n \n Reset Data\n \n \n \n \n

Application data reset

\n
\n

\n All application data has now been deleted. You will be redirected to the homepage shortly,\n please wait for the page to refresh.\n

\n \n
\n
\n \n );\n}\n\nexport default Reset;\n","import React from 'react';\nimport { Switch, Route, Redirect } from 'react-router';\nimport Home from './pages/Home/container';\nimport { contentRoutes } from '../config';\nimport ContactUs from './pages/ContactUs/ContactUs';\nimport NotFound from './pages/404';\nimport ChangePassword from './pages/ChangePassword/ChangePassword';\nimport Login from './pages/Login/container';\nimport MyAccount from './pages/MyAccount/MyAccount';\nimport SearchResults from './pages/SearchResults/SearchResults';\nimport ParkPage from './pages/HolidayPark/ParkPage';\nimport ParkFromSearch from './pages/ParkFromSearch';\nimport Booking from './pages/Booking/Booking';\nimport FAQ from './pages/Content/FAQ';\nimport FetchContent from './pages/Content/FetchContent';\nimport TermsConditions from './pages/Content/TermsConditions';\nimport TravelGuide from './pages/Content/TravelGuide';\nimport Parks from './pages/Browse/Parks';\nimport OperatorRegions from './pages/Browse/OperatorRegions';\nimport Operators from './pages/Browse/Operators';\nimport Regions from './pages/Browse/Regions';\nimport TravelGuideHome from './pages/TravelGuideHome/TravelGuideHome';\nimport Reset from './pages/Reset';\n\nexport const Routes = () => (\n \n \n {/* Search & Booking */}\n \n \n \n \n \n \n \n \n {/* Browsing */}\n \n \n \n \n \n \n \n \n {/* <-- Search & Booking */}\n {/* <-- Town pages */}\n \n \n \n {/* User */}\n \n \n \n {/* Content */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* CMS content */}\n {contentRoutes.map((route) => (\n } />\n ))}\n {/* Dev tools */}\n \n \n \n \n);\n\nexport default Routes;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { NavLink, useLocation } from 'react-router-dom';\n\nimport t from '../../../text';\nimport starWhite from '../../assets/images/white-star.svg';\n\nexport const HeaderBar = ({ loggedIn, onLogout, onShowLogin }) => {\n const location = useLocation();\n return (\n
\n {!loggedIn ? (\n <>\n \n \n ) : (\n <>\n \n {location.pathname.includes('/booking/') ? (\n \n ) : (\n \n {t('header.myAccount')}\n \n )}\n \n )}\n\n {location.pathname.includes('/booking/') && (\n \n {t('header.cs.tel')}\n \n )}\n\n \n See our reviews on \"Trustpilot Trustpilot\n \n
\n )\n};\n\nHeaderBar.propTypes = {\n loggedIn: PropTypes.bool,\n onLogout: PropTypes.func,\n onShowLogin: PropTypes.func,\n};\n\nexport default HeaderBar;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\n\nimport { loggedIn } from '../../redux/user/selectors';\n\nimport Login from './Login';\n\nexport const LoginModal = (props) => {\n const _loggedIn = useSelector(loggedIn);\n\n useEffect(() => {\n if (props.show && _loggedIn && props.onClose) props.onClose();\n }, [_loggedIn, props]);\n\n return (\n <>\n \n \n \n Are you a member?\n \n \n \n \n \n \n \n );\n};\n\nLoginModal.propTypes = {\n onClose: PropTypes.func,\n redirectOnLogin: PropTypes.bool,\n show: PropTypes.bool,\n};\n\nexport default LoginModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Nav, Button } from 'react-bootstrap';\nimport { NavLink } from 'react-router-dom';\n\nimport Icon from '../Icon';\nimport t from '../../../text';\n\nexport const HeaderNavLoginButtons = ({ loggedIn, onLogout, onShowLogin, showBackground }) => (\n \n);\n\nHeaderNavLoginButtons.propTypes = {\n loggedIn: PropTypes.bool,\n onLogout: PropTypes.func,\n onShowLogin: PropTypes.func,\n showBackground: PropTypes.bool,\n};\n\nexport default HeaderNavLoginButtons;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport A from '../A';\nimport { useDispatch } from 'react-redux';\nimport { selectChannel, selectRegion } from '../../redux/search/form/actions';\n\nfunction MegaMenuColumn({section, setExpanded, channelId}) {\n const dispatch = useDispatch();\n\n const getLink = (text, url) => {\n let path = url || false;\n if (!path) return text;\n if (/^http.*/gi.test(path)) return {text};\n \n const numberRegex = /\\d+/g;\n const regionIdFromUrl = url.match(numberRegex);\n \n return (\n {\n selectChannel(dispatch, channelId);\n if (regionIdFromUrl && regionIdFromUrl.length > 0) {\n selectRegion(dispatch, regionIdFromUrl[0])\n }\n setExpanded(false)}\n }>\n {text}\n \n );\n };\n\n return (\n <>\n

{section.title}

\n
    \n {section.links.map((link, i) => {\n return (\n
  • {getLink(link.text, link.url)}
  • \n );\n })}\n
\n \n );\n}\n\nexport default MegaMenuColumn;\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport A from '../A';\n\nexport const HeaderNavLink = ({ label, href, external }) => {\n if (external) {\n return (\n \n {label}\n \n );\n }\n return (\n \n {label}\n \n );\n};\n\nHeaderNavLink.propTypes = {\n label: PropTypes.string,\n href: PropTypes.string,\n external: PropTypes.bool,\n};\n\nexport default HeaderNavLink;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Col, Container, Nav, Navbar, NavDropdown, Row } from 'react-bootstrap';\nimport { Link, NavLink, useLocation } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport HeaderNavLoginButtons from './HeaderNavLoginButtons';\nimport Logo from '../Logo';\nimport { config, images } from '../../../config';\nimport { channels } from '../../redux/data/channels/selectors';\nimport MegaMenuColumn from './MegaMenuColumn';\nimport HeaderNavLink from './HeaderNavLink';\n\nexport const HeaderNav = ({ loggedIn, onLogout, onShowLogin, menuData }) => {\n const [showBackground, setShowBackground] = useState(config['header.static']);\n const [expanded, setExpanded] = useState(false);\n const location = useLocation();\n const backgroundStatus = useRef();\n const theNavBar = useRef();\n\n // channel data and sort\n const Channels = useSelector(channels);\n let menuItems = ['hotels'];\n const sortOrder = ['ukcaravan', 'eurocaravan', 'uklodge', 'hotels', 'uktouring', 'boats', 'ukcottages'];\n\n Channels.map((channel) => {\n if (channel.code !== 'uktouring') return menuItems.push(channel.code);\n else return false;\n });\n\n menuItems.sort(function (a, b) {\n return sortOrder.indexOf(a) - sortOrder.indexOf(b);\n });\n\n // Handle changing of nav background when scrolling\n backgroundStatus.current = showBackground;\n useEffect(() => {\n if (!config['header.static']) {\n const handleScroll = () => {\n const show = window.scrollY > 97;\n if (backgroundStatus.current !== show) {\n backgroundStatus.current = show;\n setShowBackground(show);\n }\n };\n document.addEventListener('scroll', handleScroll);\n return () => document.removeEventListener('scroll', handleScroll);\n }\n }, []);\n\n // Collapse nav whenever we change route\n useEffect(() => {\n setExpanded(false);\n theNavBar.current.click();\n }, [location]);\n\n return (\n \n \n \n \n \n \n \n\n setExpanded(!expanded)}\n >\n \n \n\n \n \n \n \n \n \n );\n};\n\nHeaderNav.propTypes = {\n loggedIn: PropTypes.bool,\n onLogout: PropTypes.func,\n onShowLogin: PropTypes.func,\n};\n\nexport default HeaderNav;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { logout } from '../../redux/user/actions';\nimport { loggedIn } from '../../redux/user/selectors';\nimport { config } from '../../../config';\nimport HeaderBar from './HeaderBar';\nimport LoginModal from '../Login/LoginModal';\nimport MegaMenuNav from './MegaMenu';\n\nfunction Header() {\n const dispatch = useDispatch();\n const location = useLocation();\n const [hasMenuData, setHasMenuData] = useState(false);\n const [menuData, setMenuData] = useState();\n const [showLoginForm, setShowLoginForm] = useState(false);\n const _loggedIn = useSelector(loggedIn);\n const handleHideLoginForm = () => setShowLoginForm(false);\n const handleLogout = () => logout(dispatch);\n const handleShowLoginForm = () => setShowLoginForm(true);\n const menuJSON = '/json-files/' + config['header.megaMenu'];\n\n useEffect(() => {\n // Fetch menu json\n const controller = new AbortController();\n fetch(menuJSON, { signal: controller.signal })\n .then((response) => response.json())\n .then((data) => {\n setMenuData(data);\n })\n .catch((error) => {\n console.error('Error: ' + error.message);\n })\n .finally(() => {\n setHasMenuData(true);\n });\n return () => {\n controller.abort();\n };\n }, [menuJSON]);\n\n return hasMenuData && menuData !== undefined ? (\n <>\n \n {!(location.pathname.includes('/booking/')) && (\n \n )}\n \n \n ) : (\n <>\n );\n}\n\nexport default Header;\n","import { GET_INIT_DATA } from './action-types';\nimport { getRequestStatus } from '../requests/selectors';\n\nexport const isReady = (state) => state.init.ready;\nexport const [isFetching, hasError, errorData] = getRequestStatus(GET_INIT_DATA);\n","import { APP_INIT, GET_INIT_DATA } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../apiRequest';\nimport { config, urls } from '../../../config';\n\nimport { isReady, isFetching, hasError } from '../../redux/init/selectors';\n\nexport const appInit = (dispatch) => {\n dispatch({ type: APP_INIT });\n};\n\nexport const getInitData = (dispatch, force) => {\n dispatch((d, getState) => {\n const state = getState();\n const _isLoading = isFetching(state);\n const _isLoaded = isReady(state);\n const _hasError = hasError(state);\n\n if (checkRequestNeeded(true, _isLoading, _isLoaded, _hasError, force)) {\n apiRequest(d, GET_INIT_DATA, urls.init, { siteCode: config.siteCode });\n }\n });\n};\n","import { GET_NAV } from './action-types';\nimport { getRequestStatus } from '../requests/selectors';\n\nexport const nav = (state) => state.header.nav;\nexport const navExpiryTime = (state) => state.header.navExpiryTime;\nexport const [isFetching, hasError, errorData] = getRequestStatus(GET_NAV);\nexport const navLoaded = (state) => {\n return typeof navExpiryTime(state) === 'number' && navExpiryTime(state) > Date.now();\n};\n","import { GET_NAV } from './action-types';\nimport { apiRequest, checkRequestNeeded } from '../apiRequest';\nimport { urls } from '../../../config';\n\nimport { isFetching, hasError, navLoaded } from './selectors';\n\nexport const getNav = (dispatch, force) => {\n dispatch((d, getState) => {\n const state = getState();\n const isLoaded = navLoaded(state);\n const isLoading = isFetching(state);\n const hasFailed = hasError(state);\n\n if (checkRequestNeeded(true, isLoading, isLoaded, hasFailed, force)) {\n apiRequest(d, GET_NAV, urls.nav);\n }\n });\n};\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { isReady, isFetching, hasError } from '../../redux/init/selectors';\nimport { appInit, getInitData } from '../../redux/init/actions';\nimport { getNav } from '../../redux/header/actions';\nimport { config, urls } from '../../../config';\n\nimport t from '../../../text';\nimport WithLoadingStates from './WithLoadingStates';\n\nimport { GET_INIT_DATA } from '../../redux/init/action-types';\nimport { apiRequest } from '../../redux/apiRequest';\n\nexport const Init = (props) => {\n const appIsReady = useSelector(isReady);\n const appIsFetching = useSelector(isFetching);\n const appHasError = useSelector(hasError);\n const dispatch = useDispatch();\n const [firstRun, setFirstRun] = useState(true);\n\n if (firstRun) {\n setFirstRun(false);\n appInit(dispatch); // Super important - Causes request statuses to be reset (amongst other things)\n }\n\n useEffect(() => {\n getInitData(dispatch);\n getNav(dispatch);\n \n window.addEventListener(\"storage\", (ev) => {\n if (ev.key === 'hasAccountData') {\n dispatch((d) => {\n apiRequest(d, GET_INIT_DATA, urls.init, { siteCode: config.siteCode });\n });\n }\n });\n }, [dispatch]);\n\n return (\n getInitData(dispatch, true)}\n useContainer={true}\n >\n {appIsReady && props.children}\n \n );\n};\n\nexport default Init;\n","import { useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router';\nimport {\n selectChannel,\n selectRegion,\n selectGuestsAdults,\n selectGuestsChildren,\n selectGuestsUnder5s,\n selectDate,\n selectDuration,\n selectPetFriendly,\n} from '../../redux/search/form/actions';\n\nimport { DDMMYYYYToDate } from '../../utils/date';\nimport { ynToBool } from '../../utils/utils';\nimport { dateValidator } from '../../utils/validation';\n\nexport const WithUrlParams = (props) => {\n const dispatch = useDispatch();\n const { search } = useLocation();\n\n if (document.location.search) {\n const query = new URLSearchParams(search);\n\n // Holiday search\n if (query.has('channel')) selectChannel(dispatch, query.get('channel'));\n if (query.has('region')) selectRegion(dispatch, query.get('region'));\n if (query.has('nights')) selectDuration(dispatch, parseInt(query.get('nights')));\n if (query.has('date') && dateValidator(query.get('date'))) {\n selectDate(dispatch, DDMMYYYYToDate(query.get('date')));\n }\n if (query.has('adults')) {\n const adults = parseInt(query.get('adults'));\n if (!isNaN(adults)) selectGuestsAdults(dispatch, adults);\n }\n if (query.has('children')) {\n const children = parseInt(query.get('children'));\n if (!isNaN(children)) selectGuestsChildren(dispatch, children);\n }\n if (query.has('infants')) {\n const infants = parseInt(query.get('infants'));\n if (!isNaN(infants)) selectGuestsUnder5s(dispatch, infants);\n }\n if (query.has('dogs')) {\n const dogs = ynToBool(query.get('dogs').toLowerCase());\n if (typeof dogs === 'boolean') selectPetFriendly(dispatch, dogs);\n }\n }\n\n return props.children;\n};\n\nexport default WithUrlParams;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { config } from '../../config';\n\nexport default function OnRouteChange() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n const AWINExclusionList = ['/booking/payment', '/booking/confirmation']; // Add to this if AWIN is not to fire.\n\n if (config['awin.enable']) {\n const triggerAWIN = () => {\n if (!window.AWIN) {\n console.info('No AWIN on window yet, trying again...');\n return;\n } else {\n console.info('Running AWIN...');\n clearInterval(CheckForAWIN);\n !AWINExclusionList.includes(pathname) ? window.AWIN.Tracking.run() : console.info('AWIN Disabled');\n }\n };\n let CheckForAWIN = setInterval(triggerAWIN, 99);\n }\n }, [pathname]);\n\n return null;\n}\n","import React, { useEffect, Suspense, lazy } from 'react';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { Provider } from 'react-redux';\nimport { Helmet } from 'react-helmet-async';\nimport { config } from '../config';\nimport ReactGa from 'react-ga';\n\n// Redux store\nimport { store } from './redux/store';\n\n// Stylesheets\nimport './assets/scss/libs.scss';\nimport '../skin.scss';\n\n// Page routes\nimport Routes from './Routes';\n\n// Components\nimport Header from './components/Header/Header';\nimport WithInit from './components/HOC/WithInit';\nimport WithUrlParams from './components/HOC/WithUrlParams';\nimport OnRouteChange from './components/OnRouteChange';\n\nfunction App() {\n const Footer = lazy(() => import('../base/components/Footer/NewFooter/Footer'));\n\n useEffect(() => {\n const awin = new URLSearchParams(window.location.search).get('awc');\n if (awin !== null && awin.length > 0) {\n fetch(`${config['api.url']}/api/awin?awc=${awin}`)\n .then((response) => response.json())\n .then((data) => console.info(data));\n }\n }, []);\n\n useEffect(() => {\n ReactGa.initialize(config['google.ua']);\n }, []);\n\n return (\n \n
\n \n {config['global.brandName']}\n \n \n {config['awin.enable'] && (\n \n )}\n \n \n \n
\n \n \n
\n \n
\n
}>\n