{"version":3,"sources":["Constants.ts","store/Events/ActionTypes.ts","store/Events/Actions.ts","components/navigation/VisitUrls.tsx","images/ronneby/ronneby-kommun.svg","utils/helpers/ImageHelper.tsx","images/olofstrom/olofstrom_kommun.png","auth-config.ts","services/auth-context.tsx","components/navigation/TopNavigation.tsx","pages/NotFound.tsx","utils/prismic/LinkResolver.ts","pages/InternetExplorer.tsx","components/map/google/CustomStyles.tsx","components/map/controls/ZoomControl.tsx","components/map/controls/PositionControl.tsx","store/Filters/Selector.ts","store/Settings/Selector.ts","store/Markers/Marker.ts","utils/helpers/MarkerHelper.ts","components/map/marker/Dot.tsx","store/Markers/Selector.ts","utils/helpers/ObjectHelper.ts","components/map/marker/Pin.tsx","utils/hooks/DeviceDetect.ts","components/common/live/Live.tsx","components/common/share/Share.tsx","store/Markers/ActionTypes.ts","store/AppState/ActionTypes.ts","store/Markers/Actions.ts","components/common/seo/SEO.tsx","components/map/marker/InfoBox.tsx","images/Train.svg","images/Astrid.svg","constants/VehicleConstants.ts","images/Bus.svg","images/Fyrskar.svg","components/map/marker/Polyline.tsx","components/map/marker/Vehicle/Vehicle.tsx","components/map/marker/Marker.tsx","components/common/loader/Loader.tsx","components/map/marker/MobileInfoBox.tsx","store/Filters/ActionTypes.ts","store/Filters/Actions.ts","components/map/google/GoogleMaps.tsx","components/map/filter/FilterButton.tsx","components/map/filter/FilterOptions.tsx","components/map/filter/ToggleMenuButton.tsx","components/map/filter/FilterToggle.tsx","components/map/filter/SubFilter.tsx","components/map/filter/SubFilters.tsx","components/map/filter/MapFilter.tsx","store/Events/Selector.ts","images/default-img.gif","components/event/EventTile.tsx","components/event/EventList.tsx","components/common/datepicker/DateList.tsx","store/Breadcrumbs/ActionTypes.ts","components/event/EventDetails.tsx","store/Breadcrumbs/Actions.ts","components/tableau/Report.tsx","components/common/prismic/PrismicRichText.tsx","components/about/AboutLive.tsx","store/Settings/Settings.ts","components/admin/tools/admin/AdminTool.tsx","store/Settings/ActionTypes.ts","components/admin/tools/filter/FilterTool.tsx","store/Settings/Actions.ts","components/admin/AdminToolbox.tsx","components/navigation/routes.tsx","pages/Home.tsx","pages/Events.tsx","pages/Event.tsx","pages/ViewReport.tsx","pages/About.tsx","pages/Admin.tsx","store/Breadcrumbs/Selector.ts","components/navigation/Breadcrumbs.tsx","components/event/filters/CategoryFilterItem.tsx","components/event/filters/CategoryFilter.tsx","components/common/datepicker/DatePicker.tsx","components/event/filters/DateFilter.tsx","components/event/filters/SearchBar.tsx","components/event/filters/FilterItem.tsx","components/event/EventFilter.tsx","components/error/ErrorBanner.tsx","store/AppState/Selector.ts","App.tsx","serviceWorker.ts","store/AppState/Reducer.ts","store/Markers/Reducer.ts","store/Events/Reducer.ts","store/Filters/Reducer.ts","store/Settings/Reducer.ts","store/Breadcrumbs/Reducer.ts","store/RootReducer.ts","store/Store.ts","i18n.ts","index.tsx"],"names":["API_ROOT","process","PRISMIC_URL","PRISMIC_TOKEN","THEME_KEY","GOOGLE_MAP_Position","_process$env$REACT_AP","COOKIE_URL","_process$env$REACT_AP2","_process$env$REACT_AP3","AUTH_CLIENT_ID","_process$env$REACT_AP4","AUTH_AUTHORITY","_process$env$REACT_AP5","AUTH_SCOPE","_process$env$REACT_AP6","ADMIN_GROUP_ID","_process$env$REACT_AP7","GET_EVENTS_BEGIN","_process$env$REACT_AP8","GET_EVENTS_SUCCESS","GET_EVENTS_FAILURE","SET_FILTERED_EVENTS","SET_FILTERED_EVENTS_FAILURE","SET_EVENTS_PAGE_SCROLL_POSITION","SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE","SET_EVENTS_PAGE_FILTERS","SET_EVENTS_PAGE_FILTERS_FAILURE","CLEAR_EVENTS_PAGE_FILTERS","CLEAR_EVENTS_PAGE_FILTERS_FAILURE","getEvents","async","dispatch","type","EventActions","result","axios","get","concat","payload","data","error","console","setEventsPageScrollPosition","scrollPosition","urlArray","id","name","url","menuMapItems","title","active","GetImageLogo","React","createElement","src","logoRonneby","alt","msalConfig","auth","clientId","authority","redirectUri","postLogoutRedirectUri","system","allowNativeBroker","loginRequest","scopes","AuthContext","createContext","msalInstance","PublicClientApplication","accessToken","addEventCallback","event","eventType","EventType","LOGIN_SUCCESS","account","setActiveAccount","useAuth","useContext","AuthProvider","props","_accessToken","token","setToken","useState","user","setUser","setAccount","refreshTokensAndUserInfo","_accountInfo","_accountInfo$homeAcco","_accountInfo4","_accountInfo5","initialize","redirectResponse","handleRedirectPromise","accountInfo","expiresOn","Date","accessTokenRequest","accessTokenResponse","acquireTokenSilent","getActiveAccount","loginRedirect","window","location","reload","homeAccountIdParts","homeAccountId","split","userTenantId","userFromCurrentTenant","_accountInfo2","_accountInfo3","length","tenantId","login","username","fromValidTenant","idTokenClaims","groups","includes","aadAccess","Provider","value","logOut","logoutRedirect","getApiToken","children","TopNavigation","showDrawer","setShowDrawer","useDispatch","useLocation","toggleDrawer","open","onEventsPageClick","pathname","isHomePage","mainListItems","List","className","ListItem","onClick","NavLink","to","exact","activeClassName","FontAwesomeIcon","icon","faAngleRight","getLangString","map","_ref","key","href","target","rel","faLink","subMainListItems","_ref2","aria-disabled","Fragment","Hidden","mdUp","faBars","Drawer","anchor","PaperProps","sx","minWidth","faTimes","Button","mdDown","height","margin","borderRadius","overflow","NotFound","Container","role","Grid","container","direction","item","xs","LinkResolver","doc","uid","InternetExplorer","client","Prismic","setDocData","useEffect","getSingle","fetchData","RichText","asText","render","body","linkResolver","CustomOption","styles","toLowerCase","fullscreenControl","backgroundColor","zoomControl","gestureHandling","ZoomControl","handleZoom","zoomLevel","faPlus","faMinus","PositionControl","navigator","geolocation","getCurrentPosition","position","coords","lat","latitude","lng","longitude","handleCenter","faCrosshairs","Filters","state","filters","filterList","FiltersLoading","loading","SelectedFilters","selectedFilters","SelectedFilterTitle","selectedFilterTitle","SettingsLoading","settings","Settings","MarkerIsLiveHours","markerIsLiveHours","SettingsErrors","MarkerSource","MarkerIsLive","marker","_marker$subTypes","_marker$types","shouldHaveDynamicContent","arguments","undefined","timeLimit","setHours","getHours","modifiedWithinTimeLimit","modified","toString","toISOString","hasDynamicContent","dynamicContent","properties","liveMarkerSource","source","Iot","Event","liveMarkerType","subTypes","some","f","isHolidayActivities","types","t","Dot","_props$color","useSelector","markerIsLive","setMarkerIsLive","find","color","class","onKeyDown","e","tabIndex","faCircle","aria-label","Markers","markers","markersList","MarkerDialogOpen","markerWithDialogOpen","MarkerIndexDialogOpen","markerIndexWithDialogOpen","Polylines","polylines","ClickedOnPolyline","clickedOnPolyline","ShowAllLiveMarkers","showAllLiveMarkers","isNullEmptyOrUndefined","valueToValidate","Object","prototype","hasOwnProperty","call","keys","Pin","_type$class","_type$icon","_type$class2","getType","markerType","markerHasTypes","markerisAlwaysAvailable","_props$marker","_props$marker2","_props$marker3","description","siblings","useDeviceDetect","isMobile","setMobile","mobile","innerWidth","Live","Share","pageTitle","menuOpen","setMenuOpen","onInfoBox","text","handleMenuClick","socialMedia","preventDefault","ReactGA","category","action","stopPropagation","share","log","handleClick","Link","showIcon","faShare","spacing","FacebookShareButton","quote","FacebookIcon","round","size","WhatsappShareButton","WhatsappIcon","EmailShareButton","subject","separator","beforeOnClick","faEnvelope","clipboard","writeText","GET_MARKERS_BEGIN","GET_MARKERS_SUCCESS","GET_MARKERS_FAILURE","SIGNALR_CONNECTING","SIGNALR_DISCONNECTED","SIGNALR_CONNECTED","SIGNALR_FAILURE","SIGNALR_MARKER_UPDATED","UPDATE_POLYLINES","UPDATE_POLYLINES_FAILURE","CLEAN_POLYLINES","CLICKED_ON_POLYLINE","SET_MARKER_DIALOG_OPEN","SET_MARKER_INDEX_DIALOG_OPEN","SET_SHOW_ALL_LIVE_MARKERS","SET_ERROR","SET_ERROR_FAILURE","CLEAR_ERROR","CLEAR_ERROR_FAILURE","getMarkers","AppStateActions","MarkerActions","message","errorMessage","setMarkerDialogAsOpen","setMarkerIndexDialogAsOpen","index","setShowAllLiveMarkers","updatePolylines","polyline","setClickedOnPolyline","SEO","_props$title","_props$description","_props$imageUrl","useTranslation","pageTilge","pageDescription","imageUrl","Helmet","content","property","InfoBox","indexOpen","setIndex","infoBoxInfo","setInfoBoxInfo","infoBoxRef","useRef","history","useHistory","library","add","fas","handleScroll","infoBox","current","addEventListener","removeEventListener","_props$marker$sibling","setSiblingAsInfoBox","handleInfoBox","_props$marker$sibling2","address","link","detailsUrl","bookingLink","nextIndex","_props$marker$sibling3","siblingIndex","handleChangeInfoBoxInformation","isNext","setShowInfoBox","params","URLSearchParams","search","set","push","ref","lang","subtype","street","zip","city","Naturkartan","Hjartstartarregistret","CityBreak","ReactMarkdown","rehypePlugins","rehypeRaw","GIS","Trafikverket","DataScraping","SvenskaLag","getMarkerSourceLabel","prop","style","transform","label","faExternalLinkAlt","disabled","faArrowLeft","faArrowRight","vehicles","image","trainImage","astridImage","Polyline","listOfVertices","maps","handleClickOnPolyline","v","append","handleClickOnMap","newPolyline","forEach","vertice","geodesicPolyline","addNewPolyline","vertices","lineSymbol","path","strokeOpacity","scale","geodesic","strokeColor","strokeWeight","icons","offset","repeat","setMap","addListener","Vehicle","_vehicle$color","vehicle","setVehicle","setLng","movingEast","setMovingEast","typeOfVehicle","_props$marker$lng","Marker","_getColorForTourMarke","showInfoBox","polylinePath","setPolylinePath","polylineId","setPolylineId","markerDialogOpen","markerIndexOpen","handleSiblings","handlePolylines","removeVehicles","polylinesToClean","filter","poly","newPolylines","handlePath","markerShapes","unlisten","listen","pinId","handleClickOnMarker","newPolylinePath","markerShape","markerIndex","getColorForMarkerShape","getColorForTourMarker","isVehicle","smDown","Loader","getEmptyMarker","Other","deleted","published","MobileInfoBox","openMarker","setOpenMarker","_marker$siblings","GET_FILTERS_BEGIN","GET_FILTERS_SUCCESS","GET_FILTERS_FAILURE","UPDATE_SELECTED_FILTERS","UPDATE_SELECTED_FILTERS_FAILURE","CLEAN_SELECTED_FILTERS","SET_SELECTED_FILTER_TITLE","getFilters","FilterActions","updateSelectedFilters","setSelectedFilterTitle","GoogleMaps","connection","HubConnectionBuilder","withUrl","withAutomaticReconnect","configureLogging","LogLevel","Information","build","on","JSON","parse","onclose","onreconnecting","onreconnected","start","then","catch","_URLSearchParams$get","_URLSearchParams$get2","_Number","Number","setZoomLevel","markersOnMap","setMarkersOnMap","bounds","setBounds","center","setCenter","getMainPosition","markersLoaded","setMarkersLoaded","googleMap","setGoogleMap","googleMaps","setGoogleMaps","filterMarkersOnMapBounds","useCallback","filteredMarkers","se","ne","nw","sw","isInsideMapBounds","newFilteredMarkers","selectedFilter","markersFromFilter","subFilters","subType","subFilter","filterMarkersByFilter","handlePolyline","startMarker","m","inArray","startFilter","defaultZoom","zoom","parseFloat","GoogleMap","bootstrapURLKeys","defaultCenter","onZoomAnimationStart","onDrag","options","disableDoubleClickZoom","closeInfoBox","onChange","changeEvent","stringify","yesIWantToUseGoogleMapApiInternals","onGoogleApiLoaded","handleApiLoaded","smUp","level","FilterButton","activeFilter","setActiveFilter","showFilterOption","setShowFilterOption","showOption","setShowOption","handleActive","i","handleSelectedFilter","newSelectedFilters","disableTouchRipple","disableRipple","handleClose","showCategoriesForFilter","showSubFilters","FilterOptions","alignItems","justifyContent","md","sm","lg","xl","addAllFilters","cleanSelectedFilters","ToggleMenuButton","showingMenu","FilterToggle","SubFilter","activeSubFilter","setActiveSubFilter","faCheckCircle","SubFilters","rowGap","subfilter","s","MapFilter","faCoffee","faMapMarkerAlt","showFilterMenu","setShowFilterMenu","filtersWithMarkers","setFiltersWithMarkers","setSelectedFilter","setShowSubFilters","setDefaultFilters","setFiltersToShow","filtersToShow","_filter$subFilters","defaultFilters","defaultFilter","filterMenuRef","toggleRef","toggleOnOutsideClick","handleClickOutside","contains","document","RedSwitch","styled","Switch","theme","alpha","palette","hoverOpacity","alignContent","variant","faChevronLeft","checked","toggleShowAllLiveMarkers","zeroMinWidth","handleSelectedCategory","removeSubFilters","newFilters","addAllSubFilters","fullSelectedFilter","removeFilters","cleanPolylines","toggleFilterMenu","Events","events","eventList","FilteredEvents","filteredEventList","Categories","categoryList","EventsLoading","EventsPageScrollPosition","eventsPageState","EventsPageFilters","EventTile","_props$event","replaceAll","moment","format","defaultImage","EventList","filteredEvents","eventsLoading","eventsPageScrollPosition","scrollTo","top","scrollY","behavior","DateList","relatedEvents","eventStart","eventsCurrentMonth","setEventsCurrentMonth","getMonth","currentMonth","setCurrentMonth","handleDates","nextMonth","eventCurrentMonth","prevMonth","setMonth","faChevronRight","end","SET_TITLE","SET_TITLE_FAILURE","CLEAR_TITLE","CLEAR_TITLE_FAILURE","EventDetails","useParams","setEvent","setRelatedEvents","dateList","setDateList","fixedId","fixedStart","eventId","decodeURIComponent","startDate","eventToShow","getTime","BreadcrumbsActionTypes","ingress","categories","phoneNumber","email","webpage","tableau","Report","Viz","PrismicRichText","AboutLive","contacts","contact","contacttitle","contactbody","AdminTools","AdminTool","faTools","GET_SETTINGS_BEGIN","GET_SETTINGS_SUCCESS","GET_SETTINGS_FAILURE","SET_SETTINGS_BEGIN","SET_SETTINGS_SUCCESS","SET_SETTINGS_FAILURE","FilterTool","setSelectedFilters","setLoading","setSettings","setFilters","setError","disableSaveBtn","setDisableSaveBtn","storeSettings","storeLoadingSettings","storeSettingErrors","storeFilters","storeLoadingFilters","_settings$defaultFilt2","every","_settings$defaultFilt","faExclamationTriangle","handleSelecteFilter","updatedSettings","updateSettings","SettingsActions","headers","Authorization","queryString","post","AdminToolbox","currentTool","setCurrentTool","Admin","handleToolChange","tool","Filter","paths","Component","ViewReport","About","Title","breadcrumbs","Breadcrumbs","CategoryFilterItem","onKeyUp","c","keyCode","CategoryFilter","_props$selectedCatego","selectedCategories","setSelectedCategories","refCategoryFilter","onChangeCategory","handleClickRef","_refCategoryFilter$cu","_props$selectedCatego2","faChevronDown","cat","handleClickItem","DatePicker","setDate","LocalizaitonProvider","dateAdapter","AdapterDateFns","locale","svLocale","DayPicker","reduceAnimations","allowKeyboardControl","date","newDate","onYearChange","disablePast","renderDay","day","higlightedDays","DayComponentProps","outDated","outsideCurrentMonth","getDate","PickersDay","assign","DateFilter","_props$selectedDate","selectedDate","setSelectedDate","refDateFilter","handleClickDate","onChangeDate","_refDateFilter$curren","toLocaleDateString","month","year","SearchBar","_props$filterText","filterText","setFilterText","faSearch","TextField","onChangeText","FilterItem","onDelete","EventFilter","_eventsPageFilters$te","_eventsPageFilters$da","_eventsPageFilters$ca","eventsPageFilters","mobileMenuOpen","setMobileMenuOpen","eventsToFilter","handleTextFilter","eCategory","handleCategoryFilter","handleDateFilter","setEventsPageFilters","Paper","faSortAmountDownAlt","ErrorBanner","Error","appState","errorSummary","App","send","hitType","page","_document$querySelect","_document$querySelect2","_document$querySelect3","_document$querySelect4","_document$querySelect5","_document$querySelect6","_document$querySelect7","querySelector","setAttribute","Suspense","fallback","isIE","routes","Route","crumbs","match","_ref3","reduce","param","replace","CookieConsent","buttonText","expires","containerClasses","buttonClasses","isError","isLocalhost","Boolean","hostname","initialState","errors","appStateReducer","connected","markerReducer","_action$payload","newMarkers","_state$markersList","_newMarkers","_newMarkers2","eventReducer","filterReducer","defaultEventCategories","settingsReducer","breadcrumbsReducer","reducer","combineReducers","eventsReducer","logger","createLogger","collapsed","Store","createStore","composeWithDevTools","applyMiddleware","thunk","common_se","common_se_olofstrom","common_se_ronneby","i18n","use","Backend","LanguageDetector","initReactI18next","init","resources","common","fallbackLng","debug","whitelist","interpolation","escapeValue","ReactDOM","store","StrictMode","Router","getElementById","config","URL","origin","swUrl","fetch","response","contentType","status","indexOf","serviceWorker","ready","registration","unregister","register","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","registerValidSW","checkValidServiceWorker"],"mappings":"mzQAAO,MAAMA,EAAWC,wDAKXC,EAAuED,6CACvEE,EAA2EF,oHAC3EG,EAA2EH,UAC3EI,EAAuD,QAApCC,EAAGL,2DAAiCK,EAAI,GAE3DC,GADkBC,EAAGP,eACgC,QAAnCQ,EAAGR,2DAAgCQ,EAAI,IACzDC,EAA6D,QAAvCC,EAAGV,wCAAoCU,EAAI,GACjEC,EAA6D,QAAvCC,EAAGZ,0EAAoCY,EAAI,GACjEC,EAAqD,QAAnCC,EAAGd,uDAAgCc,EAAI,GACzDC,EAA6D,QAAvCC,EAAGhB,wCAAoCgB,EAAI,GCZjEC,GDayBC,EAAGlB,SCbT,oBACnBmB,EAAqB,qBACrBC,EAAqB,qBACrBC,EAAsB,sBACtBC,EAA8B,8BAC9BC,EAAkC,kCAClCC,EAA0C,0CAC1CC,EAA0B,0BAC1BC,EAAkC,kCAClCC,EAA4B,4BAC5BC,EAAoC,oCCHpCC,EAAYA,IAA6DC,UAClF,IACIC,EAAS,CAAEC,KAAMC,IAEjB,MAAMC,QAAeC,IAAMC,IAAI,GAADC,OAAItC,EAAQ,WAC1CgC,EAAS,CACLC,KAAMC,EACNK,QAASJ,EAAOK,OAEtB,MAAOC,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMC,EAAiCK,QAASE,MAiBtDE,EAA+BC,GAAkFb,UAC1H,IACIC,EAAS,CACLC,KAAMC,EACNK,QAASK,IAGf,MAAOH,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMC,EAAsDK,QAASE,M,YC3CjF,MAAMI,EAAyB,cAAdzC,EAClB,CACE,CAAE0C,GAAI,EAAGC,KAAM,eAAgBC,IAAK,yBACpC,CAAEF,GAAI,EAAGC,KAAM,oBAAqBC,IAAK,iCAE3C,CACE,CAAEF,GAAI,EAAGC,KAAM,aAAcC,IAAK,sBAClC,CAAEF,GAAI,EAAGC,KAAM,kBAAmBC,IAAK,+BAElCC,EAA6B,cAAd7C,EACtB,CACE,CACE0C,GAAI,IACJI,MAAO,eACPF,IAAK,4BACLG,QAAQ,GAEV,CACEL,GAAI,IACJI,MAAO,UACPF,IAAK,0BACLG,QAAQ,IAGZ,CACE,CACEL,GAAI,IACJI,MAAO,UACPF,IAAK,0BACLG,QAAQ,GAEV,CACEL,GAAI,IACJI,MAAO,eACPF,IAAK,4BACLG,QAAQ,ICtCH,UAA0B,2CCKlC,SAASC,IACd,OAAQhD,GACN,IAAK,UACH,OAAOiD,IAAAC,cAAA,OAAKC,IAAKC,EAAaC,IAAI,mBACpC,IAAK,YACH,OAAOJ,IAAAC,cAAA,OAAKC,ICVH,yqLDUuBE,IAAI,yBACtC,QACE,OAAO,M,uBERN,MAAMC,GAA4B,CACrCC,KAAM,CACFC,SAAUlD,EACVmD,UAAWjD,EACXkD,YAAa,SACbC,sBAAuB,KAE3BC,OAAQ,CACJC,mBAAmB,IAKdC,GAAgC,CACzCC,OAAQ,CAACrD,ICEPsD,GAAcC,wBAKjB,IAEGC,GAAe,IAAIC,KAAwBb,IAEjD,IAAIc,GAEJF,GAAaG,kBAAkBC,IAC3B,GAAIA,EAAMC,YAAcC,KAAUC,eAAiBH,EAAMnC,QAAS,CAC9D,MACMuC,EADUJ,EAAMnC,QACEuC,QACxBR,GAAaS,iBAAiBD,OAI/B,MAAME,GAAUA,IACZC,qBAAWb,IAOTc,GAAgBC,IAA4C,IAADC,EAEpE,MAAOC,EAAOC,GAAYC,mBAA4B,QAApBH,EAASZ,UAAW,IAAAY,IAAI,KACnDI,EAAMC,GAAWF,sBACjBT,EAASY,GAAcH,qBAExBI,EAA2B5D,UAAa,IAAD6D,EAAAC,EAAAC,EAAAC,QACnCzB,GAAa0B,aACnB,MAAMC,QAAyB3B,GAAa4B,wBAC5C,IAAIC,EAAkC,KACtC,IACI,GAAyB,OAArBF,EAA2B,CAG3B,GAAIA,EAAiBG,WAAaH,EAAiBG,UAAY,IAAIC,KAAQ,CAGvE,MAAMC,EAAoC,IACnCpC,GACHY,QAASmB,EAAiBnB,SAIxByB,QAA4BjC,GAAakC,mBAC3CF,GAIJ9B,GAAc+B,EAAoB/B,iBAGlCA,GAAcyB,EAAiBzB,YAInC2B,EAAc7B,GAAamC,uBAIxB,CAKH,GAFAN,EAAc7B,GAAamC,mBAEP,OAAhBN,EAGA,YADA7B,GAAaoC,cAAcxC,IAI/B,MAAMoC,EAAoC,IACnCpC,GACHY,QAASqB,GAIPI,QAA4BjC,GAAakC,mBAC3CF,GAIJ9B,GAAc+B,EAAoB/B,aAExC,MAAO/B,GACLC,QAAQD,MAAM,4CAA6CA,GAK3DkE,OAAOC,SAASC,SAMpB,MAAMC,EAAgC,QAAdlB,EAAGO,SAAW,IAAAP,GAAe,QAAfC,EAAXD,EAAamB,qBAAa,IAAAlB,OAAf,EAAXA,EAA4BmB,MAAM,KAC7D,IAAIC,EAAe,GACfC,GAAwB,EACW,IAADC,EAG/BC,EAH4B,KAAb,OAAlBN,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBO,SACpB3E,QAAQD,MAAM,qGAAiH,QAAb0E,EAAEhB,SAAW,IAAAgB,OAAA,EAAXA,EAAaJ,eACjIG,GAAwB,IAExBD,EAAeH,EAAmB,GAClCI,EAAwBD,KAA4B,QAAhBG,EAAKjB,SAAW,IAAAiB,OAAA,EAAXA,EAAaE,WAE1D5B,EAAWS,GACX,MAAMX,EAAgB,CAClBzC,KAAiB,QAAb+C,EAAEK,SAAW,IAAAL,OAAA,EAAXA,EAAa/C,KACnBwE,MAAkB,QAAbxB,EAAEI,SAAW,IAAAJ,OAAA,EAAXA,EAAayB,SACpBC,gBAAiBP,GAGrB,GACmB,MAAff,GAC6B,MAA7BA,EAAYuB,eACwB,MAApCvB,EAAYuB,cAAcC,QACa,MAAvCxB,EAAYuB,cAAsB,OACpC,CAIiBvB,EAAYuB,cAAsB,OAEtCE,SAAS5G,KAChBwE,EAAKqC,WAAY,GAIzBpC,EAAQD,IAIA,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAMqC,YACNvC,EAASd,KAcjB,OACInB,IAAAC,cAACc,GAAY0D,SAAQ,CAACC,MAAO,CAAEvC,OAAMwC,OAL1BjG,UACXuC,GAAa2D,eAAe,CAAEnD,QAASA,KAIMoD,YAV7BnG,gBACV4D,IACCN,GAQmDM,6BACrDR,EAAMgD,WC/JNC,GAAiBjD,IAC5B,MAAOkD,EAAYC,GAAiB/C,oBAAS,GACvCvD,EAAWuG,cACX3B,EAAW4B,eAEX,KAAEhD,EAAI,OAAEwC,GAAWhD,KAEnByD,EAAgBC,IACpBJ,EAAcI,IAGVC,EAAoBA,KACE,YAAtB/B,EAASgC,WACX5G,EAASW,EAA4B,IACrCX,GPgC6FD,UAC/F,IACIC,EAAS,CACLC,KAAMC,IAGZ,MAAOO,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMC,EAAgDK,QAASE,UOpC1EoG,EAAmC,MAAtBjC,EAASgC,SAEtBE,EAAgBA,IAElBzF,IAAAC,cAACyF,IAAI,CAACC,UAAU,eACd3F,IAAAC,cAAC2F,IAAQ,CAACD,UAAU,oBAAoBE,QAASA,IAAMT,GAAa,IAClEpF,IAAAC,cAAC6F,IAAO,CACNC,GAAG,IACHC,OAAK,EACLL,UAAU,2BACVM,gBAAgB,SAChBJ,QAASA,IAAMP,KAEftF,IAAAC,cAACiG,IAAe,CAACC,KAAMC,IAAcT,UAAU,qBAE9C7D,EAAMuE,cAAc,2BAGzBrG,IAAAC,cAAC2F,IAAQ,CAACD,UAAU,mBAAmBE,QAASA,IAAMT,GAAa,IACjEpF,IAAAC,cAAC6F,IAAO,CACNC,GAAG,UACHJ,UAAU,mBACVM,gBAAgB,SAChBJ,QAASA,IAAMP,KAEftF,IAAAC,cAACiG,IAAe,CAACC,KAAMC,IAAcT,UAAU,qBAE9C7D,EAAMuE,cAAc,wCAIzBrG,IAAAC,cAAC2F,IAAQ,CAACD,UAAU,oBAAoBE,QAASA,IAAMT,GAAa,IAClEpF,IAAAC,cAAC6F,IAAO,CAACC,GAAG,SAASJ,UAAU,mBAAmBM,gBAAgB,UAChEjG,IAAAC,cAACiG,IAAe,CAACC,KAAMC,IAAcT,UAAU,qBAE9C7D,EAAMuE,cAAc,gCAIxB7G,EAAS8G,KAAI,CAAAC,EAAgB9G,KAAE,IAAjB,IAAEE,EAAG,KAAED,GAAM6G,EAAA,OAC1BvG,IAAAC,cAAC2F,IAAQ,CAACY,IAAK/G,EAAIkG,UAAU,oBAAoBE,QAASA,IAAMT,GAAa,IAC3EpF,IAAAC,cAAA,KAAGwG,KAAM9G,EAAKgG,UAAU,mBAAmBe,OAAO,SAASC,IAAI,cAC7D3G,IAAAC,cAACiG,IAAe,CAACC,KAAMS,IAAQjB,UAAU,qBACxCjG,QAQPmH,EAAmBA,IAErB7G,IAAAC,cAACyF,IAAI,CAACC,UAAU,eACb/F,EAAa0G,KAAI,CAAAQ,EAAyBrH,KAAE,IAA1B,IAAEE,EAAG,MAAEE,EAAK,OAAEC,GAAQgH,EAAA,OACvC9G,IAAAC,cAAC2F,IAAQ,CAACY,IAAK/G,EAAIkG,UAAU,8BAA8BE,QAASA,IAAMT,GAAa,IACpFtF,GACCE,IAAAC,cAAA,KAAGwG,KAAM9G,EAAKgG,UAAS,oBAAuBe,OAAO,SAASC,IAAI,cAChE3G,IAAAC,cAACiG,IAAe,CAACC,KAAMC,IAAcT,UAAU,qBAC9C9F,IAGHC,GACAE,IAAAC,cAAA,KAAG0F,UAAS,sBAAyBoB,gBAAc,QACjD/G,IAAAC,cAACiG,IAAe,CAACC,KAAMC,IAAcT,UAAU,qBAC9C9F,QAQf,OACEG,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACgH,IAAM,CAACC,MAAI,GACVlH,IAAAC,cAAA,OAAK0F,UAAU,OACb3F,IAAAC,cAAA,OAAK4F,QAASA,IAAMT,GAAa,GAAOO,UAAU,qBAChD3F,IAAAC,cAACiG,IAAe,CAACC,KAAMgB,IAAQxB,UAAU,wBAE3C3F,IAAAC,cAACmH,IAAM,CACLC,OAAO,OACPhC,KAAML,EACNa,QAASA,IAAMZ,GAAc,GAC7BqC,WAAY,CACVC,GAAI,CACFC,SAAU,WAIdxH,IAAAC,cAAA,OAAK4F,QAASA,IAAMT,GAAa,GAAQO,UAAU,2BACjD3F,IAAAC,cAACiG,IAAe,CAACC,KAAMsB,OAEzBzH,IAAAC,cAAA,OAAK0F,UAAU,uBACb3F,IAAAC,cAAC6F,IAAO,CAACC,GAAG,IAAIC,OAAK,EAACvG,GAAG,YACvBO,IAAAC,cAACF,EAAY,QAIjBC,IAAAC,cAAA,OAAK0F,UAAU,eACZF,IACDzF,IAAAC,cAAA,OAAK0F,UAAU,sBACb3F,IAAAC,cAAA,OAAK0F,UAAU,4BAA4B7D,EAAMuE,cAAc,gBAEhEQ,OAIN1E,GACCnC,IAAAC,cAAA,OAAK0F,UAAU,2BACb3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,gBAAgBE,QAASA,IAAMlB,KAAW7C,EAAMuE,cAAc,kBAGnFb,GACCxF,IAAAC,cAAA,OAAK0F,UAAU,kBACb3F,IAAAC,cAACF,EAAY,QAKnBC,IAAAC,cAACgH,IAAM,CAACU,QAAM,GACZ3H,IAAAC,cAAA,OAAK0F,UAAU,OACb3F,IAAAC,cAAA,OAAK0F,UAAU,YACb3F,IAAAC,cAAC6F,IAAO,CAACC,GAAG,IAAIC,OAAK,EAACvG,GAAG,YACvBO,IAAAC,cAACF,EAAY,QAIjBC,IAAAC,cAAA,OAAK0F,UAAU,YACZxD,GACCnC,IAAAC,cAAA,OAAK0F,UAAU,2BACb3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,sBAAsBE,QAASA,IAAMlB,KAAW7C,EAAMuE,cAAc,kBAG1FrG,IAAAC,cAAA,OAAK4F,QAASA,IAAMT,GAAcJ,GAAaW,UAAU,qBACvD3F,IAAAC,cAACiG,IAAe,CAACC,KAAMgB,IAAQxB,UAAU,0BAG7C3F,IAAAC,cAACmH,IAAM,CACLzB,UAAU,cACV0B,OAAO,QACPhC,KAAML,EACNa,QAASA,IAAMZ,GAAeD,GAC9BsC,WAAY,CACVC,GAAI,CACFK,OAAQ,QACRJ,SAAU,QACVK,OAAQ,oBACRC,aAAc,mBACdC,SAAU,YAId/H,IAAAC,cAAA,OAAK0F,UAAU,eACZF,IACDzF,IAAAC,cAAA,OAAK0F,UAAU,sBACb3F,IAAAC,cAAA,OAAK0F,UAAU,4BAA4B7D,EAAMuE,cAAc,gBAEhEQ,U,+BCzLR,MAAMmB,GAAYlG,GAEjB9B,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAAA,OAAK0F,UAAU,oBAAoBuC,KAAK,WACpClI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAAA,UAAK6B,EAAMuE,cAAc,+BAEzBrG,IAAAC,cAACyH,IAAM,CAACjB,KAAK,IAAId,UAAU,eACvB3F,IAAAC,cAAA,YAAM,IAAE6B,EAAMuE,cAAc,iCAAiC,U,wBCblF,MAAMmC,GAAgBC,GAER,SAAbA,EAAI7J,KACG,SAAW6J,EAAIC,IACF,cAAbD,EAAI7J,KACJ,SAAW6J,EAAIC,IAInB,ICLEC,GAAmBA,KAC5B,MAAMC,EAASC,KAAQD,OAAO/L,EAAa,CAAEsE,YAAarE,KACnD2L,EAAKK,GAAc9I,IAAMkC,WAUhC,OARAlC,IAAM+I,WAAU,KACMrK,WACd,MAAM+J,QAAYG,EAAOI,UAAU,cAAe,IAClDF,EAAWL,IAEfQ,KACD,IAGCjJ,IAAAC,cAACD,IAAMgH,SAAQ,KACTyB,GAEEzI,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAAA,OAAK0F,UAAU,oBAAoBuC,KAAK,WACpClI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAAA,UAAKiJ,YAASC,OAAOV,EAAItJ,KAAKU,QAE9BG,IAAAC,cAACiJ,YAAQ,CAACE,OAAQX,EAAItJ,KAAKkK,KAAMC,aAAcd,W,qBC+OhEe,OARkB,CAC7BC,OAlQHzM,EAAU0M,gBAAmB,YAAaA,cAC3C,CACI,CACI,YAAe,iBACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,0BACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,aAKrB,CACI,YAAe,YACf,YAAe,MACf,QAAW,CACP,CACI,IAAO,aAInB,CACI,YAAe,8BACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,qBACf,YAAe,MACf,QAAW,CACP,CACI,IAAO,aAInB,CACI,YAAe,MACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,SAI1B,CACI,YAAe,eACf,YAAe,MACf,QAAW,CACP,CACI,UAAa,OAIzB,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,gBACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,gBACf,YAAe,mBACf,QAAW,CACP,CACI,OAAU,QAEd,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,UACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,SAI1B,CACI,YAAe,QACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,WAAc,SAQ9B,CACI,CACI,YAAe,iBACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,YACf,YAAe,MACf,QAAW,CACP,CACI,IAAO,aAInB,CACI,YAAe,qBACf,YAAe,MACf,QAAW,CACP,CACI,IAAO,aAInB,CACI,YAAe,MACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,SAI1B,CACI,YAAe,eACf,YAAe,MACf,QAAW,CACP,CACI,UAAa,OAIzB,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,gBACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,gBACf,YAAe,mBACf,QAAW,CACP,CACI,OAAU,QAEd,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,aAIrB,CACI,YAAe,UACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,SAI1B,CACI,YAAe,QACf,YAAe,MACf,QAAW,CACP,CACI,MAAS,WAEb,CACI,WAAc,SAS1BC,mBAAmB,EACnBC,gBAAiB,UACjBC,aAAa,EACbC,gBAAiB,U,OC/Pd,MAAMC,GAAehI,GAEpB9B,IAAAC,cAAA,OAAK0F,UAAU,gBACX3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,eAAeE,QAASA,IAAM/D,EAAMiI,WAAWjI,EAAMkI,UAAY,IAC/EhK,IAAAC,cAACiG,IAAe,CAACC,KAAM8D,IAAQtE,UAAU,kBAE7C3F,IAAAC,cAAA,MAAI0F,UAAU,UACd3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,gBAAgBE,QAASA,IAAM/D,EAAMiI,WAAWjI,EAAMkI,UAAY,IAChFhK,IAAAC,cAACiG,IAAe,CAACC,KAAM+D,IAASvE,UAAU,mBCR7CwE,GAAmBrI,GAYxB9B,IAAAC,cAAA,OAAK0F,UAAU,oBACX3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,mBAAmBE,QAASA,KAXlDuE,UAAUC,YAAYC,oBAAoBC,IACtC,MAAMC,EAA2B,CAC7BC,IAAKF,EAASC,OAAOE,SACrBC,IAAKJ,EAASC,OAAOI,WAEzB9I,EAAM+I,aAAaL,QAOfxK,IAAAC,cAACiG,IAAe,CAACC,KAAM2E,IAAcnF,UAAU,mB,OCtBxD,MAAMoF,GAAWC,GAAgCA,EAAMC,QAAQC,WACzDC,GAAkBH,GAA8BA,EAAMC,QAAQG,QAC9DC,GAAmBL,GAAgCA,EAAMC,QAAQK,gBACjEC,GAAuBP,GAAyCA,EAAMC,QAAQO,oBCH9EC,GAAmBT,GAA8BA,EAAMU,SAASN,QAGhEO,GAAYX,GAAqCA,EAAMU,SACvDE,GAAqBZ,GAA6BA,EAAMU,SAASG,kBACjEC,GAAkBd,GAAyCA,EAAMU,SAAStM,MC2FhF,IAAK2M,IAWX,SAXWA,OAAY,6BAAZA,IAAY,aAAZA,IAAY,iBAAZA,IAAY,+BAAZA,IAAY,yBAAZA,IAAY,+BAAZA,IAAY,2BAAZA,IAAY,aAAZA,IAAY,iDAAZA,IAAY,iBAWvB,CAXWA,QAAY,KChGjB,MAAMC,GAAe,SAACC,EAAiBJ,GAAkF,IAADK,EAAAC,EAAA,IAAtDC,IAAiCC,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,KAAAA,UAAA,GACtG,MAAME,EAAY,IAAIvJ,KACtBuJ,EAAUC,SAASD,EAAUE,WAAaZ,GAE1C,MAAMa,EAA0BT,EAAOU,SAASC,WAAaL,EAAUM,cACjEC,OAA8CR,IAA1BL,EAAOc,gBAA0D,OAA1Bd,EAAOc,gBAA2Bd,EAAOc,eAAeC,WAAWhJ,OAAS,EACvIiJ,EAAmBhB,EAAOiB,SAAWnB,GAAaoB,KAAOlB,EAAOiB,SAAWnB,GAAaqB,MACxFC,IAAiBpB,EAAOqB,WAA0B,QAAlBpB,EAAGD,EAAOqB,gBAAQ,IAAApB,OAAA,EAAfA,EAAiBqB,MAAKC,GAAiB,WAAZA,EAAE3N,SAChE4N,KAAkC,QAAZtB,EAAAF,EAAOyB,aAAK,IAAAvB,OAAA,EAAZA,EAAcoB,MAAKI,GAAiB,mBAAZA,EAAE9N,SAEtD,OAAUuM,GAA4BU,IAAuBV,IACzDM,GACAO,IAAqBQ,GACrBJ,GCCKO,GAAO9L,IAAmC,IAADyE,EAAAsH,EAElD,MAAMhC,EAAoBiC,YAAYlC,KAC/BmC,EAAcC,GAAmB9L,oBAAkB,GACpDoJ,EAAkBwC,YAAYzC,IAC9BzM,EAAO0M,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EACxElC,EAAMmK,OAAOyB,MAAMO,MAAKN,GAAKrC,EAAgB2C,MAAKT,GAAKG,EAAE9N,QAAU2N,EAAE3N,WACpEyL,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EAC5DlC,EAAMmK,OAAOyB,MAAM,QACnBpB,EACF4B,EAAkC,QAA7B3H,EAAc,QAAdsH,EAAG/L,EAAMoM,aAAK,IAAAL,IAAQ,OAAJjP,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,aAAK,IAAA5H,IAAI,GAE5CwC,qBAAU,KACNiF,EAAgBhC,GAAalK,EAAMmK,OAAQJ,GAAmB,MAC/D,CAAC/J,EAAMmK,SAQV,OACIjM,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,OAAK0F,UAAU,aAAayI,UARbC,IACJ,WAAV,OAADA,QAAC,IAADA,OAAC,EAADA,EAAG7H,MACH1E,EAAM+D,QAAQwI,IAMwCC,SAAU,GAC5DtO,IAAAC,cAAA,OAAK0F,UAAW,iBAAmBoI,EAAe,QAAU,KACxD/N,IAAAC,cAAA,WACID,IAAAC,cAACiG,IAAe,CACZC,KAAMoI,IACN5I,UAAW,UAAYuI,GAASpM,EAAMhC,OAAS,UAAY,IAC3D+F,QAAUxE,GAAUS,EAAM+D,QAAQxE,GAAQmN,aAAY1M,EAAMuE,cAAc,qBC3CzFoI,GAAWzD,GAAiCA,EAAM0D,QAAQC,YAC1DC,GAAoB5D,GAA0CA,EAAM0D,QAAQG,qBAC5EC,GAAyB9D,GAAyCA,EAAM0D,QAAQK,0BAChFC,GAAahE,GAAmCA,EAAM0D,QAAQO,UAC9DC,GAAqBlE,GAA8BA,EAAM0D,QAAQS,kBACjEC,GAAsBpE,GAA8BA,EAAM0D,QAAQW,mBCRlEC,GAA0BC,GACX,OAApBA,IAGmB,MAAnBA,SAGoBjD,IAApBiD,IAGoB,KAApBA,OAGAC,OAAOC,UAAUC,eAAeC,KAAKJ,EAAiB,WAAwC,IAA3BA,EAAgBvL,SAG3C,IAAxCwL,OAAOI,KAAKL,GAAiBvL,WCCxB6L,GAAO/N,IAAmC,IAADgO,EAAAC,EAAAC,EAElD,MAAMnE,EAAoBiC,YAAYlC,IAChCyD,EAAqBvB,YAAYsB,KAChCrB,EAAcC,GAAmB9L,oBAAkB,GACpDoJ,EAAkBwC,YAAYzC,IAoB9BzM,EAlBUqR,MACZ,IAAIC,EACJ,MAAMC,EAAiBrO,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EAanE,OAZIsH,GAAmB6E,GAEnBD,EAAapO,EAAMmK,OAAOyB,MAAMO,MAAKN,GAAKrC,EAAgB2C,MAAKT,GAAKG,EAAE9N,QAAU2N,EAAE3N,UAE9EyP,GAAuBY,IAAeb,IAEtCa,EAAapO,EAAMmK,OAAOyB,MAAM,MAE5BpC,GAAmB6E,IAE3BD,EAAapO,EAAMmK,OAAOyB,MAAM,IAE7BwC,GAGED,GAEblH,qBAAU,KACNiF,EAAgBhC,GAAalK,EAAMmK,OAAQJ,MAC5C,CAAC/J,EAAMmK,SAcV,OAEIjM,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,OACIqO,SAAU,EACV3I,UAAW,WAAwB,QAAfmK,EAAQ,OAAJlR,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,aAAK,IAAA2B,IAAI,KAAOhO,EAAMhC,OAAS,UAAY,KAAOiO,EAAe,QAAU,IACzGlI,QAAUxE,GAAUS,EAAM+D,QAAQxE,GAAQ+M,UAlB/B/M,IACA,WAAV,OAALA,QAAK,IAALA,OAAK,EAALA,EAAOmF,MACP1E,EAAM+D,QAAQxE,KAiBVrB,IAAAC,cAAA,OAAK0F,UAAU,kBACX3F,IAAAC,cAAA,WAAKD,IAAAC,cAACiG,IAAe,CAACC,KAAM,CAAC,MAAkB,QAAb4J,EAAO,OAAJnR,QAAI,IAAJA,OAAI,EAAJA,EAAMuH,YAAI,IAAA4J,IAAI,WAAyBvB,aAAY1M,EAAMuE,cAAc,kBAE/G0H,GACG/N,IAAAC,cAAA,OAAK0F,UAAU,WAAWuC,KAAK,iBAC3BlI,IAAAC,cAACiG,IAAe,CAACC,KAAMoI,IAAU5I,UAAU,YAlB/ByK,MAAO,IAADC,EAAAC,EAAAC,EAClC,OAAqC,OAAzB,OAALzO,QAAK,IAALA,GAAa,QAARuO,EAALvO,EAAOmK,cAAM,IAAAoE,OAAR,EAALA,EAAeG,eACa,gHAA1B,OAAL1O,QAAK,IAALA,GAAa,QAARwO,EAALxO,EAAOmK,cAAM,IAAAqE,OAAR,EAALA,EAAeE,cACgB,+EAA1B,OAAL1O,QAAK,IAALA,GAAa,QAARyO,EAALzO,EAAOmK,cAAM,IAAAsE,OAAR,EAALA,EAAeC,eAmBVJ,IACGpQ,IAAAC,cAAA,OAAK0F,UAAU,gBAAgBuC,KAAK,iBAChClI,IAAAC,cAACiG,IAAe,CAACC,KAAMoI,IAAU5I,UAAU,6BAIlD7D,EAAMmK,OAAOwE,UAAY3O,EAAMmK,OAAOwE,SAASzM,OAAS,GACrDhE,IAAAC,cAAA,OAAK0F,UAAS,iBAAA1G,OAAmB6C,EAAMhC,OAAS,SAAW,IAAiB,QAAfkQ,EAAQ,OAAJpR,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,aAAK,IAAA6B,IAAI,MAC5EhQ,IAAAC,cAAA,QAAM0F,UAAU,QACX7D,EAAMmK,OAAOwE,SAASzM,OAAS,O,aCnF7C,SAAS0M,KACpB,MAAOC,EAAUC,GAAa1O,oBAAS,GASvC,OAPAlC,IAAM+I,WAAU,KAEZ,MAAM8H,EAASvN,OAAOwN,YAAc,IACpCF,EAAUC,KAEX,IAEI,CAAEF,Y,OCJN,MAAMI,GAAQjP,GAEb9B,IAAAC,cAAA,OAAK0F,UAAU,iBAAiBuC,KAAK,gBAAgBsG,aAAY1M,EAAMuE,cAAc,gBAChFvE,EAAMuE,cAAc,eAAe,IAACrG,IAAAC,cAACiG,IAAe,CAACC,KAAMoI,IAAU5I,UAAU,Y,sICKrF,MAAMqL,GAASlP,IAClB,MAAMmP,EAAYnP,EAAMuE,cAAc,qBAChC,SAAEsK,GAAaD,MACdQ,EAAUC,GAAejP,oBAAUJ,EAAMsP,YAAaT,GACvD9Q,EAAQiC,EAAMjC,MAAQ,MAAOoR,EAC7BI,EAAI,0DAAApS,OAAiD6C,EAAMjC,MAAK,WAAAZ,OAAOgS,EAAS,KAChFtR,EAAM2D,OAAOC,SAASkD,KAE5BsC,qBAAU,KACNoI,GAAarP,EAAMsP,YAAaT,KACjC,CAACA,IAEJ,MAgBMW,EAAkBA,CAACC,EAAqBlQ,KACtCA,GAAOmQ,EAAenQ,GAC1BoQ,KAAQpQ,MAAM,CAAEqQ,SAAU,QAASC,OAAO,oBAAD1S,OAAsBsS,EAAW,MAAAtS,OAAK6C,EAAMjC,UAGnF2R,EAAkBnQ,IACf,OAALA,QAAK,IAALA,KAAOuQ,kBACF,OAALvQ,QAAK,IAALA,KAAOmQ,kBAGX,OACIxR,IAAAC,cAAA,OAAK0F,UAAS,UACR7D,EAAMsP,WAAaT,IACjB3Q,IAAAC,cAAA,OAAK0F,UAAS,GAAA1G,OAAK6C,EAAM6D,WAAaE,QAAUxE,GA7BxC3C,WAEhB,GADA8S,EAAenQ,GACXsP,GACA,GAAIvG,UAAUyH,MACV,UACUzH,UAAUyH,MAAM,CAAEhS,MAAOA,EAAOF,IAAKA,EAAK0R,KAAMA,IACtDI,KAAQpQ,MAAM,CAAEqQ,SAAU,QAASC,OAAO,0BAAD1S,OAA4B6C,EAAMjC,SAC7E,MAAOT,GACLC,QAAQyS,IAAI,gBAAiB1S,SAIrC+R,GAAaD,IAiB8Fa,CAAY1Q,IAC/GrB,IAAAC,cAAC+R,KAAI,KACAlQ,EAAMuE,cAAc,gBACpBvE,EAAMmQ,UACHjS,IAAAC,cAACiG,IAAe,CAACC,KAAM+L,IAASvM,UAAW,WAK1DuL,GACGlR,IAAAC,cAAA,OAAK0F,UAAS,cAAA1G,OAAgB6C,EAAMsP,UAAY,UAAY,GAAE,KAAAnS,OAAI6C,EAAM6D,YACpE3F,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAAC+J,QAASrQ,EAAMsP,UAAY,EAAI,GAC3CpR,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAIzG,EAAMsP,UAAY,EAAI,EAAGzL,UAAU,gBAAgB9F,MAAO,YACrEG,IAAAC,cAACmS,KAAmB,CAACzS,IAAKA,EAAK0S,MAAOhB,EAAMxL,QAAUxE,GAA2DiQ,EAAgB,WAAYjQ,IACzIrB,IAAAC,cAACqS,KAAY,CAACC,OAAK,EAACC,KAAM,OAGlCxS,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAIzG,EAAMsP,UAAY,EAAI,EAAGzL,UAAU,gBAAgB9F,MAAO,YACrEG,IAAAC,cAACwS,KAAmB,CAAC9S,IAAKA,EAAKE,MAAOwR,EAAMxL,QAAUxE,GAA0DiQ,EAAgB,WAAYjQ,IACxIrB,IAAAC,cAACyS,KAAY,CAACH,OAAK,EAACC,KAAM,OAGlCxS,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAIzG,EAAMsP,UAAY,EAAI,EAAGzL,UAAU,gBAAgB9F,MAAO,SAAUgG,QAAUxE,GAAuDiQ,EAAgB,QAASjQ,IACzKrB,IAAAC,cAAC0S,KAAgB,CAAChT,IAAKA,EAAKiT,QAAS/S,EAAOwJ,KAAMgI,EAAMwB,UAAW,KAAMC,cAAeA,IAAMxB,EAAgB,UAC1GtR,IAAAC,cAACiG,IAAe,CAACC,KAAM4M,IAAYpN,UAAU,YAAY6M,KAAK,SAGtExS,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAIzG,EAAMsP,UAAY,EAAI,EAAGzL,UAAU,gBAAgB9F,MAAO,WACrEG,IAAAC,cAACyH,IAAM,CAAC7B,QAAUxE,IAA4D+I,UAAU4I,UAAUC,UAAUtT,GAAM2R,EAAgB,YAAajQ,KAC3IrB,IAAAC,cAACiG,IAAe,CAACC,KAAMS,IAAQjB,UAAU,YAAY6M,KAAK,aCpF7EU,GAAoB,oBACpBC,GAAsB,sBACtBC,GAAsB,sBACtBC,GAAqB,qBACrBC,GAAuB,uBACvBC,GAAoB,oBACpBC,GAAkB,kBAClBC,GAAyB,yBACzBC,GAAmB,mBACnBC,GAA2B,2BAC3BC,GAAkB,kBAClBC,GAAsB,sBACtBC,GAAyB,yBACzBC,GAA+B,+BAC/BC,GAA4B,4BCf5BC,GAAY,YACZC,GAAoB,oBACpBC,GAAc,cACdC,GAAsB,sB,cCM5B,MAAMC,GAAaA,IAA6D3V,UACnF,IACIC,EAAS,CAAEC,KAAM0V,KACjB3V,EAAS,CAAEC,KAAM2V,KAEjB,MAAMzV,QAAeC,IAAMC,IAAI,GAADC,OAAItC,EAAQ,YAC1CgC,EAAS,CACLC,KAAM2V,GACNrV,QAASJ,EAAOK,OAEtB,MAAOC,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAM2V,GAAmCrV,QAASE,IACvC,kBAAlBA,EAAMoV,QACN7V,EAAS,CAAEC,KAAM0V,GAA2BpV,QAAS,CAAEuV,aAAc,gBAAiBrV,MAAOA,KAE7FT,EAAS,CAAEC,KAAM0V,GAA2BpV,QAAS,CAAEuV,aAAc,sBAAuBrV,MAAOA,OA6ClGsV,GAAyBjV,GAAsEf,UACxGC,EAAS,CAAEC,KAAM2V,GAAsCrV,QAASO,KAGvDkV,GAA8BC,GAAyElW,UAChHC,EAAS,CAAEC,KAAM2V,GAA4CrV,QAAS0V,KAG7DC,GAAyBxF,GAAuF3Q,UACzHC,EAAS,CAAEC,KAAM2V,GAAyCrV,QAASmQ,KAI1DyF,GAAkBC,GAAiFrW,UAC5G,IACIC,EAAS,CACLC,KAAM2V,GACNrV,QAAS6V,IAGf,MAAO3V,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAM2V,GAAwCrV,QAASE,MAwB7D4V,GAAwB7F,GAAsFzQ,UACvHC,EAAS,CAAEC,KAAM2V,GAAmCrV,QAASiQ,K,wBC5G1D,MAAM8F,GAAOnT,IAAmC,IAADoT,EAAAC,EAAAC,EAClD,MAAM,EAAEzH,GAAM0H,aAAe,UACvBC,EAAa3H,EAAE,oBACf4H,EAAkB5H,EAAE,0BACpB9N,EAAmB,QAAdqV,EAAGpT,EAAMjC,aAAK,IAAAqV,IAAII,EACvB9E,EAA+B,QAApB2E,EAAGrT,EAAM0O,mBAAW,IAAA2E,IAAII,EACnCC,EAAyB,QAAjBJ,EAAGtT,EAAM0T,gBAAQ,IAAAJ,IzBDzB,GAANnW,OAAUrC,GAAsB,YAAAqC,OAAWlC,EAAS,YyBEpD,OACIiD,IAAAC,cAACwV,KAAM,KACHzV,IAAAC,cAAA,QAAMP,KAAK,QAAQgW,QAAS7V,IAC5BG,IAAAC,cAAA,QAAMP,KAAK,cAAcgW,QAASlF,IAClCxQ,IAAAC,cAAA,QAAMP,KAAK,QAAQgW,QAASF,IAG5BxV,IAAAC,cAAA,QAAM0V,SAAS,UAAUD,QAAQ,YACjC1V,IAAAC,cAAA,QAAM0V,SAAS,SAASD,QAAQ,KAChC1V,IAAAC,cAAA,QAAM0V,SAAS,WAAWD,QAAS7V,IACnCG,IAAAC,cAAA,QAAM0V,SAAS,iBAAiBD,QAASlF,IACzCxQ,IAAAC,cAAA,QAAM0V,SAAS,WAAWD,QAASF,IAGnCxV,IAAAC,cAAA,QAAM0V,SAAS,eAAeD,QAAQ,wBACtC1V,IAAAC,cAAA,QAAM0V,SAAS,cAAcD,QAAQ,KACrC1V,IAAAC,cAAA,QAAM0V,SAAS,gBAAgBD,QAAS7V,IACxCG,IAAAC,cAAA,QAAM0V,SAAS,sBAAsBD,QAASlF,IAC9CxQ,IAAAC,cAAA,QAAM0V,SAAS,gBAAgBD,QAASF,MCDvCI,GAAW9T,IACtB,MAAM+T,EAAY/H,YAAYgB,IACxBjD,EAAoBiC,YAAYlC,KAChC,SAAE+E,GAAaD,MACdkE,EAAOkB,GAAY5T,mBAAkB,OAAT2T,QAAS,IAATA,IAAa,IACzCE,EAAaC,GAAkB9T,sBAC/B6L,EAAcC,GAAmB9L,oBAAS,GAC3C+T,EAAaC,iBAAuB,MACpCC,EAAUC,cACVzX,EAAWuG,cAGjBmR,KAAQC,IAAIC,KAMZxN,qBAAU,KACR,MAAMyN,EAAgBnV,IACpBA,EAAMuQ,mBAGF6E,EAAUR,EAAWS,QAK3B,OAJID,IACK,OAAPA,QAAO,IAAPA,KAASE,iBAAiB,QAASH,IAG9B,KACDC,IACK,OAAPA,QAAO,IAAPA,KAASG,oBAAoB,QAASJ,OAGzC,IAEHzN,qBAAU,KAAO,IAAD8N,EACVhB,GAAaA,EAAY,GAAK/T,EAAMmK,OAAOwE,WAAiC,QAArBoG,EAAA/U,EAAMmK,OAAOwE,gBAAQ,IAAAoG,OAAA,EAArBA,EAAuB7S,SAAU6R,EAC1FiB,EAAoBjB,GAEpBkB,IAEF/I,EAAgBhC,GAAalK,EAAMmK,OAAQJ,MAC1C,CAAC/J,EAAMmK,SAEVlD,qBAAU,KAAO,IAADiO,EAEZnB,GACAA,EAAY,GACZ/T,EAAMmK,OAAOwE,WACQ,QAArBuG,EAAAlV,EAAMmK,OAAOwE,gBAAQ,IAAAuG,OAAA,EAArBA,EAAuBhT,SAAU6R,GACjC/T,EAAMmK,OAAOwE,SAASoF,EAAY,GAAGpW,MAAkB,OAAXsW,QAAW,IAAXA,OAAW,EAAXA,EAAatW,KAEzDqX,EAAoBjB,KAErB,CAACA,IAEJ,MAAMkB,EAAgBA,KACpBf,EAAe,CACbnW,MAAOiC,EAAMmK,OAAOpM,MACpBJ,GAAIqC,EAAMmK,OAAOxM,GACjB+Q,YAAa1O,EAAMmK,OAAOuE,YAC1ByG,QAASnV,EAAMmK,OAAOgL,QACtBzB,SAAU1T,EAAMmK,OAAOuJ,SACvB0B,KAAMpV,EAAMmK,OAAOiL,KACnBC,WAAYrV,EAAMmK,OAAOkL,WACzBC,YAAatV,EAAMmK,OAAOmL,YAC1BrK,eAAgBjL,EAAMmK,OAAOc,eAC7BO,SAAUxL,EAAMmK,OAAOqB,SACvBJ,OAAQpL,EAAMmK,OAAOiB,UAInB4J,EAAuBO,IAAuB,IAADC,EACjD,MAAMC,EAAeF,EAAY,EAC7BvV,EAAMmK,OAAOwE,WAAiC,QAArB6G,EAAAxV,EAAMmK,OAAOwE,gBAAQ,IAAA6G,OAAA,EAArBA,EAAuBtT,SAAUuT,GAC5DvB,EAAe,CACbnW,MAAOiC,EAAMmK,OAAOwE,SAAS8G,GAAc1X,MAC3CJ,GAAIqC,EAAMmK,OAAOwE,SAAS8G,GAAc9X,GACxC+Q,YAAa1O,EAAMmK,OAAOwE,SAAS8G,GAAc/G,YACjDgF,SAAU1T,EAAMmK,OAAOwE,SAAS8G,GAAc/B,SAC9C0B,KAAMpV,EAAMmK,OAAOwE,SAAS8G,GAAcL,KAC1CC,WAAYrV,EAAMmK,OAAOwE,SAAS8G,GAAcJ,WAChDF,QAASnV,EAAMmK,OAAOwE,SAAS8G,GAAcN,QAC7ClK,eAAgBjL,EAAMmK,OAAOwE,SAAS8G,GAAcxK,eACpDqK,YAAatV,EAAMmK,OAAOwE,SAAS8G,GAAcH,YACjDlK,OAAQpL,EAAMmK,OAAOwE,SAAS8G,GAAcrK,OAC5CI,SAAUxL,EAAMmK,OAAOwE,SAAS8G,GAAcjK,YAK9CkK,EAAkCC,IACtC,GAAI3V,EAAMmK,OAAOwE,UAAY3O,EAAMmK,OAAOwE,SAASzM,OAAS,EAAG,CAC7D,MAAMqT,EAAYI,EAAS7C,EAAQ,EAAIA,EAAQ,EAC/C,GAAIyC,GAAavV,EAAMmK,OAAOwE,SAASzM,QAAUqT,GAAa,EAAG,CAC7C,IAAdA,EACFN,IAEAD,EAAoBO,GAEtBvV,EAAM4V,gBAAe,GACrB5B,EAASuB,GAET,MAAMM,EAAS,IAAIC,gBAAgBzB,EAAQ5S,SAASsU,QACpDF,EAAOG,IAAI,QAAST,EAAUzK,YAC9BuJ,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,aAC9BjO,EAASgW,GAA2B0C,OAgC1C,OACErX,IAAAC,cAAA,OACEqO,SAAU,EACV3I,UAAS,sBAAA1G,OAAwB0R,EAAW,SAAW,QAAO,KAAA1R,OAAI6C,EAAMoO,WAAapO,EAAMoO,WAAa,GAAE,KAC1GrK,QAASxE,GAhIQA,KACd,OAALA,QAAK,IAALA,KAAOuQ,mBA+HaG,CAAY1Q,IAE9BrB,IAAAC,cAAA,OAAK0F,UAAU,YACZoQ,GACC/V,IAAAC,cAACgV,GAAG,CACJpV,MAAK,GAAAZ,OAAgB,OAAX8W,QAAW,IAAXA,OAAW,EAAXA,EAAalW,MAAK,OAAAZ,OAAM6C,EAAMuE,cAAc,qBACtDmK,YAAwB,OAAXuF,QAAW,IAAXA,OAAW,EAAXA,EAAavF,YAC1BgF,SAAqB,OAAXO,QAAW,IAAXA,OAAW,EAAXA,EAAaP,WAIxBzH,GAAgB/N,IAAAC,cAAC8Q,GAAI,CAAC1K,cAAevE,EAAMuE,gBAE5CrG,IAAAC,cAAA,OAAKR,GAAG,mBAAmBuY,IAAK/B,GAC9BjW,IAAAC,cAAA,OAAK0F,UAAU,cACZoQ,GAAuC,MAAxBA,EAAYP,UAC1BxV,IAAAC,cAAA,OAAK0F,UAAU,mBACb3F,IAAAC,cAAA,OAAKC,IAAK6V,EAAYP,SAAUpV,IAAK2V,EAAYlW,MAAO8F,UAAU,WAIrEoQ,GAAeA,EAAYlW,OAASG,IAAAC,cAAA,OAAK0F,UAAU,QAAQsS,KAAK,MAAMlC,EAAYlW,OAClFkW,GAAeA,EAAYzI,UAAYyI,EAAYzI,SAAStJ,OAAS,GACpEhE,IAAAC,cAACD,IAAMgH,SAAQ,KACZ+O,EAAYzI,SAAShH,KAAI,CAAC4R,EAAStD,IAClC5U,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKoO,GACnB5U,IAAAC,cAAA,OAAK0F,UAAU,YAAYuS,EAAQrY,WAK1CkW,GAAeA,EAAYkB,SAC1BjX,IAAAC,cAAA,OAAK0F,UAAU,WACZoQ,EAAYkB,QAAQkB,OACpBpC,EAAYkB,QAAQkB,SAAWpC,EAAYkB,QAAQmB,KAAOrC,EAAYkB,QAAQoB,MAC7ErY,IAAAC,cAAA,YAAM,KAEN,GACC,IACF8V,EAAYkB,QAAQmB,IAAI,IAAErC,EAAYkB,QAAQoB,MAGlDtC,GAAeA,EAAYvF,aAC1BxQ,IAAAC,cAAA,OAAK0F,UAAS,eACX7D,EAAMmK,OAAOiB,SAAWnB,GAAauM,aACtCxW,EAAMmK,OAAOiB,SAAWnB,GAAawM,uBACrCzW,EAAMmK,OAAOiB,SAAWnB,GAAaoB,KACrCrL,EAAMmK,OAAOiB,SAAWnB,GAAayM,WACrC1W,EAAMmK,OAAOiB,SAAWnB,GAAaqB,MACnCpN,IAAAC,cAACwY,KAAa,CAACC,cAAe,CAACC,OAAa5C,EAAYvF,aAExDxQ,IAAAC,cAACD,IAAMgH,SAAQ,KAAE+O,EAAYvF,gBAMtCuF,GAAeA,EAAY7I,UAAUnB,IACpC/L,IAAAC,cAACkI,KAAI,CAACC,WAAS,GACbpI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACbvI,IAAAC,cAAA,OAAK0F,UAAU,UACb3F,IAAAC,cAAA,YAAO6B,EAAMuE,cAAc,sBA5FX6G,KAC5B,OAAQA,GACN,KAAKnB,GAAauM,YAChB,MAAO,cACT,KAAKvM,GAAaoB,IAClB,KAAKpB,GAAa6M,IAChB,MAAO,iBACT,KAAK7M,GAAaqB,MAClB,KAAKrB,GAAayM,UAChB,MAAkB,cAAdzb,EACK,qBAEA,gBAEX,KAAKgP,GAAa8M,aAChB,MAAO,eACT,KAAK9M,GAAa+M,aAChB,MAAO,mBACT,KAAK/M,GAAagN,WAChB,MAAO,cACT,KAAKhN,GAAawM,sBAChB,MAAO,2BACT,QACE,MAAO,KAqEoDS,CAAqBjD,EAAY7I,YAK3F6I,GACCA,EAAYhJ,iBACVgB,GAAgBjM,EAAMmK,OAAOiB,SAAWnB,GAAaoB,KAAQrL,EAAMmK,OAAOiB,SAAWnB,GAAaoB,MACpG4I,EAAYhJ,eAAeC,WAAWhJ,OAAS,GAC7ChE,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACzC,UAAU,kBACvBoQ,EAAYhJ,eAAeC,WAAW1G,KAAI,CAAC2S,EAAiBrE,IAC3D5U,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKoO,GACnB5U,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAG5C,UAAU,YAC1B3F,IAAAC,cAACiG,IAAe,CACdC,KAAM,CAAC,MAAO8S,EAAK9S,MACnBR,UAAS,QAAA1G,OAAUga,EAAK9K,OACxB+K,MAAO,CAAEC,UAAU,UAADla,OAAYga,EAAKvU,MAAK,YAG5C1E,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,IACb,MAAbsT,EAAK/B,KACJlX,IAAAC,cAAC+R,IAAI,CAACrM,UAAS,aAAgBI,GAAI,CAAER,SAAU0T,EAAK/B,MAAQxQ,OAAO,UAChE,IACAuS,EAAKG,MAAO,KAGfpZ,IAAAC,cAAA,OAAK0F,UAAU,cAAcsT,EAAKG,YAO/CrD,GAAeA,EAAYqB,aAC1BpX,IAAAC,cAACkI,KAAI,CAACC,WAAS,GACbpI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACbvI,IAAAC,cAACyH,IAAM,CAACjB,KAAMsP,EAAYqB,YAAa1Q,OAAO,SAASf,UAAU,gBAC/D3F,IAAAC,cAAA,YAAO6B,EAAMuE,cAAc,sBAKnCrG,IAAAC,cAACkI,KAAI,CAACC,WAAS,GACbpI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACZwN,GAAeA,EAAYoB,YAC1BnX,IAAAC,cAAA,OAAK0F,UAAU,eACb3F,IAAAC,cAAC+R,IAAI,CAACjM,GAAI,CAAER,SAAUwQ,EAAYoB,YAAczQ,OAAO,UACpD5E,EAAMuE,cAAc,iBAEvBrG,IAAAC,cAACiG,IAAe,CAACC,KAAMkT,IAAmB1T,UAAU,UAGvDoQ,KAAiBA,EAAYoB,YAAgD,IAAlCpB,EAAYoB,WAAWnT,SAAiB+R,EAAYmB,MAC9FlX,IAAAC,cAAA,OAAK0F,UAAU,eACb3F,IAAAC,cAAC+R,IAAI,CAACjM,GAAI,CAAER,SAAUwQ,EAAYmB,MAAQxQ,OAAO,UAC9C5E,EAAMuE,cAAc,aAEvBrG,IAAAC,cAACiG,IAAe,CAACC,KAAMkT,IAAmB1T,UAAU,WAI1D3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAG5C,UAAU,aACzBoQ,GACC/V,IAAAC,cAAC+Q,GAAK,CAACnR,MAAOkW,EAAYlW,MAAOwG,cAAevE,EAAMuE,cAAe+K,WAAW,EAAMa,UAAU,MAKrGnQ,EAAMmK,OAAOwE,UAAY3O,EAAMmK,OAAOwE,SAASzM,OAAS,GACvDhE,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACzC,UAAU,mBACxB3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,gBAC3B3F,IAAAC,cAAA,OAAK0F,UAAU,iBACb3F,IAAAC,cAAA,aAGJD,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACbvI,IAAAC,cAACyH,IAAM,CACL/B,UAAU,cACV2T,SAAU1E,GAAS,EACnB/O,QAASA,IAAM2R,GAA+B,IAE9CxX,IAAAC,cAACiG,IAAe,CAACC,KAAMoT,IAAa5T,UAAU,OAAO6M,KAAK,SAG9DxS,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAG5C,UAAU,aAC1B3F,IAAAC,cAAA,eAAAhB,OAAU6C,EAAMuE,cAAc,YAAW,KAAApH,OAAI2V,EAAQ,EAAC,KAAA3V,OAAI6C,EAAMuE,cAAc,UAAS,KAAApH,OACrF6C,EAAMmK,OAAOwE,SAASzM,OAAS,EAAC,KAAA/E,OAC9B6C,EAAMuE,cAAc,kBAE1BrG,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACbvI,IAAAC,cAACyH,IAAM,CACL/B,UAAU,eACV2T,SAAU1E,GAAS9S,EAAMmK,OAAOwE,SAASzM,OACzC6B,QAASA,IAAM2R,GAA+B,IAE9CxX,IAAAC,cAACiG,IAAe,CAACC,KAAMqT,IAAc7T,UAAU,OAAO6M,KAAK,aC7U5D,WAA0B,kCCA1B,OAA0B,mCCMlC,MAAMiH,GAAuB,CAChC,CACI/Z,KAAM,QACNga,MAAOC,GACP/a,KAAM,QACNsP,MAAO,OAEX,CACIxO,KAAM,SACNga,MAAOE,GACPhb,KAAM,SACNsP,MAAO,aAEX,CACIxO,KAAM,WACNga,MAAOE,GACPhb,KAAM,WACNsP,MAAO,aAEX,CACIxO,KAAM,MACNga,MC3BO,IAA0B,gCD4BjC9a,KAAM,MACNsP,MAAO,QAEX,CACIxO,KAAM,UACNga,MEjCO,IAA0B,oCFkCjC9a,KAAM,UACNsP,MAAO,cGlBF2L,GAAY/X,IACrB,MAAM,eAAEgY,EAAc,IAAExT,EAAG,KAAEyT,EAAI,GAAEta,EAAE,MAAEyO,GAAUpM,EAC3CmN,EAAYnB,YAAYkB,IAExBrQ,EAAWuG,cACXiR,EAAUC,cAEV4D,EAAwBA,KAC1B,GAAIP,GAASlM,MAAK0M,GAAKxa,EAAG8E,SAAS0V,EAAEva,QAAQ,CACzC,MAAMiY,EAAS,IAAIC,gBACnBjZ,EAASqW,IAAqB,IAC9BrW,EAAS+V,GAAsBjV,IAC/BkY,EAAOuC,OAAO,MAAOza,GACrB0W,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,kBAG9BjO,EAASqW,IAAqB,KAIhCmF,EAAmBA,KACrBxb,EAASqW,IAAqB,KAGlCjM,qBAAU,KACN,GAAIzC,GAAOyT,GAAQta,GAAMqa,GAAkB5L,GAASe,IAC3CA,EAAU1B,MAAKwH,GAAYA,EAAStV,KAAOA,MAAQ6P,GAAuB7P,GAAK,CAChF,MAAM2a,EAAyB,CAC3B3a,GAAIA,EACJwP,UAAW,GACXf,MAAOA,GAEX4L,EAAeO,SAAQC,IACnB,MAAMC,EAAmBC,EAAeF,GACnChL,GAAuBiL,IACxBH,EAAYnL,UAAU8I,KAAKwC,MAInCtL,EAAU8I,KAAKqC,GACfzb,EAASmW,GAAgB7F,OAIlC,CAACxP,EAAIqa,IAER,MAAMU,EAAkBC,IACpB,IAAIF,EAAmBR,EAAKF,SAC5B,GAAIY,EAASzW,OAAS,EAAG,CACrB,MAAM0W,EAAa,CACfC,KAAM,YACNC,cAAe,EACfC,MAAO,GAEXN,EAAmB,IAAIR,EAAKF,SAAS,CACjCrT,IAAK/G,EACLkb,KAAMF,EACNK,UAAU,EACVC,YAAajZ,EAAMoM,MACnB0M,cAAe,EACfI,aAAc,EACdC,MAAO,CACH,CACI9U,KAAMuU,EACNQ,OAAQ,IACRC,OAAQ,WAKpBZ,EAAiBa,OAAO9U,GACxBiU,EAAiBc,YAAY,QAASrB,GACtC1T,EAAI+U,YAAY,QAASlB,GAG7B,OAAOI,GAGX,OACIva,IAAAC,cAACD,IAAMgH,SAAQ,OC3EVsU,GAAWxZ,IAAuC,IAADyZ,EAE1D,MAAM1P,EAAoBiC,YAAYlC,KAC/BmC,EAAcC,GAAmB9L,oBAAkB,IACnDsZ,EAASC,GAAcvZ,mBAA0B,OACjDyI,EAAK+Q,GAAUxZ,mBAAiB,IAChCyZ,EAAYC,GAAiB1Z,oBAAkB,GAEtD6G,qBAAU,KACN0S,EAAWhC,GAASxL,MAAMuN,GAAYA,EAAQ5c,OAASkD,EAAM+Z,iBAAkB,QAChF,CAAC/Z,EAAM+Z,gBAEV9S,qBAAU,KACNiF,EAAgBhC,GAAalK,EAAMmK,OAAQJ,GAAmB,MAC/D,CAAC/J,EAAMmK,SAEVlD,qBAAU,KACyB,IAAD+S,EAA1Bha,EAAMmK,OAAOtB,MAAQA,IACjB7I,EAAMmK,OAAOtB,KAAQ7I,EAAMmK,OAAOtB,IAAMA,EACxCiR,GAAc,GACP9Z,EAAMmK,OAAOtB,KAAQ7I,EAAMmK,OAAOtB,IAAMA,GAC/CiR,GAAc,GAGlBF,EAAuB,QAAjBI,EAACha,EAAMmK,OAAOtB,WAAG,IAAAmR,IAAI,MAEhC,CAACha,EAAMmK,OAAOtB,MASjB,OACI3K,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,OACIqO,SAAU,EACV3I,UAAW,mBAAmC,QAAlB4V,EAAW,OAAPC,QAAO,IAAPA,OAAO,EAAPA,EAAStN,aAAK,IAAAqN,IAAI,KAAOzZ,EAAMhC,OAAS,UAAY,KAAOiO,EAAe,QAAU,IACpHlI,QAAUxE,GAAUS,EAAM+D,QAAQxE,GAClC+M,UAZkBC,IACX,WAAV,OAADA,QAAC,IAADA,OAAC,EAADA,EAAG7H,MACH1E,EAAM+D,QAAQwI,KAYVrO,IAAAC,cAAA,OAAK0F,UAAU,kBACX3F,IAAAC,cAAA,OACIC,IAAY,OAAPsb,QAAO,IAAPA,OAAO,EAAPA,EAAS9B,MACd/T,UAAS,eAAA1G,OAAiB0c,EAAa,GAAK,QAC5C9V,QAAUxE,GAAUS,EAAM+D,QAAQxE,MAGzC0M,GACG/N,IAAAC,cAAA,OAAK0F,UAAU,WAAWuC,KAAK,iBAC3BlI,IAAAC,cAACiG,IAAe,CAACC,KAAMoI,IAAU5I,UAAU,eC3CtDoW,GAAUja,IAAsC,IAADka,EAC1D,MAAOC,EAAavE,GAAkBxV,oBAAkB,IACjDga,EAAcC,GAAmBja,mBAAwB,KACzDka,EAAYC,GAAiBna,mBAAiB,IAE/CvD,EAAWuG,cACXoX,EAAmBxO,YAAYc,IAC/B2N,EAAkBzO,YAAYgB,IAC9BxD,EAAkBwC,YAAYzC,IAC9B4D,EAAYnB,YAAYkB,IACxBmH,EAAUC,cAEhBrN,qBAAU,KACJuT,IAAqBxa,EAAMmK,OAAOxM,GACpCiY,GAAe,IAEfA,GAAe,GACf8E,EAA8B,OAAfD,QAAe,IAAfA,IAAmB,MAEnC,CAACD,EAAkBxa,EAAMmK,OAAOxM,GAAI8c,IAGvC,MAAME,EAAmBC,IACvB,IAAKpN,GAAuBL,IAAcA,EAAUjL,OAAS,EAAG,CAC9D,MAAM2Y,EAAmBD,EAAiBzN,EAAU2N,QAAOC,GAAQpD,GAASlM,MAAK0M,GAAK4C,EAAKpd,GAAG8E,SAAS0V,EAAEva,UAAUuP,EAAU2N,QAAOC,IAASpD,GAASlM,MAAK0M,GAAK4C,EAAKpd,GAAG8E,SAAS0V,EAAEva,UACnL,IAAK4P,GAAuBqN,IAAqBA,EAAiB3Y,OAAS,EAAG,CAC5E2Y,EAAiBtC,SAAStF,IACxBA,EAAS9F,UAAUoL,SAASwC,IACrBvN,GAAuBuN,IAC1BA,EAAKzB,OAAO,YAIlB,MAAM0B,EAAe7N,EAAU2N,QAAO7H,IAAa4H,EAAiBpP,MAAKsP,GAAQA,EAAKpd,KAAOsV,EAAStV,OACtGd,EAASmW,GAAgBgI,OAK/B/T,qBAAU,KACJuC,EAAgBiC,MAAKqP,GAA2B,UAAjBA,EAAO/c,QACd,OAAtBiC,EAAMmK,OAAO9F,MACf4W,EAAWjb,EAAMmK,OAAO+Q,aAAc,GAGxCP,GAAgB,KAEjB,CAACnR,IAEJvC,qBAAU,KACR,MAAMkU,EAAW9G,EAAQ+G,QAAQ3Z,IAC/B,MAAM4Z,EAAQ,IAAIvF,gBAAgBrU,EAASsU,QAAQ7Y,IAAI,OAErDL,EAAS+V,GADPyI,GAG6B,aAInC,MAAO,KACLF,OAED,CAAC9G,IAEJ,MAAMiH,EAAuB/b,IAC3B,MAAMsW,EAAS,IAAIC,gBACfqE,GACFQ,GAAgB,GAChB9d,EAAS+V,GAAsB,UAC/B/V,EAASgW,GAA2B,MAEpC8H,GAAgB,GAChB9d,EAAS+V,GAAsB5S,EAAMmK,OAAOxM,KAC5Cd,EAASgW,GAA2B,IACpCgD,EAAOuC,OAAO,MAAOpY,EAAMmK,OAAOxM,KAEpC0W,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,aACzB,OAALvL,QAAK,IAALA,KAAOuQ,kBACF,OAALvQ,QAAK,IAALA,KAAOmQ,iBACPC,KAAQpQ,MAAM,CAAEqQ,SAAU,SAAUC,OAAO,sBAAD1S,OAAwB6C,EAAMmK,OAAOpM,UAG3Ekd,EAAaA,CAACC,EAA8BzF,KAChD4E,EAAgB,IAChB,MAAMkB,EAAiC,GAClC/N,GAAuB0N,GAa1Bb,EAAgB,KAZhBa,EAAa3C,SAASiD,KACfhO,GAAuBgO,EAAY7C,WAAa6C,EAAY7C,SAASzW,OAAS,GACjFqZ,EAAgBtF,KAAKuF,EAAY7C,aAGrC0B,EAAgBkB,GAChBhB,EAAc,GAADpd,OACR6C,EAAMmK,OAAOyB,MAAMH,MAAKI,GAAiB,UAAZA,EAAE9N,QAAqBiC,EAAMmK,OAAO9F,KAAO,IAAM,IAAElH,OACjF6C,EAAMmK,OAAOxM,GAAE,KAAAR,OACbsY,MAOJiF,EAAkBe,IAAyB,IAAD1G,EAC9C,MAAMU,EAAegG,EAAc,EACnCd,GAAgB,IACM,IAAlBlF,EACFwF,EAAWjb,EAAMmK,OAAO+Q,aAAc,GAEtClb,EAAMmK,OAAOwE,WACQ,QAArBoG,EAAA/U,EAAMmK,OAAOwE,gBAAQ,IAAAoG,OAAA,EAArBA,EAAuB7S,QAAS,GAChClC,EAAMmK,OAAOwE,SAAS8G,GAAcyF,cACpClb,EAAMmK,OAAOwE,SAAS8G,GAAcyF,aAAahZ,OAAS,EAE1D+Y,EAAWjb,EAAMmK,OAAOwE,SAAS8G,GAAcyF,aAAczF,GAE7DwF,EAAW,GAAI,IAIbS,EAAyBA,KAC7B,MAAM5e,EACJ0M,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EAC3DlC,EAAMmK,OAAOyB,MAAMO,MAAKN,GAAKrC,EAAgB2C,MAAKT,GAAKG,EAAE9N,QAAU2N,EAAE3N,WACpEyL,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EAChElC,EAAMmK,OAAOyB,MAAM,QACnBpB,EAEIkP,EAAU/B,GAASxL,MAAKgM,GAAKA,EAAErb,OAASkD,EAAMmK,OAAO9F,OAG/D,OAFkC,WAAZ,OAAJvH,QAAI,IAAJA,OAAI,EAAJA,EAAMiB,OAAwB,OAAJjB,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,MAAQqN,EAAUA,EAAQtN,WAAQ5B,GAGlF,IAAK,YACH,MAAO,UACT,IAAK,aACH,MAAO,UACT,IAAK,eACH,MAAO,UACT,IAAK,eACH,MAAO,UACT,IAAK,OACH,MAAO,UACT,IAAK,QACH,MAAO,UACT,IAAK,aACH,MAAO,UACT,IAAK,MACH,MAAO,UACT,QACE,MAAO,YAIPmR,EAAwBA,KAC1B,MAAM7e,EAAO0M,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EACxElC,EAAMmK,OAAOyB,MAAMO,MAAKN,GAAKrC,EAAgB2C,MAAKT,GAAKG,EAAE9N,QAAU2N,EAAE3N,WACpEyL,GAAmBxJ,EAAMmK,QAAUnK,EAAMmK,OAAOyB,MAAM1J,OAAS,EAC5DlC,EAAMmK,OAAOyB,MAAM,QACnBpB,EAEFkP,EAAU/B,GAASxL,MAAKgM,GAAKA,EAAErb,OAASkD,EAAMmK,OAAO9F,OAG3D,MAF8B,WAAZ,OAAJvH,QAAI,IAAJA,OAAI,EAAJA,EAAMiB,OAAwB,OAAJjB,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,MAAQqN,EAAUA,EAAQtN,WAAQ5B,GAK9E4D,EAAapO,EAAMkI,WAAa,GAAKlI,EAAMkI,UAAY,GAAK,WAChElI,EAAMkI,WAAa,IAAMlI,EAAM4b,UAAY,eAC3C5b,EAAMkI,WAAa,GAAK,WAAa,GAEvC,OACEhK,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACgH,IAAM,CAAC0W,QAAM,GACX1B,GACCjc,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAAC2V,GAAO,CACNvP,cAAevE,EAAMuE,cACrB4F,OAAQnK,EAAMmK,OACdiE,WAAYA,EACZwH,eAAgBA,IAEjBwE,GAAgBA,EAAalY,OAAS,IAAMlC,EAAM4b,UACjD1d,IAAAC,cAAC4Z,GAAQ,CACPpa,GAAI2c,EACJlO,MAAOsP,IACP1D,eAAgBoC,EAChB5V,IAAKxE,EAAMwE,IACXyT,KAAMjY,EAAMiY,OAGd/Z,IAAAC,cAACD,IAAMgH,SAAQ,QAKtBlF,EAAMkI,WAAa,IAClBhK,IAAAC,cAACD,IAAMgH,SAAQ,KACZlF,EAAM4b,UACL1d,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACqb,GAAO,CACNxb,OAAQmc,EACR5V,cAAevE,EAAMuE,cACrB4F,OAAQnK,EAAMmK,OACdpG,QAAUxE,IAAY+b,EAAoB/b,IAAe,GACzDwa,cAAe/Z,EAAMmK,OAAO9F,KAAOrE,EAAMmK,OAAO9F,KAAO,GACvD+H,MAA8B,QAAzB8N,EAAEyB,WAAuB,IAAAzB,IAAI,KAEnCE,GAAgBA,EAAalY,OAAS,GACrChE,IAAAC,cAAC4Z,GAAQ,CACPpa,GAAI2c,EACJlO,MAAOsP,IACP1D,eAAgBoC,EAChB5V,IAAKxE,EAAMwE,IACXyT,KAAMjY,EAAMiY,QAKlB/Z,IAAAC,cAAC4P,GAAG,CAACxJ,cAAevE,EAAMuE,cAAe4F,OAAQnK,EAAMmK,OAAQnM,OAAQmc,EAAapW,QAAUxE,IAAY+b,EAAoB/b,IAAe,MAIjJS,EAAMkI,WAAa,GAAKlI,EAAMkI,UAAY,IACxChK,IAAAC,cAAC2N,GAAG,CAACvH,cAAevE,EAAMuE,cAC1B4F,OAAQnK,EAAMmK,OACdnM,OAAQmc,EACRpW,QAAUxE,GAAU+b,EAAoB/b,GACxC6M,MAAOuP,Q,OCzPV,MAAMG,GAAU9b,GAEf9B,IAAAC,cAAA,OAAK0F,UAAU,eAAe6I,aAAY1M,EAAMuE,cAAc,mBAC1DrG,IAAAC,cAAA,OAAK0F,UAAU,oBACX3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,yBACf3F,IAAAC,cAAA,OAAK0F,UAAU,0BACf3F,IAAAC,cAAA,OAAK0F,UAAU,0BACf3F,IAAAC,cAAA,OAAK0F,UAAU,4BCDzBkY,GAAiBA,KACX,CACJhe,MAAO,GACPJ,GAAI,GACJ+Q,YAAa,GACb0G,KAAM,GACNxJ,MAAO,GACPJ,SAAU,GACVJ,OAAQnB,GAAa+R,MACrBd,aAAc,GACde,SAAS,EACTC,WAAW,EACX7G,WAAY,GACZ3B,SAAU,GACV7I,SAAU,IAAI3J,OAITib,GAAiBnc,IAE1B,MAAOoc,EAAYC,GAAiBjc,mBAAkB2b,OAC/C3B,EAAcC,GAAmBja,mBAAwB,KACzD+Z,EAAavE,GAAkBxV,oBAAS,GAEzCoa,EAAmBxO,YAAYc,IAC/BiH,EAAY/H,YAAYgB,IACxBG,EAAYnB,YAAYkB,IACxB1D,EAAkBwC,YAAYzC,IAE9B1M,EAAWuG,cAEjB6D,qBAAU,KACN,MAAMkD,EAASnK,EAAM4M,QAAQT,MAAKhC,GAAUA,EAAOxM,KAAO6c,IACtDrQ,GACA8Q,EAAW9Q,EAAO+Q,cAClBmB,EAAclS,GACdyL,GAAe,KAEf+E,IACA0B,EAAcN,MACdnG,GAAe,MAEpB,CAAC4E,EAAkBxa,EAAM4M,UAE5B3F,qBAAU,KAAO,IAADqV,EACZ,MAAMnS,EAASnK,EAAM4M,QAAQT,MAAKhC,GAAUA,EAAOxM,KAAO6c,IAC1D,GAAIzG,GAAaA,EAAY,IAAW,OAAN5J,QAAM,IAANA,OAAM,EAANA,EAAQwE,YAA2B,QAAf2N,EAAAnS,EAAOwE,gBAAQ,IAAA2N,OAAA,EAAfA,EAAiBpa,SAAU6R,EAAW,CACxF,MAAM0B,EAAe1B,EAAY,EAC3BmH,EAAe/Q,EAAOwE,SAAS8G,GAAcyF,aACnDD,EAAWC,QACJ/Q,GACP8Q,EAAW9Q,EAAO+Q,gBAEvB,CAACnH,IAEJ,MAAMkH,EAAcC,IAChBb,EAAgB,IAChB,MAAMkB,EAAiC,GAClC/N,GAAuB0N,GAQxBb,EAAgB,KAPhBa,EAAa3C,SAASiD,KACbhO,GAAuBgO,EAAY7C,WAAa6C,EAAY7C,SAASzW,OAAS,GAC/EqZ,EAAgBtF,KAAKuF,EAAY7C,aAGzC0B,EAAgBkB,KAMlBZ,EAAkBA,KACpB,IAAKnN,GAAuBL,IAAcA,EAAUjL,OAAS,EAAG,CAC5D,MAAM2Y,EAAmB1N,EAAU2N,QAAOC,IAASpD,GAASlM,MAAK0M,GAAK4C,EAAKpd,GAAG8E,SAAS0V,EAAEva,UACzF,IAAK4P,GAAuBqN,IAAqBA,EAAiB3Y,OAAS,EAAG,CAC1E2Y,EAAiBtC,SAAStF,IAEtBA,EAAS9F,UAAUoL,SAASwC,IACnBvN,GAAuBuN,IACxBA,EAAKzB,OAAO,YAIxB,MAAM0B,EAAe7N,EAAU2N,QAAO7H,IAAa4H,EAAiBpP,MAAKsP,GAAQA,EAAKpd,KAAOsV,EAAStV,OACtGd,EAASmW,GAAgBgI,OAqCrC,OACI9c,IAAAC,cAACD,IAAMgH,SAAQ,KACViV,GACGjc,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAC2V,GAAO,CAACvP,cAAevE,EAAMuE,cAAe4F,OAAQiS,EAAYhO,WAAY,SAAUwH,eAAgBA,IACtGwE,GAAgBA,EAAalY,OAAS,EACnChE,IAAAC,cAAC4Z,GAAQ,CACLpa,GAAIye,EAAWze,GACfqa,eAAgBoC,EAChB5V,IAAKxE,EAAMwE,IACXyT,KAAMjY,EAAMiY,KACZ7L,MA3CQjC,KAC5B,MAAMrN,EAAO0M,GAAmBW,GAAUA,EAAOyB,MAAM1J,OAAS,EAC5DiI,EAAOyB,MAAMO,MAAKN,GAAKrC,EAAgB2C,MAAKT,GAAKG,EAAE9N,QAAU2N,EAAE3N,WAC9DyL,GAAmBW,GAAUA,EAAOyB,MAAM1J,OAAS,EAChDiI,EAAOyB,MAAM,QACbpB,EAEFkP,EAAU/B,GAASxL,MAAKgM,GAAKA,EAAErb,OAASqN,EAAO9F,OAGrD,OAF8B,WAAZ,OAAJvH,QAAI,IAAJA,OAAI,EAAJA,EAAMiB,OAAwB,OAAJjB,QAAI,IAAJA,OAAI,EAAJA,EAAMuP,MAAQqN,EAAUA,EAAQtN,WAAQ5B,GAG9E,IAAK,YACH,MAAO,UACT,IAAK,aACH,MAAO,UACT,IAAK,eACH,MAAO,UACT,IAAK,eACH,MAAO,UACT,IAAK,OACH,MAAO,UACT,IAAK,QACH,MAAO,UACT,IAAK,aACH,MAAO,UACT,IAAK,MACH,MAAO,UACT,QACE,MAAO,YAegBkR,CAAuBU,KAGlCle,IAAAC,cAACD,IAAMgH,SAAQ,SCzJ1BqX,GAAoB,oBACpBC,GAAsB,sBACtBC,GAAsB,sBACtBC,GAA0B,0BAC1BC,GAAkC,kCAGlCC,GAAyB,yBAEzBC,GAA4B,4BCF5BC,GAAaA,IAA6DlgB,UACnF,IACIC,EAAS,CAAEC,KAAMigB,KAEjB,MAAM/f,QAAeC,IAAMC,IAAI,GAADC,OAAItC,EAAQ,YAC1CgC,EAAS,CACLC,KAAMigB,GACN3f,QAASJ,EAAOK,OAEtB,MAAOC,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMigB,GAAmC3f,QAASE,MAIxD0f,GAAyBxT,GAAsF5M,UACxH,IACIC,EAAS,CACLC,KAAMigB,GACN3f,QAASoM,IAGf,MAAOlM,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMigB,GAA+C3f,QAASE,MAepE2f,GAA0Blf,GAAyEnB,UAC5GC,EAAS,CAAEC,KAAMigB,GAAyC3f,QAASW,KCjB1Dmf,GAAcld,IAGvBuU,KAAQC,IAAIC,KAEZ,MAAM5X,EAAWuG,cACXiR,EAAUC,cAEhBrN,qBAAU,KACNpK,EAAS0V,MACT1V,GfVyFD,UAC7F,MAAMugB,GAAa,IAAIC,MAClBC,Q7BjCgFviB,qD6BkChFwiB,yBACAC,iBAAiBC,KAASC,aAC1BC,QAULP,EAAWQ,GAAG,iBARMjL,IAChB,MAAM9F,EAAUgR,KAAKC,MAAMnL,GAC3BnV,QAAQyS,IAAI,sBAAuBpD,GAEnC/P,EAAS,CAAEC,KAAM2V,GAAsCrV,QAASwP,OAKpEuQ,EAAWW,SAAQ,IAAMvgB,QAAQyS,IAAI,kBACrCmN,EAAWY,gBAAe,KACtBxgB,QAAQyS,IAAI,gHACZnT,EAAS0V,MACT1V,EAAS,CAAEC,KAAM2V,QAErB0K,EAAWa,eAAc,KACrBnhB,EAAS,CAAEC,KAAM2V,QAGrBlV,QAAQyS,IAAI,iBACZnT,EAAS,CAAEC,KAAM2V,KAEjB0K,EAAWc,QACNC,MAAK,KACF3gB,QAAQyS,IAAI,eACZnT,EAAS,CAAEC,KAAM2V,QAEpB0L,OAAO7gB,IACJC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAM2V,GAA+BrV,QAASE,YezB9D,CAACT,IAEJoK,qBAAU,KACN,GAAIoN,EAAS,CAC0D,IAAD+J,EAGLC,EAGEC,EAN/D,GAAI,IAAIxI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,YACjDL,EAASogB,GAAmF,QAA7DmB,EAAC,IAAItI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,mBAAW,IAAAkhB,IAAI,KAEpG,GAAI,IAAItI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,OACjDL,EAAS+V,GAA6E,QAAxDyL,EAAC,IAAIvI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,cAAM,IAAAmhB,IAAI,KAE9F,GAAI,IAAIvI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,SACjDL,EAASgW,GAA4F,QAAlEyL,EAACC,OAAO,IAAIzI,gBAAgBzB,EAAQ5S,SAASsU,QAAQ7Y,IAAI,iBAAS,IAAAohB,IAAI,OAGlH,CAACjK,IAEJ,MAAMzH,EAAUZ,YAAYW,IACtBxD,EAAU6C,YAAY/C,IACtBO,EAAkBwC,YAAYzC,IAC9BiR,EAAmBxO,YAAYc,IAC/BpD,EAAsBsC,YAAYvC,IAClC0D,EAAYnB,YAAYkB,IACxBG,EAAoBrB,YAAYoB,IAChCrD,EAAoBiC,YAAYlC,IAChCyD,EAAqBvB,YAAYsB,KAEhCpF,EAAWsW,GAAgBpe,mBAAS,KACpCqe,EAAcC,GAAmBte,mBAAoB,KACrDue,EAAQC,GAAaxe,sBACrBye,EAAQC,GAAa1e,mBAAS2e,MAC9BC,EAAeC,GAAoB7e,oBAAS,IAC5C8e,EAAWC,GAAgB/e,mBAAS,OACpCgf,EAAYC,GAAiBjf,mBAAS,MAQvCkf,EAA2BC,uBAAa3S,IAC1C,MAAM4S,EAA6B,GA0CnC5S,EAAQ2L,SAAQpO,IAbWA,KACvB,IAAKwU,IAAWxU,EAAOxB,MAAQwB,EAAOtB,IAClC,OAAO,EAGX,MAAM,GAAE4W,EAAE,GAAEC,EAAE,GAAEC,EAAE,GAAEC,GAAOjB,EAC3B,OACKxU,EAAOxB,IAAM8W,EAAG9W,KAAOiX,EAAGjX,KAC1BwB,EAAOxB,IAAM+W,EAAG/W,KAAOgX,EAAGhX,KAC1BwB,EAAOtB,IAAM8W,EAAG9W,KAAO+W,EAAG/W,KAC1BsB,EAAOtB,IAAM6W,EAAG7W,KAAO4W,EAAG5W,KAI3BgX,CAAkB1V,IAClBqV,EAAgBvJ,KAAK9L,MA3CEyC,KAC3B,IAAIkT,EAAgC,GAcpC,GAbAtW,EAAgB+O,SAAQwH,IACpB,IAAIC,EAAoBpT,EAAQkO,QAAO3Q,GAAUA,EAAOyB,MAAMH,MAAK3O,GAAQA,EAAKiB,QAAUgiB,EAAehiB,SAAWwP,GAAsBrD,GAAaC,EAAQJ,GAAmB,KAClLiW,EAAoBA,EAAkBlF,QAAO3Q,IAAM,IAAAC,EAAA,OAC7CoD,GAAuBuS,EAAeE,aAAe9W,EAAQgD,MAAK2O,GAAUA,EAAO/c,QAAUoM,EAAOpM,OAAS+c,EAAOmF,WAAW/d,OAAS,KACrIiH,EAAQgD,MAAK2O,GAAWA,EAAO/c,QAAUgiB,EAAehiB,OAAU+c,EAAOmF,WAAW/d,SAAW6d,EAAeE,WAAW/d,WAC/G,QADuHkI,EACtID,EAAOqB,gBAAQ,IAAApB,OAAA,EAAfA,EAAiBqB,MAAKyU,GAAWH,EAAeE,WAAWxU,MAAK0U,GAAaA,EAAUpiB,QAAUmiB,EAAQniB,cAE7GiiB,EAAkBzH,SAAQpO,KACjB2V,EAAmBrd,SAAS0H,IAAWA,EAAO+R,YAC/C4D,EAAqB,IAAIA,EAAoB3V,UAI1B,IAA3BX,EAAgBtH,QAAgBqL,EACpC,CAC8BX,EAAQkO,QAAO3Q,GAAUD,GAAaC,EAAQJ,GAAmB,KACzEwO,SAAQpO,KACjB2V,EAAmBrd,SAAS0H,IAAWA,EAAO+R,YAC/C4D,EAAqB,IAAIA,EAAoB3V,OAIzDuU,EAAgBoB,GAChBb,GAAiB,IAsBrBmB,CAAsBZ,KACvB,CAACb,EAAQnV,EAAiB+D,IAE7BtG,qBAAU,KACF0X,GAAU/R,EAAQ1K,OAAS,GAC3Bod,EAAyB1S,KAE9B,CAAC+R,EAAQW,EAA0B1S,IAEtC3F,qBAAU,KACF0X,GAAU/R,EAAQ1K,OAAS,GAC3Bod,EAAyB1S,KAE9B,CAAC+R,EAAQW,EAA0B1S,IAEtC3F,qBAAU,KACF0X,GAAU/R,EAAQ1K,OAAS,GAC3Bod,EAAyB1S,KAE9B,CAAC+R,EAAQW,EAA0B9V,EAAiBoD,IAEvD3F,qBAAU,KACDwX,EAAatS,MAAKhC,GAAUgD,EAAU1B,MAAKwH,GAAYA,EAAStV,GAAG8E,SAAS0H,EAAOxM,SACpF0iB,MAEL,CAAC5B,IAEJxX,qBAAU,KACN,GAAI+X,GAAiBpS,GAAW4N,GAAyC,UAArBA,EAA8B,CAC9E,MAAM8F,EAAc1T,EAAQT,MAAKoU,GAAKA,EAAE5iB,KAAO6c,IAC/C,GAAI8F,EAAa,CACb,MAAME,EAAUhX,EAAgB2C,MAAK4T,GAAkBO,EAAY1U,MAAMH,MAAK3O,GAAQA,EAAKiB,QAAUgiB,EAAehiB,UAC9G+c,EAAS3R,EAAQgD,MAAK2O,GAAUwF,EAAY1U,MAAMO,MAAKrP,GAAQA,EAAKiB,QAAU+c,EAAO/c,WACtFyiB,GAAW1F,GACZje,EAASmgB,GAAsB,IAAIxT,EAAiBsR,MAEzC,OAAXwF,QAAW,IAAXA,OAAW,EAAXA,EAAa3X,MAAO2X,EAAYzX,KAChCiW,EAAU,CAAEnW,IAAgB,OAAX2X,QAAW,IAAXA,OAAW,EAAXA,EAAa3X,IAAKE,IAAgB,OAAXyX,QAAW,IAAXA,OAAW,EAAXA,EAAazX,YAG1D,GAAImW,GAAiBpS,GAAWlD,GAA+C,KAAxBA,EAA4B,CACtF,MAAM+W,EAActX,EAAQgD,MAAKT,GAAKA,EAAE3N,QAAU2L,IAC9C+W,GACA5jB,EAASmgB,GAAsB,CAACyD,QAGzC,CAACzB,IAEJ,MAAM0B,EAAc,CAChB7B,OAAQE,IACR4B,KAAM,IAEV,SAAS5B,IAEL,MAAMtW,EAAWmV,KAAKC,MAAM3iB,GAG5B,MAAO,CACHyN,IAHkBiY,WAAWnY,EAASE,KAItCE,IAHkB+X,WAAWnY,EAASI,MAO9C,MAAMZ,EAAcC,IAChBsW,EAAatW,IAGXa,EAAgBL,IAClBoW,EAAUpW,IA+BR2X,EAAiBA,KACnB,IAAK7S,GAAuBL,IAAcA,EAAUjL,OAAS,EAAG,CAC5D,MAAM2Y,EAAmB1N,EAAU2N,QAAOC,IAASpD,GAASlM,MAAK0M,GAAK4C,EAAKpd,GAAG8E,SAAS0V,EAAEva,UACzF,IAAK4P,GAAuBqN,IAAqBA,EAAiB3Y,OAAS,EAAG,CAC1E2Y,EAAiBtC,SAAStF,IAEtBA,EAAS9F,UAAUoL,SAASwC,IACnBvN,GAAuBuN,IACxBA,EAAKzB,OAAO,YAIxB,MAAM0B,EAAe7N,EAAU2N,QAAO7H,IAAa4H,EAAiBpP,MAAKsP,GAAQA,EAAKpd,KAAOsV,EAAStV,OACtGd,EAASmW,GAAgBgI,OAKrC,OACI9c,IAAAC,cAAA,OAAKR,GAAG,gBAAgByI,KAAK,OAAOsG,aAAY1M,EAAMuE,cAAc,gBAC9Dya,GACE9gB,IAAAC,cAAA,OAAK0F,UAAU,qBACX3F,IAAAC,cAAC2d,GAAM,CAACvX,cAAevE,EAAMuE,iBAGrCrG,IAAAC,cAAC0iB,KAAS,CACNC,iBAAkB,CAAEpc,I5C9P0D5J,2C4C+P9EimB,cAAeL,EAAY7B,OAC3B6B,YAAaA,EAAYC,KACzBK,qBAAsB/Y,EACtBgZ,OAAQlY,EACR4X,KAAMzY,EACN2W,OAAQA,EACRqC,QAnDiB,UAArB1G,EACO,IAAK/S,GAAc0Z,wBAAwB,GAE3C,IAAK1Z,GAAc0Z,wBAAwB,GAiD9Cpd,QA7CSqd,KAEjB,GADAf,KACKhT,EACL,CACIxQ,EAAS+V,GAAsB,UAC/B/V,EAASgW,GAA2B,IACpC,MAAMgD,EAAS,IAAIC,gBACnBzB,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,eAuC1BuW,SA/DUC,IACbA,GAGDA,EAAY3C,QAAUf,KAAK2D,UAAUD,EAAY3C,UAAYf,KAAK2D,UAAU5C,IAC5EC,EAAU0C,EAAY3C,SA2DlB6C,oCAAoC,EACpCC,kBAAmBhd,IAAA,IAAC,IAAED,EAAG,KAAEyT,GAAMxT,EAAA,MA9LrBid,EAACld,EAAUyT,KAC/BkH,EAAa3a,GACb6a,EAAcpH,IA4LgCyJ,CAAgBld,EAAKyT,KAE1D+G,GACGP,EAAaja,KAAI,CAAC+b,EAAYzN,IAC1B5U,IAAAC,cAAC8b,GAAM,CACH1V,cAAevE,EAAMuE,cACrBoE,IAAK4X,EAAE5X,IACPE,IAAK0X,EAAE1X,IACPX,UAAWA,EACXiC,OAAQoW,EACR7b,IAAKoO,EACLtO,IAAK0a,EACLjH,KAAMmH,EACNxD,YAAW2E,EAAE3U,MAAMO,MAAKrP,GAAuB,UAAfA,EAAKiB,aAIrDG,IAAAC,cAACgH,IAAM,CAACwc,MAAI,GACRzjB,IAAAC,cAACge,GAAa,CACV5X,cAAevE,EAAMuE,cACrBqI,QAAS6R,EACTja,IAAK0a,EACLjH,KAAMmH,KAIdlhB,IAAAC,cAAC6J,GAAW,CACRE,UAAWA,EACXD,WAAa2Z,GAAU3Z,EAAW2Z,KAEtC1jB,IAAAC,cAACkK,GAAe,CAACU,aAAeL,GAAWK,EAAaL,OCvRvDmZ,GAAgB7hB,IAEzBuU,KAAQC,IAAIC,KACZ,MAAOqN,EAAcC,GAAmB3hB,oBAAS,IAC1C4hB,EAAkBC,GAAuB7hB,oBAAkB,IAC3D8hB,EAAYC,GAAiB/hB,oBAAkB,GAChDvD,EAAWuG,cAEXoG,EAAkBwC,YAAYzC,IAEpCtC,qBAAU,KACNmb,MACD,CAAC5Y,EAAiBxJ,EAAM8a,SAE3B,MAaMsH,EAAeA,KACb5Y,EAAgB2C,MAAKkW,GAAKA,EAAEtkB,QAAUiC,EAAM8a,OAAO/c,SACnDgkB,GAAgB,GAChBI,GAAc,GACVniB,EAAM8a,OAAOmF,WAAW/d,OAAS,GACjC+f,GAAoB,KAGxBF,GAAgB,GAChBI,GAAc,GACdF,GAAoB,KAkB5B,OACI/jB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAACyH,IAAM,CACH/B,UAAS,iBAAA1G,OAAmB2kB,EAAe9hB,EAAM+f,eAAehiB,QAAUiC,EAAM8a,OAAO/c,MAAQ,WAAa,SAAW,IACvHgG,QA7CQkM,KAChBjQ,EAAMsiB,uBAEN,MACMC,EADU/Y,EAAgB2C,MAAKkW,GAAKA,EAAEtkB,QAAUiC,EAAM8a,OAAO/c,QAG7DyL,EAAgBsR,QAAOpP,GAAKA,EAAE3N,QAAUiC,EAAM8a,OAAO/c,QADrD,IAAIyL,EAAiBxJ,EAAM8a,QAEjCje,EAASmgB,GAAsBuF,IAC/BH,IACA7kB,QAAQyS,IAAI,UAqCJwS,oBAAoB,EACpBC,eAAe,GAEdziB,EAAM+f,eAAehiB,QAAUiC,EAAM8a,OAAO/c,OACzCG,IAAAC,cAAA,OAAK0F,UAAW,sBAAuBE,QAAUxE,GAtB5CA,KACZ,OAALA,QAAK,IAALA,KAAOuQ,kBACF,OAALvQ,QAAK,IAALA,KAAOmQ,iBACP1P,EAAMsiB,uBACNH,GAAc,GACdF,GAAoB,IAiBiGS,CAAYnjB,IACjHrB,IAAAC,cAACiG,IAAe,CAACC,KAAMsB,OAG/BzH,IAAAC,cAAA,OAAK0F,UAAU,gCACX3F,IAAAC,cAAA,OAAK0F,UAAU,sBACX3F,IAAAC,cAACiG,IAAe,CAACC,KAAM,CAAC,MAAOrE,EAAM8a,OAAOzW,MAAmBR,UAAW,SAAW7D,EAAM8a,OAAOzO,MAAQrM,EAAM8a,OAAOzO,MAAQ,IAAKK,aAAA,GAAAvP,OAAe6C,EAAMuE,cAAc,eAAc,KAAApH,OAAI6C,EAAM8a,OAAO/c,UAE1MG,IAAAC,cAAA,QAAM0F,UAAU,uBACX7D,EAAM8a,OAAO/c,QAGrBiC,EAAM+f,eAAehiB,QAAUiC,EAAM8a,OAAO/c,OACzCG,IAAAC,cAAA,OAAK0F,UAAS,oBACTqe,GACGhkB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,qBACd3F,IAAAC,cAAC+Q,GAAK,CAACnR,MAAOiC,EAAM8a,OAAO/c,MAAOwG,cAAevE,EAAMuE,cAAe+K,WAAW,EAAMa,UAAU,EAAOtM,UAAW,eAClHme,GACG9jB,IAAAC,cAAC+R,KAAI,CAACnM,QAAUxE,GAjCxBA,KACf,OAALA,QAAK,IAALA,KAAOuQ,kBACF,OAALvQ,QAAK,IAALA,KAAOmQ,iBACP1P,EAAM2iB,2BA8BiGC,CAAerjB,GAAQsE,UAAU,8BAEvG,iBC9F5Bgf,GAAiB7iB,GAGtB9B,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAMuc,WAAW,SAASC,eAAe,SAASlf,UAAU,kCAClF3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,uBAChC3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAGwc,GAAI,EAAGD,GAAI,EAAGE,GAAI,EAAGC,GAAI,GACvCjlB,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAM/D,EAAMojB,gBAAiBvf,UAAU,mCAAmC7D,EAAMuE,cAAc,uBAEnHrG,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAGwc,GAAI,EAAGD,GAAI,EAAGE,GAAI,EAAGC,GAAI,GACvCjlB,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAM/D,EAAMqjB,uBAAwBxf,UAAU,oCAAoC7D,EAAMuE,cAAc,0B,OCNpI,MAAM+e,GAAoBtjB,IAG7B,MAAMuP,EAAOvP,EAAMujB,YAAcvjB,EAAMuE,cAAc,mBAAqBvE,EAAMuE,cAAc,mBACxFF,EAAOrE,EAAMujB,YAAc,iBAAmB,iBAEpD,OACIrlB,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAM/D,EAAM+D,UAAWF,UAAU,wBAC9C3F,IAAAC,cAAA,YACID,IAAAC,cAACiG,IAAe,CAACsM,KAAK,KAAKrM,KAAM,CAAC,MAAOA,MAE7CnG,IAAAC,cAAA,YACKoR,KCfJiU,GAAgBxjB,GAGrB9B,IAAAC,cAAA,OAAK0F,UAAU,gBAAgBuC,KAAK,iBAChClI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAAC+J,QAAS,EAAGxM,UAAU,2BAClC3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAGwc,GAAI,EAAGD,GAAI,EAAGE,GAAI,EAAGC,GAAI,EAAGtf,UAAU,+CACpD3F,IAAAC,cAACmlB,GAAgB,CAAC/e,cAAevE,EAAMuE,cAAegf,YAAavjB,EAAMujB,YAAaxf,QAASA,KAAQ/D,EAAM+D,gB,iCCF1H,MAAM0f,GAAazjB,IAEtB,MAAO0jB,EAAiBC,GAAsBvjB,oBAAkB,GAC1DoJ,EAAkBwC,YAAYzC,IAEpCtC,qBAAU,KACNmb,MACD,CAACpiB,EAAMmgB,UAAW3W,IAErB,MAAM4Y,EAAeA,KACbpiB,EAAM+f,gBACN/f,EAAM+f,eAAeE,WAAW9T,MAAKkW,GAAKA,EAAEtkB,QAAUiC,EAAMmgB,UAAUpiB,QACtE4lB,GAAmB,GAEnBA,GAAmB,IAI3B,OACIzlB,IAAAC,cAAA,MAAI0F,UAAU,uBAAwBE,QAASA,IAAM/D,EAAMiQ,eACvD/R,IAAAC,cAACiG,IAAe,CACZC,KAAMqf,EAAkBE,IAAgBnX,IACxC5I,UAAS,qBAAA1G,OAAuBumB,EAAkB,GAAK,mBAE1D1jB,EAAMmgB,UAAUpiB,QCzBhB8lB,GAAc7jB,IAEvB,MAAMnD,EAAWuG,cACXoG,EAAkBwC,YAAYzC,IAWpC,OACIrL,IAAAC,cAACD,IAAMgH,SAAQ,KACfhH,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAW,MAAOH,KAAK,OAAO0d,OAAQ,GAC7C9jB,EAAM+f,eAAeE,YAAcjgB,EAAM+f,eAAeE,WAAWzb,KAAI,CAACuf,EAAuBjR,IAExF5U,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAAC9B,IAAKoO,EAAOrM,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,kBAC5C3F,IAAAC,cAACslB,GAAS,CACNlf,cAAevE,EAAMuE,cACrB4b,UAAW4D,EACX9T,YAAaA,IAlBpBkQ,KACjB,MAAMJ,EAAiBvW,EAAgB2C,MAAK2O,GAAUA,EAAO/c,QAAUiC,EAAM+f,eAAehiB,QAEtFwkB,GAD2B,OAAdxC,QAAc,IAAdA,OAAc,EAAdA,EAAgBE,WAAWxU,MAAKqP,GAAUA,EAAO/c,QAAUoiB,EAAUpiB,SAGjFyL,EAAgBhF,KAAIkH,GAAKA,EAAE3N,QAAUiC,EAAM+f,eAAehiB,MAAQ,IAAI2N,EAAGuU,WAAaF,EAAiBA,EAAeE,WAAWnF,QAAOkJ,GAAKA,EAAEjmB,QAAUoiB,EAAUpiB,QAAS,IAAM2N,IADlLlC,EAAgBhF,KAAIkH,GAAKA,EAAE3N,QAAUiC,EAAM+f,eAAehiB,MAAQ,IAAI2N,EAAGuU,WAAa,IAAIvU,EAAEuU,WAAaE,IAAczU,IAE1H7O,EAASmgB,GAAsBuF,KAYQtS,CAAY8T,GAC/BhE,eAAgBvW,EAAgB2C,MAAK2O,GAAUA,EAAO/c,QAAUiC,EAAM+f,eAAehiB,gBCTxGkmB,GAAajkB,IAEtBuU,KAAQC,IAAIC,IAAKyP,IAAUC,IAAgBxe,KAC3C,MAAM9I,EAAWuG,cACXiR,EAAUC,cAEhBrN,qBAAU,KACNpK,EAASigB,QACV,CAACjgB,IAEJ,MAAM+M,EAAWoC,YAAYnC,IACvBV,EAAU6C,YAAY/C,IACtBO,EAAkBwC,YAAYzC,IAC9BqD,EAAUZ,YAAYW,IACtBQ,EAAYnB,YAAYkB,IACxBK,EAAqBvB,YAAYsB,KAChC8W,EAAgBC,GAAqBjkB,oBAAS,IAC9CkkB,EAAoBC,GAAyBnkB,mBAAoB,KACjE2f,EAAgByE,GAAqBpkB,mBAAkB,KACvDwiB,EAAgB6B,GAAqBrkB,oBAAkB,GAE9D6G,qBAAU,KACNyd,MACD,CAAC9a,EAAUT,IAEdlC,qBAAU,KACN0d,MACD,CAAC/X,EAASzD,IAEb,MAAMwb,EAAmBA,KACrB,MAAMC,EAAuB,OAAPzb,QAAO,IAAPA,OAAO,EAAPA,EAAS2R,QAAOA,GAAiB,OAAPlO,QAAO,IAAPA,OAAO,EAAPA,EAASnB,MAAKtB,IAAM,IAAAE,EAAA,OAAgB,QAAhBA,EAAIF,EAAOyB,aAAK,IAAAvB,OAAA,EAAZA,EAAcoB,MAAK3O,GAAQA,EAAKiB,QAAU+c,EAAO/c,aACzH6mB,EAAcrM,SAAQuC,IAAW,IAAD+J,EAC5B/J,EAAOmF,WAA8B,QAApB4E,EAAG/J,EAAOmF,kBAAU,IAAA4E,OAAA,EAAjBA,EAAmB/J,QAAOqF,GAAoB,OAAPvT,QAAO,IAAPA,OAAO,EAAPA,EAASnB,MAAKtB,IAAM,IAAAC,EAAA,OAAmB,QAAnBA,EAAID,EAAOqB,gBAAQ,IAAApB,OAAA,EAAfA,EAAiBqB,MAAKyU,GAAWA,EAAQniB,QAAUoiB,EAAUpiB,gBAEpJwmB,EAAsBK,IAGpBF,EAAoBA,KACtB,MAAMI,EAAiB3b,EAAQ2R,QAAOA,GAClClR,EAASkb,eAAerZ,MAAKsZ,GAAiBA,IAAkBjK,EAAO/c,UACvE+mB,GAA6C,IAA3Btb,EAAgBtH,QAClCrF,EAASmgB,GAAsB8H,KA6EjCE,EAAgB5Q,iBAAO,MACvB6Q,EAAY7Q,iBAAO,MAfI8Q,EAACF,EAAoBC,KAC9Che,qBAAU,KACN,SAASke,EAAmB5lB,IACpBylB,EAAcpQ,SAAYoQ,EAAcpQ,QAAQwQ,SAAS7lB,EAAMqF,SAAYqgB,EAAUrQ,QAAQwQ,SAAS7lB,EAAMqF,SAC5Gyf,GAAkB,GAI1B,OADAgB,SAASxQ,iBAAiB,YAAasQ,GAChC,KACHE,SAASvQ,oBAAoB,YAAaqQ,MAE/C,CAACH,EAAeC,KAKvBC,CAAqBF,EAAeC,GAEpC,MAAMK,EAAYC,aAAOC,KAAPD,EAAe9gB,IAAA,IAAC,MAAEghB,GAAOhhB,EAAA,MAAM,CAC7C,sCAAuC,CACrC2H,MAAO,UACP,UAAW,CACTvE,gBAAiB6d,aAAM,UAAWD,EAAME,QAAQ9V,OAAO+V,gBAG3D,yDAA0D,CACxD/d,gBAAiB,eAKvB,OACI3J,IAAAC,cAACD,IAAMgH,SAAQ,KACVkf,GACGlmB,IAAAC,cAACD,IAAMgH,SAAQ,KAEXhH,IAAAC,cAAA,OAAK0F,UAAS,gBAAmBuC,KAAK,cAAc8P,IAAK8O,GACrD9mB,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAW,MAAOsf,aAAc,aAAchiB,UAAU,yBAAyBuC,KAAK,QAClGlI,IAAAC,cAACkI,KAAI,CAACxC,UAAS,mBAAsB2C,MAAI,EAACC,GAAI,IAC1CvI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAW,MAAO1C,UAAU,iBAAiBuC,KAAK,QAC7Dwc,GACG1kB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACXvI,IAAAC,cAACyH,IAAM,CAACkgB,QAAQ,YAAY/hB,QAASA,IAAM0gB,GAAkB,GAAQ5gB,UAAU,2BAC3E3F,IAAAC,cAACiG,IAAe,CAACsM,KAAK,KAAKrM,KAAM0hB,QAGzC7nB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAAA,MAAI0F,UAAU,gBAAe,IAAEkc,EAAehiB,OAC9CG,IAAAC,cAAA,MAAI0F,UAAU,sBAAsB7D,EAAMuE,cAAc,uBACxDrG,IAAAC,cAAA,MAAI0F,UAAU,qBAIxB+e,GACE1kB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACZvI,IAAAC,cAACmnB,EAAS,CAACU,QAASzY,EAAoBxJ,QApF9CkiB,KAC9BppB,EAASkW,IAAuBxF,KAmF+E1J,UAAU,wBACrF3F,IAAAC,cAAA,QAAM0F,UAAU,gBAAgB7D,EAAMuE,cAAc,+BAG3DrG,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAImc,EAAiB,EAAI,GAChC1kB,IAAAC,cAACyH,IAAM,CAACkgB,QAAQ,YAAY/hB,QAASA,IAAMsgB,GAAkB,GAAQxgB,UAAU,sBAC3E3F,IAAAC,cAACiG,IAAe,CAACsM,KAAK,KAAKrM,KAAMsB,QAGxCid,EACG1kB,IAAAC,cAAC0lB,GAAU,CAACtf,cAAevE,EAAMuE,cAAewb,eAAgBA,IAEhE7hB,IAAAC,cAACD,IAAMgH,SAAQ,KACVof,EAAmB9f,KAAI,CAACsW,EAAiBhI,IAElC5U,IAAAC,cAACkI,KAAI,CAAC3B,IAAKoO,EAAOtM,MAAI,EAAC0f,cAAY,EAACzf,GAAI,EAAGwc,GAAI,EAAGD,GAAI,EAAGE,GAAI,EAAGC,GAAI,EAAGtf,UAAS,oBAAuBuC,KAAK,YACxGlI,IAAAC,cAAC0jB,GAAY,CACTtd,cAAevE,EAAMuE,cACrBuW,OAAQA,EACRpW,IAAKoO,EACLwP,qBAAsBA,IAhG9CxH,KAC5B,MAAMjF,EAAS,IAAIC,gBAEfiK,EAAehiB,QAAU+c,EAAO/c,OAC/ByL,EAAgB2C,MAAKT,GAAKA,EAAE3N,QAAU+c,EAAO/c,SAK9CymB,EAAkB,IAClB3nB,EAASogB,GAAuB,OALhCuH,EAAkB1J,GAClBje,EAASogB,GAAuBnC,EAAO/c,QACvC8X,EAAOuC,OAAO,WAAY0C,EAAO/c,QAKrCsW,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,cAoFkDqb,CAAuBrL,GACnDiF,eAAgBA,EAChB4C,wBAAyBA,KAlF7E8B,GAAkB,YA2FG7B,EACG1kB,IAAAC,cAACkI,KAAI,CAACxC,UAAU,0BAA0B2C,MAAI,EAACC,GAAI,IAC/CvI,IAAAC,cAAC0kB,GAAa,CAACte,cAAevE,EAAMuE,cAChC8e,qBAzIX+C,KACrB,MAAMC,EAAa7c,EAAgBhF,KAAIsW,GAAUA,EAAO/c,QAAUgiB,EAAehiB,MAAQ,IAAKgiB,EAAgBE,WAAY,IAAOnF,IACjIje,EAASmgB,GAAsBqJ,KAwICjD,cA/HXkD,KACrB,MAAMC,EAAqBpd,EAAQgD,MAAK2O,GAAUA,EAAO/c,QAAUgiB,EAAehiB,QAClF,GAAIwoB,EAAoB,CACpB,MAAMF,EAAa7c,EAAgBhF,KAAIsW,GAAUA,EAAO/c,QAAUgiB,EAAehiB,MAAQwoB,EAAqBzL,IAC9Gje,EAASmgB,GAAsBqJ,SAgIXnoB,IAAAC,cAACkI,KAAI,CAACxC,UAAU,0BAA0B2C,MAAI,EAACC,GAAI,IAC/CvI,IAAAC,cAAC0kB,GAAa,CAACte,cAAevE,EAAMuE,cAChC8e,qBA7JdmD,KAClB,MAAM3Q,EAAS,IAAIC,gBACnBzB,EAAQ4B,KAAK,CAAEF,OAAQF,EAAO/K,aAC9B0Z,EAAkB,IAClB3nB,GRxCyFD,UAC7F,IACIC,EAAS,CACLC,KAAMigB,KAGZ,MAAOzf,GACLC,QAAQD,MAAMA,OQkCdT,EAASkW,IAAsB,IAC/BlW,EAASogB,GAAuB,MAC3BzP,GAAuBL,IAAcA,EAAUjL,OAAS,GACzDrF,EtBiBmBsQ,IAAkFvQ,UAC7G,IACIuQ,EAAUoL,SAAStF,IAEfA,EAAS9F,UAAUoL,SAASwC,IACnBvN,GAAuBuN,IACxBA,EAAKzB,OAAO,YAKxBzc,EAAS,CACLC,KAAM2V,KAGZ,MAAOnV,GACLC,QAAQD,MAAMA,KsBjCDmpB,CAAetZ,KAsJIiW,cA7IdA,KAClBvmB,EAASogB,GAAuB,KAChCpgB,EAASmgB,GAAsB7T,IAC/BtM,EAASkW,IAAsB,WAoJ3B7U,IAAAC,cAAA,OAAK+X,IAAK+O,GACN/mB,IAAAC,cAACqlB,GAAY,CAACjf,cAAevE,EAAMuE,cAAegf,YAAaa,EAAgBrgB,QAtIlE2iB,KACrBrC,GAAmBD,SCzGduC,GAAUzd,GAA+BA,EAAM0d,OAAOC,UACtDC,GAAkB5d,GAA+BA,EAAM0d,OAAOG,kBAC9DC,GAAc9d,GAAkCA,EAAM0d,OAAOK,aAC7DC,GAAiBhe,GAA8BA,EAAM0d,OAAOtd,QAC5D6d,GAA4Bje,GAA6BA,EAAM0d,OAAOQ,gBAAgB3pB,eACtF4pB,GAAqBne,GAAgDA,EAAM0d,OAAOQ,gBAAgBje,Q,wBCThG,47JCaR,MAAMme,GAAatnB,IAAyC,IAADunB,EAkB9D,OACIrpB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGE,GAAI,EAAGrf,UAAU,uBAAuBuC,KAAK,WACnElI,IAAAC,cAAC+R,IAAI,CAACnM,QAASA,IAAM4L,KAAQpQ,MAAM,CAAEqQ,SAAU,QAASC,OAAO,qBAAD1S,OAAuB6C,EAAMT,MAAMxB,SAAYkG,GAAI,WAAajE,EAAMT,MAAM5B,GAAG6pB,WAAW,IAAK,KAAO,IAAMxnB,EAAMT,MAAM0e,MAAMnT,WAAW0c,WAAW,IAAK,MACnNtpB,IAAAC,cAAA,OAAK0F,UAAU,cACX3F,IAAAC,cAAA,OAAK0F,UAAU,wBACX3F,IAAAC,cAAA,OAAK0F,UAAU,cAEV4jB,KAAOznB,EAAMT,MAAM0e,OAAOyJ,OAAO,WAEtCxpB,IAAAC,cAAA,OAAK0F,UAAU,cACoC,UAA9C4jB,KAAOznB,EAAMT,MAAM0e,OAAOyJ,OAAO,UAAwBD,KAAOznB,EAAMT,MAAM0e,OAAOyJ,OAAO,WAInGxpB,IAAAC,cAAA,MAAI0F,UAAU,eAAe7D,EAAMT,MAAMxB,OAEzCG,IAAAC,cAAA,OAAK0F,UAAU,eACX3F,IAAAC,cAAA,OAAKC,IAA6B,MAAxB4B,EAAMT,MAAMmU,SAAmBiU,GAAe3nB,EAAMT,MAAMmU,SAAUpV,IAAG,GAAAnB,OAAK6C,EAAMuE,cAAc,gBAAe,KAAApH,OAAe,QAAfoqB,EAAIvnB,EAAMT,aAAK,IAAAgoB,OAAA,EAAXA,EAAaxpB,OAAS8F,UAAU,mB,OC/B9K,MAAM+jB,GAAa5nB,IAEtB,MAAMnD,EAAWuG,cACXwjB,EAAS5a,YAAY2a,IACrBkB,EAAiB7b,YAAY8a,IAC7BgB,EAAgB9b,YAAYkb,IAC5Ba,EAA2B/b,YAAYmb,IAqB7C,OAnBAlgB,qBAAU,KACA2f,GAA4B,IAAlBA,EAAO1kB,QAAkB4lB,GACrCjrB,EAASF,OAEd,CAACE,EAAU+pB,EAAQkB,IAEtB7gB,qBAAU,KACF4gB,EAAe3lB,OAAS,GAAK6lB,EAA2B,IACxDvmB,OAAOwmB,SAAS,CAAEC,IAAKF,IACvBlrB,EAASW,EAA4B,OAE1C,CAACqqB,EAAgBE,IAEpB9gB,qBAAU,IACC,KACHpK,EAASW,EAA4BgE,OAAO0mB,YAEjD,IAGChqB,IAAAC,cAACD,IAAMgH,SAAQ,KACV4iB,EACG5pB,IAAAC,cAAC2d,GAAM,CAACvX,cAAevE,EAAMuE,gBAE7BrG,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAM1C,UAAU,sBAAsBuC,KAAK,QAChEyhB,GAAkBA,EAAerjB,KAAI,CAACjF,EAAeuT,IAClD5U,IAAAC,cAACmpB,GAAS,CAAC/iB,cAAevE,EAAMuE,cAAehF,MAAOA,EAAOmF,IAAKoO,MAEpE+U,GAA4C,IAA1BA,EAAe3lB,QAC/BhE,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,UAAK6B,EAAMuE,cAAc,qBAIrCrG,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAM1C,UAAU,8BACtC3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,qBACzB3F,IAAAC,cAACyH,IAAM,CAACkgB,QAAQ,WAAW/hB,QAASA,IAAMvC,OAAOwmB,SAAS,CAAEC,IAAK,EAAGE,SAAU,WAAatkB,UAAU,2BAA2B,6B,cChDrJ,MAAMukB,GAAYpoB,IACrB,MAAM,cAAEqoB,EAAa,WAAEC,EAAU,cAAE/jB,GAAkBvE,GAC9CuoB,EAAoBC,GAAyBtqB,IAAMkC,SAA4C,OAAbioB,QAAa,IAAbA,OAAa,EAAbA,EAAevN,QAAQvO,GAAM,IAAIrL,KAAKonB,GAAYG,aAAe,IAAIvnB,KAAKqL,EAAE0R,OAAOwK,eACrKC,EAAcC,GAAmBzqB,IAAMkC,SAA6B,IAAIc,KAAKonB,GAAYG,YAE1FG,EAAeC,IACjB,GAAIR,GAAiBK,EACjB,GAAIG,EAAW,CACX,MAAMA,EAAYH,EAAe,EACjCC,EAAgBE,GAChB,MAAMC,EAAiC,OAAbT,QAAa,IAAbA,OAAa,EAAbA,EAAevN,QAAQvO,GAAMsc,IAAc,IAAI3nB,KAAKqL,EAAE0R,OAAOwK,aACvFD,EAAsBM,OACnB,CACH,MAAMC,EAAYL,EAAe,EACjCC,EAAgBI,GAChB,MAAMD,EAAiC,OAAbT,QAAa,IAAbA,OAAa,EAAbA,EAAevN,QAAQvO,GAAMwc,IAAc,IAAI7nB,KAAKqL,EAAE0R,OAAOwK,aACvFD,EAAsBM,KAKlC,OACI5qB,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAMwc,eAAe,aAAaD,WAAW,aAAajf,UAAU,uBACzF6kB,GACGxqB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAM1C,UAAU,cACtC3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACVghB,MAAO,IAAIvmB,MAAO8nB,SAASN,IAAehB,OAAO,cAEtDxpB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACXvI,IAAAC,cAAA,OAAK0F,UAAU,oBACf3F,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,SAAS2T,SAAUkR,IAAgB,IAAIxnB,MAAOunB,WAAY1kB,QAASA,IAAM6kB,GAAY,IAAQ1qB,IAAAC,cAACiG,IAAe,CAACC,KAAM0hB,IAAeliB,UAAU,OAAO6M,KAAK,QAC3KxS,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,SAASE,QAASA,IAAM6kB,GAAY,IAAO1qB,IAAAC,cAACiG,IAAe,CAACC,KAAM4kB,IAAgBplB,UAAU,OAAO6M,KAAK,WAIjI6X,GAAsBA,EAAmBrmB,OAAS,EAC/ChE,IAAAC,cAACD,IAAMgH,SAAQ,KACQ,OAAlBqjB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB/jB,KAAI,CAACjF,EAAeuT,IACrC5U,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKoO,GACjB5U,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GACVghB,KAAOloB,EAAM0e,OAAOyJ,OAAO,WAEhCxpB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAC+B,UAAzCghB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,UAA+D,UAAvCD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,SAC3ExpB,IAAAC,cAAA,QAAM0F,UAAU,gBACXU,EAAc,yBAGnBrG,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,QAAM0F,UAAU,gBACf4jB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,SAAS,MAAID,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,gBAS5FxpB,IAAAC,cAAA,YACK6B,EAAMuE,cAAc,+BC3EpC4kB,GAAY,YACZC,GAAoB,oBACpBC,GAAc,cACdC,GAAsB,sBCyBtBC,GAAgBvpB,IACzB,MAAM,GAAErC,EAAE,MAAEsgB,GAAUuL,cAChB5C,EAAS5a,YAAY2a,IACrBmB,EAAgB9b,YAAYkb,KAC3B3nB,EAAOkqB,GAAYrpB,sBACnBioB,EAAeqB,GAAoBtpB,sBACnCupB,EAAUC,GAAe1rB,IAAMkC,UAAS,IAEzC,SAAEyO,GAAaD,KAEf/R,EAAWuG,cAqCjB,OAnCA6D,qBAAU,KACA2f,GAA4B,IAAlBA,EAAO1kB,QAAkB4lB,GACrCjrB,EAASF,KAEb6E,OAAOwmB,SAAS,EAAG,KAEpB,CAACnrB,IAEJoK,qBAAU,KACN,MAAM4iB,EAAUlsB,EAAG6pB,WAAW,IAAK,KAC7BsC,EAAa7L,EAAMuJ,WAAW,IAAK,KACnCuC,EAAUC,mBAAmBH,GAC7BI,EAAY,IAAI/oB,KAAK8oB,mBAAmBF,IACxCI,EAActD,EAAOza,MAAKI,GAAKA,EAAE5O,KAAOosB,GAAW,IAAI7oB,KAAKqL,EAAE0R,OAAOkM,YAAcF,EAAUE,YAChF,MAAfD,GACAT,EAASS,GAGb,MAAM7B,EAAgBzB,EAAO9L,QAAQvO,GAAMA,EAAE5O,KAAOosB,IAC/B,MAAjB1B,GACAqB,EAAiBrB,KAGtB,CAACzB,EAAQjpB,EAAIsgB,EAAO1e,IAEvB0H,qBAAU,KC5DWlJ,MDiEjB,OAJIwB,GACA1C,GC9DakB,ED8DU,OAALwB,QAAK,IAALA,OAAK,EAALA,EAAOxB,MC9D6DnB,UAC9F,IACIC,EAAS,CACLC,KAAMstB,GACNhtB,QAASW,IAGf,MAAOT,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMstB,GAA0ChtB,QAASE,QDwD7D,WACHT,GCrD2ED,UACnF,IACIC,EAAS,CACLC,KAAMstB,KAGZ,MAAO9sB,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMstB,GAA4ChtB,QAASE,WD+CvE,CAACiC,IAGArB,IAAAC,cAAA,OAAK0F,UAAU,wBAAwBuC,KAAK,WACvC7G,GACGrB,IAAAC,cAACgV,GAAG,CAACpV,MAAK,GAAAZ,OAAU,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAOxB,MAAK,QAAAZ,OAAO6C,EAAMuE,cAAc,qBAAuBmK,YAAkB,OAALnP,QAAK,IAALA,OAAK,EAALA,EAAOmP,YAAagF,SAAe,OAALnU,QAAK,IAALA,OAAK,EAALA,EAAOmU,WAGnIxV,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAAA,OAAK0F,UAAU,wBACX3F,IAAAC,cAAA,OAAK0F,UAAU,cAEV4jB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,WAEjCxpB,IAAAC,cAAA,OAAK0F,UAAU,cAC+B,UAAzC4jB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,UACzBxpB,IAAAC,cAACD,IAAMgH,SAAQ,KACVuiB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,SAAS,MAA2C,UAAvCD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,UAAwBD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,YAKtIxpB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,GACnB9kB,IAAAC,cAAA,MAAI0F,UAAU,eAAoB,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAOxB,QAGxCG,IAAAC,cAACgH,IAAM,CAACC,MAAM,GACVlH,IAAAC,cAAA,OAAK0F,UAAU,eACX3F,IAAAC,cAAA,OAAKC,IAAwB,OAAd,OAALmB,QAAK,IAALA,OAAK,EAALA,EAAOmU,UAAmBiU,GAAoB,OAALpoB,QAAK,IAALA,OAAK,EAALA,EAAOmU,SAAUpV,IAAG,GAAAnB,OAAK6C,EAAMuE,cAAc,gBAAe,KAAApH,OAAS,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAOxB,OAAS8F,UAAU,kBAM7J3F,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,cAChC3F,IAAAC,cAAA,OAAK0F,UAAU,iBACL,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAO8qB,SAEX9qB,GACGrB,IAAAC,cAACwY,KAAa,CAACC,cAAe,CAACC,MAAYhT,UAAU,qBAC3C,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAOmP,aAGhBxQ,IAAAC,cAACgH,IAAM,CAACU,QAAQ,GACZ3H,IAAAC,cAAA,OAAK0F,UAAU,eACX3F,IAAAC,cAAA,OAAKC,IAAwB,OAAd,OAALmB,QAAK,IAALA,OAAK,EAALA,EAAOmU,UAAmBiU,GAAoB,OAALpoB,QAAK,IAALA,OAAK,EAALA,EAAOmU,SAAUpV,IAAG,GAAAnB,OAAK6C,EAAMuE,cAAc,gBAAe,KAAApH,OAAS,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAOxB,OAAS8F,UAAU,iBAKzJ3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,cAC/BgL,GACG3Q,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,gBACzB3F,IAAAC,cAAA,OAAK0F,UAAU,iBACX3F,IAAAC,cAAA,aAIZD,IAAAC,cAAA,MAAI0F,UAAU,kBAAkB7D,EAAMuE,cAAc,sBACpDrG,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,gBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,iBAAgB,IAAE4jB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,gBACnB,UAAzCD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,UACzBxpB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,gBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,iBACV4jB,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAOyJ,OAAO,SAAS,MAA2C,UAAvCD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,UAAwBD,KAAY,OAALloB,QAAK,IAALA,OAAK,EAALA,EAAO2pB,KAAKxB,OAAO,YAI5H,OAALnoB,QAAK,IAALA,OAAK,EAALA,EAAOkC,WACJvD,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,mBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,iBACL,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAOkC,SAAS7D,QAIvB,OAAL2B,QAAK,IAALA,OAAK,EAALA,EAAO+qB,cAAmB,OAAL/qB,QAAK,IAALA,OAAK,EAALA,EAAO+qB,WAAWpoB,QAAS,GAC7ChE,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,mBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,iBACL,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAO+qB,WAAW9lB,KAAI,CAACoL,EAAqBkD,IACzC5U,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKoO,GAChBlD,EAAS7R,MACVG,IAAAC,cAAA,OAAK0F,UAAS,GAAA1G,QAAU,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAO+qB,cAAmB,OAAL/qB,QAAK,IAALA,OAAK,EAALA,EAAO+qB,WAAWpoB,QAAS,IAAM4Q,EAAQ,OAAS,WACrF,WAOxBuV,GAAiBA,EAAcnmB,OAAS,GACrChE,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,uBACzDrG,IAAAC,cAAA,UAAQ0F,UAAU,iBAAiBE,QAASA,IAAM6lB,GAAaD,IAAWzrB,IAAAC,cAAA,QAAM0F,UAAU,uBAAqB,GAAA1G,OAAKwsB,EAAW3pB,EAAMuE,cAAc,mBAAqBvE,EAAMuE,cAAc,2BAC3LolB,GACGzrB,IAAAC,cAACiqB,GAAQ,CAAC7jB,cAAevE,EAAMuE,cAAe8jB,cAAeA,EAAeC,YAAiB,OAAL/oB,QAAK,IAALA,OAAK,EAALA,EAAO0e,OAAQ1e,EAAM0e,MAAQ,IAAI/c,UAK9H,OAAL3B,QAAK,IAALA,OAAK,EAALA,EAAOgrB,eAAoB,OAALhrB,QAAK,IAALA,OAAK,EAALA,EAAOirB,SAAU3b,GACrC3Q,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,gBACzB3F,IAAAC,cAAA,OAAK0F,UAAU,iBACX3F,IAAAC,cAAA,eAKL,OAALoB,QAAK,IAALA,OAAK,EAALA,EAAOgrB,eAAoB,OAALhrB,QAAK,IAALA,OAAK,EAALA,EAAOirB,SAC3BtsB,IAAAC,cAAA,MAAI0F,UAAU,aAAa7D,EAAMuE,cAAc,8BAE7C,OAALhF,QAAK,IAALA,OAAK,EAALA,EAAOgrB,cACJrsB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,sBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,iBACX3F,IAAAC,cAAA,KAAGwG,KAAI,QAAAxH,OAAe,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAOgrB,aAAe1mB,UAAW,qBAA2B,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAOgrB,gBAIrF,OAALhrB,QAAK,IAALA,OAAK,EAALA,EAAOirB,QACJtsB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,gBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,2BACX3F,IAAAC,cAAA,KAAGwG,KAAI,WAAAxH,OAAkB,OAALoC,QAAK,IAALA,OAAK,EAALA,EAAOirB,OAAS3mB,UAAW,qBAA2B,OAALtE,QAAK,IAALA,OAAK,EAALA,EAAOirB,UAKlF,OAALjrB,QAAK,IAALA,OAAK,EAALA,EAAOkrB,UAAW5b,GACf3Q,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,gBACzB3F,IAAAC,cAAA,OAAK0F,UAAU,iBACX3F,IAAAC,cAAA,cAKN,OAALoB,QAAK,IAALA,OAAK,EAALA,EAAOkrB,UACJvsB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,aAAa7D,EAAMuE,cAAc,gBAC/CrG,IAAAC,cAAA,MAAI0F,UAAU,uBAAuB7D,EAAMuE,cAAc,kBACzDrG,IAAAC,cAAA,OAAK0F,UAAU,2BACX3F,IAAAC,cAAC+R,KAAI,CAACvL,KAAW,OAALpF,QAAK,IAALA,OAAK,EAALA,EAAOkrB,QAAS7lB,OAAO,SAASC,IAAI,YAAiB,OAALtF,QAAK,IAALA,OAAK,EAALA,EAAOkrB,YAIzE,OAALlrB,QAAK,IAALA,OAAK,EAALA,EAAO+V,cACJpX,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,OAAK0F,UAAU,2BACX3F,IAAAC,cAACyH,IAAM,CAACjB,KAAW,OAALpF,QAAK,IAALA,OAAK,EAALA,EAAO+V,YAAa1Q,OAAO,SAASf,UAAU,gBACxD3F,IAAAC,cAAA,YACK6B,EAAMuE,cAAc,uBAOnC,OAALhF,QAAK,IAALA,OAAK,EAALA,EAAOxB,QACJG,IAAAC,cAAC+Q,GAAK,CAACnR,MAAY,OAALwB,QAAK,IAALA,OAAK,EAALA,EAAOxB,MAAOwG,cAAevE,EAAMuE,oB,OEjOzE/C,OAAOkpB,QAAUlpB,OAAOkpB,SAAW,GAO5B,MAAMC,GAASA,KAClB,MAAM,QAAED,GAAYlpB,OACd0U,EAAM9B,iBAAO,OACb,GAAEzW,GAAO6rB,cAOf,OALAviB,qBAAU,KACN,MAAMpJ,EAAM,oCAAsCmsB,mBAAmBrsB,GACrE,IAAI+sB,EAAQE,IAAI1U,EAAItB,QAAS/W,KAC9B,CAAC6sB,EAAQE,IAAKjtB,IAGbO,IAAAC,cAAA,OAAK+X,IAAKA,EAAKrS,UAAU,sB,cCpB1B,MAAMgnB,GAAmB7qB,GAExB9B,IAAAC,cAAA,OAAK0F,UAAU,WACX3F,IAAAC,cAACiJ,YAAQ,CAACE,OAAQtH,EAAMsH,OAAQE,aAAcd,MCC7CokB,GAAYA,KACvB,MAAMhkB,EAASC,KAAQD,OAAO/L,EAAa,CAAEsE,YAAarE,KACnD2L,EAAKK,GAAc9I,IAAMkC,YAC1B,EAAEyL,GAAM0H,aAAe,UAU7B,OARArV,IAAM+I,WAAU,KACIrK,WAChB,MAAM+J,QAAYG,EAAOI,UAAU,QAAS,IAC5CF,EAAWL,IAEbQ,KACC,IAGDjJ,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACgV,GAAG,CAACpV,MAAO8N,EAAE,gCACblF,GACCzI,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAAA,OAAK0F,UAAU,gBAAgBuC,KAAK,WAClClI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAMH,KAAK,QACnClI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIL,KAAK,WACtBlI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,GACrB9kB,IAAAC,cAAA,UAAKiJ,YAASC,OAAOV,EAAItJ,KAAKU,WAIpCG,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACxBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,cAClC3F,IAAAC,cAAC0sB,GAAe,CAACvjB,OAAQX,EAAItJ,KAAKkK,QAEpCrJ,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,EAAGnf,UAAU,cACjC8C,EAAItJ,KAAK0tB,UACRpkB,EAAItJ,KAAK0tB,SAASvmB,KAAI,CAACwmB,EAAclY,IAEjC5U,IAAAC,cAAA,OAAKuG,IAAKoO,GACR5U,IAAAC,cAAC0sB,GAAe,CAACvjB,OAAQ0jB,EAAQC,eACjC/sB,IAAAC,cAAC0sB,GAAe,CAACvjB,OAAQ0jB,EAAQE,uB,OC1ClD,IAAKC,IAGX,SAHWA,OAAU,iBAAVA,IAAU,mBAGrB,CAHWA,QAAU,K,OCGf,MAAMC,GAAaprB,GAElB9B,IAAAC,cAAA,OAAK0F,UAAU,wBACX3F,IAAAC,cAAA,QAAM0F,UAAU,eAAe7D,EAAMuE,cAAc,qBACnDrG,IAAAC,cAAA,QAAM0F,UAAU,cAAc7D,EAAMuE,cAAc,wBAClDrG,IAAAC,cAAA,QAAM0F,UAAU,cAAc7D,EAAMuE,cAAc,2BAClDrG,IAAAC,cAACiG,IAAe,CAACC,KAAMgnB,IAASxnB,UAAU,qB,OCb/C,MAAMynB,GAAqB,qBACrBC,GAAuB,uBACvBC,GAAuB,uBACvBC,GAAqB,qBACrBC,GAAuB,uBACvBC,GAAuB,uBCYvBC,GAAc5rB,IACvB,MAAOwJ,EAAiBqiB,GAAsBzrB,mBAAmB,KAC1DkJ,EAASwiB,GAAc1rB,oBAAkB,IACzCwJ,EAAUmiB,GAAe3rB,mBAAoB,KAC7C+I,EAAS6iB,GAAc5rB,mBAAoB,KAC3C9C,EAAO2uB,GAAY7rB,mBAAiB,KACpC8rB,EAAgBC,GAAqB/rB,oBAAkB,GAExDvD,EAAWuG,eACX,YAAEL,GAAgBlD,KAElBusB,EAAgBpgB,YAAYnC,IAC5BwiB,EAAuBrgB,YAAYrC,IACnC2iB,EAAqBtgB,YAAYhC,IACjCuiB,EAAevgB,YAAY/C,IAC3BujB,EAAsBxgB,YAAY3C,IAExCpC,qBAAU,KACNpK,EAASigB,QACV,IAEH7V,qBAAU,KACN8kB,EAAYK,KACb,CAACA,IAEJnlB,qBAAU,KACN+kB,EAAWO,KACZ,CAACA,IAEJtlB,qBAAU,KACN4kB,EAAmBjiB,EAASkb,kBAC7B,CAAClb,IAEJ3C,qBAAU,KAEF6kB,KADAU,IAAuBH,MAK5B,CAACG,EAAqBH,IAEzBplB,qBAAU,KACFqlB,GACAL,EAASK,KAEd,CAACA,IAEJrlB,qBAAU,KAAO,IAADwlB,GACO,OAAfjjB,QAAe,IAAfA,OAAe,EAAfA,EAAiBkjB,OAAM3M,IAAc,IAAA4M,EAAA,OAA2B,QAA3BA,EAAI/iB,EAASkb,sBAAc,IAAA6H,OAAA,EAAvBA,EAAyBlqB,SAASsd,SACpD,QADoE0M,EAC3F7iB,EAASkb,sBAAc,IAAA2H,OAAA,EAAvBA,EAAyBC,OAAM3H,GAAgC,OAAfvb,QAAe,IAAfA,OAAe,EAAfA,EAAiB/G,SAASsiB,MAC1EoH,GAAkB,GAElBA,GAAkB,KAEvB,CAAC3iB,IAgBJ,OACItL,IAAAC,cAAA,OAAK0F,UAAU,yBACX3F,IAAAC,cAAA,QAAM0F,UAAU,qBAAqB7D,EAAMuE,cAAc,sBACzDrG,IAAAC,cAAA,QAAM0F,UAAU,oBAAoB7D,EAAMuE,cAAc,yBACvD+E,EACGpL,IAAAC,cAAA,OAAK0F,UAAU,4BACX3F,IAAAC,cAAC2d,GAAM,CAACvX,cAAevE,EAAMuE,iBAGjCjH,EACIY,IAAAC,cAAA,OAAK0F,UAAU,wBACX3F,IAAAC,cAACiG,IAAe,CAACC,KAAMuoB,IAAuB/oB,UAAU,oBACxD3F,IAAAC,cAAA,QAAM0F,UAAU,qBAAqBvG,IAGzCY,IAAAC,cAAAD,IAAAgH,SAAA,KACIhH,IAAAC,cAAA,OAAK0F,UAAU,oBACVsF,EAAQ3E,KAAI,CAACsW,EAAiBhI,IAC3B5U,IAAAC,cAAA,OAAK0F,UAAU,6BAA6Ba,IAAKoO,GAC7C5U,IAAAC,cAAA,OAAK0F,UAAU,wBAAwBE,QAASA,IAjCnD+W,KACrBtR,EAAgB2C,MAAK4T,GAAkBA,IAAmBjF,EAAO/c,QACjE8tB,EAAmBriB,EAAgBsR,QAAOiF,GAAkBA,IAAmBjF,EAAO/c,SAEtF8tB,EAAmB,IAAIriB,EAAiBsR,EAAO/c,SA6B+B8uB,CAAoB/R,IACtE5c,IAAAC,cAAA,OAAK0F,UAAS,yBAAA1G,QAA0C,OAAfqM,QAAe,IAAfA,OAAe,EAAfA,EAAiB2C,MAAK4T,GAAkBA,IAAmBjF,EAAO/c,UAAU,cACrHG,IAAAC,cAAA,QAAM0F,UAAU,yBAAyBiX,EAAO/c,YAKhEG,IAAAC,cAAA,OAAK0F,UAAU,gCACX3F,IAAAC,cAACyH,IAAM,CACH/B,UAAS,sBAAA1G,OAAwB+uB,GAAkB,YACnDnoB,QAnCKnH,UAC7B,MAAMsD,QAAc6C,IACd+pB,EAAkB,IAAKljB,EAAUkb,eAAgBtb,GACvD3M,EC/DsBkwB,EAACD,EAA4BztB,IAA+EzC,UACtI,IAII,GAFAC,EAAS,CAAEC,KAAMkwB,KAEG,KAAhB3tB,QAAsCmL,IAAhBnL,EACtBxC,EAAS,CAAEC,KAAMkwB,GAAsC5vB,QAAS,sDAC7D,CACH,MAAM6vB,EAAU,CACZC,cAAc,UAAD/vB,OAAYkC,GACzB,eAAgB,oBAEd8tB,EAAsBvP,KAAK2D,UAAUuL,GAErC9vB,QAAeC,IAAMmwB,KAAK,GAADjwB,OAAItC,EAAQ,YAAYsyB,EAAa,CAAEF,QAASA,IAE/EpwB,EAAS,CAAEC,KAAMkwB,GAAsC5vB,QAASJ,EAAOK,QAG7E,MAAOC,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMkwB,GAAsC5vB,QAAS,qED0CvD2vB,CAAeD,EAAiB5sB,KAiCjBsX,SAAU0U,GAETlsB,EAAMuE,cAAc,mBE9GxC8oB,GAAgBrtB,IACzB,MAAOstB,EAAaC,GAAkBrvB,IAAMkC,SAAqB+qB,GAAWqC,OAEtEC,EAAoBC,IACtBH,EAAeG,IAGnB,OACIxvB,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACzC,UAAU,mBACtB3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,GACnB9kB,IAAAC,cAAA,OAAK0F,UAAU,2BACX3F,IAAAC,cAAA,OAAK0F,UAAS,eAAA1G,OAAiBmwB,IAAgBnC,GAAWqC,OAAS,YAAczpB,QAASA,IAAM0pB,EAAiBtC,GAAWqC,QACvHxtB,EAAMuE,cAAc,gBAEzBrG,IAAAC,cAAA,OAAK0F,UAAS,eAAA1G,OAAiBmwB,IAAgBnC,GAAWwC,QAAU,YAAc5pB,QAASA,IAAM0pB,EAAiBtC,GAAWwC,SAC5H3tB,EAAMuE,cAAc,mBAI7BrG,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAIuc,GAAI,IACnB9kB,IAAAC,cAAA,OAAK0F,UAAU,wBACVypB,IAAgBnC,GAAWqC,OACxBtvB,IAAAC,cAACitB,GAAS,CAAC7mB,cAAevE,EAAMuE,gBAEnC+oB,IAAgBnC,GAAWwC,QACxBzvB,IAAAC,cAACytB,GAAU,CAACrnB,cAAevE,EAAMuE,oB,OCnB1CqpB,OATA,CACX,CAAE/U,KAAM,IAAKjb,KAAM,wBAAyBiwB,UCA3B7tB,GAEb9B,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAC8Q,GAAI,CAAC1K,cAAevE,EAAMuE,gBAC3BrG,IAAAC,cAAC+e,GAAU,CAAC3Y,cAAevE,EAAMuE,gBACjCrG,IAAAC,cAAC8lB,GAAS,CAAC1f,cAAevE,EAAMuE,kBDJxC,CAAEsU,KAAM,UAAWjb,KAAM,qCAAsCiwB,UEF5C7tB,GAEf9B,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAACypB,GAAS,CAACrjB,cAAevE,EAAMuE,kBFAxC,CAAEsU,KAAM,qBAAsBjb,KAAM,GAAIiwB,UGHtB7tB,GAEd9B,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAACorB,GAAY,CAAChlB,cAAevE,EAAMuE,kBHC3C,CAAEsU,KAAM,mBAAoBjb,KAAM,GAAIiwB,UIRhBC,IAElB5vB,IAAAC,cAACgI,KAAS,KACNjI,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAACwsB,GAAM,UJIvB,CAAE9R,KAAM,SAAUjb,KAAM,6BAA8BiwB,UKTrCE,IAEb7vB,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAAC2sB,GAAS,QLOlB,CAAEjS,KAAM,SAAUjb,KAAM,QAASiwB,UMHf7tB,IAClB,MAAM,KAAEK,EAAI,yBAAEG,GAA6BX,KAM3C,OAJAoH,qBAAU,KACNzG,MACD,IAGS,MAARH,EACInC,IAAAC,cAAC2d,GAAM,CAACvX,cAAevE,EAAMuE,iBAEzB,OAAJlE,QAAI,IAAJA,OAAI,EAAJA,EAAMqC,WACFxE,IAAAC,cAACgI,KAAS,CAACC,KAAK,QACZlI,IAAAC,cAACkvB,GAAY,CAAC9oB,cAAevE,EAAMuE,iBAGvCrG,IAAAC,cAAA,OAAK0F,UAAU,qBACX3F,IAAAC,cAAA,QAAM0F,UAAU,mBAAmB7D,EAAMuE,cAAc,wBACvDrG,IAAAC,cAAA,QAAM0F,UAAU,yBAAyB7D,EAAMuE,cAAc,kC,OC3B1E,MAAMypB,GAAS9kB,GAA6BA,EAAM+kB,YAAYlwB,MCmBxDmwB,GAAeluB,IACxB,MAAMjC,EAAQiO,YAAYgiB,KACpB,EAAEniB,GAAM0H,aAAe,UAC7B,OAAIvT,EAAMiuB,YAAY/rB,QAAU,EACrB,KAIPhE,IAAAC,cAACgI,KAAS,KACNjI,IAAAC,cAAA,OAAK0F,UAAU,sBAAsBuC,KAAK,iBACrCpG,EAAMiuB,YAAYzpB,KAAI,CAAAC,EAA8BC,KAAW,IAAxC,KAAE9G,EAAI,KAAEib,GAAmBpU,EAAA,OAC/CC,EAAM,IAAM1E,EAAMiuB,YAAY/rB,OAC1BhE,IAAAC,cAAA,QAAMuG,IAAKA,EAAKb,UAAU,mBACrB9F,GAAiB8N,EAAEjO,IAGxBM,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKA,GACjBxG,IAAAC,cAAC+R,IAAI,CAACrM,UAAU,mBAAmBI,GAAI4U,GAClChN,EAAEjO,IAGPM,IAAAC,cAACiG,IAAe,CACZC,KAAM4kB,IACNplB,UAAU,mBACV6M,KAAK,cCpC9B,MAAMyd,GAAsBnuB,GAQ3B9B,IAAAC,cAAA,OACIqO,SAAU,EACV3I,UAAS,wBAAA1G,OAA0B6C,EAAMhC,OAAS,SAAW,GAAE,KAC/D+F,QAASA,IAAM/D,EAAM+D,QAAQ/D,EAAM4P,UACnCwe,QAAU7uB,IAA2C6uB,OAX5C7hB,EAWoDhN,EAXhB8uB,EAWuBruB,EAAM4P,cAV5D,KAAdrD,EAAE+hB,SACFtuB,EAAM+D,QAAQsqB,IAFND,IAAC7hB,EAAoC8hB,IAa5CruB,EAAM4P,SAAS7R,OCRfwwB,GAAkBvuB,IAA8C,IAADwuB,EACxE,MAAOC,EAAoBC,GAAyBtuB,mBAA8C,QAAtCouB,EAAcxuB,EAAMyuB,0BAAkB,IAAAD,IAAI,KAC/Fpf,EAAUC,GAAejP,oBAAS,GACnCuuB,EAAoBva,iBAAuB,OAC3C,SAAEvF,GAAaD,KAcrB3H,qBAAU,KAZiBqjB,QAaLmE,EAZlBzuB,EAAM4uB,iBAAiBtE,KAaxB,CAACmE,IAGJ,MAAMI,EAAkBtiB,IAAwB,IAADuiB,EACvCH,EAAkB/Z,WAAqC,QAA1Bka,EAACH,EAAkB/Z,eAAO,IAAAka,OAAA,EAAzBA,EAA2B1J,SAAS7Y,EAAE3H,UACpEyK,GAAY,IAcpB,OAXApI,qBAAU,KAAO,IAAD8nB,EACZL,EAA8C,QAAzBK,EAAC/uB,EAAMyuB,0BAAkB,IAAAM,IAAI,MACnD,CAAC/uB,EAAMyuB,qBAEVxnB,qBAAU,KACNoe,SAASxQ,iBAAiB,YAAaga,GAChC,KACHxJ,SAASvQ,oBAAoB,YAAa+Z,MAE/C,IAGC3wB,IAAAC,cAAA,OAAK+X,IAAKyY,EAAmB9qB,UAAS,mBAAA1G,OAAqBiS,EAAW,OAAS,WAC3ElR,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAMsL,GAAaD,IAC9BP,GAAYO,GAAaqf,GAAoD,IAA9BA,EAAmBvsB,OAChElC,EAAMuE,cAAc,kCAClBsK,GAAY4f,GAAoD,IAA9BA,EAAmBvsB,OACnDusB,EAAmB,GAAG1wB,OACJ,OAAlB0wB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBvsB,QAASlC,EAAMuE,cAAc,iCAGzDrG,IAAAC,cAACiG,IAAe,CAACC,KAAM2qB,IAAenrB,UAAS,gBAAA1G,OAAkBiS,EAAW,OAAS,OAExFA,GACGlR,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,UACb7D,EAAMsqB,YAActqB,EAAMsqB,WAAW9lB,KAAI,CAAC6pB,EAAchM,IACrDnkB,IAAAC,cAACgwB,GAAkB,CACfzpB,IAAK2d,EACLzS,SAAUye,EACVrwB,SAAQywB,EAAmBhjB,MAAKwjB,GAAOA,EAAItxB,KAAO0wB,EAAE1wB,KACpDoG,QAAU6L,GAjDTA,KACjB6e,EAAmBhjB,MAAK4iB,GAAKA,EAAE1wB,KAAOiS,EAASjS,KAC/C+wB,EAAsBD,EAAmB3T,QAAOuT,GAAKA,EAAE1wB,KAAOiS,EAASjS,MAEvE+wB,EAAsBD,EAAmBtxB,OAAO,CAACyS,MA6CVsf,CAAgBtf,U,iEC5D5D,MAAMuf,GAAcnvB,IACvB,MAAM,QAAEovB,GAAYpvB,EAEpB,OACI9B,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,MAAMwc,eAAe,aAAaD,WAAW,cACnE5kB,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,IACXvI,IAAAC,cAACkxB,KAAoB,CAACC,YAAaC,KAAgBC,OAAQC,MACvDvxB,IAAAC,cAACuxB,KAAS,CACNC,kBAAkB,EAClBC,sBAAsB,EACtBC,KAAM7vB,EAAM6vB,KACZxO,SAAWyO,GAAYV,EAAQU,GAC/BC,aAAeD,GAAYV,EAAQU,GACnCE,aAAa,EACbC,UAAWA,CAACC,EAAKC,EAAgBC,KAC7B,MAAMC,GAAYD,EAAkBE,qBAAuBJ,EAAM,IAAIhvB,KACrE,OACIhD,IAAAC,cAACD,IAAMgH,SAAQ,CAACR,IAAKwrB,EAAIK,WACjBryB,IAAAC,cAACqyB,KAAU9iB,OAAA+iB,OAAA,CAAC/jB,aAAA,GAAAvP,OAAe6C,EAAMuE,cAAc,oBAAmB,KAAApH,OAAI+yB,EAAIK,YAAiBH,EAAiB,CAAEvsB,UAAWwsB,EAAW,WAAa,cCnB5KK,GAAc1wB,IAA0C,IAAD2wB,EAChE,MAAOC,EAAcC,GAAmBzwB,mBAAwC,QAAhCuwB,EAAc3wB,EAAM4wB,oBAAY,IAAAD,IAAI,OAC7EvhB,EAAUC,GAAejP,oBAAS,GACnC0wB,EAAgB1c,iBAAuB,MAEvC2c,EAAmBlB,IACrBgB,EAAgBhB,GAChB7vB,EAAMgxB,aAAanB,GACnBxgB,GAAY,IAIVwf,EAAkBtiB,IAAwB,IAAD0kB,EACvCH,EAAclc,WAAiC,QAAtBqc,EAACH,EAAclc,eAAO,IAAAqc,OAAA,EAArBA,EAAuB7L,SAAS7Y,EAAE3H,UAC5DyK,GAAY,IAWpB,OAPApI,qBAAU,KACNoe,SAASxQ,iBAAiB,YAAaga,GAChC,KACHxJ,SAASvQ,oBAAoB,YAAa+Z,MAE/C,IAGC3wB,IAAAC,cAAA,OAAK+X,IAAK4a,EAAejtB,UAAS,eAAA1G,OAAiBiS,EAAW,OAAS,WACnElR,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAMsL,GAAaD,KAE9BA,GAAYwhB,EACVA,EAAaM,mBAAmB,QAAS,CAAEhB,IAAK,UAAWiB,MAAO,OAAQC,KAAM,YAEhFpxB,EAAMuE,cAAc,4BAEtB6K,GAAYlR,IAAAC,cAACiG,IAAe,CAACC,KAAM2qB,IAAenrB,UAAU,kBAEjEuL,GACGlR,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,MAAI0F,UAAU,UACd3F,IAAAC,cAACgxB,GAAU,CACP5qB,cAAevE,EAAMuE,cACrBsrB,KAAMe,EACNxB,QAAS2B,IAGb7yB,IAAAC,cAAA,OAAK0F,UAAU,wBACX3F,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,IAAMgtB,EAAgB,MAAOltB,UAAU,yBACnD7D,EAAMuE,cAAc,qC,cCjD1C,MAAM8sB,GAAarxB,IAAsC,IAADsxB,EAC3D,MAAOC,EAAYC,GAAiBpxB,mBAAyB,QAAjBkxB,EAACtxB,EAAMuxB,kBAAU,IAAAD,IAAI,IAQjE,OACIpzB,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,eACzB3F,IAAAC,cAAA,OAAK0F,UAAU,uBACX3F,IAAAC,cAACiG,IAAe,CAACC,KAAMotB,IAAU5tB,UAAU,gBAC3C3F,IAAAC,cAACuzB,KAAS,CACN7tB,UAAU,eACVjB,MAAO2uB,EACPlQ,SAAW9hB,GAAUiyB,EAAmB,OAALjyB,QAAK,IAALA,OAAK,EAALA,EAAOqF,OAAOhC,OACjDwrB,QAfH7uB,IACK,UAAdA,EAAMmF,KACN1E,EAAM2xB,aAAaJ,OAgBfrzB,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,yBAAyBE,QAASA,IAAM/D,EAAM2xB,aAAaJ,IACxEvxB,EAAMuE,cAAc,2B,cCzBlC,MAAMqtB,GAAc5xB,GAEnB9B,IAAAC,cAAA,OAAK0F,UAAU,eACV7D,EAAMjC,MACPG,IAAAC,cAAA,QAAM0F,UAAU,SAASE,QAASA,IAAM/D,EAAM6xB,SAAS7xB,EAAMrC,KAAK,Q,OCSvE,MAAMm0B,GAAe9xB,IAA2C,IAAD+xB,EAAAC,EAAAC,EAClE,MAAMC,EAAoBlmB,YAAYqb,IAChCiD,EAAate,YAAYgb,IACzBJ,EAAS5a,YAAY2a,KACpB4K,EAAYC,GAAiBpxB,mBAAgC,QAAxB2xB,EAAkB,OAAjBG,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB3iB,YAAI,IAAAwiB,IAAI,KACjEnB,EAAcC,GAAmBzwB,mBAA6C,QAArC4xB,EAA+B,OAAjBE,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBrC,YAAI,IAAAmC,IAAI,OAClFvD,EAAoBC,GAAyBtuB,mBAAmD,QAA3C6xB,EAA+B,OAAjBC,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB5H,kBAAU,IAAA2H,IAAI,KACpGE,EAAgBC,GAAqBhyB,oBAAS,IAC/C,SAAEyO,GAAaD,KACf/R,EAAWuG,cAEX2S,EAASwJ,uBAAY,KAuBvB,IAAI8S,EAA2BzL,ElF/BLiB,MkFiCtB0J,EAAWrvB,OAAS,IACpBmwB,EAxBsBA,IACfA,EAAevX,QAAQvb,GAAUqe,KAAK2D,UAAUhiB,GAAOoI,cAAclF,SAAS8uB,EAAW5pB,iBAuB/E2qB,CAAiBD,IAElC5D,EAAmBvsB,OAAS,IAC5BmwB,EAvB0BA,IACnBA,EAAevX,QAAQvb,GACnBA,EAAM+qB,WAAW7e,MAAM8mB,GACnB9D,EAAmBhjB,MAAMmE,GACrB2iB,EAAU50B,KAAOiS,EAASjS,SAmB5B60B,CAAqBH,IAEtCzB,IACAyB,EAhBsBA,IACjBzB,EAGEyB,EAAevX,QAAQvb,GAAU,IAAI2B,KAAK3B,EAAM0e,OAAOvT,SAAS,EAAG,EAAG,EAAG,IAAMkmB,EAAalmB,SAAS,EAAG,EAAG,EAAG,KAF1G2nB,EAcMI,CAAiBJ,KAGjB,OAAjBH,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBrC,QAASe,IAAiC,OAAjBsB,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB5H,cAAemE,IAAuC,OAAjByD,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB3iB,QAASgiB,GAChI10B,ElFlByBq1B,IAAyGt1B,UAC1I,IACIC,EAAS,CACLC,KAAMC,EACNK,QAAS80B,IAGf,MAAO50B,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMC,EAA8CK,QAASE,MkFS3Do1B,CAAqB,CAAE7C,KAAkB,OAAZe,QAAY,IAAZA,SAAgBpmB,EAAW8f,WAAYmE,EAAoBlf,KAAMgiB,KAE3G10B,GlF9C0BgrB,EkF8CCwK,ElF9CmFz1B,UAClH,IACIC,EAAS,CACLC,KAAMC,EACNK,QAASyqB,IAGf,MAAOvqB,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMC,EAA0CK,QAASE,UkFuCrE,CAACT,EAAU+pB,EAAQ2K,EAAY9C,EAAoBmC,EAAc/hB,EAAUqjB,IAkB9E,OAVAjrB,qBAAU,KACD4H,GACDkH,MAEL,CAAClH,EAAU4f,EAAoBmC,IAElC3pB,qBAAU,KACN8O,MACD,CAAC6Q,EAAQ2K,IAGRrzB,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAACgH,IAAM,CAACU,QAAM,GACV3H,IAAAC,cAACw0B,KAAK,CAAC9uB,UAAU,gBACb3F,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACC,UAAU,OACtBrI,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAGyc,GAAI,EAAGC,GAAI,EAAGtf,UAAU,oBACtC3F,IAAAC,cAACuyB,GAAU,CAACb,KAAM,IAAI3uB,KAAQ0vB,aAA0B,OAAZA,QAAY,IAAZA,SAAgBpmB,EAAWwmB,aAAcH,EAAiBtsB,cAAevE,EAAMuE,gBAC3HrG,IAAAC,cAACowB,GAAc,CAACjE,WAAYA,EAAYmE,mBAAoBA,EAAoBG,iBAAkBF,EAAuBnqB,cAAevE,EAAMuE,iBAElJrG,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,EAAGyc,GAAI,EAAGC,GAAI,EAAGtf,UAAU,oBACtC3F,IAAAC,cAACkzB,GAAS,CAACE,WAAYA,EAAYI,aAAcH,EAAejtB,cAAevE,EAAMuE,oBAMrGrG,IAAAC,cAACgH,IAAM,CAACC,MAAI,GACRlH,IAAAC,cAACw0B,KAAK,CAAC9uB,UAAU,gBACZsuB,GACGj0B,IAAAC,cAAA,OAAK0F,UAAU,WACX3F,IAAAC,cAAA,OAAK0F,UAAU,yBACX3F,IAAAC,cAACkI,KAAI,CAACC,WAAS,EAACzC,UAAU,eACtB3F,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,oBACzB3F,IAAAC,cAACuyB,GAAU,CAACb,KAAM,IAAI3uB,KAAQ0vB,aAA0B,OAAZA,QAAY,IAAZA,SAAgBpmB,EAAWwmB,aAAcH,EAAiBtsB,cAAevE,EAAMuE,gBAC3HrG,IAAAC,cAACowB,GAAc,CAACjE,WAAYA,EAAYmE,mBAAoBA,EAAoBG,iBAAkBF,EAAuBnqB,cAAevE,EAAMuE,gBAE9IrG,IAAAC,cAAA,OAAK0F,UAAU,qBACV4qB,GAAsBA,EAAmBjqB,KAAI,CAACoL,EAAqBkD,IAChE5U,IAAAC,cAACyzB,GAAU,CAACltB,IAAKoO,EAAO/U,MAAO6R,EAAS7R,MAAOJ,GAAIiS,EAASjS,GAAIk0B,SAAWl0B,GAAO+wB,EAAsBD,EAAmB3T,QAAOuT,GAAKA,EAAE1wB,KAAOA,WAI5JO,IAAAC,cAACkI,KAAI,CAACG,MAAI,EAACC,GAAI,GAAI5C,UAAU,wBACzB3F,IAAAC,cAACyH,IAAM,CAAC7B,QAASA,KAhDjDgS,IACAqc,GAAkB,QAClB5wB,OAAOwmB,SAAS,CAAEC,IAAK,KA8CkDpkB,UAAU,0CAA0C7D,EAAMuE,cAAc,sCAOrIrG,IAAAC,cAAA,OAAK0F,UAAU,oBACX3F,IAAAC,cAACkzB,GAAS,CAACE,WAAYA,EAAYI,aAAcH,EAAejtB,cAAevE,EAAMuE,iBAGzFrG,IAAAC,cAAA,OAAK0F,UAAU,wBACVsuB,EACGj0B,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,sBAAsBE,QAASA,IAAMquB,GAAmBD,IACtEj0B,IAAAC,cAACiG,IAAe,CAACC,KAAMsB,IAAS9B,UAAU,SAC1C3F,IAAAC,cAAA,YAAM,IAAE6B,EAAMuE,cAAc,2BAA2B,MAG3DrG,IAAAC,cAACyH,IAAM,CAAC/B,UAAU,sBAAsBE,QAASA,IAAMquB,GAAmBD,IACtEj0B,IAAAC,cAACiG,IAAe,CAACC,KAAMuuB,IAAqB/uB,UAAU,SACtD3F,IAAAC,cAAA,YAAM,IAAE6B,EAAMuE,cAAc,2BAA2B,W,qBC9GxEsuB,OAxBM7yB,GAGb9B,IAAAC,cAAA,OAAK0F,UAAU,WACX3F,IAAAC,cAACgI,KAAS,CAACtC,UAAU,gBACO,kBAAvB7D,EAAM2S,aACHzU,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,UAAK6B,EAAMuE,cAAc,+BACzBrG,IAAAC,cAAA,UAAI,IAAE6B,EAAMuE,cAAc,0BAA0B,MAGxDrG,IAAAC,cAACD,IAAMgH,SAAQ,KACXhH,IAAAC,cAAA,UAAK6B,EAAMuE,cAAc,wBACzBrG,IAAAC,cAAA,UAAI,IAAE6B,EAAMuE,cAAc,2BAA2B,MAG7DrG,IAAAC,cAACyH,IAAM,CAACjB,KAAK,IAAId,UAAU,eACvB3F,IAAAC,cAAA,YAAM,IAAE6B,EAAMuE,cAAc,iCAAiC,QCvB1E,MAAMuuB,GAAS5pB,GAAoCA,EAAM6pB,SAASC,a,yBCyH1DC,OAvGf,WACE,MAAM,EAAEpnB,GAAM0H,aAAe,UACvB9R,EAAW4B,cACX/F,EAAQ0O,YAAY8mB,IAE1B7rB,qBAAU,KACR0I,KAAQ9O,WvFvB0F/F,kBuFwBjG,IAEHmM,qBAAU,KACR0I,KAAQujB,KAAK,CAAEC,QAAS,WAAYC,KAAM3xB,EAASgC,SAAU1F,MAAM,gBAADZ,OAAkBsE,EAASgC,cAC5F,CAAChC,IAEJ,MAAM5E,EAAWuG,cAqBjB,OAnBA6D,qBAAU,KACRpK,GpB7BoFD,UACpF,IACIC,EAAS,CAAEC,KAAMkwB,KAEjB,MAAMhwB,QAAeC,IAAMC,IAAI,GAADC,OAAItC,EAAQ,aAC1CgC,EAAS,CACLC,KAAMkwB,GACN5vB,QAASJ,EAAOK,OAEtB,MAAOC,GACLC,QAAQD,MAAMA,GACdT,EAAS,CAAEC,KAAMkwB,GAAsC5vB,QAASE,UoBmBnE,CAACT,IAEJoK,qBAAU,KAAO,IAADosB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACd,MAAMxkB,EAAYtD,EAAE,oBACd4H,EAAkB5H,EAAE,0BAC1BtO,QAAQyS,IAAI,qCAAsCb,EAAWsE,GAE7D4R,SAAStnB,MAAQoR,EAC2B,QAA5CkkB,EAAAhO,SAASuO,cAAc,6BAAqB,IAAAP,GAA5CA,EAA8CQ,aAAa,UAAU,GAAD12B,OAAKgS,IACvB,QAAlDmkB,EAAAjO,SAASuO,cAAc,mCAA2B,IAAAN,GAAlDA,EAAoDO,aAAa,UAAU,GAAD12B,OAAKsW,IAC5B,QAAnD8f,EAAAlO,SAASuO,cAAc,oCAA4B,IAAAL,GAAnDA,EAAqDM,aAAa,UAAU,GAAD12B,OAAKgS,IACvB,QAAzDqkB,EAAAnO,SAASuO,cAAc,0CAAkC,IAAAJ,GAAzDA,EAA2DK,aAAa,UAAU,GAAD12B,OAAKsW,IAC9B,QAAxDggB,EAAApO,SAASuO,cAAc,yCAAiC,IAAAH,GAAxDA,EAA0DI,aAAa,UAAU,GAAD12B,OAAKgS,IACvB,QAA9DukB,EAAArO,SAASuO,cAAc,+CAAuC,IAAAF,GAA9DA,EAAgEG,aAAa,UAAU,GAAD12B,OAAKsW,IAC1B,QAAjEkgB,EAAAtO,SAASuO,cAAc,kDAA0C,IAAAD,GAAjEA,EAAmEE,aAAa,UAAU,GAAD12B,OAAKgS,MAC7F,IAGDjR,IAAAC,cAAA,WACED,IAAAC,cAAC21B,WAAQ,CAACC,SAAU71B,IAAAC,cAAA,WAAM0N,EAAE,oBAC1B3N,IAAAC,cAAC8E,GAAa,CAACsB,cAAesH,IAC7BmoB,QACC91B,IAAAC,cAAC0I,GAAgB,MAEjB3I,IAAAC,cAACqnB,IAAM,KACJyO,GAAOzvB,KAAI,CAAAC,EAAsBC,KAAG,IAAxB,KAAEmU,EAAI,UAAEgV,GAAWppB,EAAA,OAC9BvG,IAAAC,cAAC+1B,IAAK,CACJhwB,OAAK,EACL2U,KAAMA,EACNnU,IAAKA,EACL4C,OAAQtH,IACN,MAAMm0B,EAASF,GACZnZ,QAAO9V,IAAA,IAAC,KAAE6T,GAAM7T,EAAA,OAAKhF,EAAMo0B,MAAMvb,KAAKpW,SAASoW,MAC/CrU,KAAI6vB,IAAA,IAAC,KAAExb,EAAI,KAAEjb,GAAMy2B,EAAA,MAAM,CACxBxb,KAAMnL,OAAOI,KAAK9N,EAAMo0B,MAAMve,QAAQ3T,OAClCwL,OAAOI,KAAK9N,EAAMo0B,MAAMve,QAAQye,QAC9B,CAACzb,EAAM0b,IAAU1b,EAAK2b,QAAQ,IAADr3B,OAAKo3B,GAASv0B,EAAMo0B,MAAMve,OAAO0e,KAC9D1b,GAEFA,EACJjb,WAEJ,OACEM,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACs2B,KAAa,CACZhzB,SAAS,SACTizB,WAAY7oB,EAAE,0BACd8oB,QAAS,GACTC,iBAAiB,2BACjBC,cAAc,yBAEd32B,IAAAC,cAAA,YAAO0N,EAAE,wBAAwB,KACjC3N,IAAAC,cAAA,KAAG0F,UAAU,sBAAsBc,KAAMvJ,EAAYwJ,OAAO,SAASC,IAAI,uBACtEgH,EAAE,0BAGNvO,EAAMw3B,SAAW52B,IAAAC,cAAC00B,GAAW,CAACtuB,cAAesH,EAAG8G,aAAcrV,EAAMqV,eAC3D,YAATkG,EACC3a,IAAAC,cAACD,IAAMgH,SAAQ,KACbhH,IAAAC,cAACgH,IAAM,CAACU,QAAM,GACZ3H,IAAAC,cAAC2zB,GAAW,CAACvtB,cAAesH,KAE9B3N,IAAAC,cAAC+vB,GAAW,CAACD,YAAakG,IAC1Bj2B,IAAAC,cAACgH,IAAM,CAACC,MAAI,GACVlH,IAAAC,cAAC2zB,GAAW,CAACvtB,cAAesH,MAIhC3N,IAAAC,cAAC+vB,GAAW,CAACD,YAAakG,IAE5Bj2B,IAAAC,cAAC0vB,EAAS,CAACtpB,cAAesH,WAMpC3N,IAAAC,cAAC+1B,IAAK,KACJh2B,IAAAC,cAAC+H,GAAQ,CAAC3B,cAAesH,SCvGvC,MAAMkpB,GAAcC,QACW,cAA7BxzB,OAAOC,SAASwzB,UAEa,UAA7BzzB,OAAOC,SAASwzB,UAEhBzzB,OAAOC,SAASwzB,SAASb,MACvB,2D,cChBJ,MAAMc,GAA0B,CAC5BlC,aAAc,CACV8B,SAAS,EACTniB,aAAc,GACdwiB,OAAQ,KA2CDC,OAvCS,WAAmE,IAAlElsB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAA2BtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EACtE,OAAQqF,EAAO/S,MACX,KAAKqV,GACD,MAAO,IACAjJ,EACH8pB,aAAc,CACV8B,SAAS,EACTniB,aAAc9C,EAAOzS,QAAQuV,aAC7BwiB,OAAQ,IAAIjsB,EAAM8pB,aAAamC,OAAQtlB,EAAOzS,QAAQE,SAIlE,KAAK8U,GACD,MAAO,IACAlJ,EACH5L,MAAOuS,EAAOzS,SAGtB,KAAKiV,GACD,MAAO,IACAnJ,EACH8pB,aAAc,CACV8B,SAAS,EACTniB,aAAc,GACdwiB,OAAQ,IAAIjsB,EAAM8pB,aAAamC,UAI3C,KAAK7iB,GACD,MAAO,IACApJ,EACH5L,MAAOuS,EAAOzS,SAGtB,QACI,OAAO8L,ICtBnB,MAAMgsB,GAA6B,CAC/BroB,YAAa,GACbM,UAAW,GACX7D,SAAS,EACT+rB,WAAW,EACXhoB,mBAAmB,EACnBE,oBAAoB,GA8HT+nB,OA3HO,WAAoE,IAAnEpsB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAAyBtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EAClE,OAAQqF,EAAO/S,MACX,KAAKsU,GACD,MAAO,IACAlI,EACHI,SAAS,GAEjB,KAAK+H,GACD,MAAO,IACAnI,EACH2D,YAAagD,EAAOzS,QACpBkM,SAAS,GAEjB,KAAKgI,GACD,MAAO,IACApI,EACHI,SAAS,EACThM,MAAOuS,EAAOzS,SAEtB,KAAKmU,GACD,MAAO,IACArI,EACHmsB,WAAW,GAEnB,KAAK5jB,GACD,MAAO,IACAvI,EACHmsB,WAAW,GAEnB,KAAK7jB,GACD,MAAO,IACAtI,EACHmsB,WAAW,GAEnB,KAAK3jB,GACD,MAAO,IACAxI,EACHmsB,WAAW,EACX/3B,MAAOuS,EAAOzS,SAEtB,KAAKuU,GAID,GAFApU,QAAQyS,IAAI,kBAAmBH,EAAOzS,SAEZ,OAAtB8L,EAAM2D,YACN,MAAO,IACA3D,EACH2D,YAAagD,EAAOzS,SAErB,CAAC,IAADm4B,EACH,IAAIC,EAAa,IAAKtsB,EAAM2D,aA4B5B,OA1Bc,QAAd0oB,EAAA1lB,EAAOzS,eAAO,IAAAm4B,GAAdA,EAAgBhd,SAASpO,IAAqB,IAADsrB,EAMjBC,EAGbC,GARU,QAArBF,EAAIvsB,EAAM2D,mBAAW,IAAA4oB,OAAA,EAAjBA,EAAmBhqB,MAAKc,GAAKA,EAAE5O,KAAOwM,EAAOxM,OAC7CJ,QAAQyS,IAAI,kCAIR7F,EAAO8R,SACP1e,QAAQyS,IAAI,yDACZwlB,EAAuB,QAAbE,EAAGF,SAAU,IAAAE,OAAA,EAAVA,EAAY5a,QAAOyF,GAAKA,EAAE5iB,KAAOwM,EAAOxM,MAErD63B,EAAuB,QAAbG,EAAGH,SAAU,IAAAG,OAAA,EAAVA,EAAYnxB,KAAK+b,GACtBpW,EAAOxM,KAAO4iB,EAAE5iB,GACT4iB,EAEJ,IACAA,KACApW,OAKf5M,QAAQyS,IAAI,6CACZwlB,EAAc,IAAIA,EAAYrrB,OAI/B,IACAjB,EACH2D,YAAa2oB,GAGzB,KAAK5jB,GACD,MAAO,IACA1I,EACHiE,UAAW0C,EAAOzS,SAE1B,KAAKyU,GACD,MAAO,IACA3I,EACH5L,MAAOuS,EAAOzS,SAEtB,KAAK0U,GACD,MAAO,IACA5I,EACHiE,UAAW,IAEnB,KAAK4E,GACD,MAAO,IACA7I,EACHmE,kBAAmBwC,EAAOzS,SAElC,KAAK4U,GACD,MAAO,IACA9I,EACH6D,qBAAsB8C,EAAOzS,SAErC,KAAK6U,GACD,MAAO,IACA/I,EACH+D,0BAA2B4C,EAAOzS,SAE1C,KAAK8U,GACD,MAAO,IACAhJ,EACHqE,mBAAoBsC,EAAOzS,SAEnC,QACI,OAAO8L,ICjJnB,MAAMgsB,GAA4B,CAC9BrO,UAAW,GACXE,kBAAmB,GACnBE,aAAc,GACd3d,SAAS,EACT8d,gBAAiB,CACb3pB,eAAgB,IAwFTm4B,OApFM,WAAkE,IAAjE1sB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAAwBtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EAChE,OAAQqF,EAAO/S,MACX,KAAKf,EACD,MAAO,IACAmN,EACHI,SAAS,GAGjB,KAAKrN,EACD,MAAO,IACAiN,EACHI,SAAS,EACTud,UAAWhX,EAAOzS,QAAQwpB,OAC1BK,aAAcpX,EAAOzS,QAAQktB,YAGrC,KAAKpuB,EACD,MAAO,IACAgN,EACHI,SAAS,EACThM,MAAOuS,EAAOzS,SAGtB,KAAKjB,EACD,MAAO,IACA+M,EACH6d,kBAAmBlX,EAAOzS,SAGlC,KAAKhB,EACD,MAAO,IACA8M,EACH5L,MAAOuS,EAAOzS,SAEtB,KAAKf,EACD,MAAO,IACA6M,EACHke,gBAAiB,IAAKle,EAAMke,gBAAiB3pB,eAAgBoS,EAAOzS,UAG5E,KAAKd,EACD,MAAO,IACA4M,EACH5L,MAAOuS,EAAOzS,SAGtB,KAAKb,EACD,MAAO,IACA2M,EACHke,gBAAiB,IACVle,EAAMke,gBACTje,QAAS,CACL0mB,KAAMhgB,EAAOzS,QAAQyyB,KACrBvF,WAAYza,EAAOzS,QAAQktB,WAC3B/a,KAAMM,EAAOzS,QAAQmS,QAKrC,KAAK/S,EACD,MAAO,IACA0M,EACH5L,MAAOuS,EAAOzS,SAGtB,KAAKX,EACD,MAAO,IACAyM,EACHke,gBAAiB,IACVle,EAAMke,gBACTje,aAASqB,IAIrB,KAAK9N,EACD,MAAO,IACAwM,EACH5L,MAAOuS,EAAOzS,SAEtB,QACI,OAAO8L,IC9FnB,MAAMgsB,GAA6B,CAC/B9rB,WAAY,GACZE,SAAS,EACTE,gBAAiB,IAoDNqsB,OAjDO,WAAqE,IAApE3sB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAAyBtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EAClE,OAAQqF,EAAO/S,MACX,KAAKyf,GACD,MAAO,IACArT,EACHI,SAAS,GAGjB,KAAKkT,GACD,MAAO,IACAtT,EACHI,SAAS,EACTF,WAAYyG,EAAOzS,SAG3B,KAAKqf,GACD,MAAO,IACAvT,EACHI,SAAS,EACThM,MAAOuS,EAAOzS,SAGtB,KAAKsf,GACD,MAAO,IACAxT,EACHM,gBAAiBqG,EAAOzS,SAGhC,KAAKuf,GACD,MAAO,IACAzT,EACH5L,MAAOuS,EAAOzS,SAGtB,KAAKwf,GACD,MAAO,IACA1T,EACHM,gBAAiB,IAEzB,KAAKqT,GACD,MAAO,IACA3T,EACHQ,oBAAqBmG,EAAOzS,SAEpC,QACI,OAAO8L,ICnDnB,MAAMgsB,GAA+B,CACjCpQ,eAAgB,GAChBgR,uBAAwB,GACxB/rB,kBAAmB,EACnBT,SAAS,GAkDEysB,OA/CS,WAAwE,IAAvE7sB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAA2BtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EACtE,OAAQqF,EAAO/S,MACX,KAAKwuB,GACD,MAAO,IACApiB,EACHI,SAAS,GAGjB,KAAKiiB,GACD,MAAO,IACAriB,EACHI,SAAS,EACTwb,eAAgBjV,EAAOzS,QAAQ0nB,eAC/BgR,uBAAwBjmB,EAAOzS,QAAQ04B,uBACvC/rB,kBAAmB8F,EAAOzS,QAAQ2M,mBAG1C,KAAKyhB,GACD,MAAO,IACAtiB,EACHI,SAAS,EACThM,MAAOuS,EAAOzS,SAEtB,KAAKquB,GACD,MAAO,IACAviB,EACHI,SAAS,GAEjB,KAAKoiB,GACD,MAAO,IACAxiB,EACHI,SAAS,EACTwb,eAAgBjV,EAAOzS,QAAQ0nB,eAC/BgR,uBAAwBjmB,EAAOzS,QAAQ04B,uBACvC/rB,kBAAmB8F,EAAOzS,QAAQ2M,mBAE1C,KAAK4hB,GACD,MAAO,IACAziB,EACHI,SAAS,EACThM,MAAOuS,EAAOzS,SAEtB,QACI,OAAO8L,IClDnB,MAAMgsB,GAA6B,CAC/Bn3B,MAAO,IAiCIi4B,OA9BY,WAAyE,IAAxE9sB,EAAKqB,UAAArI,OAAA,QAAAsI,IAAAD,UAAA,GAAAA,UAAA,GAAG2qB,GAAcrlB,EAA8BtF,UAAArI,OAAA,EAAAqI,UAAA,QAAAC,EAC5E,OAAQqF,EAAO/S,MACX,KAAKqsB,GACD,MAAO,IACAjgB,EACHnL,MAAO8R,EAAOzS,SAGtB,KAAKgsB,GACD,MAAO,IACAlgB,EACH5L,MAAOuS,EAAOzS,SAGtB,KAAKisB,GACD,MAAO,IACAngB,EACHnL,MAAO,IAGf,KAAKurB,GACD,MAAO,IACApgB,EACH5L,MAAOuS,EAAOzS,SAEtB,QACI,OAAO8L,ICdJ+sB,OATCC,2BAAgB,CAC5BnD,SAAUqC,GACVxoB,QAAS0oB,GACT1O,OAAQuP,GACRhtB,QAAS0sB,GACTjsB,SAAUmsB,GACV9H,YAAa+H,K,8BCRjB,MAAMI,GAASC,wBAAa,CACxBC,WAAW,IAKAC,OAFDC,uBAAYP,QAASzrB,EAAWisB,+BAAoBC,2BAAgBC,KAAOP,M,4DCHzF,MAEMQ,GAA0B,cAAd37B,EAA4B47B,GAAsBC,GAEpEC,KAGGC,IAAIC,MAGJD,IAAIE,MAEJF,IAAIG,MAGJC,KAAK,CAEJvuB,IAhBiB,KAiBjBwuB,UAAW,CACT5X,GAAI,CACF6X,OAAQV,KAGZW,YAtBiB,KAuBjBC,OAAO,EACPC,UAzBc,CAAC,MA0BfC,cAAe,CACbC,aAAa,KAIJZ,GAAI,ECzBnBa,IAAStwB,OACPpJ,IAAAC,cAAC4B,GAAY,KACb7B,IAAAC,cAACwE,IAAQ,CAACk1B,MAAOtB,IACfr4B,IAAAC,cAACD,IAAM45B,WAAU,KACf55B,IAAAC,cAAC45B,IAAM,KACL75B,IAAAC,cAAC80B,GAAG,UAKV5N,SAAS2S,eAAe,SVGnB,SAAkBC,GACvB,GAA6C,kBAAmB3vB,UAAW,CAMzE,GAJkB,IAAI4vB,IACpBp9B,GACA0G,OAAOC,SAASkD,MAEJwzB,SAAW32B,OAAOC,SAAS02B,OAIvC,OAGF32B,OAAOqT,iBAAiB,QAAQ,MAgEpC,SAAiCujB,EAAeH,GAE9CI,MAAMD,EAAO,CACXnL,QAAS,CAAE,iBAAkB,YAE5B/O,MAAKoa,IAEJ,MAAMC,EAAcD,EAASrL,QAAQ/vB,IAAI,gBACjB,MAApBo7B,EAASE,QAAkC,MAAfD,IAA8D,IAAvCA,EAAYE,QAAQ,cAEzEnwB,UAAUowB,cAAcC,MAAMza,MAAK0a,IACjCA,EAAaC,aAAa3a,MAAK,KAC7B1c,OAAOC,SAASC,eAxD5B,SAAyB02B,EAAeH,GACtC3vB,UAAUowB,cACPI,SAASV,GACTla,MAAK0a,IACJA,EAAaG,cAAgB,KAC3B,MAAMC,EAAmBJ,EAAaK,WACd,MAApBD,IAGJA,EAAiBE,cAAgB,KACA,cAA3BF,EAAiB9vB,QACfZ,UAAUowB,cAAcS,YAI1B57B,QAAQyS,IACN,iHAKEioB,GAAUA,EAAOmB,UACnBnB,EAAOmB,SAASR,KAMlBr7B,QAAQyS,IAAI,sCAGRioB,GAAUA,EAAOoB,WACnBpB,EAAOoB,UAAUT,WAO5Bza,OAAM7gB,IACLC,QAAQD,MAAM,4CAA6CA,MAqBzDg8B,CAAgBlB,EAAOH,MAG1B9Z,OAAM,KACL5gB,QAAQyS,IACN,oEAlFFupB,CAHW,GAAAp8B,OAAMrC,GAAsB,sBAGRm9B,GAE3BlD,IAGFzsB,UAAUowB,cAAcC,MAAMza,MAAK,KACjC3gB,QAAQyS,IACN,oHUnBV0oB,K","file":"static/js/main.afb72829.chunk.js","sourcesContent":["export const API_ROOT = process.env.REACT_APP_API_ROOT;\nexport const FUNCTIONS_ROOT: string = process.env.REACT_APP_FUNTIONS_ROOT == null ? '' : process.env.REACT_APP_FUNTIONS_ROOT;\nexport const LOCAL_DB_ROOT = process.env.REACT_APP_LOCAL_DB_ROOT;\nexport const GOOGLE_MAP_KEY: string = process.env.REACT_APP_GOOGLE_MAP_API_KEY == null ? '' : process.env.REACT_APP_GOOGLE_MAP_API_KEY;\nexport const GOOGLE_ANALYTICS_KEY: string = process.env.REACT_APP_GOOGLE_ANALYTICS_KEY == null ? '' : process.env.REACT_APP_GOOGLE_ANALYTICS_KEY;\nexport const PRISMIC_URL: string = process.env.REACT_APP_PRISMIC_URL == null ? '' : process.env.REACT_APP_PRISMIC_URL;\nexport const PRISMIC_TOKEN: string = process.env.REACT_APP_PRISMIC_TOKEN == null ? '' : process.env.REACT_APP_PRISMIC_TOKEN;\nexport const THEME_KEY : string =  process.env.REACT_APP_THEME_KEY == null ? 'ronneby': process.env.REACT_APP_THEME_KEY;\nexport const GOOGLE_MAP_Position = process.env.REACT_APP_MapPosition ?? '';\nexport const CACHE_NAME: string = process.env.REACT_APP_CACHE_NAME ?? '';\nexport const COOKIE_URL: string = process.env.REACT_APP_COOKIE_URL ?? '' ;\nexport const AUTH_CLIENT_ID: string = process.env.REACT_APP_AUTH_CLIENT_ID ?? '';\nexport const AUTH_AUTHORITY: string = process.env.REACT_APP_AUTH_AUTHORITY ?? '';\nexport const AUTH_SCOPE: string = process.env.REACT_APP_AUTH_SCOPE ?? '';\nexport const ADMIN_GROUP_ID: string = process.env.REACT_APP_ADMIN_GROUP_ID ?? '';\nexport const AUTH_REDIRECT_URI: string = process.env.REACT_APP_AUTH_REDIRECT_URI ?? '';","import { ICategory, IEvent, IEventResponse } from \"./Event\";\n\nexport const GET_EVENTS_BEGIN = 'GET_EVENTS_BEGIN';\nexport const GET_EVENTS_SUCCESS = 'GET_EVENTS_SUCCESS';\nexport const GET_EVENTS_FAILURE = 'GET_EVENTS_FAILURE';\nexport const SET_FILTERED_EVENTS = 'SET_FILTERED_EVENTS';\nexport const SET_FILTERED_EVENTS_FAILURE = 'SET_FILTERED_EVENTS_FAILURE';\nexport const SET_EVENTS_PAGE_SCROLL_POSITION = 'SET_EVENTS_PAGE_SCROLL_POSITION';\nexport const SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE = 'SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE';\nexport const SET_EVENTS_PAGE_FILTERS = 'SET_EVENTS_PAGE_FILTERS';\nexport const SET_EVENTS_PAGE_FILTERS_FAILURE = 'SET_EVENTS_PAGE_FILTERS_FAILURE';\nexport const CLEAR_EVENTS_PAGE_FILTERS = 'CLEAR_EVENTS_PAGE_FILTERS';\nexport const CLEAR_EVENTS_PAGE_FILTERS_FAILURE = 'CLEAR_EVENTS_PAGE_FILTERS_FAILURE';\n\nexport interface IEventState {\n    eventList: IEvent[],\n    filteredEventList: IEvent[],\n    categoryList: ICategory[],\n    loading: boolean,\n    error?: string,\n    eventsPageState: {\n        scrollPosition: number;\n        filters?: IEventFilters\n    };\n}\n\nexport interface IEventFilters {\n    date?: Date;\n    categories?: ICategory[];\n    text?: string;\n}\n\ninterface GetEventsBeginAction {\n    type: typeof GET_EVENTS_BEGIN\n}\n\ninterface GetEventsSuccessAction {\n    type: typeof GET_EVENTS_SUCCESS,\n    payload: IEventResponse\n}\n\ninterface GetEventsFailure {\n    type: typeof GET_EVENTS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface SetFilteredEvents {\n    type: typeof SET_FILTERED_EVENTS,\n    payload: IEvent[]\n}\n\ninterface SetFilteredEventsFailure {\n    type: typeof SET_FILTERED_EVENTS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\n\ninterface SetEventsPageScrollPosition {\n    type: typeof SET_EVENTS_PAGE_SCROLL_POSITION,\n    payload: number;\n}\n\ninterface SetEventsPageScrollPositionFailure {\n    type: typeof SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE,\n    payload: string\n}\n\ninterface SetEventsPageFilters {\n    type: typeof SET_EVENTS_PAGE_FILTERS,\n    payload: IEventFilters;\n}\n\ninterface SetEventsPageFiltersFailure {\n    type: typeof SET_EVENTS_PAGE_FILTERS_FAILURE,\n    payload: string\n}\n\ninterface ClearEventsPageFilters {\n    type: typeof CLEAR_EVENTS_PAGE_FILTERS,\n}\n\ninterface ClearEventsPageFiltersFailure {\n    type: typeof CLEAR_EVENTS_PAGE_FILTERS_FAILURE,\n    payload: string\n}\n\nexport type EventActionTypes = GetEventsBeginAction |\n    GetEventsSuccessAction |\n    GetEventsFailure |\n    SetFilteredEvents |\n    SetFilteredEventsFailure |\n    SetEventsPageScrollPosition |\n    SetEventsPageScrollPositionFailure |\n    SetEventsPageFilters |\n    SetEventsPageFiltersFailure |\n    ClearEventsPageFilters |\n    ClearEventsPageFiltersFailure;","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\n\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as EventActions from './ActionTypes'\nimport { IEvent } from './Event';\n\nexport const getEvents = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ type: EventActions.GET_EVENTS_BEGIN });\n\n        const result = await axios.get(`${API_ROOT}/event`);\n        dispatch({\n            type: EventActions.GET_EVENTS_SUCCESS,\n            payload: result.data\n        });\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: EventActions.GET_EVENTS_FAILURE, payload: error })\n    }\n}\n\nexport const setFilteredEvents = (filteredEvents: IEvent[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: EventActions.SET_FILTERED_EVENTS,\n            payload: filteredEvents\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: EventActions.SET_FILTERED_EVENTS_FAILURE, payload: error })\n    }\n}\n\nexport const setEventsPageScrollPosition = (scrollPosition: number): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: EventActions.SET_EVENTS_PAGE_SCROLL_POSITION,\n            payload: scrollPosition\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: EventActions.SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE, payload: error })\n    }\n}\n\nexport const setEventsPageFilters = (eventsPageFilters: EventActions.IEventFilters): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: EventActions.SET_EVENTS_PAGE_FILTERS,\n            payload: eventsPageFilters\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: EventActions.SET_EVENTS_PAGE_FILTERS_FAILURE, payload: error })\n    }\n}\n\nexport const clearEventsPageFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: EventActions.CLEAR_EVENTS_PAGE_FILTERS\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: EventActions.CLEAR_EVENTS_PAGE_FILTERS_FAILURE, payload: error })\n    }\n}","import { THEME_KEY } from '../../Constants';\n\n// Define the array of URLs\nexport const urlArray = THEME_KEY === 'olofstrom'\n    ? [\n        { id: 1, name: 'Olofstrom.se', url: 'https://olofstrom.se/' },\n        { id: 2, name: 'Visitolofstrom.se', url: 'http://www.visitolofstrom.se' },\n      ]\n    : [\n        { id: 1, name: 'Ronneby.se', url: 'https://ronneby.se' },\n        { id: 2, name: 'Visitronneby.se', url: 'http://www.visitronneby.se' },\n      ];\nexport const menuMapItems = THEME_KEY === 'olofstrom'\n    ? [\n        {\n          id: '1',\n          title: 'Olofström',\n          url: 'https://live.olofstrom.se',\n          active: false,\n        },\n        {\n          id: '2',\n          title: 'Ronneby',\n          url: 'https://live.ronneby.se',\n          active: true,\n        },\n      ]\n    : [\n        {\n          id: '1',\n          title: 'Ronneby',\n          url: 'https://live.ronneby.se',\n          active: false,\n        },\n        {\n          id: '2',\n          title: 'Olofström',\n          url: 'https://live.olofstrom.se',\n          active: true,\n        },\n      ];\n","export default __webpack_public_path__ + \"static/media/ronneby-kommun.c41425b1.svg\";","import React from 'react';\nimport logoRonneby from '../../images/ronneby/ronneby-kommun.svg';\nimport logoOlofstrom from '../../images/olofstrom/olofstrom_kommun.png';\nimport { THEME_KEY } from '../../Constants';\n\nexport function GetImageLogo(): JSX.Element | null {\n  switch (THEME_KEY) {\n    case 'ronneby':\n      return <img src={logoRonneby} alt=\"Ronneby kommun\" />;\n    case 'olofstrom':\n      return <img src={logoOlofstrom} alt=\"Olofström kommun \" />;\n    default:\n      return null;\n  }\n}\nexport function GetDefaultMapImage(): string {\n    return `${process.env.PUBLIC_URL}/images/${THEME_KEY}/map.png`;\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP8AAAA8CAYAAACpdGzQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAEI5JREFUeNrsXd1x40gObs/t85nzfLU1dATmRGA6gpEiMBWB5QgkRSApAmkisByB6AhMR2Bubd3zcvcCmGN70BYE9Q+aoiR63KhiyZbIJogG8AFg/wgRKFCgQIECBfo49K8ggkCBdun33/+TnZ//e1ofF//8878cfT+uvxvVx1n9ffGen/FT6OZAgbR0Ux9pfYzI9yP4/ua9P+BvoY8DBdLSd/h8JN9P6uMK/R4oUKBA74vOjnCPqD6y+risj6o+nutj+Q5yvgjCu4T8JPO84s8//1sy2kjg+SlV9fVFQ74S4Au3WwFPOfO5Eo9bGnkFXnrk6xJ4Kci5PcRrEx3K6zYraCttyvMxZa1pb1hfN9unDlFfv2Se23Pp7qHD/rg+1vCJSYZNg44avezsW1DqCgSGn2cE58nOnziUIAWnl6HvlhBKFp58jSHPjOFabESvTqY+p4L2J8pQDIYk+frGdAIDymt9H8nDAtrBvGBnR4FlYXCEXLqWDgDdh8qVykt+rOpj7muoLcqaymwqr+MaMDV8kOGS4bDugfec6KKA766PgfxrdFOhyZ3GHTP8af0xBPSa6DpJdSJCPKlgA5sC1Nc8gdLIjv/cAH0WcL1SttKgHFMwMMnLnU3JABnu4d++BpHVc/ax8UDk8AT36VPDqn+XvEqEOiMyk9fMiUIqY5rC33fE0UQAFLJPLuhz1+2+KCWvf7s2yEJA/ywPKGvZ/ooBKtIeyvrciwa6qZ71s0nXgP816G8f8w799trfSlaHRP7YYvgCkGfcIcNfAJJI5bs2CRgE2keeWBpRXP9/bXEAFQq7fA1/DUpmVWD5W33+Cs5/VWKJfpZrKhIm55r7X2quy6BvZ7pr6u8GKMTHuiAReGxA6LewVNPmSjoPQ5pVaqJKJYscOSmJuCuHg95H1vf1/y4HoxxR7BO+I2cTI2dpimRu4T47Tks+u+QRdPaVmrzqkx0rvdAPOF4MRh472kksofI9tP1XC+EiKxcDpS5thk8VAKIX9SyLA9Qc7lFnLhk8VRDSKf4XoNSNqG7vTmOMV/D5hyNEx+3kOsP3oLsGvJcoRI40tYljyxr/NvJ8HO75qa2uAjKZNDX+HsonaF6faooLNsoN7a9RR6li4cuhHACEpEq4rPwNCXMMDuOVd0YhyoeGINvKx3CAf2ws05ZFFhEnoOOh1cEvnOKqgR6YYKRkXR5Q1ueYF0BzX9QXjmg6dp2Dnbmv8U89vFPlKE7MPdqPDqDENFRS+bsvTdDfNy05pAj4EqLBmxFALmUw6T7or6ECObtMvB8qGLJeHVDWCUFlLpqPoH2OA1T8jzhA5Gv8MSPkoOGaDuFnGkEnjvbjAymFijJyH9TXCFzYQssGPCmH9NiwjUPwpZw2DnUXYEBdp/xIsk4dDmjORX+E+hNk/JeWS/DAozWks60Zvy+pvOgrPIB0BheGHO7oCgQhf2zLk5ihn+qYqCVDuCIybEJYkb8wQ/ktRNQpD4TguP8yULSkgwaveJpZHHvbsr60gGMFwMdF/xGkIkuOncAbB3yuLHSuQc/3Nv6C6f10143hwUuLZ7YJvzyAcmChPO/RTmko7LTB1z6Ol9uerFb/wIf4WWz9Zgl1B+SZn1xIc2THrsL5gqRmRlk3GbjjK2twQk70hzcmMeL9kdn+gDiAFPqmt6/x31keftJSSGlqf35gffnSUjuVeH80gQhNHep9+6Mj170mzzuFV6ZHR3g5MEcquMx1waDWKvLkpnMtF2xxuwkxYA7632pQnwUM4AAG6B4ROPhsH+PPIYRfEcS/Fp7vsA00BsWrSNTQVvuHRtvWK90tkfPNC7yOU8dMMF6vAVJekHw6gxFyx6YrMBhpTGqgjmhYx9mHHl1plQv9wQmlBFArkq66+kY5ZxyVLnAE8KmhIskRYWdw9BnKFYNhZ4z2peJ9BqX6DM6mOIJR7OP1o5ZTk8eW+Gqc0oBhzxjnVTBiDJ874ihom/0oeVAHSkkSRiTShqwjR3qaaKJCG/rL/+kw4MIXqACIKFhPbcYvH2QIxjoUvEKcPLcndt//p/D9E/LI3LCwNITQmL/xPjk2eOCC5FlNcsuEUffwIdzOt4ZtpCRiayof7rl3BKl64kQERrNEkUjGBICmsr5y1L4iei8T+iPUnzOdDcc59xFfsUpvPmk81At4hxF8vjA8onz4e7E78m8tNiOn3sJCsT16zwchKH8jcCzZHroyJ3mWL/UYNYsmqUOJ0KsJIqkxB0vGIJm2Up4x4vvUr//wPIGFSYZQId9X1j0k68qjnqRD/5HYvBUwOamkoTyEKeePxGZsM/Uy9wfoTDx6b8ps38THomnIphmk4YtYqtNmDCOLGnbW1OcVIihwLPiF2NijbVc+X4oOEBghLnrdW15HTnRhMVMePYasY03Yr0N/pcdz6kRcUZh8Npvu6nTzE0HkyGGoh6Kh2EySsIWxMQPpmlCfFEUSZseryKVgGlnCaA8j0hJdN2Xy9DZ7S/yc2deaMUIe7wqNIw1S+UR2bTqAAuX/EfRt5EgTEu4bCzS12SXrCPFjQ//MgPqCOI8rwz2uHHqx5aA/eaDSocO4BEL4YUPFiFtQkkpFQLZ31jAAhjULkPJmKoQhBMF8DUju+mQrpAHiq5ls3FlmPhSDcWSG+2fQT4VriquBj6htZwF84AlYa0MUdYfy4sw2OKaBrBNHhILTxblFlwqLrqfAt+leU5oG/qbxKsLhdQ5NU0CXCSlUuZBkL4SDaZoF3D+FUPsWFOIROYYrFAVNXBNBoDNwZz3BfeiosJ7QjOOHKbJ/QD3iteYB00nxgiAJyCxFzshV5MMIfiUNwqPAJxFUyuEByeWb2MyM9Fmo5aYJH2SVpNcx9abXrLKP6t/PAViUDF+NXd0LPvuQ1tyCLF2yzgHxC0da8MazBf1v4Hk4K/3EwCcduaiAa4l0NhabxUhznE6eEa/+ZPC+spGvFgNbi3ZeSVFaEkV6sSD8tWhY1TZ49Rvo6ITIoQClXzLysAzaUcuXnTvQam5CTECrDJxPSvqpgOM7cymvNXqeCsm0gKq97dohUn5MOSjczGNQTSM+kFwF3BOHu33LYhep2F3B6DtF7bZkjdLCEtqITM+m6jSOBVjGmtD+tT3gWa0srNPZneekK/lkmuKbmrZoC2vGcINcbI8qUl5ySITHnZ9daaqc9xoHMBDvYF3AQIG6RGeGvA7PdFruGVKnEBlghLjeoz21MEMMzmElOlJhDhQo0K7x/0DHOogkUKDTU9ixJ1CgYPyBAgX6qMYvc+gphOWNR8wFChTofZEsoP1FcvMfop0VaQ+R80fAm+L5SZxwIkmgQO+VIoPhqyPtmPGrTSN0vA5DdwYKxA/7TfvJKeraVsRqlJaOuBOEAgUKxs84J+4Yz1eO35PQrYEC8YzfNRSzCGIKFOjXNP7CYeDzjvF80Ak+gQJ9FFKz+uRwWzqfXo3p75oxydl+mSG3n/nySyaJbDkRmFKLz5UpEH0DopZJMrWvJonoJsNIGefi5+SUpceEGLWp5EWTBSphEskI72zrkg/nXMP14/rj3DCZxSR7o0zJegVboEDvAe3LGXo+K/iqiUs7erfH0t6dzvnVrL1rMC4peLmA5rKDPCtec/Kd2hTEi+RMJ1DsCoxTHg/U8OHcUmzWJlTbYPcdii9nIo7EZuHTryDba5CvWqjjxWPVWzVDrOnbjZFHbeT1eZssb4XWzk8cshdE9n1Lf6kFQyfomrlhFmAs7HP4de3PoP0S2o5gYdBfyvAx8ivKRUvTYg9MpdhvcpCO5JRbNVbANK1WTdFc6pwDUXq1fbdsa6BBHvkMeX3uBIxfotQI5sn3HUiljOm2Pn/mg/5ogUgunSOH4asbQ+SobPSIeCqYRpqr7b0ZC4coB3DtIavv0CcPv3LOH0iP8DrDzwDtXYtVTJXhSxSzKRwg2UBsVptJhXtwVYQ+fdF/RNIHwTAc4Yv+ZAPMLryB8YoAPgIF4+cpsjL8AWxo4cqRM0gLBh4OZ4yQ1bUDLt4P7par0BrU51wX6RwHgzLRnTEXVXAA/sYvEQyP/lucoENjKPDgJcF7JzJ8Tg1EGciqQTFuwjS0SGwvmsJF/5Hw28OPorbP6sa3YnuXmfSEej4Q28twhWnlDuO/F7ubdmRHFpwaytvTOIOsa4aPtlQWTXJFKCq9LdJoCctjOK/kor9hM4iYyRpeYXbqIYdJR/Rc7Rb95gBOtKfguzD+xIKuyTEMDyFVZIlKuoT4kvDow7zhrfF1qcX4caTAQX+8GYQygnOGw5D0t/DYV15stpaeGSKIU9RxlAN4Wyb7ozsAk/G7QrvLIxZpbFFBemDDn3gY/haS7rFB5LMtJ0cIX5ANR4zoDxHEK+oDX5WnQdK15EcNUP/keXZwAH45v4n+bqH40mXqIYPyQaw2nFHJdIh/e6D/LTFgbh8kyNHIa5YM9Feor85VUcaXLnQsLJ3NcQDlRzX+1Z4KajP27y0ZAl3Zt03qI4NaeziAQoPQh6iDYGW2oj+MSszE9mYQz0xnRZ/BWpA0oH7lWV/ohANoc6ej92b8hTCP7jP9lgDyDElHy/PViLbPyLGoVXjHljRjYkGpyaGiCCi8DRo4gKqFHDd2OL9EUxuwof/bXoINeLnEzwUGYUN/ivqdNH7PCOBDhv1q4EmJOnEi9CPrpNBkVX4qNjv7TokS5yTXlOfcg8KoHX4TDfLTzTjkd3cNldlHOZYNHADehedbC8afe/C6g/4I9em8ARyhpC7kJ7vMaNHfkus/M4y/6pADyILx/6QxoPYZoPZY01Fjoa/+Dw05qGk34Fjod+FVHXQGx8WhDX8PB7DS1A18STmN3BB6XhkMRof+I43B+hhbrJGJCf1vNahP04LIlS5xIwTktIomz2FxAIuP4gDaGOF36/lbJsyV31h0bC0+UOY7jgMARcqRYXgNvYV2E4PB6u5lQ/8Eob4tf00cRlMaUq439AdDTAw8c/aVLzTOzUWJR3QUe0YAH8IBtGH8kafQo3066kQOYIbQzhUB3BHD8Mn98U6qeQNjnZDoSutESNuRA6VLA/rPSMRmQv2KId9KbA9t5hRL1VTgh5b6eMcBBOPfj6ojXdMq6fJgmHwzQwbzpEMHzZ7wrGIhFJtS4d7LMDLJiKB/xEB9SZcNnIxyKniI8YTRnynTcU0dslLrOOZtTrXVOIBg/A5aev62dLS3OpEsvrjQEOaM48k6MjwcU6QCI+yLzfbV0lEsdE5AjpWvjycI0eX03K+WXWYTExojGhjCc0qqjdSAtK5QGe8rX5lyfZKeXFnayxHvsvC2hoIlfv4YnORUbNZHsNG5pm+DAwA6aynsX2uQwibEzBBWHX23XbS1Ma5FSMOQ4xFWuv3UwQinCMnUhqEPeG65oW08PiFFDm9uQzFY6ANvL72k90PnroVmJSJsRGJ7O3b1vKpmMYR6jYoy1L1yjeyegPeZxWE9Eb14MKE2TByaIudTis0W1wnwMxeWrcDhnjdE7vIZnl2zMkkba3i2cTB+uwPIkGd/YBhxipS5gA4tTyEEFebDAhGR2B3Zxk0RSlOYjYpiGGVzzj2QMkbAY6yKcfsMRlFtUv6BV4nmBTqn2GPIsi6VsraHip8Y/VlhPu5DkJd6hkrnzC3txKjGEShQoECBAgUK9I7p/wIMAPEhHcFkue7GAAAAAElFTkSuQmCC\"","import { Configuration, RedirectRequest } from \"@azure/msal-browser\";\nimport { AUTH_AUTHORITY, AUTH_CLIENT_ID, AUTH_SCOPE } from \"./Constants\";\n\n// Config object to be passed to Msal on creation\nexport const msalConfig: Configuration = {\n    auth: {\n        clientId: AUTH_CLIENT_ID,\n        authority: AUTH_AUTHORITY,\n        redirectUri: \"/admin\",\n        postLogoutRedirectUri: \"/\"\n    },\n    system: {\n        allowNativeBroker: false // Disables WAM Broker\n    }\n};\n\n//Add here scopes for id token to be used at MS Identity Platform endpoints.\nexport const loginRequest: RedirectRequest = {\n    scopes: [AUTH_SCOPE]\n};","/* eslint-disable  @typescript-eslint/no-explicit-any */\nimport {\n    PublicClientApplication,\n    EventType,\n    EventMessage,\n    AuthenticationResult,\n    AccountInfo,\n    SilentRequest,\n} from \"@azure/msal-browser\";\nimport { loginRequest, msalConfig } from \"../auth-config\";\nimport { createContext, useContext, useState } from \"react\";\nimport React from \"react\";\nimport { ADMIN_GROUP_ID } from \"../Constants\";\nexport interface Account {\n    name: string | undefined;\n    login: string | undefined;\n    aadAccess?: boolean;\n    fromValidTenant: boolean;\n}\n\nconst AuthContext = createContext<{\n    user: Account | null | undefined;\n    logOut(): void;\n    getApiToken(): Promise<string>;\n    refreshTokensAndUserInfo(): Promise<void>;\n}>({} as any);\n\nconst msalInstance = new PublicClientApplication(msalConfig);\n\nlet accessToken: string;\n\nmsalInstance.addEventCallback((event: EventMessage) => {\n    if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\n        const payload = event.payload as AuthenticationResult;\n        const account = payload.account;\n        msalInstance.setActiveAccount(account);\n    }\n});\n\nexport const useAuth = (): any => {\n    return useContext(AuthContext);\n}\n\nexport interface IAuthProviderProps {\n    children: React.ReactNode;\n}\n\nexport const AuthProvider = (props: IAuthProviderProps): JSX.Element => {\n    // handle auth redired/do all initial setup for msal\n    const [token, setToken] = useState<string>(accessToken ?? \"\");\n    const [user, setUser] = useState<Account | null>();\n    const [account, setAccount] = useState<AccountInfo | null>();\n\n    const refreshTokensAndUserInfo = async () => {\n        await msalInstance.initialize();\n        const redirectResponse = await msalInstance.handleRedirectPromise();\n        let accountInfo: AccountInfo | null = null;\n        try {\n            if (redirectResponse !== null) {\n\n                // Check if the redirectResponse have expired\n                if (redirectResponse.expiresOn && redirectResponse.expiresOn < new Date()) {\n                    // console.log('redirect response was expired');\n                    // The token is expired, let's try to get a new one\n                    const accessTokenRequest: SilentRequest = {\n                        ...loginRequest,\n                        account: redirectResponse.account,\n                    };\n\n                    // console.log('Aquire accesstoken silently.. ');\n                    const accessTokenResponse = await msalInstance.acquireTokenSilent(\n                        accessTokenRequest\n                    );\n\n                    // console.log('Got the access token response from the slient request, when the redirect isnt null...', accessTokenResponse);\n                    accessToken = accessTokenResponse.accessToken;\n                } else {\n                    // console.log('redirect response was not expired');\n                    accessToken = redirectResponse.accessToken;\n                    // console.log('Got the access token from redirect response', redirectResponse);\n                }\n\n                accountInfo = msalInstance.getActiveAccount();\n\n                // console.log('Account information', accountInfo);\n\n            } else {\n                // console.log('redirect response was null');\n                // Check if user signed in\n                accountInfo = msalInstance.getActiveAccount();\n\n                if (accountInfo === null) {\n                    // console.log('Account info was null .. so starting redirect!');\n                    msalInstance.loginRedirect(loginRequest);\n                    return;\n                }\n\n                const accessTokenRequest: SilentRequest = {\n                    ...loginRequest,\n                    account: accountInfo,\n                };\n\n                // console.log('Aquire accesstoken silently.. ');\n                const accessTokenResponse = await msalInstance.acquireTokenSilent(\n                    accessTokenRequest\n                );\n\n                // console.log('Got the access token response from the slient request', accessTokenResponse);\n                accessToken = accessTokenResponse.accessToken;\n            }\n        } catch (error) {\n            console.error('Error when trying to get the access token', error);\n\n            // Reload the browser to force a new login, we have seen some \n            // strange errors when the user is logged in for a long time and the\n            // refresh fails.\n            window.location.reload();\n        }\n\n        // Split the home account id to get the id for the tenant for the user. That is the secound \n        // part of the home account id. Check that against the tenant id, if they are the same, the user \n        // is from the current tenant.\n        const homeAccountIdParts = accountInfo?.homeAccountId?.split('.');\n        let userTenantId = \"\";\n        let userFromCurrentTenant = false;\n        if (homeAccountIdParts?.length !== 2) {\n            console.error('The home account id was not in the expected format, letting all users in. The home account id was:', accountInfo?.homeAccountId);\n            userFromCurrentTenant = true;\n        } else {\n            userTenantId = homeAccountIdParts[1];\n            userFromCurrentTenant = userTenantId === accountInfo?.tenantId;\n        }\n        setAccount(accountInfo);\n        const user: Account = {\n            name: accountInfo?.name,\n            login: accountInfo?.username,\n            fromValidTenant: userFromCurrentTenant\n        };\n        \n        if (\n            accountInfo != null &&\n            accountInfo.idTokenClaims != null &&\n            accountInfo.idTokenClaims.groups != null &&\n            accountInfo.idTokenClaims[\"groups\"] != null\n        ) {\n\n            // OK, so the user are memeber of a group that are assigned to the APP in AAD\n            // let's check if the user is a member of the beta group\n            const groups = accountInfo.idTokenClaims[\"groups\"] as string[];\n\n            if (groups.includes(ADMIN_GROUP_ID)) {\n                user.aadAccess = true;\n            }\n        }\n\n        setUser(user);\n\n        // Only set the access token if the user is from the valid tenant, this \n        // is to prevent unnecessary calls to the API.\n        if (user?.aadAccess) {\n            setToken(accessToken);\n        }\n    };\n\n    // anropa denna metoden - \n    const getApiToken = async (): Promise<string> => {\n        await refreshTokensAndUserInfo();\n        return token;\n    };\n\n    const logOut = async () => {\n        msalInstance.logoutRedirect({ account: account });\n    };\n\n    return (\n        <AuthContext.Provider value={{ user, logOut, getApiToken, refreshTokensAndUserInfo }}>\n            {props.children}\n        </AuthContext.Provider>\n    );\n}","import React, { useState } from 'react';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faAngleRight, faBars, faLink, faTimes } from '@fortawesome/free-solid-svg-icons';\n\nimport './ThemeTopNavigation.scss';\nimport { Hidden, Drawer, List, ListItem, Button } from '@material-ui/core';\nimport { clearEventsPageFilters, setEventsPageScrollPosition } from '../../store/Events/Actions';\nimport { useDispatch } from 'react-redux';\nimport { menuMapItems, urlArray } from './VisitUrls';\nimport { GetImageLogo } from '../../utils/helpers/ImageHelper';\nimport { useAuth } from '../../services/auth-context';\n\nexport interface ITopNavigationProps {\n  getLangString: (value: string) => string;\n}\n\nexport const TopNavigation = (props: ITopNavigationProps): JSX.Element => {\n  const [showDrawer, setShowDrawer] = useState(false);\n  const dispatch = useDispatch();\n  const location = useLocation();\n\n  const { user, logOut } = useAuth();\n\n  const toggleDrawer = (open: boolean) => {\n    setShowDrawer(open);\n  };\n\n  const onEventsPageClick = () => {\n    if (location.pathname !== '/events') {\n      dispatch(setEventsPageScrollPosition(0));\n      dispatch(clearEventsPageFilters());\n    }\n  };\n\n  const isHomePage = location.pathname === '/';\n\n  const mainListItems = () => {\n    return (\n      <List className=\"drawer-list\">\n        <ListItem className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n          <NavLink\n            to=\"/\"\n            exact\n            className=\"drawer-link dark livemap\"\n            activeClassName=\"active\"\n            onClick={() => onEventsPageClick()}\n          >\n            <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n            {props.getLangString('topNavigation.liveMap')}\n          </NavLink>\n        </ListItem>\n        <ListItem className=\"drawer-list-item\" onClick={() => toggleDrawer(false)}>\n          <NavLink\n            to=\"/events\"\n            className=\"drawer-link dark\"\n            activeClassName=\"active\"\n            onClick={() => onEventsPageClick()}\n          >\n            <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n            {props.getLangString('topNavigation.whatHappensInRonneby')}\n          </NavLink>\n        </ListItem>\n\n        <ListItem className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n          <NavLink to=\"/about\" className=\"drawer-link dark\" activeClassName=\"active\">\n            <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n\n            {props.getLangString('topNavigation.aboutRonneby')}\n          </NavLink>\n        </ListItem>\n\n        {urlArray.map(({ url, name }, id) => (\n          <ListItem key={id} className=\"drawer-list-item \" onClick={() => toggleDrawer(false)}>\n            <a href={url} className=\"drawer-link dark\" target=\"_blank\" rel=\"noreferrer\">\n              <FontAwesomeIcon icon={faLink} className=\"drawer-item-icon\" />\n              {name}\n            </a>\n          </ListItem>\n        ))}\n      </List>\n    );\n  };\n\n  const subMainListItems = () => {\n    return (\n      <List className=\"drawer-list\">\n        {menuMapItems.map(({ url, title, active }, id) => (\n          <ListItem key={id} className=\"drawer-list-item has-border\" onClick={() => toggleDrawer(false)}>\n            {active && (\n              <a href={url} className={`drawer-link light`} target=\"_blank\" rel=\"noreferrer\">\n                <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n                {title}\n              </a>\n            )}\n            {!active && (\n              <a className={`drawer-link-disable`} aria-disabled=\"true\">\n                <FontAwesomeIcon icon={faAngleRight} className=\"drawer-item-icon\" />\n                {title}\n              </a>\n            )}\n          </ListItem>\n        ))}\n      </List>\n    );\n  };\n  return (\n    <React.Fragment>\n      <Hidden mdUp>\n        <div className=\"nav\">\n          <div onClick={() => toggleDrawer(true)} className=\"drawer-toggle-div\">\n            <FontAwesomeIcon icon={faBars} className=\"drawer-toggle-icon\" />\n          </div>\n          <Drawer\n            anchor=\"left\"\n            open={showDrawer}\n            onClick={() => setShowDrawer(false)}\n            PaperProps={{\n              sx: {\n                minWidth: '300px',\n              },\n            }}\n          >\n            <div onClick={() => toggleDrawer(false)} className=\"drawer-menu-close-cross\">\n              <FontAwesomeIcon icon={faTimes} />\n            </div>\n            <div className=\"nav-logo-container \">\n              <NavLink to=\"/\" exact id=\"nav-logo\">\n                <GetImageLogo />\n              </NavLink>\n            </div>\n\n            <div className=\"drawer-menu\">\n              {mainListItems()}\n              <div className=\"drawer-menu-header\">\n                <div className=\"drawer-menu-header-title\">{props.getLangString('menu.title')}</div>\n              </div>\n              {subMainListItems()}\n            </div>\n          </Drawer>\n        </div>\n        {user &&\n          <div className=\"logout-button-container\">\n            <Button className=\"logout-button\" onClick={() => logOut()}>{props.getLangString('admin.logOut')}</Button>\n          </div>\n        }\n        {isHomePage && (\n          <div className=\"logo-container\">\n            <GetImageLogo />\n          </div>\n        )}\n      </Hidden>\n\n      <Hidden mdDown>\n        <div className=\"nav\">\n          <div className=\"nav-item\">\n            <NavLink to=\"/\" exact id=\"nav-logo\">\n              <GetImageLogo />\n            </NavLink>\n          </div>\n\n          <div className=\"nav-item\">\n            {user &&\n              <div className=\"logout-button-container\">\n                <Button className=\"logout-button large\" onClick={() => logOut()}>{props.getLangString('admin.logOut')}</Button>\n              </div>\n            }\n            <div onClick={() => toggleDrawer(!showDrawer)} className=\"drawer-toggle-div\">\n              <FontAwesomeIcon icon={faBars} className=\"drawer-toggle-icon \" />\n            </div>\n          </div>\n          <Drawer\n            className=\"rightdrawer\"\n            anchor=\"right\"\n            open={showDrawer}\n            onClick={() => setShowDrawer(!showDrawer)}\n            PaperProps={{\n              sx: {\n                height: '300px',\n                minWidth: '350px',\n                margin: '100px 0px 0px 0px',\n                borderRadius: '0px 0px 0px 12px',\n                overflow: 'hidden',\n              },\n            }}\n          >\n            <div className=\"drawer-menu\">\n              {mainListItems()}\n              <div className=\"drawer-menu-header\">\n                <div className=\"drawer-menu-header-title\">{props.getLangString('menu.title')}</div>\n              </div>\n              {subMainListItems()}\n            </div>\n          </Drawer>\n        </div>\n      </Hidden>\n    </React.Fragment>\n  );\n};\n","import React from 'react'\nimport { Grid, Container, Button } from '@material-ui/core';\nimport './ThemeNotFound.scss';\n\nexport interface INotFoundProps {\n    getLangString: (value: string) => string;\n}\n\nexport const NotFound = (props: INotFoundProps) : JSX.Element => {\n    return (\n        <Container role=\"main\">\n            <div className=\"not-found-wrapper\" role=\"article\">\n                <Grid container direction=\"row\">\n                    <Grid item xs={12}>\n                        <h1>{props.getLangString('errorHandling.cantFindPage')}</h1>\n\n                        <Button href=\"/\" className=\"back-button\">\n                            <span> {props.getLangString('errorHandling.backToStartPage')} </span>\n                        </Button >\n                    </Grid>\n                </Grid>\n            </div>\n        </Container>\n    );\n};","import { Document } from '@prismicio/client/types/documents';\n\n\n\nexport const LinkResolver = (doc: Document): string => {\n    // Define the url depending on the document type\n    if (doc.type === 'page') {\n        return '/page/' + doc.uid;\n    } else if (doc.type === 'blog_post') {\n        return '/blog/' + doc.uid;\n    }\n\n    // Default to homepage\n    return '/';\n}","import React from 'react';\nimport { Grid, Container } from '@material-ui/core';\nimport Prismic from '@prismicio/client'\nimport { RichText } from 'prismic-reactjs'\nimport { Document } from '@prismicio/client/types/documents';\nimport { LinkResolver } from '../utils/prismic/LinkResolver';\nimport { PRISMIC_URL, PRISMIC_TOKEN } from '../Constants';\n\nexport const InternetExplorer = (): JSX.Element => {\n    const client = Prismic.client(PRISMIC_URL, { accessToken: PRISMIC_TOKEN })\n    const [doc, setDocData] = React.useState<Document | undefined>()\n\n    React.useEffect(() => {\n        const fetchData = async () => {\n            const doc = await client.getSingle('notsuported', {});\n            setDocData(doc);\n        }\n        fetchData()\n    }, []);\n\n    return (\n        <React.Fragment>\n            { doc &&\n\n                <Container role=\"main\">\n                    <div className=\"not-found-wrapper\" role=\"article\">\n                        <Grid container direction=\"row\">\n                            <Grid item xs={12}>\n                                <h1>{RichText.asText(doc.data.title)}</h1>\n\n                                <RichText render={doc.data.body} linkResolver={LinkResolver} />\n                            </Grid>\n                        </Grid>\n                    </div>\n                </Container>\n            }\n        </React.Fragment>\n    );\n}","import { MapTypeStyle, MapOptions } from 'google-map-react'\nimport { THEME_KEY } from '../../../Constants';\n\nconst CustomStyles: MapTypeStyle[] =\n(THEME_KEY.toLowerCase() === (\"olofstrom\").toLowerCase())?\n[\n    {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#444444\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"administrative.locality\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#124d67\"\n            }\n        ]\n    },\n    \n    {\n        \"featureType\": \"landscape\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"hue\": \"#00b8ff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.natural.landcover\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#ffffff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.man_made\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"hue\": \"#000eff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"lightness\": \"0\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#e83184\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#F3BED3\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"weight\": \"1.05\"\n            },\n            {\n                \"color\": \"#1c2b7c\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#FAE2EA\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#1c2b7c\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"transit\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"water\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#B5D1E2\"\n            },\n            {\n                \"visibility\": \"on\"\n            }\n        ]\n    }\n    \n]\n:\n//Default Ronneby\n[\n    {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#444444\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"hue\": \"#00b8ff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"landscape.man_made\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"hue\": \"#000eff\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"poi\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"lightness\": \"0\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [\n            {\n                \"color\": \"#0087cb\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#65bce8\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"weight\": \"1.05\"\n            },\n            {\n                \"color\": \"#1c2b7c\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#acc6d6\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [\n            {\n                \"color\": \"#1f2770\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"transit\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"visibility\": \"off\"\n            }\n        ]\n    },\n    {\n        \"featureType\": \"water\",\n        \"elementType\": \"all\",\n        \"stylers\": [\n            {\n                \"color\": \"#92d0f0\"\n            },\n            {\n                \"visibility\": \"on\"\n            }\n        ]\n    }\n]\n;\n\nconst CustomOption: MapOptions = {\n    styles: CustomStyles,\n    fullscreenControl: false,\n    backgroundColor: '#D5E2E7',\n    zoomControl: false,\n    gestureHandling: 'greedy'\n};\n\nexport default CustomOption;\n","import React from 'react';\nimport './ThemeControl.scss';\nimport { faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@material-ui/core';\n\nexport interface IZoomControlProps {\n    zoomLevel: number;\n    handleZoom: (zoomLevel: number) => void;\n}\n\nexport const ZoomControl = (props: IZoomControlProps): JSX.Element => {\n    return (\n        <div className=\"zoom control\">\n            <Button className=\"plus-control\" onClick={() => props.handleZoom(props.zoomLevel + 1)}>\n                <FontAwesomeIcon icon={faPlus} className=\"control-icon\" />\n            </Button>\n            <hr className=\"solid\" />\n            <Button className=\"minus-control\" onClick={() => props.handleZoom(props.zoomLevel - 1)}>\n                <FontAwesomeIcon icon={faMinus} className=\"control-icon\" />\n            </Button>\n        </div >\n    );\n}\n","import React from 'react';\nimport GoogleMap from 'google-map-react';\nimport './ThemeControl.scss';\nimport { faCrosshairs } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@material-ui/core';\n\nexport interface IPositionControlProps {\n    handleCenter: (position: GoogleMap.Coords) => void;\n}\n\nexport const PositionControl = (props: IPositionControlProps): JSX.Element => {\n    const centerMap = () => {\n        navigator.geolocation.getCurrentPosition((position) => {\n            const coords: GoogleMap.Coords = {\n                lat: position.coords.latitude,\n                lng: position.coords.longitude\n            }\n            props.handleCenter(coords);\n        })\n    }\n\n    return (\n        <div className=\"position control\">\n            <Button className=\"position-control\" onClick={() => centerMap()}>\n                <FontAwesomeIcon icon={faCrosshairs} className=\"control-icon\" />\n            </Button>\n        </div>\n    );\n}\n\n","import { RootState } from \"../RootReducer\";\nimport { IFilter } from \"./Filter\";\n\nexport const Filters = (state: RootState): IFilter[] => state.filters.filterList;\nexport const FiltersLoading = (state: RootState): boolean => state.filters.loading;\nexport const SelectedFilters = (state: RootState): IFilter[] => state.filters.selectedFilters;\nexport const SelectedFilterTitle = (state: RootState): string | undefined => state.filters.selectedFilterTitle;","import { RootState } from \"../RootReducer\";\nimport { ISettingsState } from \"./ActionTypes\";\n\nexport const SettingsLoading = (state: RootState): boolean => state.settings.loading;\nexport const DefaultFilters = (state: RootState): string[] => state.settings.defaultFilters;\nexport const DefaultEventCategories = (state: RootState): string[] => state.settings.defaultEventCategories;\nexport const Settings = (state: RootState): ISettingsState => state.settings;\nexport const MarkerIsLiveHours = (state: RootState): number => state.settings.markerIsLiveHours;\nexport const SettingsErrors = (state: RootState): string | undefined => state.settings.error;\n","export interface IMarker {\n    title: string;\n    id: string;\n    lat?: number;\n    lng?: number;\n    address?: IAddress;\n    description: string;\n    link: string;\n    types: IMarkerType[];\n    subTypes?: IMarkerType[];\n    markerShapes: IMarkerShape[];\n    imageUrl: string;\n    detailsUrl: string;\n    bookingLink?: string;\n    deleted: boolean;\n    published: boolean;\n    source: MarkerSource;\n    dynamicContent?: IDynamicContent;\n    modified: Date;\n    siblings?: IMarkerSibling[];\n    icon?: string;\n}\n\nexport interface IMarkerSibling {\n    title: string;\n    id: string;\n    address?: IAddress;\n    description: string;\n    link: string;\n    types: IMarkerType[];\n    subTypes?: IMarkerType[];\n    markerShapes: IMarkerShape[];\n    imageUrl: string;\n    detailsUrl: string;\n    source: MarkerSource;\n    dynamicContent?: IDynamicContent;\n    bookingLink?: string;\n}\n\nexport interface IInfoBox {\n    title: string;\n    id: string;\n    description: string;\n    imageUrl: string;\n    address?: IAddress;\n    link?: string;\n    detailsUrl: string;\n    bookingLink?: string;\n    dynamicContent?: IDynamicContent;\n    subTypes?: IMarkerType[];\n    source: MarkerSource;\n}\n\nexport interface IMarkerType {\n    title: string;\n    name: string;\n    icon: string;\n    class: string;\n}\n\nexport interface IMarkerShape {\n    type: string;\n    class: string;\n    vertices: IVertices[];\n}\n\nexport interface IVertices {\n    lat: number;\n    lng: number;\n}\n\nexport interface IDynamicContent {\n    numberOfColumns: number;\n    dividerBetweenColumns: boolean;\n    dividerBetweenRows: boolean;\n    properties: IProperty[];\n}\n\nexport interface IProperty {\n    label: string;\n    icon: string;\n    link: string;\n    value: number;\n    class: string;\n}\n\nexport interface IAddress {\n    street: string;\n    zip: string;\n    city: string;\n}\n\nexport interface IPolyline {\n    id: string;\n    color: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    polylines: any[];\n}\n\nexport enum MarkerSource {\n    Naturkartan,\n    Iot,\n    Event,\n    Trafikverket,\n    CityBreak,\n    DataScraping,\n    SvenskaLag,\n    GIS,\n    Hjartstartarregistret,\n    Other\n}\n\nexport type VehicleType = 'fyrskar' | 'karoline' | 'astrid' | 'train' | 'bus';\n\nexport interface IVehicle {\n    name: string;\n    type: VehicleType;\n    image: string;\n    color: string;\n}","import { IMarker, MarkerSource } from '../../store/Markers/Marker';\n\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const MarkerIsLive = (marker: IMarker, markerIsLiveHours: number, shouldHaveDynamicContent: boolean = true): boolean => {\n    const timeLimit = new Date();\n    timeLimit.setHours(timeLimit.getHours() - markerIsLiveHours);\n\n    const modifiedWithinTimeLimit = marker.modified.toString() > timeLimit.toISOString();\n    const hasDynamicContent = marker.dynamicContent !== undefined && marker.dynamicContent !== null && marker.dynamicContent.properties.length > 0;\n    const liveMarkerSource = marker.source === MarkerSource.Iot || marker.source === MarkerSource.Event;\n    const liveMarkerType = marker.subTypes ? marker.subTypes?.some(f => f.title === \"Olycka\") : false;\n    const isHolidayActivities = marker.types?.some(t => t.title === \"Lovaktiviteter\") ? true : false;\n\n    return (((shouldHaveDynamicContent && hasDynamicContent) || !shouldHaveDynamicContent) &&\n        modifiedWithinTimeLimit &&\n        liveMarkerSource && !isHolidayActivities) ||\n        liveMarkerType;\n}","import { faCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { MouseEvent, KeyboardEvent, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { IMarker } from '../../../store/Markers/Marker';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\n\nexport interface IDotProps {\n    getLangString: (value: string) => string;\n    marker: IMarker;\n    onClick: (e?: MouseEvent | KeyboardEvent) => void;\n    active: boolean;\n    color?: string;\n}\n\nexport const Dot = (props: IDotProps): JSX.Element => {\n\n    const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n    const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n    const selectedFilters = useSelector(SelectedFilters);\n    const type = selectedFilters && props.marker && props.marker.types.length > 0 ?\n        props.marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n        !selectedFilters && props.marker && props.marker.types.length > 0 ?\n            props.marker.types[0] :\n            undefined;\n    const color = props.color ?? type?.class ?? '';\n\n    useEffect(() => {\n        setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours, false));\n    }, [props.marker]);\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n        if (e?.key === 'Enter') {\n            props.onClick(e);\n        }\n    }\n\n    return (\n        <React.Fragment>\n            <div className=\"dot-marker\" onKeyDown={handleKeyDown} tabIndex={0}>\n                <div className={'dot-container' + (markerIsLive ? ' live' : '')}>\n                    <div>\n                        <FontAwesomeIcon\n                            icon={faCircle}\n                            className={'circle ' + color + (props.active ? ' active' : '')}\n                            onClick={(event) => props.onClick(event)} aria-label={props.getLangString('filter.dot')}\n                        />\n                    </div>\n                </div>\n            </div>\n        </React.Fragment>\n    );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RootState } from \"../RootReducer\";\nimport { IMarker, IPolyline } from \"./Marker\";\n\nexport const Markers = (state: RootState) : IMarker[] => state.markers.markersList;\nexport const MarkerDialogOpen = (state: RootState) : string | undefined => state.markers.markerWithDialogOpen;\nexport const MarkerIndexDialogOpen = (state: RootState): number | undefined => state.markers.markerIndexWithDialogOpen;\nexport const Polylines = (state: RootState) : IPolyline[] => state.markers.polylines;\nexport const ClickedOnPolyline = (state: RootState): boolean => state.markers.clickedOnPolyline;\nexport const ShowAllLiveMarkers = (state: RootState): boolean => state.markers.showAllLiveMarkers;\n","// eslint-disable-next-line\nexport const isNullEmptyOrUndefined = (valueToValidate: any): boolean => {\n    if (valueToValidate === null) {\n        return true;\n    }\n    if (valueToValidate == null) {\n        return true;\n    }\n    if (valueToValidate === undefined) {\n        return true;\n    }\n    if (valueToValidate === '') {\n        return true;\n    }\n    if (Object.prototype.hasOwnProperty.call(valueToValidate, 'length') && valueToValidate.length === 0) {\n        return true;\n    }\n    if (Object.keys(valueToValidate).length === 0) {\n        return true;\n    }\n    return false;\n};","import React, { KeyboardEvent, MouseEvent, useEffect, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCircle, IconName } from '@fortawesome/free-solid-svg-icons'\nimport { IMarker, IMarkerType } from '../../../store/Markers/Marker';\nimport { useSelector } from 'react-redux';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\n\nexport interface IPinProps {\n    getLangString: (value: string) => string;\n    marker: IMarker,\n    onClick: (e?: MouseEvent | KeyboardEvent) => void;\n    active: boolean;\n}\n\nexport const Pin = (props: IPinProps): JSX.Element => {\n\n    const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n    const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n    const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n    const selectedFilters = useSelector(SelectedFilters);\n\n    const getType = () => {\n        let markerType: IMarkerType | undefined = undefined;\n        const markerHasTypes = props.marker && props.marker.types.length > 0;\n        if (selectedFilters && markerHasTypes)\n        {\n            markerType = props.marker.types.find(t => selectedFilters.find(f => t.title === f.title));\n\n            if (isNullEmptyOrUndefined(markerType) && showAllLiveMarkers)\n            {\n                markerType = props.marker.types[0];\n            }\n        } else if (!selectedFilters && markerHasTypes)\n        {\n            markerType = props.marker.types[0]\n        }\n        return markerType;\n    }\n\n    const type = getType();\n\n    useEffect(() => {\n        setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours));\n    }, [props.marker]);\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n        if (event?.key === 'Enter') {\n            props.onClick(event);\n        }\n    }\n\n    const markerisAlwaysAvailable = () => {\n        return props?.marker?.description != null && (\n            props?.marker?.description === \"<div><b>Tillgänglighetstider</b></div><div>01 January-31 December</div><div>Alltid tillgänglig</div>\" ||\n            props?.marker?.description === \"<div><b>Tillgänglighetstider</b></div><div>Alltid tillgänglig</div>\");\n    };\n\n    return (\n\n        <React.Fragment>\n            <div\n                tabIndex={0}\n                className={'marker ' + (type?.class ?? '') + (props.active ? ' active' : '') + (markerIsLive ? ' live' : '')}\n                onClick={(event) => props.onClick(event)} onKeyDown={handleKeyDown}>\n                <div className=\"icon-container\">\n                    <div><FontAwesomeIcon icon={['fas', (type?.icon ?? 'list-ul') as IconName]} aria-label={props.getLangString('filter.dot')} /></div>\n                </div>\n                {markerIsLive &&\n                    <div className=\"live-pin\" role=\"complementary\">\n                        <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n                    </div>\n                }\n\n                {markerisAlwaysAvailable() &&\n                    <div className=\"live-pin live\" role=\"complementary\">\n                        <FontAwesomeIcon icon={faCircle} className=\"circle always-available\" />\n                    </div>\n                }\n\n                {props.marker.siblings && props.marker.siblings.length > 0 &&\n                    <div className={`multiple-pins ${props.active ? 'active' : '' + (type?.class ?? '')}`}>\n                        <span className=\"text\">\n                            {props.marker.siblings.length + 1}\n                        </span>\n                    </div>\n                }\n            </div>\n\n        </React.Fragment>\n\n    );\n}","// utils/useDeviceDetect.js\nimport React, { useState } from \"react\";\n\nexport default function useDeviceDetect() : { isMobile: boolean } {\n    const [isMobile, setMobile] = useState(false);\n\n    React.useEffect(() => {\n\n        const mobile = window.innerWidth <= 991;\n        setMobile(mobile);\n\n    }, []);\n\n    return { isMobile };\n}","import React from 'react';\nimport './ThemeLive.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCircle } from '@fortawesome/free-solid-svg-icons'\n\nexport interface ILiveProps {\n    getLangString: (value: string) => string;\n}\n\nexport const Live = (props: ILiveProps): JSX.Element => {\n    return (\n        <div className=\"live live-logo\" role=\"complementary\" aria-label={props.getLangString('global.live')}>\n            {props.getLangString('global.live')} <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n        </div>\n    )\n}","import React, { useEffect, useState } from 'react';\nimport ReactGA from 'react-ga4';\nimport { EmailShareButton, FacebookIcon, FacebookShareButton, WhatsappIcon, WhatsappShareButton } from 'react-share';\nimport { faEnvelope, faLink, faShare } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Grid, Link } from '@material-ui/core';\nimport './ThemeShare.scss';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\n\ninterface IShareProps {\n    getLangString: (value: string) => string;\n    title: string;\n    onInfoBox?: boolean;\n    showIcon?: boolean;\n    className?: string;\n}\n\nexport const Share = (props: IShareProps): JSX.Element => {\n    const pageTitle = props.getLangString('global.pageTitle');\n    const { isMobile } = useDeviceDetect();\n    const [menuOpen, setMenuOpen] = useState((props.onInfoBox || isMobile) ? false : true); \n    const title = props.title + ' | '+ pageTitle;\n    const text = `Tips! Klicka på länken för att läsa mer om ${props.title} på ${pageTitle}:`\n    const url = window.location.href;\n\n    useEffect(() => {\n        setMenuOpen((props.onInfoBox || isMobile) ? false : true);\n    }, [isMobile]);\n\n    const handleClick = async (event: React.MouseEvent<HTMLDivElement | HTMLButtonElement| MouseEvent>) => {\n        preventDefault(event);\n        if (isMobile) {\n            if (navigator.share) {\n                try {\n                    await navigator.share({ title: title, url: url, text: text });\n                    ReactGA.event({ category: 'Share', action: `Shared page on mobile, ${props.title}` });\n                } catch (error) {\n                    console.log('Error sharing', error);\n                }\n            }\n        } else {\n            setMenuOpen(!menuOpen);\n        }\n    }\n\n    const handleMenuClick = (socialMedia: string, event?: React.MouseEvent<HTMLDivElement|HTMLButtonElement|MouseEvent>) => {\n        if (event) preventDefault(event);\n        ReactGA.event({ category: 'Share', action: `Shared page with ${socialMedia}, ${props.title}` });\n    }\n\n    const preventDefault = (event: React.MouseEvent<HTMLDivElement|HTMLButtonElement|MouseEvent>) => {\n        event?.stopPropagation();\n        event?.preventDefault();\n    }\n\n    return (\n        <div className={`share`}>\n            {(props.onInfoBox || isMobile) &&\n                <div className={`${props.className}`} onClick={(event: React.MouseEvent<HTMLDivElement|MouseEvent>) => handleClick(event)}>\n                    <Link>\n                        {props.getLangString('global.share')}\n                        {props.showIcon &&\n                            <FontAwesomeIcon icon={faShare} className={'icon'} />\n                        }\n                    </Link>\n                </div>\n            }\n            {menuOpen &&\n                <div className={`share-menu ${props.onInfoBox ? 'infoBox' : ''} ${props.className}`}>\n                    <Grid container spacing={props.onInfoBox ? 1 : 0}>\n                        <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'Facebook'}>\n                            <FacebookShareButton url={url} quote={text} onClick={(event:  React.MouseEvent<HTMLButtonElement|MouseEvent>) => handleMenuClick('Facebook', event)}>\n                                <FacebookIcon round size={25} />\n                            </FacebookShareButton>\n                        </Grid>\n                        <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'WhatsApp'}>\n                            <WhatsappShareButton url={url} title={text} onClick={(event: React.MouseEvent<HTMLButtonElement|MouseEvent>) => handleMenuClick('WhatsApp', event)}>\n                                <WhatsappIcon round size={25} />\n                            </WhatsappShareButton>\n                        </Grid>\n                        <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'E-post'} onClick={(event: React.MouseEvent<HTMLDivElement|MouseEvent>) => handleMenuClick('Email', event)}>\n                            <EmailShareButton url={url} subject={title} body={text} separator={'\\n'} beforeOnClick={() => handleMenuClick('Email')}>\n                                <FontAwesomeIcon icon={faEnvelope} className='menu-icon' size='lg' />\n                            </EmailShareButton>\n                        </Grid>\n                        <Grid item xs={props.onInfoBox ? 3 : 1} className=\"button-social\" title={'Kopiera'}>\n                            <Button onClick={(event: React.MouseEvent<HTMLButtonElement|MouseEvent>) => { navigator.clipboard.writeText(url); handleMenuClick('Copy link', event) }}>\n                                <FontAwesomeIcon icon={faLink} className=\"menu-icon\" size=\"lg\" />\n                            </Button>\n                        </Grid>\n                    </Grid >\n                </div>\n            }\n        </div>\n    );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IMarker, IPolyline } from \"./Marker\";\n\nexport const GET_MARKERS_BEGIN = 'GET_MARKERS_BEGIN';\nexport const GET_MARKERS_SUCCESS = 'GET_MARKERS_SUCCESS';\nexport const GET_MARKERS_FAILURE = 'GET_MARKERS_FAILURE';\nexport const SIGNALR_CONNECTING = 'SIGNALR_CONNECTING';\nexport const SIGNALR_DISCONNECTED = 'SIGNALR_DISCONNECTED';\nexport const SIGNALR_CONNECTED = 'SIGNALR_CONNECTED';\nexport const SIGNALR_FAILURE = 'SIGNALR_FAILURE';\nexport const SIGNALR_MARKER_UPDATED = 'SIGNALR_MARKER_UPDATED';\nexport const UPDATE_POLYLINES = 'UPDATE_POLYLINES';\nexport const UPDATE_POLYLINES_FAILURE = 'UPDATE_POLYLINES_FAILURE';\nexport const CLEAN_POLYLINES = 'CLEAN_POLYLINES';\nexport const CLICKED_ON_POLYLINE = 'CLICKED_ON_POLYLINE';\nexport const SET_MARKER_DIALOG_OPEN = 'SET_MARKER_DIALOG_OPEN';\nexport const SET_MARKER_INDEX_DIALOG_OPEN = 'SET_MARKER_INDEX_DIALOG_OPEN';\nexport const SET_SHOW_ALL_LIVE_MARKERS = 'SET_SHOW_ALL_LIVE_MARKERS';\n\nexport interface IMarkerState {\n    markersList: IMarker[],\n    polylines: IPolyline[],\n    loading: boolean,\n    connected: boolean,\n    clickedOnPolyline: boolean,\n    markerWithDialogOpen?: string,\n    markerIndexWithDialogOpen?: number,\n    showAllLiveMarkers: boolean,\n    error?: string\n}\n\ninterface GetMarkersBeginAction {\n    type: typeof GET_MARKERS_BEGIN\n}\n\ninterface GetMarkersSuccessAction {\n    type: typeof GET_MARKERS_SUCCESS,\n    payload: IMarker[]\n}\n\ninterface GetMarkersFailure {\n    type: typeof GET_MARKERS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface SignalRConnecting {\n    type: typeof SIGNALR_CONNECTING\n}\n\ninterface SignalRConnected {\n    type: typeof SIGNALR_CONNECTED\n}\n\ninterface SignalRDisconnected {\n    type: typeof SIGNALR_DISCONNECTED\n}\n\ninterface SignalRFailure {\n    type: typeof SIGNALR_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface SignalRMarkerUpdated {\n    type: typeof SIGNALR_MARKER_UPDATED,\n    payload: IMarker[]\n}\n\ninterface UpdatePolylines {\n    type: typeof UPDATE_POLYLINES,\n    payload: any\n}\n\ninterface UpdatePolylinesFailure {\n    type: typeof UPDATE_POLYLINES_FAILURE,\n    payload: any\n}\n\ninterface CleanPolylines {\n    type: typeof CLEAN_POLYLINES,\n    payload: IPolyline\n}\n\ninterface ClickedOnPolyline {\n    type: typeof CLICKED_ON_POLYLINE,\n    payload: boolean\n}\n\ninterface SetMarkerDialogOpen {\n    type: typeof SET_MARKER_DIALOG_OPEN,\n    payload: string\n}\n\ninterface SetMarkerIndexDialogOpen {\n    type: typeof SET_MARKER_INDEX_DIALOG_OPEN,\n    payload: number\n}\n\ninterface setShowAllLiveMarkers {\n    type: typeof SET_SHOW_ALL_LIVE_MARKERS,\n    payload: boolean\n}\n\nexport type MarkerActionTypes = GetMarkersBeginAction |\n    GetMarkersSuccessAction |\n    GetMarkersFailure |\n    SignalRConnected |\n    SignalRConnecting |\n    SignalRDisconnected |\n    SignalRFailure |\n    SignalRMarkerUpdated |\n    UpdatePolylines |\n    UpdatePolylinesFailure |\n    CleanPolylines |\n    ClickedOnPolyline |\n    SetMarkerDialogOpen |\n    SetMarkerIndexDialogOpen |\n    setShowAllLiveMarkers;","import { IError } from './Error';\n\nexport const SET_ERROR = 'SET_ERROR';\nexport const SET_ERROR_FAILURE = 'SET_ERROR_FAILURE';\nexport const CLEAR_ERROR = 'CLEAR_ERROR';\nexport const CLEAR_ERROR_FAILURE = 'CLEAR_ERROR_FAILURE';\n\nexport interface IAppState {\n    errorSummary: IErrorSummary;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    error?: any;\n}\n\nexport interface IErrorSummary {\n    isError: boolean;\n    errorMessage: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    errors: any[];\n}\n\ninterface SetError {\n    type: typeof SET_ERROR,\n    payload: IError;\n}\n\ninterface SetErrorFailure {\n    type: typeof SET_ERROR_FAILURE,\n    payload: string\n}\n\ninterface ClearError {\n    type: typeof CLEAR_ERROR,\n}\n\ninterface ClearErrorFailure {\n    type: typeof CLEAR_ERROR_FAILURE,\n    payload: string\n}\n\nexport type AppStateActionTypes = SetError | SetErrorFailure | ClearError | ClearErrorFailure;","import axios from 'axios';\nimport { API_ROOT, FUNCTIONS_ROOT } from '../../Constants';\nimport * as MarkerActions from './ActionTypes';\nimport * as AppStateActions from '../AppState/ActionTypes';\nimport { ThunkAction } from 'redux-thunk'\nimport { Action } from 'redux';\nimport { RootState } from '../RootReducer';\nimport { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';\nimport { IPolyline } from './Marker';\nimport { isNullEmptyOrUndefined } from '../../utils/helpers/ObjectHelper';\n\nexport const getMarkers = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ type: AppStateActions.CLEAR_ERROR });\n        dispatch({ type: MarkerActions.GET_MARKERS_BEGIN });\n\n        const result = await axios.get(`${API_ROOT}/marker`);\n        dispatch({\n            type: MarkerActions.GET_MARKERS_SUCCESS,\n            payload: result.data\n        });\n    } catch (error: any) {\n        console.error(error);\n        dispatch({ type: MarkerActions.GET_MARKERS_FAILURE, payload: error });\n        if (error.message === \"Network Error\") {\n            dispatch({ type: AppStateActions.SET_ERROR, payload: { errorMessage: 'Network Error', error: error } });\n        } else {\n            dispatch({ type: AppStateActions.SET_ERROR, payload: { errorMessage: 'Get markers failure', error: error } });\n        }\n    }\n}\n\nexport const getUpdatesForMarkers = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    const connection = new HubConnectionBuilder()\n        .withUrl(FUNCTIONS_ROOT)\n        .withAutomaticReconnect()\n        .configureLogging(LogLevel.Information)\n        .build();\n\n    const newMessage = (message: string) => {\n        const markers = JSON.parse(message);\n        console.log('GOT NEW MESSASGE!!!', markers);\n\n        dispatch({ type: MarkerActions.SIGNALR_MARKER_UPDATED, payload: markers });\n    }\n\n    // Events for the SignalR Connection\n    connection.on('updatedMarker', newMessage);\n    connection.onclose(() => console.log('disconnected'));\n    connection.onreconnecting(() => {\n        console.log('Reconnected to the hub, need to fetch all the markers from server to get changes from the unconnected period')\n        dispatch(getMarkers());\n        dispatch({ type: MarkerActions.SIGNALR_CONNECTING });\n    })\n    connection.onreconnected(() => {\n        dispatch({ type: MarkerActions.SIGNALR_CONNECTED });\n    });\n\n    console.log('connecting...');\n    dispatch({ type: MarkerActions.SIGNALR_CONNECTING });\n\n    connection.start()\n        .then(() => {\n            console.log(\"connected..\");\n            dispatch({ type: MarkerActions.SIGNALR_CONNECTED });\n        })\n        .catch((error) => {\n            console.error(error);\n            dispatch({ type: MarkerActions.SIGNALR_FAILURE, payload: error });\n        });\n}\n\nexport const setMarkerDialogAsOpen = (id: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    dispatch({ type: MarkerActions.SET_MARKER_DIALOG_OPEN, payload: id });\n}\n\nexport const setMarkerIndexDialogAsOpen = (index: number): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    dispatch({ type: MarkerActions.SET_MARKER_INDEX_DIALOG_OPEN, payload: index });\n}\n\nexport const setShowAllLiveMarkers = (showAllLiveMarkers: boolean): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    dispatch({ type: MarkerActions.SET_SHOW_ALL_LIVE_MARKERS, payload: showAllLiveMarkers });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const updatePolylines= (polyline: IPolyline[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: MarkerActions.UPDATE_POLYLINES,\n            payload: polyline\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: MarkerActions.UPDATE_POLYLINES_FAILURE, payload: error })\n    }\n}\n\nexport const cleanPolylines = (polylines: IPolyline[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        polylines.forEach((polyline: IPolyline) => {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            polyline.polylines.forEach((poly: any) => {\n                if (!isNullEmptyOrUndefined(poly)) {\n                    poly.setMap(null);\n                }\n            })\n        })\n       \n        dispatch({\n            type: MarkerActions.CLEAN_POLYLINES,\n        });\n\n    } catch (error) {\n        console.error(error);\n    }\n}\n\nexport const setClickedOnPolyline = (clickedOnPolyline: boolean): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    dispatch({ type: MarkerActions.CLICKED_ON_POLYLINE, payload: clickedOnPolyline });\n}\n\n\n\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\"\nimport { useTranslation } from 'react-i18next';\nimport { GetDefaultMapImage } from \"../../../utils/helpers/ImageHelper\";\n\ninterface ISEOProps {\n    title?: string;\n    description?: string;\n    imageUrl?: string;\n}\n\nexport const SEO = (props: ISEOProps): JSX.Element => {\n    const { t } = useTranslation('common');\n    const pageTilge =  t('global.pageTitle');\n    const pageDescription = t('global.pageDescription');\n    const title = props.title ?? pageTilge;\n    const description = props.description ?? pageDescription;\n    const imageUrl = props.imageUrl ?? GetDefaultMapImage();\n    return (\n        <Helmet>\n            <meta name=\"title\" content={title} />\n            <meta name=\"description\" content={description} />\n            <meta name=\"image\" content={imageUrl} />\n\n            {/* Open Graph - Facebook */}\n            <meta property=\"og:type\" content=\"website\" />\n            <meta property=\"og:url\" content=\"\" />\n            <meta property=\"og:title\" content={title} />\n            <meta property=\"og:description\" content={description} />\n            <meta property=\"og:image\" content={imageUrl} />\n\n            {/* Twitter */}\n            <meta property=\"twitter:card\" content=\"summary_large_image\" />\n            <meta property=\"twitter:url\" content=\"\" />\n            <meta property=\"twitter:title\" content={title} />\n            <meta property=\"twitter:description\" content={description} />\n            <meta property=\"twitter:image\" content={imageUrl} />\n        </Helmet>\n    )\n}\n\n","import React, { useEffect, useState, MouseEvent, KeyboardEvent, useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Link, useHistory } from 'react-router-dom';\nimport { IInfoBox, IMarker, IProperty, MarkerSource } from '../../../store/Markers/Marker';\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n  faArrowLeft,\n  faArrowRight,\n  faExternalLinkAlt,\n  fas,\n  IconName,\n} from '@fortawesome/free-solid-svg-icons';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\nimport { Live } from '../../common/live/Live';\nimport { Button, Grid } from '@material-ui/core';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { Share } from '../../common/share/Share';\nimport { setMarkerIndexDialogAsOpen } from '../../../store/Markers/Actions';\nimport { MarkerIndexDialogOpen } from '../../../store/Markers/Selector';\nimport { SEO } from '../../common/seo/SEO';\nimport { THEME_KEY } from '../../../Constants';\n\n// Add all icons to the library so you can use it in your page\n\nexport interface IInfoBoxProps {\n  getLangString: (value: string) => string;\n  marker: IMarker;\n  setShowInfoBox: (value: boolean) => void;\n  markerType?: string;\n}\n\nexport const InfoBox = (props: IInfoBoxProps): JSX.Element => {\n  const indexOpen = useSelector(MarkerIndexDialogOpen);\n  const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n  const { isMobile } = useDeviceDetect();\n  const [index, setIndex] = useState(indexOpen ?? 0);\n  const [infoBoxInfo, setInfoBoxInfo] = useState<IInfoBox>();\n  const [markerIsLive, setMarkerIsLive] = useState(false);\n  const infoBoxRef = useRef<HTMLDivElement>(null);\n  const history = useHistory();\n  const dispatch = useDispatch();\n\n  // Need to add all the icons to be able to load them dynamicly below.\n  library.add(fas);\n\n  const handleClick = (event: MouseEvent | KeyboardEvent | undefined) => {\n    event?.stopPropagation();\n  };\n\n  useEffect(() => {\n    const handleScroll = (event: any) => {\n      event.stopPropagation();\n    };\n\n    const infoBox = infoBoxRef.current;\n    if (infoBox) {\n      infoBox?.addEventListener('wheel', handleScroll);\n    }\n\n    return () => {\n      if (infoBox) {\n        infoBox?.removeEventListener('wheel', handleScroll);\n      }\n    };\n  }, []);\n\n  useEffect(() => {\n    if (indexOpen && indexOpen > 0 && props.marker.siblings && props.marker.siblings?.length >= indexOpen) {\n      setSiblingAsInfoBox(indexOpen);\n    } else {\n      handleInfoBox();\n    }\n    setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours));\n  }, [props.marker]);\n\n  useEffect(() => {\n    if (\n      indexOpen &&\n      indexOpen > 0 &&\n      props.marker.siblings &&\n      props.marker.siblings?.length >= indexOpen &&\n      props.marker.siblings[indexOpen - 1].id !== infoBoxInfo?.id\n    ) {\n      setSiblingAsInfoBox(indexOpen);\n    }\n  }, [indexOpen]);\n\n  const handleInfoBox = () => {\n    setInfoBoxInfo({\n      title: props.marker.title,\n      id: props.marker.id,\n      description: props.marker.description,\n      address: props.marker.address,\n      imageUrl: props.marker.imageUrl,\n      link: props.marker.link,\n      detailsUrl: props.marker.detailsUrl,\n      bookingLink: props.marker.bookingLink,\n      dynamicContent: props.marker.dynamicContent,\n      subTypes: props.marker.subTypes,\n      source: props.marker.source,\n    });\n  };\n\n  const setSiblingAsInfoBox = (nextIndex: number) => {\n    const siblingIndex = nextIndex - 1;\n    if (props.marker.siblings && props.marker.siblings?.length >= siblingIndex) {\n      setInfoBoxInfo({\n        title: props.marker.siblings[siblingIndex].title,\n        id: props.marker.siblings[siblingIndex].id,\n        description: props.marker.siblings[siblingIndex].description,\n        imageUrl: props.marker.siblings[siblingIndex].imageUrl,\n        link: props.marker.siblings[siblingIndex].link,\n        detailsUrl: props.marker.siblings[siblingIndex].detailsUrl,\n        address: props.marker.siblings[siblingIndex].address,\n        dynamicContent: props.marker.siblings[siblingIndex].dynamicContent,\n        bookingLink: props.marker.siblings[siblingIndex].bookingLink,\n        source: props.marker.siblings[siblingIndex].source,\n        subTypes: props.marker.siblings[siblingIndex].subTypes\n      });\n    }\n  };\n\n  const handleChangeInfoBoxInformation = (isNext: boolean) => {\n    if (props.marker.siblings && props.marker.siblings.length > 0) {\n      const nextIndex = isNext ? index + 1 : index - 1;\n      if (nextIndex <= props.marker.siblings.length && nextIndex >= 0) {\n        if (nextIndex === 0) {\n          handleInfoBox();\n        } else {\n          setSiblingAsInfoBox(nextIndex);\n        }\n        props.setShowInfoBox(true);\n        setIndex(nextIndex);\n\n        const params = new URLSearchParams(history.location.search);\n        params.set('index', nextIndex.toString());\n        history.push({ search: params.toString() });\n        dispatch(setMarkerIndexDialogAsOpen(nextIndex));\n      }\n    }\n  };\n\n  const getMarkerSourceLabel = (source: MarkerSource): string => {\n    switch (source) {\n      case MarkerSource.Naturkartan:\n        return 'Naturkartan';\n      case MarkerSource.Iot:      \n      case MarkerSource.GIS:\n        return 'Ronneby Kommun';\n      case MarkerSource.Event:\n      case MarkerSource.CityBreak:\n        if (THEME_KEY === 'olofstrom') {\n          return 'Visit Olofström';\n        } else {\n          return 'Visit Ronneby';\n        }\n      case MarkerSource.Trafikverket:\n        return 'Trafikverket';\n      case MarkerSource.DataScraping:\n        return 'Centrumbiografen';\n      case MarkerSource.SvenskaLag:\n        return 'Svenska Lag';\n      case MarkerSource.Hjartstartarregistret:\n        return 'Hjärtstartarregistret';\n      default:\n        return '';\n    }\n  };\n\n  return (\n    <div\n      tabIndex={0}\n      className={`info-box-container ${isMobile ? 'bottom' : 'right'} ${props.markerType ? props.markerType : ''} `}\n      onClick={event => handleClick(event)}\n    >\n      <div className='info-box'> \n        {infoBoxInfo && (\n          <SEO\n          title={`${infoBoxInfo?.title} | ${props.getLangString('global.pageTitle')}`}\n          description={infoBoxInfo?.description}\n          imageUrl={infoBoxInfo?.imageUrl}\n          />\n        )}\n\n        {markerIsLive && <Live getLangString={props.getLangString} />}\n\n        <div id=\"scroll-container\" ref={infoBoxRef}>\n          <div className=\"scroll-box\">\n            {infoBoxInfo && infoBoxInfo.imageUrl != null && (\n              <div className=\"image-container\">\n                <img src={infoBoxInfo.imageUrl} alt={infoBoxInfo.title} className=\"image\" />\n              </div>\n            )}\n\n            {infoBoxInfo && infoBoxInfo.title && <div className=\"title\" lang=\"sv\">{infoBoxInfo.title}</div>}\n            {infoBoxInfo && infoBoxInfo.subTypes && infoBoxInfo.subTypes.length > 0 && (\n              <React.Fragment>\n                {infoBoxInfo.subTypes.map((subtype, index) => (\n                  <React.Fragment key={index}>\n                    <div className=\"subTypes\">{subtype.title}</div>\n                  </React.Fragment>\n                ))}\n              </React.Fragment>\n            )}\n            {infoBoxInfo && infoBoxInfo.address && (\n              <div className=\"address\">\n                {infoBoxInfo.address.street}\n                {infoBoxInfo.address.street && (infoBoxInfo.address.zip || infoBoxInfo.address.city) ? (\n                  <span>,</span>\n                ) : (\n                  ''\n                )}{' '}\n                {infoBoxInfo.address.zip} {infoBoxInfo.address.city}\n              </div>\n            )}\n            {infoBoxInfo && infoBoxInfo.description && (\n              <div className={`description`}>\n                {props.marker.source === MarkerSource.Naturkartan ||\n                props.marker.source === MarkerSource.Hjartstartarregistret ||\n                props.marker.source === MarkerSource.Iot ||\n                props.marker.source === MarkerSource.CityBreak ||\n                props.marker.source === MarkerSource.Event ? (\n                  <ReactMarkdown rehypePlugins={[rehypeRaw]}>{infoBoxInfo.description}</ReactMarkdown>\n                ) : (\n                  <React.Fragment>{infoBoxInfo.description}</React.Fragment>\n                )}\n              </div>\n            )}\n          </div>\n        </div>\n        {infoBoxInfo && infoBoxInfo.source in MarkerSource && (\n          <Grid container>\n            <Grid item xs={12}>\n              <div className=\"source\">\n                <span>{props.getLangString('map.infoBox.source') + getMarkerSourceLabel(infoBoxInfo.source)}</span>\n              </div>\n            </Grid>\n          </Grid>\n        )}\n        {infoBoxInfo &&\n          infoBoxInfo.dynamicContent &&\n          ((markerIsLive && props.marker.source === MarkerSource.Iot) || props.marker.source !== MarkerSource.Iot) &&\n          infoBoxInfo.dynamicContent.properties.length > 0 && (\n            <Grid container className=\"icon-container\">\n              {infoBoxInfo.dynamicContent.properties.map((prop: IProperty, index: number) => (\n                <React.Fragment key={index}>\n                  <Grid item xs={1} className=\"icon-col\">\n                    <FontAwesomeIcon\n                      icon={['fas', prop.icon as IconName]}\n                      className={`icon ${prop.class}`}\n                      style={{ transform: `rotate(${prop.value}deg)` }}\n                    />\n                  </Grid>\n                  <Grid item xs={11} className=\"\">\n                    {prop.link != null ? (\n                      <Link className={`icon-label`} to={{ pathname: prop.link }} target=\"_blank\">\n                        {' '}\n                        {prop.label}{' '}\n                      </Link>\n                    ) : (\n                      <div className=\"icon-label\">{prop.label}</div>\n                    )}\n                  </Grid>\n                </React.Fragment>\n              ))}\n            </Grid>\n          )}\n        {infoBoxInfo && infoBoxInfo.bookingLink && (\n          <Grid container>\n            <Grid item xs={12}>\n              <Button href={infoBoxInfo.bookingLink} target=\"_blank\" className=\"booking-link\">\n                <span>{props.getLangString('map.bookTicket')}</span>\n              </Button>\n            </Grid>\n          </Grid>\n        )}\n        <Grid container>\n          <Grid item xs={6}>\n            {infoBoxInfo && infoBoxInfo.detailsUrl && (\n              <div className=\"details-url\">\n                <Link to={{ pathname: infoBoxInfo.detailsUrl }} target=\"_blank\">\n                  {props.getLangString('map.readMore')}\n                </Link>\n                <FontAwesomeIcon icon={faExternalLinkAlt} className=\"icon\" />\n              </div>\n            )}\n            {infoBoxInfo && (!infoBoxInfo.detailsUrl || infoBoxInfo.detailsUrl.length === 0) && infoBoxInfo.link && (\n              <div className=\"details-url\">\n                <Link to={{ pathname: infoBoxInfo.link }} target=\"_blank\">\n                  {props.getLangString('map.link')}\n                </Link>\n                <FontAwesomeIcon icon={faExternalLinkAlt} className=\"icon\" />\n              </div>\n            )}\n          </Grid>\n          <Grid item xs={6} className=\"share-url\">\n            {infoBoxInfo && (\n              <Share title={infoBoxInfo.title} getLangString={props.getLangString} onInfoBox={true} showIcon={true} />\n            )}\n          </Grid>\n        </Grid>\n\n        {props.marker.siblings && props.marker.siblings.length > 0 && (\n          <Grid container className=\"multiple-events\">\n            <Grid item xs={12} className=\"hr-grid-item\">\n              <div className=\"horizontalRow\">\n                <hr></hr>\n              </div>\n            </Grid>\n            <Grid item xs={3}>\n              <Button\n                className=\"button left\"\n                disabled={index <= 0 ? true : false}\n                onClick={() => handleChangeInfoBoxInformation(false)}\n              >\n                <FontAwesomeIcon icon={faArrowLeft} className=\"icon\" size=\"lg\" />\n              </Button>\n            </Grid>\n            <Grid item xs={6} className=\"info-text\">\n              <span>{`${props.getLangString('map.show')} ${index + 1} ${props.getLangString('map.of')} ${\n                props.marker.siblings.length + 1\n              } ${props.getLangString('filter.pins')}`}</span>\n            </Grid>\n            <Grid item xs={3}>\n              <Button\n                className=\"button right\"\n                disabled={index >= props.marker.siblings.length ? true : false}\n                onClick={() => handleChangeInfoBoxInformation(true)}\n              >\n                <FontAwesomeIcon icon={faArrowRight} className=\"icon\" size=\"lg\" />\n              </Button>\n            </Grid>\n          </Grid>\n        )}\n      </div>\n    </div>\n  );\n};\n","export default __webpack_public_path__ + \"static/media/Train.916cc0d0.svg\";","export default __webpack_public_path__ + \"static/media/Astrid.44c487a5.svg\";","import { IVehicle } from \"../store/Markers/Marker\";\nimport trainImage from '../images/Train.svg'\nimport astridImage from '../images/Astrid.svg';\nimport busImage from '../images/Bus.svg';\nimport fyrskarImage from '../images/Fyrskar.svg';\n\nexport const vehicles: IVehicle[] = [\n    {\n        name: 'train',\n        image: trainImage,\n        type: 'train',\n        color: 'red'\n    },\n    {\n        name: 'astrid',\n        image: astridImage,\n        type: 'astrid',\n        color: 'dark-blue'\n    },\n    {\n        name: 'karoline',\n        image: astridImage,\n        type: 'karoline',\n        color: 'dark-blue'\n    },\n    {\n        name: 'bus',\n        image: busImage,\n        type: 'bus',\n        color: 'grey'\n    },\n    {\n        name: 'fyrskar',\n        image: fyrskarImage,\n        type: 'fyrskar',\n        color: 'dark-blue'\n    }\n]","export default __webpack_public_path__ + \"static/media/Bus.77d97fdd.svg\";","export default __webpack_public_path__ + \"static/media/Fyrskar.782d89fd.svg\";","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { setClickedOnPolyline, setMarkerDialogAsOpen, updatePolylines } from \"../../../store/Markers/Actions\";\nimport { IPolyline, IVertices } from \"../../../store/Markers/Marker\";\nimport { Polylines } from \"../../../store/Markers/Selector\";\nimport { isNullEmptyOrUndefined } from \"../../../utils/helpers/ObjectHelper\";\nimport { vehicles } from \"../../../constants/VehicleConstants\";\ninterface IPolylineProps {\n    listOfVertices: IVertices[][];\n    map: any;\n    maps: any;\n    id: string;\n    color: string;\n}\n\nexport const Polyline = (props: IPolylineProps): JSX.Element => {\n    const { listOfVertices, map, maps, id, color } = props;\n    const polylines = useSelector(Polylines);\n    \n    const dispatch = useDispatch();\n    const history = useHistory();\n\n    const handleClickOnPolyline = () => {\n        if (vehicles.some(v => id.includes(v.name))) {\n            const params = new URLSearchParams();\n            dispatch(setClickedOnPolyline(true));\n            dispatch(setMarkerDialogAsOpen(id));\n            params.append('pin', id);\n            history.push({ search: params.toString() })\n\n        } else {\n            dispatch(setClickedOnPolyline(false));\n        }\n    };\n\n    const handleClickOnMap = () => {\n        dispatch(setClickedOnPolyline(false));\n    }\n\n    useEffect(() => {\n        if (map && maps && id && listOfVertices && color && polylines) {\n            if (!polylines.some(polyline => polyline.id === id) && !isNullEmptyOrUndefined(id)) {\n                const newPolyline: IPolyline = {\n                    id: id,\n                    polylines: [],\n                    color: color\n                };\n                listOfVertices.forEach(vertice => {\n                    const geodesicPolyline = addNewPolyline(vertice);\n                    if (!isNullEmptyOrUndefined(geodesicPolyline)) {\n                        newPolyline.polylines.push(geodesicPolyline);\n                    }\n                });\n\n                polylines.push(newPolyline);\n                dispatch(updatePolylines(polylines));\n\n            }\n        }\n    }, [id, listOfVertices]);\n\n    const addNewPolyline = (vertices: IVertices[]): any[] => {\n        let geodesicPolyline = maps.Polyline;\n        if (vertices.length > 0) {\n            const lineSymbol = {\n                path: \"M 0,0 0,1\",\n                strokeOpacity: 1,\n                scale: 3,\n            };\n            geodesicPolyline = new maps.Polyline({\n                key: id,\n                path: vertices,\n                geodesic: true,\n                strokeColor: props.color,\n                strokeOpacity: 0,\n                strokeWeight: 4,\n                icons: [\n                    {\n                        icon: lineSymbol,\n                        offset: \"0\",\n                        repeat: \"10px\",\n                    },\n                ],\n            });\n\n            geodesicPolyline.setMap(map);\n            geodesicPolyline.addListener(\"click\", handleClickOnPolyline);\n            map.addListener(\"click\", handleClickOnMap);\n        }\n\n        return geodesicPolyline;\n    }\n\n    return (\n        <React.Fragment />\n    );\n};\n\n","import React, { useEffect, useState } from \"react\";\nimport { IMarker, IVehicle } from \"../../../../store/Markers/Marker\";\nimport '../ThemeMarker.scss';\nimport { MarkerIsLiveHours } from \"../../../../store/Settings/Selector\";\nimport { useSelector } from \"react-redux\";\nimport { MarkerIsLive } from \"../../../../utils/helpers/MarkerHelper\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { vehicles } from \"../../../../constants/VehicleConstants\";\n\ninterface IVehicleProps {\n    active: boolean;\n    getLangString: (value: string) => string;\n    marker: IMarker;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onClick: (e?: any) => void;\n    typeOfVehicle: string;\n    color: string;\n}\n\n\nexport const Vehicle = (props: IVehicleProps): JSX.Element => {\n\n    const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n    const [markerIsLive, setMarkerIsLive] = useState<boolean>(false);\n    const [vehicle, setVehicle] = useState<IVehicle | null>(null);\n    const [lng, setLng] = useState<number>(0);\n    const [movingEast, setMovingEast] = useState<boolean>(false);\n\n    useEffect(() => {\n        setVehicle(vehicles.find((vehicle) => vehicle.type === props.typeOfVehicle) || null);\n    }, [props.typeOfVehicle]);\n\n    useEffect(() => {\n        setMarkerIsLive(MarkerIsLive(props.marker, markerIsLiveHours, false));\n    }, [props.marker]);\n\n    useEffect(() => {\n        if (props.marker.lng !== lng) {\n            if (props.marker.lng && (props.marker.lng > lng)) {\n                setMovingEast(true);\n            } else if (props.marker.lng && (props.marker.lng < lng)) {\n                setMovingEast(false);\n            }\n\n            setLng(props.marker.lng ?? 0);\n        }\n    }, [props.marker.lng]);\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const handleClickOnVehicle = (e: any) => {\n        if (e?.key === 'Enter') {\n            props.onClick(e);\n        }\n    }\n\n    return (\n        <React.Fragment>\n            <div\n                tabIndex={0}\n                className={'marker vehicle ' + (vehicle?.color ?? '') + (props.active ? ' active' : '') + (markerIsLive ? ' live' : '')}\n                onClick={(event) => props.onClick(event)}\n                onKeyDown={handleClickOnVehicle}\n            >\n                <div className=\"icon-container\">\n                    <img\n                        src={vehicle?.image}\n                        className={`img-vehicle ${movingEast ? '' : 'left'}`}\n                        onClick={(event) => props.onClick(event)}\n                    />\n                </div>\n                {markerIsLive &&\n                    <div className=\"live-pin\" role=\"complementary\">\n                        <FontAwesomeIcon icon={faCircle} className=\"circle\" />\n                    </div>\n                }\n            </div>\n        </React.Fragment>\n    );\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect, useState, MouseEvent, KeyboardEvent } from 'react';\nimport './ThemeMarker.scss';\nimport { Dot } from './Dot';\nimport { Pin } from './Pin';\nimport { IMarker, IMarkerShape, IPolyline, IVertices } from '../../../store/Markers/Marker';\nimport { InfoBox } from './InfoBox';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MarkerDialogOpen, MarkerIndexDialogOpen, Polylines } from '../../../store/Markers/Selector';\nimport { setMarkerDialogAsOpen, setMarkerIndexDialogAsOpen, updatePolylines } from '../../../store/Markers/Actions';\nimport ReactGA from 'react-ga4';\nimport { Hidden } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { Polyline } from './Polyline';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { Vehicle } from './Vehicle/Vehicle';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { vehicles } from '../../../constants/VehicleConstants';\n\nexport interface IMarkerProps {\n  getLangString: (value: string) => string;\n  marker: IMarker;\n  isVehicle: boolean;\n  zoomLevel: number;\n  lat?: number;\n  lng?: number;\n  map: any;\n  maps: any;\n}\n\nexport const Marker = (props: IMarkerProps): JSX.Element => {\n  const [showInfoBox, setShowInfoBox] = useState<boolean>(false);\n  const [polylinePath, setPolylinePath] = useState<IVertices[][]>([]);\n  const [polylineId, setPolylineId] = useState<string>('');\n\n  const dispatch = useDispatch();\n  const markerDialogOpen = useSelector(MarkerDialogOpen);\n  const markerIndexOpen = useSelector(MarkerIndexDialogOpen);\n  const selectedFilters = useSelector(SelectedFilters);\n  const polylines = useSelector(Polylines);\n  const history = useHistory();\n\n  useEffect(() => {\n    if (markerDialogOpen !== props.marker.id) {\n      setShowInfoBox(false);\n    } else {\n      setShowInfoBox(true);\n      handleSiblings(markerIndexOpen ?? 0);\n    }\n  }, [markerDialogOpen, props.marker.id, markerIndexOpen]);\n\n\n  const handlePolylines = (removeVehicles: boolean) => {\n    if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n      const polylinesToClean = removeVehicles ? polylines.filter(poly => vehicles.some(v => poly.id.includes(v.name))) : polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n      if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n        polylinesToClean.forEach((polyline: IPolyline) => {\n          polyline.polylines.forEach((poly: any) => {\n            if (!isNullEmptyOrUndefined(poly)) {\n              poly.setMap(null);\n            }\n          })\n        })\n        const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n        dispatch(updatePolylines(newPolylines));\n      }\n    }\n  };\n\n  useEffect(() => {\n    if (selectedFilters.some(filter => filter.title === 'Turer')) {\n      if (props.marker.icon !== null) {\n        handlePath(props.marker.markerShapes, 0);\n      }\n    } else {\n      handlePolylines(true);\n    }\n  }, [selectedFilters]);\n\n  useEffect(() => {\n    const unlisten = history.listen((location) => {\n      const pinId = new URLSearchParams(location.search).get('pin');\n      if (pinId) {\n        dispatch(setMarkerDialogAsOpen(pinId));\n      } else {\n        dispatch(setMarkerDialogAsOpen('close'));\n      }\n    });\n\n    return () => {\n      unlisten();\n    };\n  }, [history]);\n\n  const handleClickOnMarker = (event: MouseEvent | KeyboardEvent | undefined) => {\n    const params = new URLSearchParams();\n    if (showInfoBox) {\n      handlePolylines(false);\n      dispatch(setMarkerDialogAsOpen('close'));\n      dispatch(setMarkerIndexDialogAsOpen(0));\n    } else {\n      handlePolylines(false);\n      dispatch(setMarkerDialogAsOpen(props.marker.id));\n      dispatch(setMarkerIndexDialogAsOpen(0));\n      params.append('pin', props.marker.id);\n    }\n    history.push({ search: params.toString() });\n    event?.stopPropagation();\n    event?.preventDefault();\n    ReactGA.event({ category: 'Marker', action: `Clicked on marker: ${props.marker.title}` });\n  };\n\n  const handlePath = (markerShapes: IMarkerShape[], siblingIndex: number) => {\n    setPolylinePath([]);\n    const newPolylinePath: IVertices[][] = [];\n    if (!isNullEmptyOrUndefined(markerShapes)) {\n      markerShapes.forEach((markerShape: IMarkerShape) => {\n        if (!isNullEmptyOrUndefined(markerShape.vertices) && markerShape.vertices.length > 0) {\n          newPolylinePath.push(markerShape.vertices);\n        }\n      });\n      setPolylinePath(newPolylinePath);\n      setPolylineId(\n        `${props.marker.types.some(t => t.title === 'Turer') ? props.marker.icon + '-' : ''}${\n          props.marker.id\n        }-${siblingIndex}`\n      );\n    } else {\n      setPolylinePath([]);\n    }\n  };\n\n  const handleSiblings = (markerIndex: number) => {\n    const siblingIndex = markerIndex - 1;\n    handlePolylines(false);\n    if (siblingIndex === -1) {\n      handlePath(props.marker.markerShapes, 0);\n    } else if (\n      props.marker.siblings &&\n      props.marker.siblings?.length > 0 &&\n      props.marker.siblings[siblingIndex].markerShapes &&\n      props.marker.siblings[siblingIndex].markerShapes.length > 0\n    ) {\n      handlePath(props.marker.siblings[siblingIndex].markerShapes, siblingIndex);\n    } else {\n      handlePath([], 0);\n    }\n  };\n\n  const getColorForMarkerShape = () => {\n    const type =\n      selectedFilters && props.marker && props.marker.types.length > 0\n        ? props.marker.types.find(t => selectedFilters.find(f => t.title === f.title))\n        : !selectedFilters && props.marker && props.marker.types.length > 0\n        ? props.marker.types[0]\n        : undefined;\n\n        const vehicle = vehicles.find(v => v.type === props.marker.icon);\n        const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n\n    switch (color) {\n      case 'dark-blue':\n        return '#035e8e';\n      case 'light-blue':\n        return '#037dba';\n      case 'light-blue-2':\n        return '#00AAFF';\n      case 'dark-green-2':\n        return '#017033';\n      case 'grey':\n        return '#808080';\n      case 'brown':\n        return '#B59243';\n      case 'dark-brown':\n        return '#6d5827';\n      case 'red':\n        return '#D3454E';  \n      default:\n        return '#035e8e';\n    }\n  };\n\n  const getColorForTourMarker = () => {\n      const type = selectedFilters && props.marker && props.marker.types.length > 0 ?\n          props.marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n          !selectedFilters && props.marker && props.marker.types.length > 0 ?\n              props.marker.types[0] :\n              undefined;\n              \n      const vehicle = vehicles.find(v => v.type === props.marker.icon);\n      const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n  \n      return color;\n  };\n\n  const markerType = props.zoomLevel >= 7 && props.zoomLevel < 12 ? 'dot-type' : \n    props.zoomLevel >= 12 && props.isVehicle ? 'vehicle-type' : \n    props.zoomLevel >= 12 ? 'pin-type' : '';\n\n  return (\n    <React.Fragment>\n      <Hidden smDown>\n        {showInfoBox && (\n          <React.Fragment>\n            <InfoBox\n              getLangString={props.getLangString}\n              marker={props.marker}\n              markerType={markerType}\n              setShowInfoBox={setShowInfoBox}\n            />\n            {polylinePath && polylinePath.length > 0 && !props.isVehicle ? (\n              <Polyline\n                id={polylineId}\n                color={getColorForMarkerShape()}\n                listOfVertices={polylinePath}\n                map={props.map}\n                maps={props.maps}\n              />\n            ) : (\n              <React.Fragment />\n            )}\n          </React.Fragment>\n        )}\n      </Hidden>\n      {props.zoomLevel >= 12 &&\n        <React.Fragment>\n          {props.isVehicle ?\n            <React.Fragment>\n              <Vehicle\n                active={showInfoBox}\n                getLangString={props.getLangString}\n                marker={props.marker}\n                onClick={(event) => { handleClickOnMarker(event); return false; }}\n                typeOfVehicle={props.marker.icon ? props.marker.icon : ''}\n                color={getColorForTourMarker() ?? ''}\n              />\n              {polylinePath && polylinePath.length > 0 &&\n                <Polyline\n                  id={polylineId}\n                  color={getColorForMarkerShape()}\n                  listOfVertices={polylinePath}\n                  map={props.map}\n                  maps={props.maps}\n                />\n              }\n            </React.Fragment>\n            :\n            <Pin getLangString={props.getLangString} marker={props.marker} active={showInfoBox} onClick={(event) => { handleClickOnMarker(event); return false; }} />\n          }\n        </React.Fragment>\n      }\n      {(props.zoomLevel >= 7 && props.zoomLevel < 12) &&\n          <Dot getLangString={props.getLangString} \n          marker={props.marker} \n          active={showInfoBox} \n          onClick={(event) => handleClickOnMarker(event)} \n          color={getColorForTourMarker()} />\n      }\n    </React.Fragment>\n  );\n};\n","import React from 'react'\nimport './ThemeLoader.scss'\n\nexport interface ILoaderProps{\n    getLangString: (value: string) => string;\n}\n\nexport const Loader = (props: ILoaderProps) : JSX.Element => {\n    return (\n        <div className=\"loader-large\" aria-label={props.getLangString('global.loading')}>\n            <div className=\"sk-fading-circle\">\n                <div className=\"sk-circle1 sk-circle\"></div>\n                <div className=\"sk-circle2 sk-circle\"></div>\n                <div className=\"sk-circle3 sk-circle\"></div>\n                <div className=\"sk-circle4 sk-circle\"></div>\n                <div className=\"sk-circle5 sk-circle\"></div>\n                <div className=\"sk-circle6 sk-circle\"></div>\n                <div className=\"sk-circle7 sk-circle\"></div>\n                <div className=\"sk-circle8 sk-circle\"></div>\n                <div className=\"sk-circle9 sk-circle\"></div>\n                <div className=\"sk-circle10 sk-circle\"></div>\n                <div className=\"sk-circle11 sk-circle\"></div>\n                <div className=\"sk-circle12 sk-circle\"></div>\n            </div>\n        </div>\n    )\n}","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport './ThemeMarker.scss';\nimport { IMarker, IMarkerShape, IPolyline, IVertices, MarkerSource } from '../../../store/Markers/Marker';\nimport { InfoBox } from './InfoBox';\nimport { MarkerDialogOpen, MarkerIndexDialogOpen, Polylines } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from \"../../../utils/helpers/ObjectHelper\";\nimport { Polyline } from \"./Polyline\";\nimport { updatePolylines } from \"../../../store/Markers/Actions\";\nimport { SelectedFilters } from \"../../../store/Filters/Selector\";\nimport { vehicles } from \"../../../constants/VehicleConstants\";\n\nexport interface IMobileInfoBoxProps {\n    getLangString: (value: string) => string;\n    markers: IMarker[];\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    map: any;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    maps: any;\n}\n\nconst getEmptyMarker = (): IMarker => {\n    return ({\n        title: '',\n        id: '',\n        description: '',\n        link: '',\n        types: [],\n        subTypes: [],\n        source: MarkerSource.Other,\n        markerShapes: [],\n        deleted: false,\n        published: true,\n        detailsUrl: '',\n        imageUrl: '',\n        modified: new Date()\n    });\n}\n\nexport const MobileInfoBox = (props: IMobileInfoBoxProps): JSX.Element => {\n\n    const [openMarker, setOpenMarker] = useState<IMarker>(getEmptyMarker());\n    const [polylinePath, setPolylinePath] = useState<IVertices[][]>([]);\n    const [showInfoBox, setShowInfoBox] = useState(false);\n\n    const markerDialogOpen = useSelector(MarkerDialogOpen);\n    const indexOpen = useSelector(MarkerIndexDialogOpen);\n    const polylines = useSelector(Polylines);\n    const selectedFilters = useSelector(SelectedFilters);\n\n    const dispatch = useDispatch();\n\n    useEffect(() => {\n        const marker = props.markers.find(marker => marker.id === markerDialogOpen);\n        if (marker) {\n            handlePath(marker.markerShapes);\n            setOpenMarker(marker);\n            setShowInfoBox(true);\n        } else {\n            handlePolylines();\n            setOpenMarker(getEmptyMarker());\n            setShowInfoBox(false);\n        }\n    }, [markerDialogOpen, props.markers]);\n\n    useEffect(() => {\n        const marker = props.markers.find(marker => marker.id === markerDialogOpen);\n        if (indexOpen && indexOpen > 0 && marker?.siblings && marker.siblings?.length >= indexOpen) {\n            const siblingIndex = indexOpen - 1;\n            const markerShapes = marker.siblings[siblingIndex].markerShapes;\n            handlePath(markerShapes);\n        } else if (marker) {\n            handlePath(marker.markerShapes);\n        }\n    }, [indexOpen]);\n\n    const handlePath = (markerShapes: IMarkerShape[]) => {\n        setPolylinePath([]);\n        const newPolylinePath: IVertices[][] = [];\n        if (!isNullEmptyOrUndefined(markerShapes)) {\n            markerShapes.forEach((markerShape: IMarkerShape) => {\n                if (!isNullEmptyOrUndefined(markerShape.vertices) && markerShape.vertices.length > 0) {\n                    newPolylinePath.push(markerShape.vertices)\n                }\n            });\n            setPolylinePath(newPolylinePath);\n        } else {\n            setPolylinePath([]);\n        }\n    };\n\n    const handlePolylines = () => {\n        if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n            const polylinesToClean = polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n            if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n                polylinesToClean.forEach((polyline: IPolyline) => {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    polyline.polylines.forEach((poly: any) => {\n                        if (!isNullEmptyOrUndefined(poly)) {\n                            poly.setMap(null);\n                        }\n                    })\n                })\n                const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n                dispatch(updatePolylines(newPolylines));\n            }\n        }\n    }\n\n    const getColorForMarkerShape = (marker: IMarker) => {\n        const type = selectedFilters && marker && marker.types.length > 0 ?\n            marker.types.find(t => selectedFilters.find(f => t.title === f.title)) :\n            !selectedFilters && marker && marker.types.length > 0 ?\n                marker.types[0] :\n                undefined;\n\n        const vehicle = vehicles.find(v => v.type === marker.icon);\n        const color = type?.title !== \"Turer\" ? type?.class : vehicle ? vehicle.color : undefined;\n\n        switch (color) {\n          case 'dark-blue':\n            return '#035e8e';\n          case 'light-blue':\n            return '#037dba';\n          case 'light-blue-2':\n            return '#00AAFF';\n          case 'dark-green-2':\n            return '#017033';\n          case 'grey':\n            return '#808080';\n          case 'brown':\n            return '#B59243';\n          case 'dark-brown':\n            return '#6d5827';\n          case 'red':\n            return '#D3454E';\n          default:\n            return '#035e8e';\n        }\n    };\n\n    return (\n        <React.Fragment>\n            {showInfoBox &&\n                <React.Fragment>\n                    <InfoBox getLangString={props.getLangString} marker={openMarker} markerType={'mobile'} setShowInfoBox={setShowInfoBox} />\n                    {polylinePath && polylinePath.length > 0 ?\n                        <Polyline\n                            id={openMarker.id}\n                            listOfVertices={polylinePath}\n                            map={props.map}\n                            maps={props.maps}\n                            color={getColorForMarkerShape(openMarker)}\n                        />\n                        :\n                        <React.Fragment />\n                    }\n                </React.Fragment>\n            }\n        </React.Fragment>\n    )\n}\n","import { IFilter } from \"./Filter\";\n\nexport const GET_FILTERS_BEGIN = 'GET_FILTERS_BEGIN';\nexport const GET_FILTERS_SUCCESS = 'GET_FILTERS_SUCCESS';\nexport const GET_FILTERS_FAILURE = 'GET_FILTERS_FAILURE';\nexport const UPDATE_SELECTED_FILTERS = 'UPDATE_SELECTED_FILTERS';\nexport const UPDATE_SELECTED_FILTERS_FAILURE = 'UPDATE_SELECTED_FILTERS_FAILURE';\nexport const UPDATE_SELECTED_SUBFILTERS = 'UPDATE_SELECTED_SUBFILTERS';\nexport const UPDATE_SELECTED_SUBFILTERS_FAILURE = 'UPDATE_SELECTED_SUBFILTERS_FAILURE';\nexport const CLEAN_SELECTED_FILTERS = 'CLEAN_SELECTED_FILTERS';\nexport const CLEAN_SELECTED_SUBFILTERS = 'CLEAN_SELECTED_SUBFILTERS';\nexport const SET_SELECTED_FILTER_TITLE = 'SET_SELECTED_FILTER_TITLE';\n\nexport interface IFilterState {\n    filterList: IFilter[],\n    loading: boolean,\n    selectedFilters: IFilter[],\n    error?: string,\n    selectedFilterTitle?: string,\n}\n\ninterface GetFiltersBeginAction {\n    type: typeof GET_FILTERS_BEGIN\n}\n\ninterface GetFiltersSuccessAction {\n    type: typeof GET_FILTERS_SUCCESS,\n    payload: IFilter[]\n}\n\ninterface GetFiltersFailure {\n    type: typeof GET_FILTERS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface UpdateSelectedFilters {\n    type: typeof UPDATE_SELECTED_FILTERS,\n    payload: IFilter[]\n}\n\ninterface UpdateSelectedFiltersFailure {\n    type: typeof UPDATE_SELECTED_FILTERS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface SetSelectedFilterTitle {\n    type: typeof SET_SELECTED_FILTER_TITLE,\n    payload: string\n}\n\ninterface CleanSelectedFilters {\n    type: typeof CLEAN_SELECTED_FILTERS,\n    payload: IFilter[]\n}\n\nexport type FilterActionTypes = GetFiltersBeginAction |\n     GetFiltersSuccessAction |\n     GetFiltersFailure |\n     UpdateSelectedFilters | \n     UpdateSelectedFiltersFailure |\n     CleanSelectedFilters |\n     SetSelectedFilterTitle;\n\n","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\nimport { IFilter } from \"./Filter\";\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as FilterActions from './ActionTypes'\n\n// Fetch all filters from backend \nexport const getFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ type: FilterActions.GET_FILTERS_BEGIN });\n\n        const result = await axios.get(`${API_ROOT}/filter`);\n        dispatch({\n            type: FilterActions.GET_FILTERS_SUCCESS,\n            payload: result.data\n        });\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: FilterActions.GET_FILTERS_FAILURE, payload: error })\n    }\n} \n\nexport const updateSelectedFilters = (selectedFilters: IFilter[]): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ \n            type: FilterActions.UPDATE_SELECTED_FILTERS,\n            payload: selectedFilters\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: FilterActions.UPDATE_SELECTED_FILTERS_FAILURE, payload: error })\n    }\n}\n\nexport const cleanSelectedFilters = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ \n            type: FilterActions.CLEAN_SELECTED_FILTERS,\n        });\n\n    } catch (error) {\n        console.error(error);\n    }\n}\n\nexport const setSelectedFilterTitle = (title: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    dispatch({ type: FilterActions.SET_SELECTED_FILTER_TITLE, payload: title });\n}\n\n\n\n\n\n","import React, { useCallback, useEffect, useState } from 'react'\nimport GoogleMap, { Bounds } from 'google-map-react';\nimport './ThemeGoogleMaps.scss';\nimport CustomOption from './CustomStyles'\n\nimport { ZoomControl } from '../controls/ZoomControl';\nimport { PositionControl } from '../controls/PositionControl'\nimport { Marker } from '../marker/Marker';\nimport { ClickedOnPolyline, MarkerDialogOpen, Markers, Polylines, ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { setMarkerDialogAsOpen, getMarkers, getUpdatesForMarkers, setMarkerIndexDialogAsOpen, updatePolylines } from '../../../store/Markers/Actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IMarker, IPolyline } from '../../../store/Markers/Marker';\nimport { GOOGLE_MAP_KEY, GOOGLE_MAP_Position } from '../../../Constants';\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { fas } from '@fortawesome/free-solid-svg-icons'\nimport { SelectedFilters, Filters, SelectedFilterTitle } from '../../../store/Filters/Selector';\nimport { Loader } from '../../common/loader/Loader';\nimport { MobileInfoBox } from '../marker/MobileInfoBox';\nimport { Hidden } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { setSelectedFilterTitle, updateSelectedFilters } from '../../../store/Filters/Actions';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { MarkerIsLive } from '../../../utils/helpers/MarkerHelper';\nimport { MarkerIsLiveHours } from '../../../store/Settings/Selector';\nimport { vehicles } from '../../../constants/VehicleConstants';\n\n\n\nexport interface IGoogleMapsProps {\n    getLangString: (value: string) => string;\n}\n\nexport const GoogleMaps = (props: IGoogleMapsProps): JSX.Element => {\n\n    // Need to add all the icons to be able to load them dynamicly below.\n    library.add(fas);\n\n    const dispatch = useDispatch();\n    const history = useHistory();\n\n    useEffect(() => {\n        dispatch(getMarkers());\n        dispatch(getUpdatesForMarkers());\n    }, [dispatch]);\n\n    useEffect(() => {\n        if (history) {\n            if (new URLSearchParams(history.location.search).get('category')) {\n                dispatch(setSelectedFilterTitle(new URLSearchParams(history.location.search).get('category') ?? ''));\n            }\n            if (new URLSearchParams(history.location.search).get('pin')) {\n                dispatch(setMarkerDialogAsOpen(new URLSearchParams(history.location.search).get('pin') ?? ''));\n            }\n            if (new URLSearchParams(history.location.search).get('index')) {\n                dispatch(setMarkerIndexDialogAsOpen(Number(new URLSearchParams(history.location.search).get('index')) ?? 0));\n            }\n        }\n    }, [history]);\n\n    const markers = useSelector(Markers);\n    const filters = useSelector(Filters);\n    const selectedFilters = useSelector(SelectedFilters);\n    const markerDialogOpen = useSelector(MarkerDialogOpen);\n    const selectedFilterTitle = useSelector(SelectedFilterTitle);\n    const polylines = useSelector(Polylines);\n    const clickedOnPolyline = useSelector(ClickedOnPolyline);\n    const markerIsLiveHours = useSelector(MarkerIsLiveHours);\n    const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n\n    const [zoomLevel, setZoomLevel] = useState(12);\n    const [markersOnMap, setMarkersOnMap] = useState<IMarker[]>([]);\n    const [bounds, setBounds] = useState<Bounds>();\n    const [center, setCenter] = useState(getMainPosition());\n    const [markersLoaded, setMarkersLoaded] = useState(false);\n    const [googleMap, setGoogleMap] = useState(null);\n    const [googleMaps, setGoogleMaps] = useState(null);\n    \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const handleApiLoaded = (map: any, maps: any) => {\n        setGoogleMap(map);\n        setGoogleMaps(maps);\n    };\n\n    const filterMarkersOnMapBounds = useCallback((markers: IMarker[]) => {\n        const filteredMarkers: IMarker[] = [];\n        const filterMarkersByFilter = (markers: IMarker[]) => {\n            let newFilteredMarkers: IMarker[] = [];\n            selectedFilters.forEach(selectedFilter => {\n                let markersFromFilter = markers.filter(marker => marker.types.some(type => type.title === selectedFilter.title) || (showAllLiveMarkers && MarkerIsLive(marker, markerIsLiveHours, false)));\n                markersFromFilter = markersFromFilter.filter(marker => (\n                    ((isNullEmptyOrUndefined(selectedFilter.subFilters) && filters.find(filter => filter.title === marker.title && filter.subFilters.length > 0) ||\n                        (filters.find(filter => (filter.title === selectedFilter.title) && filter.subFilters.length === selectedFilter.subFilters.length)))) ||\n                    marker.subTypes?.some(subType => selectedFilter.subFilters.some(subFilter => subFilter.title === subType.title))\n                ));\n                markersFromFilter.forEach(marker => {\n                    if (!newFilteredMarkers.includes(marker) && marker.published) {\n                        newFilteredMarkers = [...newFilteredMarkers, marker];\n                    }\n                });\n            });\n            if (selectedFilters.length === 0 && showAllLiveMarkers)\n            {\n                const markersFromFilter = markers.filter(marker => MarkerIsLive(marker, markerIsLiveHours, false));\n                markersFromFilter.forEach(marker => {\n                    if (!newFilteredMarkers.includes(marker) && marker.published) {\n                        newFilteredMarkers = [...newFilteredMarkers, marker];\n                    }\n                });\n            }\n            setMarkersOnMap(newFilteredMarkers);\n            setMarkersLoaded(true);\n        }\n\n        const isInsideMapBounds = (marker: IMarker) => {\n            if (!bounds || !marker.lat || !marker.lng) {\n                return false;\n            }\n\n            const { se, ne, nw, sw } = bounds;\n            return (\n                (marker.lat > se.lat && sw.lat) &&\n                (marker.lat < ne.lat && nw.lat) &&\n                (marker.lng > nw.lng && sw.lng) &&\n                (marker.lng < ne.lng && se.lng)\n            )\n        }\n        markers.forEach(marker => {\n            if (isInsideMapBounds(marker)) {\n                filteredMarkers.push(marker);\n            }\n        });\n\n        filterMarkersByFilter(filteredMarkers);\n    }, [bounds, selectedFilters, showAllLiveMarkers])\n\n    useEffect(() => {\n        if (bounds && markers.length > 0) {\n            filterMarkersOnMapBounds(markers);\n        }\n    }, [bounds, filterMarkersOnMapBounds, markers]);\n\n    useEffect(() => {\n        if (bounds && markers.length > 0) {\n            filterMarkersOnMapBounds(markers);\n        }\n    }, [bounds, filterMarkersOnMapBounds, markers]);\n\n    useEffect(() => {\n        if (bounds && markers.length > 0) {\n            filterMarkersOnMapBounds(markers);\n        }\n    }, [bounds, filterMarkersOnMapBounds, selectedFilters, markers]);\n\n    useEffect(() => {\n        if (!markersOnMap.find(marker => polylines.some(polyline => polyline.id.includes(marker.id)))) {\n            handlePolyline();\n        }\n    }, [markersOnMap]);\n\n    useEffect(() => {\n        if (markersLoaded && markers && markerDialogOpen && markerDialogOpen !== 'close') {\n            const startMarker = markers.find(m => m.id === markerDialogOpen);\n            if (startMarker) {\n                const inArray = selectedFilters.find(selectedFilter => startMarker.types.some(type => type.title === selectedFilter.title));\n                const filter = filters.find(filter => startMarker.types.find(type => type.title === filter.title));\n                if (!inArray && filter) {\n                    dispatch(updateSelectedFilters([...selectedFilters, filter]));\n                }\n                if (startMarker?.lat && startMarker.lng) {\n                    setCenter({ lat: startMarker?.lat, lng: startMarker?.lng });\n                }\n            }\n        } else if (markersLoaded && markers && selectedFilterTitle && selectedFilterTitle !== '') {\n            const startFilter = filters.find(f => f.title === selectedFilterTitle)\n            if (startFilter) {\n                dispatch(updateSelectedFilters([startFilter]));\n            }\n        }\n    }, [markersLoaded]);\n\n    const defaultZoom = {\n        center: getMainPosition(),\n        zoom: 12\n    };\n    function getMainPosition(): GoogleMap.Coords {        \n        \n        const position = JSON.parse(GOOGLE_MAP_Position);\n        const latFloatValue = parseFloat(position.lat);\n        const lngFloatValue = parseFloat(position.lng);        \n        return {\n            lat: latFloatValue,\n            lng: lngFloatValue\n        };\n    }\n\n    const handleZoom = (zoomLevel: number) => {\n        setZoomLevel(zoomLevel);\n    };\n\n    const handleCenter = (coords: GoogleMap.Coords) => {\n        setCenter(coords);\n    };\n\n    const onMapChanged = (changeEvent: GoogleMap.ChangeEventValue) => {\n        if (!changeEvent) {\n            return;\n        }\n        if (changeEvent.bounds && JSON.stringify(changeEvent.bounds) !== JSON.stringify(bounds)) {\n            setBounds(changeEvent.bounds);\n        }\n    }\n\n    const handleCustomOption = () => {\n        if (markerDialogOpen === \"close\") {\n            return { ...CustomOption, disableDoubleClickZoom: false };\n        } else {\n            return { ...CustomOption, disableDoubleClickZoom: true };\n        }\n    }\n\n    const closeInfoBox = () => {\n        handlePolyline();\n        if (!clickedOnPolyline)\n        {\n            dispatch(setMarkerDialogAsOpen(\"close\"));\n            dispatch(setMarkerIndexDialogAsOpen(0));\n            const params = new URLSearchParams();\n            history.push({ search: params.toString() });\n        }\n    };\n\n    const handlePolyline = () => {\n        if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n            const polylinesToClean = polylines.filter(poly => !vehicles.some(v => poly.id.includes(v.name)));\n            if (!isNullEmptyOrUndefined(polylinesToClean) && polylinesToClean.length > 0) {\n                polylinesToClean.forEach((polyline: IPolyline) => {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    polyline.polylines.forEach((poly: any) => {\n                        if (!isNullEmptyOrUndefined(poly)) {\n                            poly.setMap(null);\n                        }\n                    })\n                })\n                const newPolylines = polylines.filter(polyline => !polylinesToClean.some(poly => poly.id === polyline.id));\n                dispatch(updatePolylines(newPolylines));\n            }\n        }\n    }\n\n    return (\n        <div id=\"map-container\" role=\"main\" aria-label={props.getLangString('filter.map')}>\n            {!markersLoaded &&\n                <div className=\"loading-container\">\n                    <Loader getLangString={props.getLangString} />\n                </div>\n            }\n            <GoogleMap\n                bootstrapURLKeys={{ key: GOOGLE_MAP_KEY }}\n                defaultCenter={defaultZoom.center}\n                defaultZoom={defaultZoom.zoom}\n                onZoomAnimationStart={handleZoom}\n                onDrag={handleCenter}\n                zoom={zoomLevel}\n                center={center}\n                options={handleCustomOption()}\n                onClick={closeInfoBox}\n                onChange={onMapChanged}\n                yesIWantToUseGoogleMapApiInternals={true}\n                onGoogleApiLoaded={({ map, maps }) => handleApiLoaded(map, maps)}\n            >\n                {markersLoaded &&\n                    markersOnMap.map((m: IMarker, index: number) =>\n                        <Marker\n                            getLangString={props.getLangString}\n                            lat={m.lat}\n                            lng={m.lng}\n                            zoomLevel={zoomLevel}\n                            marker={m}\n                            key={index}\n                            map={googleMap}\n                            maps={googleMaps}\n                            isVehicle={m.types.find(type => type.title === \"Turer\") ? true : false}\n                        />\n                    )}\n            </GoogleMap>\n            <Hidden smUp>\n                <MobileInfoBox\n                    getLangString={props.getLangString}\n                    markers={markersOnMap}\n                    map={googleMap}\n                    maps={googleMaps}\n                />\n            </Hidden>\n\n            <ZoomControl\n                zoomLevel={zoomLevel}\n                handleZoom={(level) => handleZoom(level)}\n            />\n            <PositionControl handleCenter={(coords) => handleCenter(coords)} />\n        </div>\n    )\n}\n","import { IFilter } from \"../../../store/Filters/Filter\";\nimport { updateSelectedFilters } from \"../../../store/Filters/Actions\"\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { fas, faTimes, IconName } from '@fortawesome/free-solid-svg-icons'\nimport { SelectedFilters } from \"../../../store/Filters/Selector\"\nimport React, { useState, useEffect } from 'react'\nimport Button from '@material-ui/core/Button';\nimport { Link } from \"@material-ui/core\";\nimport { Share } from \"../../common/share/Share\";\n\nexport interface IFilterProps {\n    getLangString: (value: string) => string;\n    filter: IFilter;\n    handleSelectedFilter: () => void;\n    selectedFilter: IFilter;\n    showCategoriesForFilter: () => void;\n}\nexport const FilterButton = (props: IFilterProps): JSX.Element => {\n\n    library.add(fas);\n    const [activeFilter, setActiveFilter] = useState(false);\n    const [showFilterOption, setShowFilterOption] = useState<boolean>(false);\n    const [showOption, setShowOption] = useState<boolean>(false);\n    const dispatch = useDispatch();\n\n    const selectedFilters = useSelector(SelectedFilters);\n\n    useEffect(() => {\n        handleActive();\n    }, [selectedFilters, props.filter])\n\n    const handleClick = () => {\n        props.handleSelectedFilter();\n        // If the clicked filter is not in the list, add it. Otherwise, remove.\n        const inArray = selectedFilters.find(i => i.title === props.filter.title)\n        const newSelectedFilters = !inArray\n            ? [...selectedFilters, props.filter]\n            : selectedFilters.filter(f => f.title !== props.filter.title)\n        dispatch(updateSelectedFilters(newSelectedFilters))\n        handleActive();\n        console.log(\"click\");\n\n    }\n\n    const handleActive = () => {    \n        if (selectedFilters.find(i => i.title === props.filter.title)) {\n            setActiveFilter(true);\n            setShowOption(true);\n            if (props.filter.subFilters.length > 0) {\n                setShowFilterOption(true);\n            }\n        } else {\n            setActiveFilter(false);\n            setShowOption(false);\n            setShowFilterOption(false);\n        }\n\n    }\n\n    const handleClose = (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n        event?.stopPropagation();\n        event?.preventDefault();\n        props.handleSelectedFilter();\n        setShowOption(false);\n        setShowFilterOption(false);\n    }\n\n    const showSubFilters = (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n        event?.stopPropagation();\n        event?.preventDefault();\n        props.showCategoriesForFilter();\n    }\n    return (\n        <React.Fragment>\n            <Button\n                className={`filter-button ${activeFilter ? props.selectedFilter.title === props.filter.title ? \"selected\" : \"active\" : \"\"}`}\n                onClick={handleClick}\n                disableTouchRipple={true}\n                disableRipple={true}\n            >\n                {props.selectedFilter.title === props.filter.title &&\n                    <div className={'filter-button-close'} onClick={(event: React.MouseEvent<HTMLDivElement, MouseEvent>) => handleClose(event)}>\n                        <FontAwesomeIcon icon={faTimes} />\n                    </div>\n                }\n                <div className=\"filter-button-icon-container\">\n                    <div className=\"filter-button-icon\">\n                        <FontAwesomeIcon icon={['fas', props.filter.icon as IconName]} className={'icon ' + (props.filter.class ? props.filter.class : '')} aria-label={`${props.getLangString('global.icon')} ${props.filter.title}`} />\n                    </div>\n                    <span className=\"filter-button-label\" >                     \n                        {props.filter.title}\n                    </span>\n                </div>\n                {props.selectedFilter.title === props.filter.title &&\n                    <div className={`sub-menu-options`}>\n                        {showOption &&\n                            <React.Fragment>\n                                <hr className=\"sub-menu-divider\" />\n                                <Share title={props.filter.title} getLangString={props.getLangString} onInfoBox={true} showIcon={false} className={'categories'} />\n                                {showFilterOption &&\n                                    <Link onClick={(event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => showSubFilters(event)} className=\"sub-menu-option-link white\">\n\n                                        {'Filtrera'}\n                                    </Link>\n                                }\n                            </React.Fragment>\n                        }\n                    </div>\n                }\n            </Button>\n        </React.Fragment>\n    )\n}\n","import React from 'react'\nimport Grid from '@material-ui/core/Grid';\nimport Button from '@material-ui/core/Button';\n\nexport interface IFilterOptionsProps {\n    getLangString: (value: string) => string;\n    cleanSelectedFilters: (e?: Event) => void;\n    addAllFilters: (e?: Event) => void;\n}\n\nexport const FilterOptions = (props: IFilterOptionsProps): JSX.Element => {\n\n    return (\n        <Grid container direction=\"row\" alignItems=\"center\" justifyContent=\"center\" className=\"filter-panel-options-container\">\n            <Grid item xs={12} md={6} className=\"filter-panel-option\">\n                <Grid item xs={6} sm={6} md={6} lg={6} xl={6}>\n                    <Button onClick={() => props.addAllFilters()} className=\"filter-panel-option-button blue\">{props.getLangString('filter.allFilters')}</Button>\n                </Grid>\n                <Grid item xs={6} sm={6} md={6} lg={6} xl={6}>\n                    <Button onClick={() => props.cleanSelectedFilters()} className=\"filter-panel-option-button white\">{props.getLangString('filter.cleanFilter')}</Button>\n                </Grid>\n            </Grid>\n        </Grid>\n    )\n}","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconName } from '@fortawesome/free-solid-svg-icons'\nimport './ThemeMapFilter.scss';\n\n\nexport interface IToggleMenuButtonProps {\n    getLangString: (value: string) => string;\n    showingMenu: boolean\n    onClick: (e?: Event) => void\n}\n\nexport const ToggleMenuButton = (props: IToggleMenuButtonProps): JSX.Element => {\n\n\n    const text = props.showingMenu ? props.getLangString('filter.hidePins') : props.getLangString('filter.showPins')\n    const icon = props.showingMenu ? \"map-marked-alt\" : \"map-marker-alt\"\n\n    return (\n        <Button onClick={() => props.onClick()} className=\"filter-toggle-button\">\n            <span>\n                <FontAwesomeIcon size=\"lg\" icon={['fas', icon as IconName]} />\n            </span>\n            <span>\n                {text}\n            </span>\n        </Button>\n    )\n}","import React from 'react'\nimport Grid from '@material-ui/core/Grid';\nimport { ToggleMenuButton } from './ToggleMenuButton'\n\nexport interface IFilterToggleProps {\n    getLangString: (value: string) => string;\n    showingMenu: boolean\n    onClick: (e?: Event) => void\n}\n\nexport const FilterToggle = (props: IFilterToggleProps): JSX.Element => {\n\n    return (\n        <div className=\"filter-toggle\" role=\"complementary\">\n            <Grid container spacing={0} className=\"filter-toggle-container\">\n                <Grid item xs={2} sm={2} md={2} lg={2} xl={2} className=\"filter-toggle-item filter-panel-toggle-item\">\n                    <ToggleMenuButton getLangString={props.getLangString} showingMenu={props.showingMenu} onClick={() => { props.onClick() }} />\n                </Grid>\n            </Grid>\n        </div>\n    )\n}","import { faCheckCircle, faCircle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { IFilter, ISubFilter } from '../../../store/Filters/Filter';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\n\nexport interface ISubFilterProps {\n    getLangString: (value: string) => string;\n    subFilter: ISubFilter;\n    handleClick: () => void;\n    selectedFilter: IFilter | undefined;\n}\n\nexport const SubFilter = (props: ISubFilterProps): JSX.Element => {\n\n    const [activeSubFilter, setActiveSubFilter] = useState<boolean>(false);\n    const selectedFilters = useSelector(SelectedFilters);\n\n    useEffect(() => {\n        handleActive();\n    }, [props.subFilter, selectedFilters]);\n\n    const handleActive = () => {\n        if (props.selectedFilter &&\n            props.selectedFilter.subFilters.find(i => i.title === props.subFilter.title)) {\n            setActiveSubFilter(true)\n        } else {\n            setActiveSubFilter(false);\n        }\n    };\n\n    return (\n        <h4 className=\"category-items-title\"  onClick={() => props.handleClick()} >\n            <FontAwesomeIcon \n                icon={activeSubFilter ? faCheckCircle : faCircle} \n                className={`check-circle-icon ${activeSubFilter ? '' : 'circle-border'}`}   \n            />\n            {props.subFilter.title}\n        </h4>\n    );\n};","import React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport { SubFilter } from './SubFilter';\nimport { IFilter, ISubFilter } from '../../../store/Filters/Filter';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SelectedFilters } from '../../../store/Filters/Selector';\nimport { updateSelectedFilters } from '../../../store/Filters/Actions';\n\nexport interface ISubfiltersProps {\n    getLangString: (value: string) => string;\n    selectedFilter: IFilter;\n}\n\nexport const SubFilters = (props: ISubfiltersProps): JSX.Element => {\n\n    const dispatch = useDispatch();\n    const selectedFilters = useSelector(SelectedFilters);\n\n    const handleClick = (subFilter: ISubFilter) => {\n        const selectedFilter = selectedFilters.find(filter => filter.title === props.selectedFilter.title);\n        const isSelected = selectedFilter?.subFilters.some(filter => filter.title === subFilter.title);\n        const newSelectedFilters = !isSelected\n             ? selectedFilters.map(f => f.title === props.selectedFilter.title ? {...f, subFilters : [...f.subFilters,  subFilter]} : f)\n             : selectedFilters.map(f => f.title === props.selectedFilter.title ? {...f, subFilters : selectedFilter ? selectedFilter.subFilters.filter(s => s.title !== subFilter.title) : []} : f)\n            dispatch(updateSelectedFilters(newSelectedFilters))\n    }\n\n    return (\n        <React.Fragment>\n        <Grid container direction={'row'} role=\"list\" rowGap={3}>\n                {props.selectedFilter.subFilters && props.selectedFilter.subFilters.map((subfilter: ISubFilter, index: number) => {\n                    return (\n                        <Grid item key={index} xs={12} md={6} className=\"category-items\">\n                            <SubFilter \n                                getLangString={props.getLangString} \n                                subFilter={subfilter} \n                                handleClick={() => handleClick(subfilter)} \n                                selectedFilter={selectedFilters.find(filter => filter.title === props.selectedFilter.title)}\n                            />\n                        </Grid>\n                    )\n                })\n            }\n        </Grid>\n        </React.Fragment>\n    );\n};","import React, { useState, useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getFilters, cleanSelectedFilters, updateSelectedFilters, setSelectedFilterTitle } from \"../../../store/Filters/Actions\";\n\nimport Grid from '@material-ui/core/Grid';\nimport { IFilter } from '../../../store/Filters/Filter';\nimport { Settings } from '../../../store/Settings/Selector';\nimport { FilterButton } from './FilterButton'\nimport { FilterOptions } from './FilterOptions'\nimport { FilterToggle } from './FilterToggle'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronLeft, fas } from '@fortawesome/free-solid-svg-icons'\nimport { faCoffee, faMapMarkerAlt, faTimes } from '@fortawesome/free-solid-svg-icons'\n\nimport './ThemeMapFilter.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { alpha, Button, styled, Switch } from '@material-ui/core';\nimport { SubFilters } from './SubFilters';\nimport { SelectedFilters, Filters } from '../../../store/Filters/Selector';\nimport { Markers, Polylines, ShowAllLiveMarkers } from '../../../store/Markers/Selector';\nimport { isNullEmptyOrUndefined } from '../../../utils/helpers/ObjectHelper';\nimport { cleanPolylines, setShowAllLiveMarkers } from '../../../store/Markers/Actions';\nimport { useHistory } from 'react-router-dom';\nexport interface IMapFilterProps {\n    getLangString: (value: string) => string;\n}\n\nexport const MapFilter = (props: IMapFilterProps): JSX.Element => {\n\n    library.add(fas, faCoffee, faMapMarkerAlt, faTimes);\n    const dispatch = useDispatch();\n    const history = useHistory();\n\n    useEffect(() => {\n        dispatch(getFilters());\n    }, [dispatch]);\n\n    const settings = useSelector(Settings);\n    const filters = useSelector(Filters);\n    const selectedFilters = useSelector(SelectedFilters);\n    const markers = useSelector(Markers);\n    const polylines = useSelector(Polylines);\n    const showAllLiveMarkers = useSelector(ShowAllLiveMarkers);\n    const [showFilterMenu, setShowFilterMenu] = useState(false);\n    const [filtersWithMarkers, setFiltersWithMarkers] = useState<IFilter[]>([]);\n    const [selectedFilter, setSelectedFilter] = useState<IFilter>({} as IFilter);\n    const [showSubFilters, setShowSubFilters] = useState<boolean>(false);\n\n    useEffect(() => {\n        setDefaultFilters();\n    }, [settings, filters]);\n\n    useEffect(() => {\n        setFiltersToShow();\n    }, [markers, filters]);\n\n    const setFiltersToShow = () => {\n        const filtersToShow = filters?.filter(filter => markers?.some(marker => marker.types?.some(type => type.title === filter.title)));\n        filtersToShow.forEach(filter => {\n            filter.subFilters = filter.subFilters?.filter(subFilter => markers?.some(marker => marker.subTypes?.some(subType => subType.title === subFilter.title)));\n        });\n        setFiltersWithMarkers(filtersToShow);\n    }\n\n    const setDefaultFilters = () => {\n        const defaultFilters = filters.filter(filter =>\n            settings.defaultFilters.some(defaultFilter => defaultFilter === filter.title));\n        if (defaultFilters && selectedFilters.length === 0) {\n            dispatch(updateSelectedFilters(defaultFilters));\n        }\n    }\n\n    const removeFilters = () => {\n        const params = new URLSearchParams();\n        history.push({ search: params.toString() });\n        setSelectedFilter({} as IFilter);\n        dispatch(cleanSelectedFilters());\n        dispatch(setShowAllLiveMarkers(false));\n        dispatch(setSelectedFilterTitle(''));\n        if (!isNullEmptyOrUndefined(polylines) && polylines.length > 0) {\n            dispatch(cleanPolylines(polylines));\n        }\n    }\n\n    const removeSubFilters = () => {\n        const newFilters = selectedFilters.map(filter => filter.title === selectedFilter.title ? { ...selectedFilter, subFilters: [] } : filter);\n        dispatch(updateSelectedFilters(newFilters));\n    }\n\n    const addAllFilters = () => {\n        dispatch(setSelectedFilterTitle(''));\n        dispatch(updateSelectedFilters(filters));\n        dispatch(setShowAllLiveMarkers(true));\n    }\n\n    const addAllSubFilters = () => {\n        const fullSelectedFilter = filters.find(filter => filter.title === selectedFilter.title);\n        if (fullSelectedFilter) {\n            const newFilters = selectedFilters.map(filter => filter.title === selectedFilter.title ? fullSelectedFilter : filter);\n            dispatch(updateSelectedFilters(newFilters));\n        }\n    }\n\n    const toggleShowAllLiveMarkers = () => {\n       dispatch(setShowAllLiveMarkers(!showAllLiveMarkers));\n    }\n\n    const toggleFilterMenu = () => {\n        setShowFilterMenu(!showFilterMenu);\n    }\n\n    const handleSelectedCategory = (filter: IFilter) => {\n        const params = new URLSearchParams();\n\n        if (selectedFilter.title !== filter.title &&\n            !selectedFilters.find(f => f.title === filter.title)) {\n            setSelectedFilter(filter);\n            dispatch(setSelectedFilterTitle(filter.title));\n            params.append('category', filter.title);\n        } else {\n            setSelectedFilter({} as IFilter);\n            dispatch(setSelectedFilterTitle(''));\n        }\n        history.push({ search: params.toString() });\n    }\n\n    const showSubFiltersForFilter = () => {\n        setShowSubFilters(true);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const toggleOnOutsideClick = (filterMenuRef: any, toggleRef: any) => {\n        useEffect(() => {\n            function handleClickOutside(event: Event) {\n                if (filterMenuRef.current && !filterMenuRef.current.contains(event.target) && !toggleRef.current.contains(event.target)) {\n                    setShowFilterMenu(false);\n                }\n            }\n            document.addEventListener(\"mousedown\", handleClickOutside);\n            return () => {\n                document.removeEventListener(\"mousedown\", handleClickOutside);\n            };\n        }, [filterMenuRef, toggleRef]);\n    }\n\n    const filterMenuRef = useRef(null);\n    const toggleRef = useRef(null);\n    toggleOnOutsideClick(filterMenuRef, toggleRef);\n\n    const RedSwitch = styled(Switch)(({ theme }) => ({\n        '& .MuiSwitch-switchBase.Mui-checked': {\n          color: \"#de0b2c\",\n          '&:hover': {\n            backgroundColor: alpha(\"#de0b2c\", theme.palette.action.hoverOpacity),\n          },\n        },\n        '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {\n          backgroundColor: \"#de0b2c\",\n        },\n      }));\n      \n\n    return (\n        <React.Fragment>\n            {showFilterMenu &&\n                <React.Fragment>\n                 \n                    <div className={` filter-panel`} role=\"contentinfo\" ref={filterMenuRef}>\n                        <Grid container direction={'row'} alignContent={'flex-start'} className=\"filter-panel-container\" role=\"list\">\n                            <Grid className={`filter-container`} item xs={12}>\n                                <Grid container direction={'row'} className=\"list-container\" role=\"list\">\n                                    {showSubFilters &&\n                                        <React.Fragment>\n                                            <Grid item xs={1}>\n                                                <Button variant=\"contained\" onClick={() => setShowSubFilters(false)} className=\"filter-toggle-icon back\">\n                                                    <FontAwesomeIcon size=\"lg\" icon={faChevronLeft} />\n                                                </Button>\n                                            </Grid>\n                                            <Grid item xs={10}>\n                                                <h4 className=\"filter-title\"> {selectedFilter.title}</h4>\n                                                <h4 className='filter-description'>{props.getLangString('filter.description')}</h4>\n                                                <hr className=\"title-divider\" />\n                                            </Grid>\n                                        </React.Fragment>\n                                    }\n                                    {!showSubFilters &&\n                                        <Grid item xs={10}>\n                                           <RedSwitch checked={showAllLiveMarkers} onClick={toggleShowAllLiveMarkers} className=\"filter-panel-switch\"/>\n                                           <span className=\"switch-label\">{props.getLangString('filter.showAllLiveMarkers')}</span>\n                                       </Grid>\n                                    }\n                                    <Grid item xs={showSubFilters ? 1 : 2}>\n                                        <Button variant=\"contained\" onClick={() => setShowFilterMenu(false)} className=\"filter-toggle-icon\">\n                                            <FontAwesomeIcon size=\"lg\" icon={faTimes} />\n                                        </Button>\n                                    </Grid>\n                                    {showSubFilters ?\n                                        <SubFilters getLangString={props.getLangString} selectedFilter={selectedFilter} />\n                                        :\n                                        <React.Fragment>\n                                            {filtersWithMarkers.map((filter: IFilter, index: number) => {\n                                                return (\n                                                    <Grid key={index} item zeroMinWidth xs={4} sm={2} md={2} lg={2} xl={2} className={`filter-panel-item`} role=\"listitem\">\n                                                        <FilterButton\n                                                            getLangString={props.getLangString}\n                                                            filter={filter}\n                                                            key={index}\n                                                            handleSelectedFilter={() => handleSelectedCategory(filter)}\n                                                            selectedFilter={selectedFilter}\n                                                            showCategoriesForFilter={() => showSubFiltersForFilter()}\n                                                        />\n                                                    </Grid>\n                                                )\n                                            })}\n                                        </React.Fragment>\n                                    }\n                                </Grid>\n                            </Grid>\n                            {showSubFilters ?\n                                <Grid className=\"filter-button-container\" item xs={12}>\n                                    <FilterOptions getLangString={props.getLangString}\n                                        cleanSelectedFilters={removeSubFilters}\n                                        addAllFilters={addAllSubFilters}\n                                        // toggleShowAllLiveMarkers={toggleShowAllLiveMarkers}\n                                    />\n                                </Grid>\n                                :\n                                <Grid className=\"filter-button-container\" item xs={12}>\n                                    <FilterOptions getLangString={props.getLangString}\n                                        cleanSelectedFilters={removeFilters}\n                                        addAllFilters={addAllFilters}\n                                        // toggleShowAllLiveMarkers={toggleShowAllLiveMarkers}\n                                    />\n                                </Grid>\n                            }\n                        </Grid>\n                    </div>\n                    \n                </React.Fragment>\n            }\n            <div ref={toggleRef}>\n                <FilterToggle getLangString={props.getLangString} showingMenu={showFilterMenu} onClick={toggleFilterMenu} />\n            </div>\n        </React.Fragment >\n    );\n};\n","import { RootState } from \"../RootReducer\";\nimport { IEventFilters } from \"./ActionTypes\";\nimport { ICategory, IEvent } from \"./Event\";\n\nexport const Events = (state: RootState): IEvent[] => state.events.eventList;\nexport const FilteredEvents = (state: RootState): IEvent[] => state.events.filteredEventList;\nexport const Categories = (state: RootState): ICategory[] => state.events.categoryList;\nexport const EventsLoading = (state: RootState): boolean => state.events.loading;\nexport const EventsPageScrollPosition = (state: RootState): number => state.events.eventsPageState.scrollPosition;\nexport const EventsPageFilters = (state: RootState): IEventFilters | undefined => state.events.eventsPageState.filters;","export default \"data:image/gif;base64,R0lGODlh6ANYAsQAAOTk5N7e3ufn5+jo6Ozs7Obm5vPz89/f3/T09ODg4PHx8e/v7/Dw8PLy8uPj4+3t7eLi4u7u7urq6uHh4eXl5enp6evr693d3fX19QAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADoA1gCAAX/ICaOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhT/6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4sfT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijggAQWaOCBCCao4P+CDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuurCDBgQQEOAKDrrrz26uuvwAYrLK8OFCDBAgjM+pIBFjiQQAAXRCvttNRWa+3/tdhm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\"","import { IEvent } from \"../../store/Events/Event\";\nimport React from 'react';\nimport moment from 'moment';\nimport defaultImage from '../../images/default-img.gif';\nimport { Link } from \"react-router-dom\";\nimport { Grid } from \"@material-ui/core\";\nimport ReactGA from 'react-ga4';\n\nexport interface IEventTileProps {\n    getLangString: (value: string) => string;\n    event: IEvent;\n}\n\nexport const EventTile = (props: IEventTileProps): JSX.Element => {\n    // const dateFormatOptions = {\n    //     hour12: true,\n    //     day: 'numeric',\n    //     month: 'long',\n    //     year: '2-digit',\n    //     minute: '2-digit',\n    //     second: '2-digit',\n    // };\n\n    // try {\n    //     const formatedDate = moment(props.event.start).format('D MMMM   HH:mm');\n    //     console.log(formatedDate);\n    // } catch (e) {\n    //     console.error('Falied to convert date: ', props.event.start);\n    //     // console.error(e);\n    // }\n\n    return (\n        <Grid item xs={12} md={6} lg={4} className=\"event-tile-container\" role=\"article\">\n            <Link onClick={() => ReactGA.event({ category: 'Event', action: `Clicked on event: ${props.event.title}` })} to={'/events/' + props.event.id.replaceAll(':', '_') + '/' + props.event.start.toString().replaceAll(':', '_')}>\n                <div className=\"event-tile\">\n                    <div className=\"event-date-container\">\n                        <div className=\"event-date\">\n                            {/* {new Intl.DateTimeFormat(\"sv\", dateFormatOptions).format(props.event.start)} */}\n                            {moment(props.event.start).format('D MMMM')}\n                        </div>\n                        <div className=\"event-date\">\n                            {moment(props.event.start).format('HH:mm') !== '00:00' && moment(props.event.start).format('HH:mm')}\n                        </div>\n                    </div>\n\n                    <h3 className=\"event-title\">{props.event.title}</h3>\n\n                    <div className=\"event-image\">\n                        <img src={props.event.imageUrl == null ? defaultImage : props.event.imageUrl} alt={`${props.getLangString('global.image')} ${props.event?.title}`} className=\"img-fluid\" />\n                    </div>\n\n                </div>\n            </Link>\n        </Grid>\n    );\n}","import React from 'react'\nimport { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getEvents } from \"../../store/Events/Actions\";\nimport { IEvent } from '../../store/Events/Event';\nimport { Events, EventsLoading, FilteredEvents } from \"../../store/Events/Selector\";\nimport { EventTile } from './EventTile'\nimport { Loader } from '../common/loader/Loader';\nimport './ThemeEvent.scss';\nimport { Grid, Button } from '@material-ui/core';\nimport { EventsPageScrollPosition } from '../../store/Events/Selector';\nimport { setEventsPageScrollPosition } from '../../store/Events/Actions';\n\nexport interface IEventListProps {\n    getLangString: (value: string) => string;\n}\n\nexport const EventList = (props: IEventListProps): JSX.Element => {\n\n    const dispatch = useDispatch();\n    const events = useSelector(Events);\n    const filteredEvents = useSelector(FilteredEvents);\n    const eventsLoading = useSelector(EventsLoading);\n    const eventsPageScrollPosition = useSelector(EventsPageScrollPosition);\n\n    useEffect(() => {\n        if ((!events || events.length === 0) && !eventsLoading) {\n            dispatch(getEvents());\n        }\n    }, [dispatch, events, eventsLoading]);\n\n    useEffect(() => {\n        if (filteredEvents.length > 0 && eventsPageScrollPosition > 0) {\n            window.scrollTo({ top: eventsPageScrollPosition });\n            dispatch(setEventsPageScrollPosition(0));\n        }\n    }, [filteredEvents, eventsPageScrollPosition]);\n\n    useEffect(() => {\n        return () => {\n            dispatch(setEventsPageScrollPosition(window.scrollY));\n        }\n    }, []);\n\n    return (\n        <React.Fragment>\n            {eventsLoading ?\n                <Loader getLangString={props.getLangString} />\n                :\n                <React.Fragment>\n                    <Grid container direction=\"row\" className=\"eventlist-container\" role=\"feed\">\n                        {filteredEvents && filteredEvents.map((event: IEvent, index: number) =>\n                            <EventTile getLangString={props.getLangString} event={event} key={index} />\n                        )}\n                        {(filteredEvents && filteredEvents.length === 0) &&\n                            <React.Fragment>\n                                <h4>{props.getLangString('event.noEvents')}</h4>\n                            </React.Fragment>\n                        }\n                    </Grid>\n                    <Grid container direction=\"row\" className=\"eventlist-button-container\">\n                        <Grid item xs={12} className=\"navigation-option\">\n                            <Button variant=\"outlined\" onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })} className=\"back-to-top-button blue\">{'Tillbaka till toppen'}</Button>\n                        </Grid>\n                    </Grid>\n                </React.Fragment>\n            }\n        </React.Fragment>\n    )\n}\n","import React from 'react';\nimport { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport { IEvent } from '../../../store/Events/Event';\nimport './ThemeDatePicker.scss';\nimport { Button, Grid } from '@material-ui/core';\nimport moment from 'moment';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IDatePickerProps {\n    getLangString: (value: string) => string;\n    eventStart: Date;\n    relatedEvents?: IEvent[] | undefined;\n}\n\nexport const DateList = (props: IDatePickerProps): JSX.Element => {\n    const { relatedEvents, eventStart, getLangString } = props;\n    const [eventsCurrentMonth, setEventsCurrentMonth] = React.useState<IEvent[] | undefined>(relatedEvents?.filter((e) => new Date(eventStart).getMonth() === new Date(e.start).getMonth()));\n    const [currentMonth, setCurrentMonth] = React.useState<number | undefined>(new Date(eventStart).getMonth());\n\n    const handleDates = (nextMonth: boolean) => {\n        if (relatedEvents && currentMonth) {\n            if (nextMonth) {\n                const nextMonth = currentMonth + 1;\n                setCurrentMonth(nextMonth);\n                const eventCurrentMonth = relatedEvents?.filter((e) => nextMonth === new Date(e.start).getMonth());\n                setEventsCurrentMonth(eventCurrentMonth);\n            } else {\n                const prevMonth = currentMonth - 1;\n                setCurrentMonth(prevMonth);\n                const eventCurrentMonth = relatedEvents?.filter((e) => prevMonth === new Date(e.start).getMonth());\n                setEventsCurrentMonth(eventCurrentMonth);\n            }\n        }\n    }\n\n    return (\n        <Grid container direction=\"row\" justifyContent=\"flex-start\" alignItems=\"flex-start\" className=\"date-list-container\">\n            {currentMonth &&\n                <React.Fragment>\n                    <Grid container direction=\"row\" className=\"date-title\">\n                        <Grid item xs={6}>\n                            {moment(new Date().setMonth(currentMonth)).format('MMMM YYYY')}\n                        </Grid>\n                        <Grid item xs={6}>\n                            <div className=\"button-container\">\n                            <Button className=\"button\" disabled={currentMonth <= new Date().getMonth()} onClick={() => handleDates(false)}><FontAwesomeIcon icon={faChevronLeft} className=\"icon\" size=\"sm\" /></Button>\n                            <Button className=\"button\" onClick={() => handleDates(true)}><FontAwesomeIcon icon={faChevronRight} className=\"icon\" size=\"sm\" /></Button>\n                            </div>\n                        </Grid>\n                    </Grid>\n                    {eventsCurrentMonth && eventsCurrentMonth.length > 0 ?\n                        <React.Fragment>\n                            {eventsCurrentMonth?.map((event: IEvent, index: number) =>\n                                <React.Fragment key={index}>\n                                    <Grid item xs={6}>\n                                        {moment(event.start).format('D MMMM')}\n                                    </Grid>\n                                    <Grid item xs={6}>\n                                        {moment(event?.start).format('HH:mm') === '00:00' && moment(event?.end).format('HH:mm') === '00:00' ?\n                                            <span className=\"details-time\">\n                                                {getLangString('event.aroundTheClock')}\n                                            </span>\n                                            :\n                                            <React.Fragment>\n                                                <span className=\"details-time\">\n                                                {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm')}\n                                                </span>\n                                            </React.Fragment>\n                                        }\n                                    </Grid>\n                                </React.Fragment>\n                            )}\n                        </React.Fragment>\n                        :\n                        <span>\n                            {props.getLangString('event.noEventsThisMonth')}\n                        </span>\n                    }\n\n                </React.Fragment>\n            }\n\n        </Grid>\n    )\n}","export const SET_TITLE = 'SET_TITLE';\nexport const SET_TITLE_FAILURE = 'SET_TITLE_FAILURE';\nexport const CLEAR_TITLE = 'CLEAR_TITLE';\nexport const CLEAR_TITLE_FAILURE = 'CLEAR_TITLE_FAILURE';\n\nexport interface IBreadcrumbs {\n    title: string;\n    error?: string;\n}\n\ninterface SetTitle {\n    type: typeof SET_TITLE,\n    payload: string;\n}\n\ninterface SetTitleFailure {\n    type: typeof SET_TITLE_FAILURE,\n    payload: string;\n}\n\ninterface ClearTitle {\n    type: typeof CLEAR_TITLE,\n}\n\ninterface ClearTitleFailure {\n    type: typeof CLEAR_TITLE_FAILURE,\n    payload: string;\n}\n\nexport type BreadcrumbsActionTypes = SetTitle | SetTitleFailure | ClearTitle | ClearTitleFailure;","import moment from 'moment';\nimport 'moment/locale/sv';\nimport React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { ICategory, IEvent } from '../../store/Events/Event';\nimport { Events, EventsLoading } from '../../store/Events/Selector';\nimport defaultImage from '../../images/default-img.gif';\nimport './ThemeEvent.scss';\nimport { getEvents } from '../../store/Events/Actions';\nimport { Button, Grid, Hidden, Link } from '@material-ui/core';\nimport { DateList } from '../common/datepicker/DateList';\nimport useDeviceDetect from '../../utils/hooks/DeviceDetect';\nimport { setTitle, clearTitle } from '../../store/Breadcrumbs/Actions';\nimport { Share } from '../common/share/Share';\nimport { SEO } from '../common/seo/SEO';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\n\ninterface ParamTypes {\n    id: string,\n    start: string\n}\n\nexport interface IEventDetailsProps {\n    getLangString: (value: string) => string;\n}\n\nexport const EventDetails = (props: IEventDetailsProps): JSX.Element => {\n    const { id, start } = useParams<ParamTypes>();\n    const events = useSelector(Events);\n    const eventsLoading = useSelector(EventsLoading);\n    const [event, setEvent] = useState<IEvent | undefined>();\n    const [relatedEvents, setRelatedEvents] = useState<IEvent[] | undefined>();\n    const [dateList, setDateList] = React.useState(false);\n\n    const { isMobile } = useDeviceDetect();\n\n    const dispatch = useDispatch();\n\n    useEffect(() => {\n        if ((!events || events.length === 0) && !eventsLoading) {\n            dispatch(getEvents());\n        }\n        window.scrollTo(0, 0);\n\n    }, [dispatch]);\n\n    useEffect(() => {\n        const fixedId = id.replaceAll('_', ':');\n        const fixedStart = start.replaceAll('_', ':');\n        const eventId = decodeURIComponent(fixedId);\n        const startDate = new Date(decodeURIComponent(fixedStart));\n        const eventToShow = events.find(e => e.id === eventId && new Date(e.start).getTime() === startDate.getTime());\n        if (eventToShow != null) {\n            setEvent(eventToShow);\n        }\n        // Related events\n        const relatedEvents = events.filter((e) => e.id === eventId);\n        if (relatedEvents != null) {\n            setRelatedEvents(relatedEvents);\n        }\n\n    }, [events, id, start, event]);\n\n    useEffect(() => {\n        if (event) {\n            dispatch(setTitle(event?.title));\n        }\n\n        return function cleanup() {\n            dispatch(clearTitle());\n        }\n    }, [event]);\n\n    return (\n        <div className=\"event-details-wrapper\" role=\"article\">\n            {event &&\n                <SEO title={`${event?.title} |  ${props.getLangString('global.pageTitle')}`} description={event?.description} imageUrl={event?.imageUrl} />\n            }\n\n            <Grid container direction=\"row\">\n                <Grid item xs={12}>\n                    <div className=\"event-date-container\">\n                        <div className=\"event-date\">\n                            {/* {new Intl.DateTimeFormat(\"sv\", dateFormatOptions).format(props.event.start)} */}\n                            {moment(event?.start).format('D MMMM')}\n                        </div>\n                        <div className=\"event-date\">\n                            {moment(event?.start).format('HH:mm') !== '00:00' &&\n                                <React.Fragment>\n                                    {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm') !== '00:00' && moment(event?.end).format('HH:mm')}\n                                </React.Fragment>\n                            }\n                        </div>\n                    </div>\n                    <Grid item xs={12} md={8}>\n                        <h1 className=\"event-title\">{event?.title}</h1>\n                    </Grid>\n\n                    <Hidden mdUp={true}>\n                        <div className=\"event-image\">\n                            <img src={event?.imageUrl == null ? defaultImage : event?.imageUrl} alt={`${props.getLangString('global.image')} ${event?.title}`} className=\"img-fluid\" />\n                        </div>\n                    </Hidden>\n                </Grid>\n            </Grid>\n\n            <Grid container direction=\"row\">\n                <Grid item xs={12} md={8} className=\"event-main\">\n                    <div className=\"event-ingress\">\n                        {event?.ingress}\n                    </div>\n                    {event && \n                        <ReactMarkdown rehypePlugins={[rehypeRaw]} className=\"event-description\">\n                            {event?.description}\n                        </ReactMarkdown>\n                    }\n                    <Hidden mdDown={true}>\n                        <div className=\"event-image\">\n                            <img src={event?.imageUrl == null ? defaultImage : event?.imageUrl} alt={`${props.getLangString('global.image')} ${event?.title}`} className=\"img-fluid\" />\n                        </div>\n                    </Hidden>\n                </Grid>\n\n                <Grid item xs={12} md={4} className=\"event-tile\">\n                    {isMobile &&\n                        <Grid item xs={12} className=\"hr-grid-item\">\n                            <div className=\"horizontalRow\">\n                                <hr></hr>\n                            </div>\n                        </Grid>\n                    }\n                    <h3 className=\"sub-title main\">{props.getLangString('event.dateAndTime')}</h3>\n                    <h4 className=\"event-details-title\">{props.getLangString('global.date')}</h4>\n                    <div className=\"event-details\"> {moment(event?.start).format('D MMMM YYYY')}</div>\n                    {moment(event?.start).format('HH:mm') !== '00:00' &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('global.time')}</h4>\n                            <div className=\"event-details\">\n                                {moment(event?.start).format('HH:mm')} - {moment(event?.end).format('HH:mm') !== '00:00' && moment(event?.end).format('HH:mm')}\n                            </div>\n                        </React.Fragment>\n                    }\n                    {event?.location &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.location')}</h4>\n                            <div className=\"event-details\">\n                                {event?.location.name}\n                            </div>\n                        </React.Fragment>\n                    }\n                    {event?.categories && event?.categories.length > 0 &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.category')}</h4>\n                            <div className=\"event-details\">\n                                {event?.categories.map((category: ICategory, index: number) =>\n                                    <React.Fragment key={index}>\n                                        {category.title}\n                                        <div className={`${event?.categories && event?.categories.length - 1 === index ? 'hide' : 'inline'}`}>\n                                            {', '}\n                                        </div>\n                                    </React.Fragment>\n                                )}\n                            </div>\n                        </React.Fragment>\n                    }\n                    {relatedEvents && relatedEvents.length > 1 &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.furtherDates')}</h4>\n                            <button className=\"day-picker-btn\" onClick={() => setDateList(!dateList)}><span className=\"day-picker-btn-text\">{`${dateList ? props.getLangString('event.hideDates') : props.getLangString('event.showOtherDates')}`}</span></button>\n                            {dateList &&\n                                <DateList getLangString={props.getLangString} relatedEvents={relatedEvents} eventStart={event?.start ? event.start : new Date()} />\n                            }\n                        </React.Fragment>\n                    }\n\n                    {(event?.phoneNumber || event?.email) && isMobile &&\n                        <Grid item xs={12} className=\"hr-grid-item\">\n                            <div className=\"horizontalRow\">\n                                <hr></hr>\n                            </div>\n                        </Grid>\n                    }\n\n                    {(event?.phoneNumber || event?.email) &&\n                        <h3 className=\"sub-title\">{props.getLangString('event.contactInformation')}</h3>\n                    }\n                    {event?.phoneNumber &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.phoneNumber')}</h4>\n                            <div className=\"event-details\">\n                                <a href={`tel: ${event?.phoneNumber}`} className={'contact_info_link'}>{event?.phoneNumber}</a>\n                            </div>\n                        </React.Fragment>\n                    }\n                    {event?.email &&\n                        <React.Fragment>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.email')}</h4>\n                            <div className=\"event-details breakline\">\n                                <a href={`mailto: ${event?.email}`} className={'contact_info_link'}>{event?.email}</a>\n                            </div>\n                        </React.Fragment>\n                    }\n\n                    {event?.webpage && isMobile &&\n                        <Grid item xs={12} className=\"hr-grid-item\">\n                            <div className=\"horizontalRow\">\n                                <hr></hr>\n                            </div>\n                        </Grid>\n                    }\n\n                    {event?.webpage &&\n                        <React.Fragment>\n                            <h3 className=\"sub-title\">{props.getLangString('event.links')}</h3>\n                            <h4 className=\"event-details-title\">{props.getLangString('event.webpage')}</h4>\n                            <div className=\"event-details breakline\">\n                                <Link href={event?.webpage} target=\"_blank\" rel=\"noopener\">{event?.webpage}</Link>\n                            </div>\n                        </React.Fragment>\n                    }\n                    {event?.bookingLink &&\n                        <React.Fragment>\n                            <div className=\"event-details breakline\">\n                                <Button href={event?.bookingLink} target=\"_blank\" className=\"booking-link\">\n                                    <span>\n                                        {props.getLangString('map.bookTicket')}\n                                    </span>\n                                </Button>\n                            </div>\n                        </React.Fragment>\n                    }\n\n                    {event?.title &&\n                        <Share title={event?.title} getLangString={props.getLangString} />\n                    }\n\n                </Grid>\n            </Grid>\n        </div>\n    )\n}\n","import { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as BreadcrumbsActionTypes from './ActionTypes'\n\nexport const setTitle = (title: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: BreadcrumbsActionTypes.SET_TITLE,\n            payload: title\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: BreadcrumbsActionTypes.SET_TITLE_FAILURE, payload: error })\n    }\n}\n\nexport const clearTitle = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({\n            type: BreadcrumbsActionTypes.CLEAR_TITLE\n        });\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: BreadcrumbsActionTypes.CLEAR_TITLE_FAILURE, payload: error })\n    }\n}","import React, { useRef, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport './ThemeReport.scss';\n\ndeclare global {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    interface Window { tableau: any; }\n}\n\nwindow.tableau = window.tableau || {};\n\n// Hack to make the Tableau embed code work inte TypeScript.. \ndeclare const window: Window;\ninterface ParamTypes {\n    id: string\n}\nexport const Report = (): JSX.Element => {\n    const { tableau } = window;\n    const ref = useRef(null);\n    const { id } = useParams<ParamTypes>();\n\n    useEffect(() => {\n        const url = 'https://public.tableau.com/views/' + decodeURIComponent(id); // id.replaceAll('|', '/'); //?:language=en&:display_count=y&publish=yes&:origin=viz_share_link\n        new tableau.Viz(ref.current, url);\n    }, [tableau.Viz, id]);\n\n    return (\n        <div ref={ref} className=\"report-container\"></div>\n    )\n}","import React from 'react'\nimport { RichText, RichTextBlock } from 'prismic-reactjs'\nimport { LinkResolver } from '../../../utils/prismic/LinkResolver';\nimport './PrismicRichText.scss';\n\nexport interface IPrismicRichTextProps {\n    render: RichTextBlock[]\n}\nexport const PrismicRichText = (props: IPrismicRichTextProps): JSX.Element => {\n    return (\n        <div className=\"prismic\">\n            <RichText render={props.render} linkResolver={LinkResolver} />\n        </div>\n    );\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from 'react';\nimport { Grid } from '@material-ui/core';\nimport './ThemeAboutLive.scss';\nimport Prismic from '@prismicio/client';\nimport { RichText } from 'prismic-reactjs';\nimport { Document } from '@prismicio/client/types/documents';\nimport { PRISMIC_URL, PRISMIC_TOKEN } from '../../Constants';\nimport { PrismicRichText } from '../common/prismic/PrismicRichText';\nimport { SEO } from '../common/seo/SEO';\nimport { useTranslation } from 'react-i18next';\n\nexport const AboutLive = (): JSX.Element => {\n  const client = Prismic.client(PRISMIC_URL, { accessToken: PRISMIC_TOKEN });\n  const [doc, setDocData] = React.useState<Document | undefined>();\n  const { t } = useTranslation('common');\n\n  React.useEffect(() => {\n    const fetchData = async () => {\n      const doc = await client.getSingle('about', {});\n      setDocData(doc);\n    };\n    fetchData();\n  }, []);\n\n  return (\n    <React.Fragment>\n      <SEO title={t('topNavigation.aboutRonneby')} />\n      {doc && (\n        <React.Fragment>\n          <div className=\"about-wrapper\" role=\"article\">\n            <Grid container direction=\"row\" role=\"feed\">\n              <Grid item xs={12} role=\"article\">\n                <Grid item xs={12} md={8}>\n                  <h1>{RichText.asText(doc.data.title)}</h1>\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid container direction=\"row\">\n              <Grid item xs={12} md={8} className=\"about-main\">\n                <PrismicRichText render={doc.data.body} />\n              </Grid>\n              <Grid item xs={12} md={4} className=\"about-tile\">\n                {doc.data.contacts &&\n                  doc.data.contacts.map((contact: any, index: number) => {\n                    return (\n                      <div key={index}>\n                        <PrismicRichText render={contact.contacttitle} />\n                        <PrismicRichText render={contact.contactbody} />\n                      </div>\n                    );\n                  })}\n              </Grid>\n            </Grid>\n          </div>\n        </React.Fragment>\n      )}\n    </React.Fragment>\n  );\n};\n","export interface ISettings {\n    defaultFilters: string[];\n    defaultEventCategories: string[];\n    markerIsLiveHours: number;\n}\n\nexport enum AdminTools {\n    Admin = 1,\n    Filter = 2\n}\n","import React from 'react'\nimport './ThemeAdminTool.scss';\nimport { faTools } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IAdminToolProps {\n    getLangString: (value: string) => string;\n}\n\nexport const AdminTool = (props: IAdminToolProps): JSX.Element => {\n    return (\n        <div className=\"admin-tool-container\">\n            <span className=\"admin-title\">{props.getLangString('admin.adminTitle')}</span>\n            <span className=\"admin-text\">{props.getLangString('admin.adminSubTitle')}</span>\n            <span className=\"admin-text\">{props.getLangString('admin.adminDescription')}</span>\n            <FontAwesomeIcon icon={faTools} className=\"admin-tool-icon\" />\n        </div>\n    );\n}","import { ISettings } from \"./Settings\";\n\nexport const GET_SETTINGS_BEGIN = 'GET_SETTINGS_BEGIN';\nexport const GET_SETTINGS_SUCCESS = 'GET_SETTINGS_SUCCESS';\nexport const GET_SETTINGS_FAILURE = 'GET_SETTINGS_FAILURE';\nexport const SET_SETTINGS_BEGIN = 'SET_SETTINGS_BEGIN';\nexport const SET_SETTINGS_SUCCESS = 'SET_SETTINGS_SUCCESS';\nexport const SET_SETTINGS_FAILURE = 'SET_SETTINGS_FAILURE';\n\nexport interface ISettingsState {\n    defaultFilters: string[];\n    defaultEventCategories: string[];\n    markerIsLiveHours: number;\n    loading: boolean,\n    error?: string\n}\n\ninterface GetSettingsBeginAction {\n    type: typeof GET_SETTINGS_BEGIN\n}\n\ninterface GetSettingsSuccessAction {\n    type: typeof GET_SETTINGS_SUCCESS,\n    payload: ISettings\n}\n\ninterface GetSettingsFailure {\n    type: typeof GET_SETTINGS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\ninterface SetSettingsBeginAction {\n    type: typeof SET_SETTINGS_BEGIN\n}\n\ninterface SetSettingsSuccessAction {\n    type: typeof SET_SETTINGS_SUCCESS,\n    payload: ISettings\n}\n\ninterface SetSettingsFailure {\n    type: typeof SET_SETTINGS_FAILURE,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    payload: any\n}\n\nexport type SettingsActionTypes = GetSettingsBeginAction | GetSettingsSuccessAction | GetSettingsFailure | SetSettingsBeginAction | SetSettingsSuccessAction | SetSettingsFailure;\n","import React, { useEffect, useState } from 'react'\nimport './ThemeFilterTool.scss';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Settings, SettingsErrors, SettingsLoading } from '../../../../store/Settings/Selector';\nimport { IFilter } from '../../../../store/Filters/Filter';\nimport { Filters, FiltersLoading } from '../../../../store/Filters/Selector';\nimport { getFilters } from '../../../../store/Filters/Actions';\nimport { Button } from '@material-ui/core';\nimport { Loader } from '../../../common/loader/Loader';\nimport { updateSettings } from '../../../../store/Settings/Actions';\nimport { ISettings } from '../../../../store/Settings/Settings';\nimport { useAuth } from '../../../../services/auth-context';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface IFilterToolProps {\n    getLangString: (value: string) => string;\n}\n\nexport const FilterTool = (props: IFilterToolProps): JSX.Element => {\n    const [selectedFilters, setSelectedFilters] = useState<string[]>([]);\n    const [loading, setLoading] = useState<boolean>(false);\n    const [settings, setSettings] = useState<ISettings>({} as ISettings);\n    const [filters, setFilters] = useState<IFilter[]>([]);\n    const [error, setError] = useState<string>(\"\");\n    const [disableSaveBtn, setDisableSaveBtn] = useState<boolean>(false);\n\n    const dispatch = useDispatch();\n    const { getApiToken } = useAuth();\n\n    const storeSettings = useSelector(Settings);\n    const storeLoadingSettings = useSelector(SettingsLoading);\n    const storeSettingErrors = useSelector(SettingsErrors);\n    const storeFilters = useSelector(Filters);\n    const storeLoadingFilters = useSelector(FiltersLoading);\n\n    useEffect(() => {\n        dispatch(getFilters());\n    }, []);\n\n    useEffect(() => {\n        setSettings(storeSettings);\n    }, [storeSettings]);\n\n    useEffect(() => {\n        setFilters(storeFilters);\n    }, [storeFilters]);\n\n    useEffect(() => {\n        setSelectedFilters(settings.defaultFilters);\n    }, [settings])\n\n    useEffect(() => {\n        if (storeLoadingFilters || storeLoadingSettings) {\n            setLoading(true);\n        } else {\n            setLoading(false);\n        }\n    }, [storeLoadingFilters, storeLoadingSettings]);\n\n    useEffect(() => {\n        if (storeSettingErrors) {\n            setError(storeSettingErrors);\n        }\n    }, [storeSettingErrors]);\n\n    useEffect(() => {\n        if (selectedFilters?.every(selectedFilter => settings.defaultFilters?.includes(selectedFilter)) &&\n            settings.defaultFilters?.every(defaultFilter => selectedFilters?.includes(defaultFilter))) {\n            setDisableSaveBtn(true);\n        } else {\n            setDisableSaveBtn(false);\n        }\n    }, [selectedFilters]);\n\n    const handleSelecteFilter = (filter: IFilter) => {\n        if (selectedFilters.find(selectedFilter => selectedFilter === filter.title)) {\n            setSelectedFilters(selectedFilters.filter(selectedFilter => selectedFilter !== filter.title));\n        } else {\n            setSelectedFilters([...selectedFilters, filter.title]);\n        }\n    };\n\n    const handleSaveDefaultFilters = async () => {\n        const token = await getApiToken();\n        const updatedSettings = { ...settings, defaultFilters: selectedFilters };\n        dispatch(updateSettings(updatedSettings, token));\n    };\n\n    return (\n        <div className=\"filter-tool-container\">\n            <span className=\"filter-tool-title\">{props.getLangString('admin.filterTitle')}</span>\n            <span className=\"filter-tool-text\">{props.getLangString('admin.filterSubTitle')}</span>\n            {loading ?\n                <div className=\"loading-filter-container\">\n                    <Loader getLangString={props.getLangString} />\n                </div>\n                :\n                error ?\n                    <div className=\"error-tool-container\">\n                        <FontAwesomeIcon icon={faExclamationTriangle} className=\"error-tool-icon\" />\n                        <span className=\"error-tools-title\">{error}</span>\n                    </div>\n                    :\n                    <>\n                        <div className=\"filter-tool-list\">\n                            {filters.map((filter: IFilter, index: number) =>\n                                <div className=\"filter-tool-list-container\" key={index}>\n                                    <div className=\"filter-tool-list-item\" onClick={() => handleSelecteFilter(filter)}>\n                                        <div className={`filter-tool-list-icon ${selectedFilters?.find(selectedFilter => selectedFilter === filter.title) && \"selected\"}`}></div>\n                                        <span className=\"filter-tool-list-text\">{filter.title}</span>\n                                    </div>\n                                </div>\n                            )}\n                        </div>\n                        <div className=\"filter-tool-button-container\">\n                            <Button\n                                className={`filter-tool-button ${disableSaveBtn && \"disabled\"}`}\n                                onClick={handleSaveDefaultFilters}\n                                disabled={disableSaveBtn}\n                            >\n                                {props.getLangString('admin.save')}\n                            </Button>\n                        </div>\n                    </>\n            }\n        </div>\n    );\n}","import axios from 'axios';\nimport { API_ROOT } from '../../Constants';\nimport { ThunkAction } from 'redux-thunk'\nimport { RootState } from '../RootReducer';\nimport { Action } from 'redux';\nimport * as SettingsActions from './ActionTypes'\nimport { ISettings } from './Settings';\n\nexport const getSettings = (): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        dispatch({ type: SettingsActions.GET_SETTINGS_BEGIN });\n\n        const result = await axios.get(`${API_ROOT}/Setting`);\n        dispatch({\n            type: SettingsActions.GET_SETTINGS_SUCCESS,\n            payload: result.data\n        });\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: SettingsActions.GET_SETTINGS_FAILURE, payload: error })\n    }\n}\n\nexport const updateSettings = (updatedSettings: ISettings, accessToken: string): ThunkAction<void, RootState, unknown, Action<string>> => async dispatch => {\n    try {\n        \n        dispatch({ type: SettingsActions.SET_SETTINGS_BEGIN });\n\n        if (accessToken === \"\" || accessToken === undefined) {\n            dispatch({ type: SettingsActions.SET_SETTINGS_FAILURE, payload: \"You do not have access to perform this action\" })\n        } else {\n            const headers = {\n                Authorization: `Bearer ${accessToken}`,\n                'Content-Type': 'application/json',\n            }\n            const queryString: string = JSON.stringify(updatedSettings);\n\n            const result = await axios.post(`${API_ROOT}/Setting`, queryString, { headers: headers });\n\n            dispatch({ type: SettingsActions.SET_SETTINGS_SUCCESS, payload: result.data });\n        }\n\n    } catch (error) {\n        console.error(error);\n        dispatch({ type: SettingsActions.SET_SETTINGS_FAILURE, payload: \"Failed to update default filters, please contact administrator\" })\n    }\n} ","import React from 'react'\nimport './ThemeAdminToolbox.scss';\nimport { Grid } from '@material-ui/core';\nimport { AdminTools } from '../../store/Settings/Settings';\nimport { AdminTool } from './tools/admin/AdminTool';\nimport { FilterTool } from './tools/filter/FilterTool';\n\nexport interface IAdminToolboxProps {\n    getLangString: (value: string) => string;\n}\n\nexport const AdminToolbox = (props: IAdminToolboxProps): JSX.Element => {\n    const [currentTool, setCurrentTool] = React.useState<AdminTools>(AdminTools.Admin);\n\n    const handleToolChange = (tool: AdminTools) => {\n        setCurrentTool(tool);\n    };\n\n    return (\n        <Grid container className=\"admin-container\">\n            <Grid item xs={12} md={2}>\n                <div className=\"admin-options-container\">\n                    <div className={`tool-option ${currentTool === AdminTools.Admin && \"selected\"}`} onClick={() => handleToolChange(AdminTools.Admin)}>\n                        {props.getLangString('admin.admin')}\n                    </div>\n                    <div className={`tool-option ${currentTool === AdminTools.Filter && \"selected\"}`} onClick={() => handleToolChange(AdminTools.Filter)}>\n                    {props.getLangString('admin.filter')}\n                    </div>\n                </div>\n            </Grid>\n            <Grid item xs={12} md={10}>\n                <div className=\"admin-view-container\">\n                    {currentTool === AdminTools.Admin &&\n                        <AdminTool getLangString={props.getLangString} />\n                    }\n                    {currentTool === AdminTools.Filter &&\n                        <FilterTool getLangString={props.getLangString} />\n                    }\n                </div>\n            </Grid>\n        </Grid>\n    )\n}\n","import { Home } from '../../pages/Home';\nimport { Events } from '../../pages/Events';\nimport { Event } from '../../pages/Event';\nimport { ViewReport } from '../../pages/ViewReport';\nimport { About } from '../../pages/About';\nimport { Admin } from '../../pages/Admin';\n\n\nconst paths =  [\n    { path: \"/\", name: \"topNavigation.liveMap\", Component: Home },\n    { path: \"/events\", name: \"topNavigation.whatHappensInRonneby\", Component: Events },\n    { path: \"/events/:id/:start\", name: \"\", Component: Event },\n    { path: \"/live/report/:id\", name: \"\", Component: ViewReport },\n    { path: \"/about\", name: \"topNavigation.aboutRonneby\", Component: About },\n    { path: \"/admin\", name: \"Admin\", Component: Admin },\n];\n\nexport default paths;","import React from \"react\";\nimport { GoogleMaps } from '../components/map/google/GoogleMaps';\nimport { MapFilter } from '../components/map/filter/MapFilter';\nimport { Live } from '../components/common/live/Live';\n\nexport interface IHomeProps {\n    getLangString: (value: string) => string;\n}\n\nexport const Home = (props: IHomeProps) : JSX.Element => {\n    return (\n        <React.Fragment>\n            <Live getLangString={props.getLangString}/>\n            <GoogleMaps getLangString={props.getLangString}/>\n            <MapFilter getLangString={props.getLangString}/>\n        </React.Fragment>\n    );\n};","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { EventList } from '../components/event/EventList'\n\nexport interface IEventsProps{\n    getLangString: (value: string) => string;\n}\n\nexport const Events = (props: IEventsProps) : JSX.Element => {\n    return (\n        <Container role=\"main\">\n            <EventList getLangString={props.getLangString}/>\n        </Container>\n    );\n};","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { EventDetails } from '../components/event/EventDetails'\n\nexport interface IEventProps{\n    getLangString: (value: string) => string;\n}\n\nexport const Event = (props: IEventProps) : JSX.Element => {\n    return (\n        <Container role=\"main\">\n            <EventDetails getLangString={props.getLangString}/>\n        </Container>\n    );\n};","import { Grid, Container } from '@material-ui/core';\nimport React from 'react';\nimport { Report } from '../components/tableau/Report';\n\nexport const ViewReport = () : JSX.Element => {\n    return (\n        <Container>\n            <Grid container direction=\"row\">\n                <Grid item xs={12}>\n                    <Report />\n                </Grid>\n            </Grid>\n        </Container>\n    );\n}","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport { AboutLive } from '../components/about/AboutLive';\n\nexport const About = (): JSX.Element => {\n    return (\n        <Container role=\"main\">\n            <AboutLive />\n        </Container>\n    );\n};","import React, { useEffect } from 'react';\nimport { Container } from '@material-ui/core';\nimport { AdminToolbox } from '../components/admin/AdminToolbox';\nimport './ThemeAdmin.scss';\nimport { useAuth } from '../services/auth-context';\nimport { Loader } from '../components/common/loader/Loader';\n\nexport interface IAdminProps {\n    getLangString: (value: string) => string;\n}\n\nexport const Admin = (props: IAdminProps): JSX.Element => {\n    const { user, refreshTokensAndUserInfo } = useAuth();\n\n    useEffect(() => {\n        refreshTokensAndUserInfo();\n    }, []);\n\n    return (\n        user == null ?\n            <Loader getLangString={props.getLangString} />\n            :\n            user?.aadAccess ?\n                <Container role=\"main\">\n                    <AdminToolbox getLangString={props.getLangString} />\n                </Container>\n                :\n                <div className=\"no-access-wrapper\">\n                    <span className=\"no-access-title\">{props.getLangString('admin.noAccessTitle')}</span>\n                    <span className=\"no-access-description\">{props.getLangString('admin.noAccessDescription')}</span>\n                </div>\n    );\n};","import { RootState } from \"../RootReducer\";\n\nexport const Title = (state: RootState): string => state.breadcrumbs.title;\n","\nimport React from \"react\";\nimport { useTranslation } from 'react-i18next';\nimport { Link } from \"react-router-dom\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons'\nimport './ThemeBreadcrumbs.scss';\nimport { Container } from \"@material-ui/core\";\nimport { useSelector } from \"react-redux\";\nimport { Title } from '../../store/Breadcrumbs/Selector';\n\n\nexport interface IBreadcrumbsProps {\n    breadcrumbs: IBreadCrumb[];\n}\n\nexport interface IBreadCrumb {\n    path: string;\n    name: string;\n}\n\nexport const Breadcrumbs = (props: IBreadcrumbsProps): JSX.Element | null => {\n    const title = useSelector(Title);\n    const { t } = useTranslation('common');\n    if (props.breadcrumbs.length <= 1) {\n        return null;\n    }\n\n    return (\n        <Container>\n            <div className=\"breadcrumbs-wrapper\" role=\"complementary\">\n                {props.breadcrumbs.map(({ name, path }: IBreadCrumb, key: number) =>\n                    key + 1 === props.breadcrumbs.length ? (\n                        <span key={key} className=\"breadcrumb-last\">\n                            {title ? title :  t(name)}\n                        </span>\n                    ) : (\n                        <React.Fragment key={key}>\n                            <Link className=\"breadcrumbs-link\" to={path}>\n                                {t(name)}\n                            </Link>\n\n                            <FontAwesomeIcon\n                                icon={faChevronRight}\n                                className=\"breadcrumbs-icon\"\n                                size=\"xs\"\n                            />\n                        </React.Fragment>\n                    )\n                )}\n            </div>\n        </Container>\n    )\n}\n\nexport default Breadcrumbs;","import React, { KeyboardEvent } from \"react\";\nimport { ICategory } from \"../../../store/Events/Event\";\n\ninterface ICategoryFilterItemProps {\n    category: ICategory;\n    active: boolean;\n    onClick: (category: ICategory) => void;\n}\n\nexport const CategoryFilterItem = (props: ICategoryFilterItemProps): JSX.Element => {\n    const onKeyUp = (e: KeyboardEvent<HTMLInputElement>, c: ICategory) => {\n        if (e.keyCode === 13) {\n            props.onClick(c);\n        }\n    }\n\n    return (\n        <div\n            tabIndex={0}\n            className={`category-picker-item ${props.active ? 'active' : ''} `}\n            onClick={() => props.onClick(props.category)}\n            onKeyUp={(event: KeyboardEvent<HTMLInputElement>) => onKeyUp(event, props.category)}\n        >\n            {props.category.title}\n        </div>\n    );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { ICategory } from '../../../store/Events/Event';\nimport { Button } from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\nimport { CategoryFilterItem } from './CategoryFilterItem';\nimport useDeviceDetect from '../../../utils/hooks/DeviceDetect';\n\nexport interface ICategoryFilterProps {\n    categories: ICategory[];\n    selectedCategories?: ICategory[];\n    onChangeCategory: (categories: ICategory[]) => void;\n    getLangString: (value: string) => string;\n}\n\nexport const CategoryFilter = (props: ICategoryFilterProps): JSX.Element => {\n    const [selectedCategories, setSelectedCategories] = useState<ICategory[]>(props.selectedCategories ?? []);\n    const [menuOpen, setMenuOpen] = useState(false);\n    const refCategoryFilter = useRef<HTMLDivElement>(null);\n    const { isMobile } = useDeviceDetect();\n\n    const handleClickFilter = (categories: ICategory[]) => {\n        props.onChangeCategory(categories);       \n    }\n\n    const handleClickItem = (category: ICategory) => {\n        if (selectedCategories.some(c => c.id === category.id)) {\n            setSelectedCategories(selectedCategories.filter(c => c.id !== category.id));\n        } else {\n            setSelectedCategories(selectedCategories.concat([category]));\n        }\n        \n    }\n    useEffect(()=>{\n        handleClickFilter(selectedCategories);\n    }, [selectedCategories]);\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const handleClickRef = (e: { target: any }) => {\n        if (refCategoryFilter.current && !refCategoryFilter.current?.contains(e.target)) {\n            setMenuOpen(false);\n        }\n    }\n    useEffect(() => {\n        setSelectedCategories(props.selectedCategories ?? []);\n    }, [props.selectedCategories]);\n\n    useEffect(() => {\n        document.addEventListener(\"mousedown\", handleClickRef);\n        return () => {\n            document.removeEventListener(\"mousedown\", handleClickRef);\n        };\n    }, []);\n\n    return (\n        <div ref={refCategoryFilter} className={`select category ${menuOpen ? 'open' : 'closed'}`}>\n            <Button onClick={() => setMenuOpen(!menuOpen)}>\n                {(isMobile || menuOpen || (selectedCategories && selectedCategories.length === 0)) ?\n                    props.getLangString('event.filter.selectCategories') :\n                    (!isMobile && selectedCategories && selectedCategories.length === 1) ?\n                        selectedCategories[0].title :\n                        selectedCategories?.length + props.getLangString('event.filter.categoriesPicked')\n                }\n\n                <FontAwesomeIcon icon={faChevronDown} className={`chevron-down ${menuOpen ? 'open' : ''}`} />\n            </Button>\n            {menuOpen &&\n                <React.Fragment>\n                    <hr className=\"solid\" />\n                    {props.categories && props.categories.map((c: ICategory, i: number) => (\n                        <CategoryFilterItem\n                            key={i}\n                            category={c}\n                            active={selectedCategories.some(cat => cat.id === c.id) ? true : false}\n                            onClick={(category) => handleClickItem(category)}\n                        />\n                    ))}\n\n                    \n                </React.Fragment>\n            }\n        </div>\n    );\n}\n","import React from 'react';\nimport AdapterDateFns from '@material-ui/lab/AdapterDateFns';\nimport LocalizaitonProvider from '@material-ui/lab/LocalizationProvider';\nimport svLocale from 'date-fns/locale/sv';\nimport { PickersDay, DayPicker } from '@material-ui/lab';\nimport './ThemeDatePicker.scss';\nimport { Grid } from '@material-ui/core';\n\nexport interface IDatePickerProps {\n    getLangString: (value: string) => string;\n    date: Date | null;\n    setDate: (selectedValue: Date | null) => void;\n}\n\nexport const DatePicker = (props: IDatePickerProps): JSX.Element => {\n    const { setDate } = props;\n\n    return (\n        <Grid container direction=\"row\" justifyContent=\"flex-start\" alignItems=\"flex-start\">\n            <Grid item xs={12}>\n                <LocalizaitonProvider dateAdapter={AdapterDateFns} locale={svLocale}>\n                    <DayPicker\n                        reduceAnimations={true}\n                        allowKeyboardControl={false}\n                        date={props.date}\n                        onChange={(newDate) => setDate(newDate)}\n                        onYearChange={(newDate) => setDate(newDate)}\n                        disablePast={true}\n                        renderDay={(day, higlightedDays, DayComponentProps) => {\n                            const outDated = !DayComponentProps.outsideCurrentMonth && day < new Date();\n                            return (\n                                <React.Fragment key={day.getDate()}>\n                                        <PickersDay aria-label={`${props.getLangString('event.selectDate')} ${day.getDate()}`} {...DayComponentProps} className={outDated ? 'outdated' : ''} />\n                                </React.Fragment>\n                            );\n                        }}\n                    />\n                </LocalizaitonProvider>\n            </Grid>\n        </Grid>\n    )\n}","import React, { useEffect, useRef, useState } from 'react';\nimport { DatePicker } from '../../common/datepicker/DatePicker';\nimport { Button } from \"@material-ui/core\";\nimport {  faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport interface IDateFilterProps {\n    date: Date;\n    selectedDate?: Date;\n    onChangeDate: (date: Date | null) => void;\n    getLangString: (value: string) => string;\n}\n\nexport const DateFilter = (props: IDateFilterProps): JSX.Element => {\n    const [selectedDate, setSelectedDate] = useState<Date | null>(props.selectedDate ?? null);\n    const [menuOpen, setMenuOpen] = useState(false);\n    const refDateFilter = useRef<HTMLDivElement>(null);\n\n    const handleClickDate = (date: Date | null) => {\n        setSelectedDate(date);\n        props.onChangeDate(date);\n        setMenuOpen(false)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const handleClickRef = (e: { target: any }) => {\n        if (refDateFilter.current && !refDateFilter.current?.contains(e.target)) {\n            setMenuOpen(false);\n        }\n    }\n\n    useEffect(() => {\n        document.addEventListener(\"mousedown\", handleClickRef);\n        return () => {\n            document.removeEventListener(\"mousedown\", handleClickRef);\n        };\n    }, []);\n\n    return (\n        <div ref={refDateFilter} className={`select date ${menuOpen ? 'open' : 'closed'}`}>\n            <Button onClick={() => setMenuOpen(!menuOpen)}>\n               \n                {!menuOpen && selectedDate ?\n                    selectedDate.toLocaleDateString('sv-SE', { day: 'numeric', month: 'long', year: 'numeric' })\n                    :\n                    props.getLangString('event.filter.showToDate')\n                }\n                {!menuOpen && <FontAwesomeIcon icon={faChevronDown} className=\"chevron-down\" />}\n            </Button>\n            {menuOpen &&\n                <React.Fragment>\n                    <hr className=\"solid\" />\n                    <DatePicker\n                        getLangString={props.getLangString}\n                        date={selectedDate}\n                        setDate={handleClickDate}\n                    />\n\n                    <div className=\"filter-btn-container\">\n                        <Button onClick={() => handleClickDate(null)} className=\"filter-btn border-btn\">\n                            {props.getLangString('event.filter.cleanDateFilter')}\n                        </Button>\n                    </div>\n                </React.Fragment>\n            }\n        </div>\n    );\n}\n","import React, { KeyboardEvent, useState } from \"react\";\nimport { faSearch } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Grid, TextField, Button } from \"@material-ui/core\";\n\ninterface ISearchProps {\n    filterText?: string;\n    onChangeText: (filterText: string) => void;\n    getLangString: (value: string) => string;\n}\n\nexport const SearchBar = (props: ISearchProps): JSX.Element => {\n    const [filterText, setFilterText] = useState(props.filterText ?? '');\n\n    const onKeyUp = (event: KeyboardEvent) => {\n        if (event.key === 'Enter') {\n            props.onChangeText(filterText);\n        }\n    }\n\n    return (\n        <Grid container direction=\"row\">\n            <Grid item xs={12} className=\"search-item\">\n                <div className=\"select search-field\">\n                    <FontAwesomeIcon icon={faSearch} className=\"search-icon\" />\n                    <TextField\n                        className=\"search-input\"\n                        value={filterText}\n                        onChange={(event) => setFilterText(event?.target.value)}\n                        onKeyUp={onKeyUp}\n                    />\n                </div>\n                <Button className=\"primary-btn search-btn\" onClick={() => props.onChangeText(filterText)}>\n                    {props.getLangString('event.filter.search')}\n                </Button>\n            </Grid>\n        </Grid>\n    );\n}\n","import React from \"react\";\n\nexport interface IFilterItemProps {\n    title: string;\n    id: string;\n    onDelete: (id: string) => void;\n}\n\nexport const FilterItem = (props: IFilterItemProps): JSX.Element => {\n    return (\n        <div className=\"filter-item\">\n            {props.title}\n            <span className=\"delete\" onClick={() => props.onDelete(props.id)}> x </span>\n        </div>\n    )\n};","import React, { useCallback, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { CategoryFilter } from './filters/CategoryFilter';\nimport { DateFilter } from './filters/DateFilter';\nimport { SearchBar } from './filters/SearchBar';\nimport { Button, Grid, Hidden, Paper } from \"@material-ui/core\";\nimport { Categories, Events } from \"../../store/Events/Selector\";\nimport { ICategory, IEvent } from \"../../store/Events/Event\";\nimport { setFilteredEvents } from \"../../store/Events/Actions\";\nimport useDeviceDetect from '../../utils/hooks/DeviceDetect';\nimport { faSortAmountDownAlt, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { FilterItem } from './filters/FilterItem';\nimport './ThemeEventFilter.scss';\nimport { EventsPageFilters } from \"../../store/Events/Selector\";\nimport { setEventsPageFilters } from \"../../store/Events/Actions\";\n\nexport interface IEventFilterProps {\n    getLangString: (value: string) => string;\n}\n\nexport const EventFilter = (props: IEventFilterProps): JSX.Element => {\n    const eventsPageFilters = useSelector(EventsPageFilters);\n    const categories = useSelector(Categories);\n    const events = useSelector(Events);\n    const [filterText, setFilterText] = useState(eventsPageFilters?.text ?? '');\n    const [selectedDate, setSelectedDate] = useState<Date | null>(eventsPageFilters?.date ?? null);\n    const [selectedCategories, setSelectedCategories] = useState<ICategory[]>(eventsPageFilters?.categories ?? []);\n    const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n    const { isMobile } = useDeviceDetect();\n    const dispatch = useDispatch();\n\n    const search = useCallback(() => {\n\n        const handleTextFilter = (eventsToFilter: IEvent[]) => {\n            return eventsToFilter.filter((event) => JSON.stringify(event).toLowerCase().includes(filterText.toLowerCase()));\n        }\n\n        const handleCategoryFilter = (eventsToFilter: IEvent[]) => {\n            return eventsToFilter.filter((event: IEvent) => {\n                return event.categories.some((eCategory: ICategory) => {\n                    return selectedCategories.some((category: ICategory) => {\n                        return eCategory.id === category.id;\n                    });\n                });\n            });\n        }\n\n        const handleDateFilter = (eventsToFilter: IEvent[]) => {\n            if (!selectedDate) {\n                return eventsToFilter;\n            }\n            return eventsToFilter.filter((event) => new Date(event.start).setHours(0, 0, 0, 0) <= selectedDate.setHours(0, 0, 0, 0));\n        }\n\n        let eventsToFilter: IEvent[] = events;\n\n        if (filterText.length > 0) {\n            eventsToFilter = handleTextFilter(eventsToFilter);\n        }\n        if (selectedCategories.length > 0) {\n            eventsToFilter = handleCategoryFilter(eventsToFilter);\n        }\n        if (selectedDate) {\n            eventsToFilter = handleDateFilter(eventsToFilter);\n        }\n\n        if (eventsPageFilters?.date !== selectedDate || eventsPageFilters?.categories !== selectedCategories || eventsPageFilters?.text !== filterText) {\n            dispatch(setEventsPageFilters({ date: selectedDate ?? undefined, categories: selectedCategories, text: filterText }));\n        }\n        dispatch(setFilteredEvents(eventsToFilter));\n\n    }, [dispatch, events, filterText, selectedCategories, selectedDate, isMobile, eventsPageFilters])\n\n    const searchOnMobile = () => {\n        search();\n        setMobileMenuOpen(false);\n        window.scrollTo({ top: 0 });\n    }\n\n    useEffect(() => {\n        if (!isMobile) {\n            search();\n        }\n    }, [isMobile, selectedCategories, selectedDate])\n\n    useEffect(() => {\n        search();\n    }, [events, filterText])\n\n    return (\n        <React.Fragment>\n            <Hidden mdDown>\n                <Paper className=\"event-filter\">\n                    <Grid container direction=\"row\">\n                        <Grid item xs={8} lg={7} xl={6} className=\"select-container\">\n                            <DateFilter date={new Date()} selectedDate={selectedDate ?? undefined} onChangeDate={setSelectedDate} getLangString={props.getLangString} />\n                            <CategoryFilter categories={categories} selectedCategories={selectedCategories} onChangeCategory={setSelectedCategories} getLangString={props.getLangString} />\n                        </Grid>\n                        <Grid item xs={4} lg={5} xl={6} className=\"search-container\">\n                            <SearchBar filterText={filterText} onChangeText={setFilterText} getLangString={props.getLangString} />\n                        </Grid>\n                    </Grid>\n                </Paper >\n            </Hidden>\n\n            <Hidden mdUp>\n                <Paper className=\"event-filter\">\n                    {mobileMenuOpen &&\n                        <div className=\"overlay\">\n                            <div className=\"filter-menu-container\">\n                                <Grid container className=\"filter-menu\">\n                                    <Grid item xs={12} className=\"select-container\">\n                                        <DateFilter date={new Date()} selectedDate={selectedDate ?? undefined} onChangeDate={setSelectedDate} getLangString={props.getLangString} />\n                                        <CategoryFilter categories={categories} selectedCategories={selectedCategories} onChangeCategory={setSelectedCategories} getLangString={props.getLangString} />\n\n                                        <div className=\"picked-categories\">\n                                            {selectedCategories && selectedCategories.map((category: ICategory, index: number) =>\n                                                <FilterItem key={index} title={category.title} id={category.id} onDelete={(id) => setSelectedCategories(selectedCategories.filter(c => c.id !== id))} />\n                                            )}\n                                        </div>\n                                    </Grid>\n                                    <Grid item xs={12} className=\"filter-btn-container\">\n                                        <Button onClick={() => searchOnMobile()} className=\"filter-menu-btn filter-btn primary-btn\">{props.getLangString('event.filter.searchWithFilter')}</Button>\n                                    </Grid>\n                                </Grid>\n                            </div>\n                        </div>\n                    }\n\n                    <div className=\"search-container\">\n                        <SearchBar filterText={filterText} onChangeText={setFilterText} getLangString={props.getLangString} />\n                    </div>\n\n                    <div className=\"filter-btn-container\">\n                        {mobileMenuOpen ?\n                            <Button className=\"filter-btn icon-btn\" onClick={() => setMobileMenuOpen(!mobileMenuOpen)}>\n                                <FontAwesomeIcon icon={faTimes} className=\"icon\" />\n                                <span> {props.getLangString('event.filter.hideFilter')} </span>\n                            </Button >\n                            :\n                            <Button className=\"filter-btn icon-btn\" onClick={() => setMobileMenuOpen(!mobileMenuOpen)}>\n                                <FontAwesomeIcon icon={faSortAmountDownAlt} className=\"icon\" />\n                                <span> {props.getLangString('event.filter.showFilter')} </span>\n                            </Button >\n                        }\n                    </div>\n                </Paper>\n            </Hidden>\n        </React.Fragment>\n    );\n}","import React from 'react';\nimport './ThemeError.scss';\nimport { Button, Container } from '@material-ui/core';\n\ninterface IErrorBannerProps {\n    getLangString: (value: string) => string;\n    errorMessage: string;\n}\n\nconst ErrorBanner = (props: IErrorBannerProps): JSX.Element => {\n\n    return (\n        <div className=\"overlay\">\n            <Container className=\"error-banner\">\n                {props.errorMessage === \"Network Error\" ?\n                    <React.Fragment>\n                        <h1>{props.getLangString('errorHandling.networkError')}</h1>\n                        <h4> {props.getLangString('errorHandling.tryAgain')} </h4>\n                    </React.Fragment>\n                    :\n                    <React.Fragment>\n                        <h1>{props.getLangString('errorHandling.error')}</h1>\n                        <h4> {props.getLangString('errorHandling.noContact')} </h4>\n                    </React.Fragment>\n                }\n                <Button href=\"/\" className=\"back-button\">\n                    <span> {props.getLangString('errorHandling.reloadStartPage')} </span>\n                </Button >\n            </Container>\n        </div>\n    )\n}\n\nexport default ErrorBanner;","import { RootState } from \"../RootReducer\";\nimport { IErrorSummary } from \"./ActionTypes\";\n\nexport const Error = (state: RootState): IErrorSummary => state.appState.errorSummary;\n","/* eslint-disable react/prop-types */\nimport React, { Suspense, useEffect } from 'react';\nimport './style/ThemeApp.scss';\nimport { TopNavigation } from './components/navigation/TopNavigation';\nimport { NotFound } from './pages/NotFound';\nimport { InternetExplorer } from './pages/InternetExplorer';\nimport routes from './components/navigation/routes';\nimport { Breadcrumbs } from './components/navigation/Breadcrumbs';\nimport { Switch, Route, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport ReactGA from 'react-ga4';\nimport { Hidden } from '@material-ui/core';\nimport { EventFilter } from './components/event/EventFilter';\nimport { isIE } from 'react-device-detect';\nimport ErrorBanner from './components/error/ErrorBanner';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getSettings } from './store/Settings/Actions';\nimport { Error } from './store/AppState/Selector';\nimport { GOOGLE_ANALYTICS_KEY, COOKIE_URL } from './Constants';\nimport CookieConsent from 'react-cookie-consent';\n\nfunction App(): JSX.Element {\n  const { t } = useTranslation('common');\n  const location = useLocation();\n  const error = useSelector(Error);\n\n  useEffect(() => {\n    ReactGA.initialize(GOOGLE_ANALYTICS_KEY);\n  }, []);\n\n  useEffect(() => {\n    ReactGA.send({ hitType: \"pageview\", page: location.pathname, title: `Viewed page: ${location.pathname}` });\n  }, [location]);\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(getSettings());\n  }, [dispatch]);\n\n  useEffect(() => {\n    const pageTitle = t('global.pageTitle');\n    const pageDescription = t('global.pageDescription');\n    console.log('Setting page title and description', pageTitle, pageDescription);\n\n    document.title = pageTitle;\n    document.querySelector('meta[name=\"title\"]')?.setAttribute('content', `${pageTitle}`);\n    document.querySelector('meta[name=\"description\"]')?.setAttribute('content', `${pageDescription}`);\n    document.querySelector('meta[property=\"og:title\"]')?.setAttribute('content', `${pageTitle}`);\n    document.querySelector('meta[property=\"og:description\"]')?.setAttribute('content', `${pageDescription}`);\n    document.querySelector('meta[property=\"twitter:title\"]')?.setAttribute('content', `${pageTitle}`);\n    document.querySelector('meta[property=\"twitter:description\"]')?.setAttribute('content', `${pageDescription}`);\n    document.querySelector('meta[name=\"apple-mobile-web-app-title\"]')?.setAttribute('content', `${pageTitle}`);\n  }, []);\n\n  return (\n    <div>\n      <Suspense fallback={<div>{t('global.loading')}</div>}>\n        <TopNavigation getLangString={t} />\n        {isIE ? (\n          <InternetExplorer />\n        ) : (\n          <Switch>\n            {routes.map(({ path, Component }, key) => (\n              <Route\n                exact\n                path={path}\n                key={key}\n                render={props => {\n                  const crumbs = routes\n                    .filter(({ path }) => props.match.path.includes(path))\n                    .map(({ path, name }) => ({\n                      path: Object.keys(props.match.params).length\n                        ? Object.keys(props.match.params).reduce(\n                            (path, param) => path.replace(`:${param}`, props.match.params[param]),\n                            path\n                          )\n                        : path,\n                      name,\n                    }));\n                  return (\n                    <React.Fragment>\n                      <CookieConsent\n                        location=\"bottom\"\n                        buttonText={t('cookies.cookieApproval')}\n                        expires={30}\n                        containerClasses=\"cookie-consent-container\"\n                        buttonClasses=\"cookie-consent-button\"\n                      >\n                        <span>{t('cookies.useOfCookies')} </span>\n                        <a className=\"cookie-consent-link\" href={COOKIE_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n                          {t('cookies.aboutCookies')}\n                        </a>\n                      </CookieConsent>\n                      {error.isError && <ErrorBanner getLangString={t} errorMessage={error.errorMessage} />}\n                      {path === '/events' ? (\n                        <React.Fragment>\n                          <Hidden mdDown>\n                            <EventFilter getLangString={t} />\n                          </Hidden>\n                          <Breadcrumbs breadcrumbs={crumbs} />\n                          <Hidden mdUp>\n                            <EventFilter getLangString={t} />\n                          </Hidden>\n                        </React.Fragment>\n                      ) : (\n                        <Breadcrumbs breadcrumbs={crumbs} />\n                      )}\n                      <Component getLangString={t} />\n                    </React.Fragment>\n                  );\n                }}\n              />\n            ))}\n            <Route>\n              <NotFound getLangString={t} />\n            </Route>\n          </Switch>\n        )}\n      </Suspense>\n    </div>\n  );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n  // [::1] is the IPv6 localhost address.\n  window.location.hostname === '[::1]' ||\n  // 127.0.0.0/8 are considered localhost for IPv4.\n  window.location.hostname.match(\n    /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n  )\n);\n\ntype Config = {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config): void {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(\n      process.env.PUBLIC_URL,\n      window.location.href\n    );\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      // Let's check if a service worker still exists or not.\n      checkValidServiceWorker(swUrl, config);\n\n      if (isLocalhost) {\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n            'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' }\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister(): void {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n","import { IAppState, AppStateActionTypes, SET_ERROR, SET_ERROR_FAILURE, CLEAR_ERROR, CLEAR_ERROR_FAILURE } from \"./ActionTypes\";\n\nconst initialState: IAppState = {\n    errorSummary: {\n        isError: false,\n        errorMessage: '',\n        errors: []\n    }\n};\n\nconst appStateReducer = (state = initialState, action: AppStateActionTypes): IAppState => {\n    switch (action.type) {\n        case SET_ERROR:\n            return {\n                ...state,\n                errorSummary: {\n                    isError: true,\n                    errorMessage: action.payload.errorMessage,\n                    errors: [...state.errorSummary.errors, action.payload.error]\n                }\n            }\n\n        case SET_ERROR_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        case CLEAR_ERROR:\n            return {\n                ...state,\n                errorSummary: {\n                    isError: false,\n                    errorMessage: '',\n                    errors: [...state.errorSummary.errors]\n                }\n            }\n\n        case CLEAR_ERROR_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        default:\n            return state;\n    }\n}\n\nexport default appStateReducer;","import {\n    IMarkerState,\n    MarkerActionTypes,\n    GET_MARKERS_BEGIN,\n    GET_MARKERS_FAILURE,\n    GET_MARKERS_SUCCESS,\n    SIGNALR_CONNECTING,\n    SIGNALR_CONNECTED,\n    SIGNALR_DISCONNECTED,\n    SIGNALR_FAILURE,\n    SIGNALR_MARKER_UPDATED,\n    SET_MARKER_DIALOG_OPEN,\n    SET_MARKER_INDEX_DIALOG_OPEN,\n    UPDATE_POLYLINES,\n    UPDATE_POLYLINES_FAILURE,\n    CLEAN_POLYLINES,\n    CLICKED_ON_POLYLINE,\n    SET_SHOW_ALL_LIVE_MARKERS\n} from './ActionTypes';\nimport { IMarker } from './Marker';\n\n\n\nconst initialState: IMarkerState = {\n    markersList: [],\n    polylines: [],\n    loading: false,\n    connected: false,\n    clickedOnPolyline: false,\n    showAllLiveMarkers: false,\n}\n\nconst markerReducer = (state = initialState, action: MarkerActionTypes): IMarkerState => {\n    switch (action.type) {\n        case GET_MARKERS_BEGIN:\n            return {\n                ...state,\n                loading: true\n            };\n        case GET_MARKERS_SUCCESS:\n            return {\n                ...state,\n                markersList: action.payload,\n                loading: false\n            }\n        case GET_MARKERS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.payload\n            }\n        case SIGNALR_CONNECTING:\n            return {\n                ...state,\n                connected: false\n            }\n        case SIGNALR_CONNECTED:\n            return {\n                ...state,\n                connected: true\n            }\n        case SIGNALR_DISCONNECTED:\n            return {\n                ...state,\n                connected: false\n            }\n        case SIGNALR_FAILURE:\n            return {\n                ...state,\n                connected: false,\n                error: action.payload\n            }\n        case SIGNALR_MARKER_UPDATED:\n            // Check if the marker exists in the array or not\n            console.log('MARKERS UPDATED', action.payload);\n\n            if (state.markersList === null) {\n                return {\n                    ...state,\n                    markersList: action.payload\n                }\n            } else {\n                let newMarkers = [ ...state.markersList ];\n        \n                action.payload?.forEach((marker: IMarker) => {\n                    if (state.markersList?.some(e => e.id === marker.id)) {\n                        console.log('Found the maker in the array..');\n        \n                        // The item is in the array, check if this is a delete, we are using \n                        // soft deleted in the backend, but we remove the item in the store\n                        if (marker.deleted) {\n                            console.log('The marker from back-end was deleted, removing marker');\n                            newMarkers = newMarkers?.filter(m => m.id !== marker.id)\n                        } else {\n                            newMarkers = newMarkers?.map((m) => {\n                                if (marker.id !== m.id) {\n                                    return m;\n                                }\n                                return {\n                                    ...m,\n                                    ...marker\n                                }\n                            })\n                        }\n                    } else {\n                        console.log('Marker not found in the array, adding .. ');\n                        newMarkers =  [...newMarkers, marker]\n                    }\n                });\n\n                return {\n                    ...state,\n                    markersList: newMarkers\n                }\n            }\n        case UPDATE_POLYLINES: \n            return {\n                ...state,\n                polylines: action.payload\n            }\n        case UPDATE_POLYLINES_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n        case CLEAN_POLYLINES:\n            return {\n                ...state,\n                polylines: []\n            }\n        case CLICKED_ON_POLYLINE:\n            return {\n                ...state,\n                clickedOnPolyline: action.payload\n            }\n        case SET_MARKER_DIALOG_OPEN:\n            return {\n                ...state,\n                markerWithDialogOpen: action.payload\n            }\n        case SET_MARKER_INDEX_DIALOG_OPEN:\n            return {\n                ...state,\n                markerIndexWithDialogOpen: action.payload\n            }\n        case SET_SHOW_ALL_LIVE_MARKERS:\n            return {\n                ...state,\n                showAllLiveMarkers: action.payload\n            }\n        default:\n            return state;\n    }\n}\n\nexport default markerReducer;\n","import {\n    CLEAR_EVENTS_PAGE_FILTERS, CLEAR_EVENTS_PAGE_FILTERS_FAILURE, EventActionTypes, GET_EVENTS_BEGIN, GET_EVENTS_FAILURE, GET_EVENTS_SUCCESS,\n    IEventState, SET_EVENTS_PAGE_FILTERS, SET_EVENTS_PAGE_FILTERS_FAILURE, SET_EVENTS_PAGE_SCROLL_POSITION, SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE,\n    SET_FILTERED_EVENTS, SET_FILTERED_EVENTS_FAILURE\n} from './ActionTypes';\n\nconst initialState: IEventState = {\n    eventList: [],\n    filteredEventList: [],\n    categoryList: [],\n    loading: false,\n    eventsPageState: {\n        scrollPosition: 0\n    }\n};\n\nconst eventReducer = (state = initialState, action: EventActionTypes): IEventState => {\n    switch (action.type) {\n        case GET_EVENTS_BEGIN:\n            return {\n                ...state,\n                loading: true\n            };\n\n        case GET_EVENTS_SUCCESS:\n            return {\n                ...state,\n                loading: false,\n                eventList: action.payload.events,\n                categoryList: action.payload.categories\n            }\n\n        case GET_EVENTS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.payload\n            }\n\n        case SET_FILTERED_EVENTS:\n            return {\n                ...state,\n                filteredEventList: action.payload\n            }\n\n        case SET_FILTERED_EVENTS_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n        case SET_EVENTS_PAGE_SCROLL_POSITION:\n            return {\n                ...state,\n                eventsPageState: { ...state.eventsPageState, scrollPosition: action.payload }\n            }\n\n        case SET_EVENTS_PAGE_SCROLL_POSITION_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        case SET_EVENTS_PAGE_FILTERS:\n            return {\n                ...state,\n                eventsPageState: {\n                    ...state.eventsPageState,\n                    filters: {\n                        date: action.payload.date,\n                        categories: action.payload.categories,\n                        text: action.payload.text\n                    }\n                }\n            }\n\n        case SET_EVENTS_PAGE_FILTERS_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        case CLEAR_EVENTS_PAGE_FILTERS:\n            return {\n                ...state,\n                eventsPageState: {\n                    ...state.eventsPageState,\n                    filters: undefined\n                }\n            }\n\n        case CLEAR_EVENTS_PAGE_FILTERS_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n        default:\n            return state;\n    }\n}\n\nexport default eventReducer;","import { FilterActionTypes, GET_FILTERS_BEGIN, GET_FILTERS_SUCCESS, GET_FILTERS_FAILURE, UPDATE_SELECTED_FILTERS, UPDATE_SELECTED_FILTERS_FAILURE, CLEAN_SELECTED_FILTERS, IFilterState, SET_SELECTED_FILTER_TITLE } from './ActionTypes';\n\nconst initialState: IFilterState = {\n    filterList: [],\n    loading: false,\n    selectedFilters: [],\n};\n\nconst filterReducer = (state = initialState, action: FilterActionTypes) : IFilterState => {\n    switch (action.type) {\n        case GET_FILTERS_BEGIN:\n            return {\n                ...state,\n                loading: true\n            };\n\n        case GET_FILTERS_SUCCESS:\n            return {\n                ...state,\n                loading: false,\n                filterList: action.payload\n            }\n\n        case GET_FILTERS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.payload\n            }\n\n        case UPDATE_SELECTED_FILTERS: \n            return {\n                ...state,\n                selectedFilters: action.payload\n            }\n        \n        case UPDATE_SELECTED_FILTERS_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        case CLEAN_SELECTED_FILTERS:\n            return {\n                ...state,\n                selectedFilters: []\n            }\n        case SET_SELECTED_FILTER_TITLE:\n            return {\n                ...state,\n                selectedFilterTitle: action.payload\n            }\n        default:\n            return state;\n    }\n}\n\nexport default filterReducer;","import { SettingsActionTypes, GET_SETTINGS_BEGIN, GET_SETTINGS_FAILURE, GET_SETTINGS_SUCCESS, ISettingsState, SET_SETTINGS_BEGIN, SET_SETTINGS_SUCCESS, SET_SETTINGS_FAILURE } from './ActionTypes';\n\nconst initialState: ISettingsState = {\n    defaultFilters: [],\n    defaultEventCategories: [],\n    markerIsLiveHours: 0,\n    loading: false,\n};\n\nconst settingsReducer = (state = initialState, action: SettingsActionTypes): ISettingsState => {\n    switch (action.type) {\n        case GET_SETTINGS_BEGIN:\n            return {\n                ...state,\n                loading: true\n            };\n\n        case GET_SETTINGS_SUCCESS:\n            return {\n                ...state,\n                loading: false,\n                defaultFilters: action.payload.defaultFilters,\n                defaultEventCategories: action.payload.defaultEventCategories,\n                markerIsLiveHours: action.payload.markerIsLiveHours\n            }\n\n        case GET_SETTINGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.payload\n            }\n        case SET_SETTINGS_BEGIN:\n            return {\n                ...state,\n                loading: true\n            }\n        case SET_SETTINGS_SUCCESS:\n            return {\n                ...state,\n                loading: false,\n                defaultFilters: action.payload.defaultFilters,\n                defaultEventCategories: action.payload.defaultEventCategories,\n                markerIsLiveHours: action.payload.markerIsLiveHours,\n            }\n        case SET_SETTINGS_FAILURE:\n            return {\n                ...state,\n                loading: false,\n                error: action.payload,\n            }\n        default:\n            return state;\n    }\n}\n\nexport default settingsReducer;\n","import { IBreadcrumbs, BreadcrumbsActionTypes, SET_TITLE, SET_TITLE_FAILURE, CLEAR_TITLE, CLEAR_TITLE_FAILURE } from \"./ActionTypes\";\n\nconst initialState: IBreadcrumbs = {\n    title: ''\n};\n\nconst breadcrumbsReducer = (state = initialState, action: BreadcrumbsActionTypes): IBreadcrumbs => {\n    switch (action.type) {\n        case SET_TITLE:\n            return {\n                ...state,\n                title: action.payload\n            }\n\n        case SET_TITLE_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n\n        case CLEAR_TITLE:\n            return {\n                ...state,\n                title: \"\"\n            }\n\n        case CLEAR_TITLE_FAILURE:\n            return {\n                ...state,\n                error: action.payload\n            }\n        default:\n            return state;\n    }\n}\n\nexport default breadcrumbsReducer;","import { combineReducers } from 'redux'\nimport appStateReducer from './AppState/Reducer'\nimport markerReducer from './Markers/Reducer'\nimport eventsReducer from './Events/Reducer'\nimport filterReducer from './Filters/Reducer'\nimport settingsReducer from './Settings/Reducer'\nimport breadcrumbsReducer from './Breadcrumbs/Reducer'\n\n\nconst reducer = combineReducers({\n    appState: appStateReducer,\n    markers: markerReducer,\n    events: eventsReducer,\n    filters: filterReducer,\n    settings: settingsReducer,\n    breadcrumbs: breadcrumbsReducer\n});\n\nexport default reducer;\n\nexport type RootState = ReturnType<typeof reducer>\n","import { applyMiddleware, createStore } from \"redux\";\nimport reducer from \"./RootReducer\";\nimport thunk from 'redux-thunk';\nimport { createLogger } from 'redux-logger'\n\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\nconst logger = createLogger({\n    collapsed: true\n});\n\nconst Store = createStore(reducer, undefined, composeWithDevTools(applyMiddleware(thunk, logger)));\n\nexport default Store;","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport common_se_ronneby from './translations/se/commonRonneby.json';\nimport common_se_olofstrom from './translations/se/commonOlofstrom.json';\nimport { THEME_KEY } from './Constants';\n\nconst languages = ['se'];\nconst selectedlang = 'se';\nconst common_se = THEME_KEY === 'olofstrom' ? common_se_olofstrom : common_se_ronneby;\n\ni18n\n  // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\n  // learn more: https://github.com/i18next/i18next-http-backend\n  .use(Backend)\n  // detect user language\n  // learn more: https://github.com/i18next/i18next-browser-languageDetector\n  .use(LanguageDetector)\n  // pass the i18n instance to react-i18next.\n  .use(initReactI18next)\n  // init i18next\n  // for all options read: https://www.i18next.com/overview/configuration-options\n  .init({\n\n    lng: selectedlang,\n    resources: {\n      se: {\n        common: common_se, // 'common' is our custom namespace\n      }\n    },\n    fallbackLng: selectedlang,\n    debug: true,\n    whitelist: languages,\n    interpolation: {\n      escapeValue: false, // not needed for react as it escapes by default\n    }\n  });\n\nexport default i18n;","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './ThemeIndex.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport Store from './store/Store';\nimport { Provider } from 'react-redux';\nimport './i18n';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { AuthProvider } from './services/auth-context';\n\nReactDOM.render(\n  <AuthProvider>\n  <Provider store={Store} >\n    <React.StrictMode>\n      <Router>\n        <App />\n      </Router>\n    </React.StrictMode>\n  </Provider>\n  </AuthProvider>,\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nif (!process.env.NODE_ENV || process.env.NODE_ENV === \"development\") {\n  serviceWorker.unregister();\n} else {\n  serviceWorker.register();\n}"],"sourceRoot":""}